PageSourceSearch

https://recursos.newlentes.com.br/Handlers/ResourceHandler.ashx?ba…its.site.assinatura.js&v=639262417482423240

js newlentes.com.br collected 2026-09-29 13:23:45 UTC 182,080 bytes, 3,199 lines download raw bytes

1; 
2/* jQuery elevateZoom 3.0.8 - Demo's and documentation: - www.elevateweb.co.uk/image-zoom - Copyright (c) 2013 Andrew Eades - www.elevateweb.co.uk - Dual licensed under the LGPL licenses. - http://en.wikipedia.org/wiki/MIT_License - http://en.wikipedia.org/wiki/GNU_General_Public_License */
3"function"!==typeof Object.create&&(Object.create=function(d){function h(){}h.prototype=d;return new h});
4(function(d,h,l,m){var k={init:function(b,a){var c=this;c.elem=a;c.$elem=d(a);c.imageSrc=c.$elem.data("zoom-image")?c.$elem.data("zoom-image"):c.$elem.attr("src");c.options=d.extend({},d.fn.elevateZoom.options,b);c.options.tint&&(c.options.lensColour="none",c.options.lensOpacity="1");"inner"==c.options.zoomType&&(c.options.showLens=!1);c.$elem.parent().removeAttr("title").removeAttr("alt");c.zoomImage=c.imageSrc;c.refresh(1);d("#"+c.options.gallery+" a").click(function(a){c.options.galleryActiveClass&&
5(d("#"+c.options.gallery+" a").removeClass(c.options.galleryActiveClass),d(this).addClass(c.options.galleryActiveClass));a.preventDefault();d(this).data("zoom-image")?c.zoomImagePre=d(this).data("zoom-image"):c.zoomImagePre=d(this).data("image");c.swaptheimage(d(this).data("image"),c.zoomImagePre);return!1})},refresh:function(b){var a=this;setTimeout(function(){a.fetch(a.imageSrc)},b||a.options.refresh)},fetch:function(b){var a=this,c=new Image;c.onload=function(){a.largeWidth=c.width;a.largeHeight=
6c.height;a.startZoom();a.currentImage=a.imageSrc;a.options.onZoomedImageLoaded(a.$elem)};c.src=b},startZoom:function(){var b=this;b.nzWidth=b.$elem.width();b.nzHeight=b.$elem.height();b.isWindowActive=!1;b.isLensActive=!1;b.isTintActive=!1;b.overWindow=!1;b.options.imageCrossfade&&(b.zoomWrap=b.$elem.wrap('<div style="height:'+b.nzHeight+"px;width:"+b.nzWidth+'px;" class="zoomWrapper" />'),b.$elem.css("position","absolute"));b.zoomLock=1;b.scrollingLock=!1;b.changeBgSize=!1;b.currentZoomLevel=b.options.zoomLevel;
7b.nzOffset=b.$elem.offset();b.widthRatio=b.largeWidth/b.currentZoomLevel/b.nzWidth;b.heightRatio=b.largeHeight/b.currentZoomLevel/b.nzHeight;"window"==b.options.zoomType&&(b.zoomWindowStyle="overflow: hidden;background-position: 0px 0px;text-align:center;background-color: "+String(b.options.zoomWindowBgColour)+";width: "+String(b.options.zoomWindowWidth)+"px;height: "+String(b.options.zoomWindowHeight)+"px;float: left;background-size: "+b.largeWidth/b.currentZoomLevel+"px "+b.largeHeight/b.currentZoomLevel+
8"px;display: none;z-index:100;border: "+String(b.options.borderSize)+"px solid "+b.options.borderColour+";background-repeat: no-repeat;position: absolute;");if("inner"==b.options.zoomType){var a=b.$elem.css("border-left-width");b.zoomWindowStyle="overflow: hidden;margin-left: "+String(a)+";margin-top: "+String(a)+";background-position: 0px 0px;width: "+String(b.nzWidth)+"px;height: "+String(b.nzHeight)+"px;float: left;display: none;cursor:"+b.options.cursor+";px solid "+b.options.borderColour+";background-repeat: no-repeat;position: absolute;"}"window"==
9b.options.zoomType&&(lensHeight=b.nzHeight<b.options.zoomWindowWidth/b.widthRatio?b.nzHeight:String(b.options.zoomWindowHeight/b.heightRatio),lensWidth=b.largeWidth<b.options.zoomWindowWidth?b.nzWidth:b.options.zoomWindowWidth/b.widthRatio,b.lensStyle="background-position: 0px 0px;width: "+String(b.options.zoomWindowWidth/b.widthRatio)+"px;height: "+String(b.options.zoomWindowHeight/b.heightRatio)+"px;float: right;display: none;overflow: hidden;z-index: 999;-webkit-transform: translateZ(0);opacity:"+
10b.options.lensOpacity+";filter: alpha(opacity = "+100*b.options.lensOpacity+"); zoom:1;width:"+lensWidth+"px;height:"+lensHeight+"px;background-color:"+b.options.lensColour+";cursor:"+b.options.cursor+";border: "+b.options.lensBorderSize+"px solid "+b.options.lensBorderColour+";background-repeat: no-repeat;position: absolute;");b.tintStyle="display: block;position: absolute;background-color: "+b.options.tintColour+";filter:alpha(opacity=0);opacity: 0;width: "+b.nzWidth+"px;height: "+b.nzHeight+"px;";
11b.lensRound="";"lens"==b.options.zoomType&&(b.lensStyle="background-position: 0px 0px;float: left;display: none;border: "+String(b.options.borderSize)+"px solid "+b.options.borderColour+";width:"+String(b.options.lensSize)+"px;height:"+String(b.options.lensSize)+"px;background-repeat: no-repeat;position: absolute;");"round"==b.options.lensShape&&(b.lensRound="border-top-left-radius: "+String(b.options.lensSize/2+b.options.borderSize)+"px;border-top-right-radius: "+String(b.options.lensSize/2+b.options.borderSize)+
12"px;border-bottom-left-radius: "+String(b.options.lensSize/2+b.options.borderSize)+"px;border-bottom-right-radius: "+String(b.options.lensSize/2+b.options.borderSize)+"px;");b.zoomContainer=d('<div class="zoomContainer" style="-webkit-transform: translateZ(0);position:absolute;
12left:'+b.nzOffset.left+"px;top:"+b.nzOffset.top+"px;height:"+b.nzHeight+"px;width:"+b.nzWidth+'px;"></div>');d("body").append(b.zoomContainer);b.options.containLensZoom&&"lens"==b.options.zoomType&&b.zoomContainer.css("overflow",
13"hidden");"inner"!=b.options.zoomType&&(b.zoomLens=d("<div class='zoomLens' style='"+b.lensStyle+b.lensRound+"'>&nbsp;</div>").appendTo(b.zoomContainer).click(function(){b.$elem.trigger("click")}),b.options.tint&&(b.tintContainer=d("<div/>").addClass("tintContainer"),b.zoomTint=d("<div class='zoomTint' style='"+b.tintStyle+"'></div>"),b.zoomLens.wrap(b.tintContainer),b.zoomTintcss=b.zoomLens.after(b.zoomTint),b.zoomTintImage=d('<img style="position: absolute; left: 0px; top: 0px; max-width: none; width: '+
14b.nzWidth+"px; height: "+b.nzHeight+'px;" src="'+b.imageSrc+'">').appendTo(b.zoomLens).click(function(){b.$elem.trigger("click")})));isNaN(b.options.zoomWindowPosition)?b.zoomWindow=d("<div style='z-index:999;left:"+b.windowOffsetLeft+"px;top:"+b.windowOffsetTop+"px;"+b.zoomWindowStyle+"' class='zoomWindow'>&nbsp;</div>").appendTo("body").click(function(){b.$elem.trigger("click")}):b.zoomWindow=d("<div style='z-index:999;left:"+b.windowOffsetLeft+"px;top:"+b.windowOffsetTop+"px;"+b.zoomWindowStyle+
15"' class='zoomWindow'>&nbsp;</div>").appendTo(b.zoomContainer).click(function(){b.$elem.trigger("click")});b.zoomWindowContainer=d("<div/>").addClass("zoomWindowContainer").css("width",b.options.zoomWindowWidth);b.zoomWindow.wrap(b.zoomWindowContainer);"lens"==b.options.zoomType&&b.zoomLens.css({backgroundImage:"url('"+b.imageSrc+"')"});"window"==b.options.zoomType&&b.zoomWindow.css({backgroundImage:"url('"+b.imageSrc+"')"});"inner"==b.options.zoomType&&b.zoomWindow.css({backgroundImage:"url('"+b.imageSrc+
16"')"});b.$elem.bind("touchmove",function(a){a.preventDefault();b.setPosition(a.originalEvent.touches[0]||a.originalEvent.changedTouches[0])});b.zoomContainer.bind("touchmove",function(a){"inner"==b.options.zoomType&&b.showHideWindow("show");a.preventDefault();b.setPosition(a.originalEvent.touches[0]||a.originalEvent.changedTouches[0])});b.zoomContainer.bind("touchend",function(a){b.showHideWindow("hide");b.options.showLens&&b.showHideLens("hide");b.options.tint&&"inner"!=b.options.zoomType&&b.showHideTint("hide")});
17b.$elem.bind("touchend",function(a){b.showHideWindow("hide");b.options.showLens&&b.showHideLens("hide");b.options.tint&&"inner"!=b.options.zoomType&&b.showHideTint("hide")});b.options.showLens&&(b.zoomLens.bind("touchmove",function(a){a.preventDefault();b.setPosition(a.originalEvent.touches[0]||a.originalEvent.changedTouches[0])}),b.zoomLens.bind("touchend",function(a){b.showHideWindow("hide");b.options.showLens&&b.showHideLens("hide");b.options.tint&&"inner"!=b.options.zoomType&&b.showHideTint("hide")}));
18b.$elem.bind("mousemove",function(a){!1==b.overWindow&&b.setElements("show");if(b.lastX!==a.clientX||b.lastY!==a.clientY)b.setPosition(a),b.currentLoc=a;b.lastX=a.clientX;b.lastY=a.clientY});b.zoomContainer.bind("mousemove",function(a){!1==b.overWindow&&b.setElements("show");if(b.lastX!==a.clientX||b.lastY!==a.clientY)b.setPosition(a),b.currentLoc=a;b.lastX=a.clientX;b.lastY=a.clientY});"inner"!=b.options.zoomType&&b.zoomLens.bind("mousemove",function(a){if(b.lastX!==a.clientX||b.lastY!==a.clientY)b.setPosition(a),
19b.currentLoc=a;b.lastX=a.clientX;b.lastY=a.clientY});b.options.tint&&"inner"!=b.options.zoomType&&b.zoomTint.bind("mousemove",function(a){if(b.lastX!==a.clientX||b.lastY!==a.clientY)b.setPosition(a),b.currentLoc=a;b.lastX=a.clientX;b.lastY=a.clientY});"inner"==b.options.zoomType&&b.zoomWindow.bind("mousemove",function(a){if(b.lastX!==a.clientX||b.lastY!==a.clientY)b.setPosition(a),b.currentLoc=a;b.lastX=a.clientX;b.lastY=a.clientY});b.zoomContainer.add(b.$elem).mouseenter(function(){!1==b.overWindow&&
20b.setElements("show")}).mouseleave(function(){b.scrollLock||b.setElements("hide")});"inner"!=b.options.zoomType&&b.zoomWindow.mouseenter(function(){b.overWindow=!0;b.setElements("hide")}).mouseleave(function(){b.overWindow=!1});b.minZoomLevel=b.options.minZoomLevel?b.options.minZoomLevel:2*b.options.scrollZoomIncrement;b.options.scrollZoom&&b.zoomContainer.add(b.$elem).bind("mousewheel DOMMouseScroll MozMousePixelScroll",function(a){b.scrollLock=!0;clearTimeout(d.data(this,"timer"));d.data(this,"timer",
21setTimeout(function(){b.scrollLock=!1},250));var e=a.originalEvent.wheelDelta||-1*a.originalEvent.detail;a.stopImmediatePropagation();a.stopPropagation();a.preventDefault();0<e/120?b.currentZoomLevel>=b.minZoomLevel&&b.changeZoomLevel(b.currentZoomLevel-b.options.scrollZoomIncrement):b.options.maxZoomLevel?b.currentZoomLevel<=b.options.maxZoomLevel&&b.changeZoomLevel(parseFloat(b.currentZoomLevel)+b.options.scrollZoomIncrement):b.changeZoomLevel(parseFloat(b.currentZoomLevel)+b.options.scrollZoomIncrement);
22return!1})},setElements:function(b){if(!this.options.zoomEnabled)return!1;"show"==b&&this.isWindowSet&&("inner"==this.options.zoomType&&this.showHideWindow("show"),"window"==this.options.zoomType&&this.showHideWindow("show"),this.options.showLens&&this.showHideLens("show"),this.options.tint&&"inner"!=this.options.zoomType&&this.showHideTint("show"));"hide"==b&&("window"==this.options.zoomType&&this.showHideWindow("hide"),this.options.tint||this.showHideWindow("hide"),this.options.showLens&&this.showHideLens("hide"),
23this.options.tint&&this.showHideTint("hide"))},setPosition:function(b){if(!this.options.zoomEnabled)return!1;this.nzHeight=this.$elem.height();this.nzWidth=this.$elem.width();this.nzOffset=this.$elem.offset();this.options.tint&&"inner"!=this.options.zoomType&&(this.zoomTint.css({top:0}),this.zoomTint.css({left:0}));this.options.responsive&&!this.options.scrollZoom&&this.options.showLens&&(lensHeight=this.nzHeight<this.options.zoomWindowWidth/this.widthRatio?this.nzHeight:String(this.options.zoomWindowHeight/
24this.heightRatio),lensWidth=this.largeWidth<this.options.zoomWindowWidth?this.nzWidth:this.options.zoomWindowWidth/this.widthRatio,this.widthRatio=this.largeWidth/this.nzWidth,this.heightRatio=this.largeHeight/this.nzHeight,"lens"!=this.options.zoomType&&(lensHeight=this.nzHeight<this.options.zoomWindowWidth/this.widthRatio?this.nzHeight:String(this.options.zoomWindowHeight/this.heightRatio),lensWidth=this.options.zoomWindowWidth<this.options.zoomWindowWidth?this.nzWidth:this.options.zoomWindowWidth/
25this.widthRatio,this.zoomLens.css("width",lensWidth),this.zoomLens.css("height",lensHeight),this.options.tint&&(this.zoomTintImage.css("width",this.nzWidth),this.zoomTintImage.css("height",this.nzHeight))),"lens"==this.options.zoomType&&this.zoomLens.css({width:String(this.options.lensSize)+"px",height:String(this.options.lensSize)+"px"}));this.zoomContainer.css({top:this.nzOffset.top});this.zoomContainer.css({left:this.nzOffset.left});this.mouseLeft=parseInt(b.pageX-this.nzOffset.left);this.mouseTop=
26parseInt(b.pageY-this.nzOffset.top);"window"==this.options.zoomType&&(this.Etoppos=this.mouseTop<this.zoomLens.height()/2,this.Eboppos=this.mouseTop>this.nzHeight-this.zoomLens.height()/2-2*this.options.lensBorderSize,this.Eloppos=this.mouseLeft<0+this.zoomLens.width()/2,this.Eroppos=this.mouseLeft>this.nzWidth-this.zoomLens.width()/2-2*this.options.lensBorderSize);"inner"==this.options.zoomType&&(this.Etoppos=this.mouseTop<this.nzHeight/2/this.heightRatio,this.Eboppos=this.mouseTop>this.nzHeight-
27this.nzHeight/2/this.heightRatio,this.Eloppos=this.mouseLeft<0+this.nzWidth/2/this.widthRatio,this.Eroppos=this.mouseLeft>this.nzWidth-this.nzWidth/2/this.widthRatio-2*this.options.lensBorderSize);0>=this.mouseLeft||0>this.mouseTop||this.mouseLeft>this.nzWidth||this.mouseTop>this.nzHeight?this.setElements("hide"):(this.options.showLens&&(this.lensLeftPos=String(this.mouseLeft-this.zoomLens.width()/2),this.lensTopPos=String(this.mouseTop-this.zoomLens.height()/2)),this.Etoppos&&(this.lensTopPos=0),
28this.Eloppos&&(this.tintpos=this.lensLeftPos=this.windowLeftPos=0),"window"==this.options.zoomType&&(this.Eboppos&&(this.lensTopPos=Math.max(this.nzHeight-this.zoomLens.height()-2*this.options.lensBorderSize,0)),this.Eroppos&&(this.lensLeftPos=this.nzWidth-this.zoomLens.width()-2*this.options.lensBorderSize)),"inner"==this.options.zoomType&&(this.Eboppos&&(this.lensTopPos=Math.max(this.nzHeight-2*this.options.lensBorderSize,0)),this.Eroppos&&(this.lensLeftPos=this.nzWidth-this.nzWidth-2*this.options.lensBorderSize)),
29"lens"==this.options.zoomType&&(this.windowLeftPos=String(-1*((b.pageX-this.nzOffset.left)*this.widthRatio-this.zoomLens.width()/2)),this.windowTopPos=String(-1*((b.pageY-this.nzOffset.top)*this.heightRatio-this.zoomLens.height()/2)),this.zoomLens.css({backgroundPosition:this.windowLeftPos+"px "+this.windowTopPos+"px"}),this.changeBgSize&&(this.nzHeight>this.nzWidth?("lens"==this.options.zoomType&&this.zoomLens.css({"background-size":this.largeWidth/this.newvalueheight+"px "+this.largeHeight/this.newvalueheight+
30"px"}),this.zoomWindow.css({"background-size":this.largeWidth/this.newvalueheight+"px "+this.largeHeight/this.newvalueheight+"px"})):("lens"==this.options.zoomType&&this.zoomLens.css({"background-size":this.largeWidth/this.newvaluewidth+"px "+this.largeHeight/this.newvaluewidth+"px"}),this.zoomWindow.css({"background-size":this.largeWidth/this.newvaluewidth+"px "+this.largeHeight/this.newvaluewidth+"px"})),this.changeBgSize=!1),this.setWindowPostition(b)),this.options.tint&&"inner"!=this.options.zoomType&&
31this.setTintPosition(b),"window"==this.options.zoomType&&this.setWindowPostition(b),"inner"==this.options.zoomType&&this.setWindowPostition(b),this.options.showLens&&(this.fullwidth&&"lens"!=this.options.zoomType&&(this.lensLeftPos=0),this.zoomLens.css({left:this.lensLeftPos+"px",top:this.lensTopPos+"px"})))},showHideWindow:function(b){"show"!=b||this.isWindowActive||(this.options.zoomWindowFadeIn?this.zoomWindow.stop(!0,!0,!1).fadeIn(this.options.zoomWindowFadeIn):this.zoomWindow.show(),this.isWindowActive=
32!0);"hide"==b&&this.isWindowActive&&(this.options.zoomWindowFadeOut?this.zoomWindow.stop(!0,!0).fadeOut(this.options.zoomWindowFadeOut):this.zoomWindow.hide(),this.isWindowActive=!1)},showHideLens:function(b){"show"!=b||this.isLensActive||(this.options.lensFadeIn?this.zoomLens.stop(!0,!0,!1).fadeIn(this.options.lensFadeIn):this.zoomLens.show(),this.isLensActive=!0);"hide"==b&&this.isLensActive&&(this.options.lensFadeOut?this.zoomLens.stop(!0,!0).fadeOut(this.options.lensFadeOut):this.zoomLens.hide(),
33this.isLensActive=!1)},showHideTint:function(b){"show"!=b||this.isTintActive||(this.options.zoomTintFadeIn?this.zoomTint.css({opacity:this.options.tintOpacity}).animate().stop(!0,!0).fadeIn("slow"):(this.zoomTint.css({opacity:this.options.tintOpacity}).animate(),this.zoomTint.show()),this.isTintActive=!0);"hide"==b&&this.isTintActive&&(this.options.zoomTintFadeOut?this.zoomTint.stop(!0,!0).fadeOut(this.options.zoomTintFadeOut):this.zoomTint.hide(),this.isTintActive=!1)},setLensPostition:function(b){},
34setWindowPostition:function(b){var a=this;if(isNaN(a.options.zoomWindowPosition))a.externalContainer=d("#"+a.options.zoomWindowPosition),a.externalContainerWidth=a.externalContainer.width(),a.externalContainerHeight=a.externalContainer.height(),a.externalContainerOffset=a.externalContainer.offset(),a.windowOffsetTop=a.externalContainerOffset.top,a.windowOffsetLeft=a.externalContainerOffset.left;else switch(a.options.zoomWindowPosition){case 1:a.windowOffsetTop=a.options.zoomWindowOffety;a.windowOffsetLeft=
35+a.nzWidth;break;case 2:a.options.zoomWindowHeight>a.nzHeight&&(a.windowOffsetTop=-1*(a.options.zoomWindowHeight/2-a.nzHeight/2),a.windowOffsetLeft=a.nzWidth);break;case 3:a.windowOffsetTop=a.nzHeight-a.zoomWindow.height()-2*a.options.borderSize;a.windowOffsetLeft=a.nzWidth;break;case 4:a.windowOffsetTop=a.nzHeight;a.windowOffsetLeft=a.nzWidth;break;case 5:a.windowOffsetTop=a.nzHeight;a.windowOffsetLeft=a.nzWidth-a.zoomWindow.width()-2*a.options.borderSize;break;case 6:a.options.zoomWindowHeight>
36a.nzHeight&&(a.windowOffsetTop=a.nzHeight,a.windowOffsetLeft=-1*(a.options.zoomWindowWidth/2-a.nzWidth/2+2*a.options.borderSize));break;case 7:a.windowOffsetTop=a.nzHeight;a.windowOffsetLeft=0;break;case 8:a.windowOffsetTop=a.nzHeight;a.windowOffsetLeft=-1*(a.zoomWindow.width()+2*a.options.borderSize);break;case 9:a.windowOffsetTop=a.nzHeight-a.zoomWindow.height()-2*a.options.borderSize;a.windowOffsetLeft=-1*(a.zoomWindow.width()+2*a.options.borderSize);break;case 10:a.options.zoomWindowHeight>a.nzHeight&&
37(a.windowOffsetTop=-1*(a.options.zoomWindowHeight/2-a.nzHeight/2),a.windowOffsetLeft=-1*(a.zoomWindow.width()+2*a.options.borderSize));break;case 11:a.windowOffsetTop=a.options.zoomWindowOffety;a.windowOffsetLeft=-1*(a.zoomWindow.width()+2*a.options.borderSize);break;case 12:a.windowOffsetTop=-1*(a.zoomWindow.height()+2*a.options.borderSize);a.windowOffsetLeft=-1*(a.zoomWindow.width()+2*a.options.borderSize);break;case 13:a.windowOffsetTop=-1*(a.zoomWindow.height()+2*a.options.borderSize);a.windowOffsetLeft=
380;break;case 14:a.options.zoomWindowHeight>a.nzHeight&&(a.windowOffsetTop=-1*(a.zoomWindow.height()+2*a.options.borderSize),a.windowOffsetLeft=-1*(a.options.zoomWindowWidth/2-a.nzWidth/2+2*a.options.borderSize));break;case 15:a.windowOffsetTop=-1*(a.zoomWindow.height()+2*a.options.borderSize);a.windowOffsetLeft=a.nzWidth-a.zoomWindow.width()-2*a.options.borderSize;break;case 16:a.windowOffsetTop=-1*(a.zoomWindow.height()+2*a.options.borderSize);a.windowOffsetLeft=a.nzWidth;break;default:a.windowOffsetTop=
39a.options.zoomWindowOffety,a.windowOffsetLeft=a.nzWidth}a.isWindowSet=!0;a.windowOffsetTop+=a.options.zoomWindowOffety;a.windowOffsetLeft+=a.options.zoomWindowOffetx;a.zoomWindow.css({top:a.windowOffsetTop});a.zoomWindow.css({left:a.windowOffsetLeft});"inner"==a.options.zoomType&&(a.zoomWindow.css({top:0}),a.zoomWindow.css({left:0}));a.windowLeftPos=String(-1*((b.pageX-a.nzOffset.left)*a.widthRatio-a.zoomWindow.width()/2));a.windowTopPos=String(-1*((b.pageY-a.nzOffset.top)*a.heightRatio-a.zoomWindow.height()/
402));a.Etoppos&&(a.windowTopPos=0);a.Eloppos&&(a.windowLeftPos=0);a.Eboppos&&(a.windowTopPos=-1*(a.largeHeight/a.currentZoomLevel-a.zoomWindow.height()));a.Eroppos&&(a.windowLeftPos=-1*(a.largeWidth/a.currentZoomLevel-a.zoomWindow.width()));a.fullheight&&(a.windowTopPos=0);a.fullwidth&&(a.windowLeftPos=0);if("window"==a.options.zoomType||"inner"==a.options.zoomType)1==a.zoomLock&&(1>=a.widthRatio&&(a.windowLeftPos=0),1>=a.heightRatio&&(a.windowTopPos=0)),a.largeHeight<a.options.zoomWindowHeight&&(a.windowTopPos=
410),a.largeWidth<a.options.zoomWindowWidth&&(a.windowLeftPos=0),a.options.easing?(a.xp||(a.xp=0),a.yp||(a.yp=0),a.loop||(a.loop=setInterval(function(){a.xp+=(a.windowLeftPos-a.xp
41)/a.options.easingAmount;a.yp+=(a.windowTopPos-a.yp)/a.options.easingAmount;a.scrollingLock?(clearInterval(a.loop),a.xp=a.windowLeftPos,a.yp=a.windowTopPos,a.xp=-1*((b.pageX-a.nzOffset.left)*a.widthRatio-a.zoomWindow.width()/2),a.yp=-1*((b.pageY-a.nzOffset.top)*a.heightRatio-a.zoomWindow.height()/2),a.changeBgSize&&(a.nzHeight>
42a.nzWidth?("lens"==a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"}),a.zoomWindow.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"})):("lens"!=a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvaluewidth+"px "+a.largeHeight/a.newvalueheight+"px"}),a.zoomWindow.css({"background-size":a.largeWidth/a.newvaluewidth+"px "+a.largeHeight/a.newvaluewidth+"px"})),
43a.changeBgSize=!1),a.zoomWindow.css({backgroundPosition:a.windowLeftPos+"px "+a.windowTopPos+"px"}),a.scrollingLock=!1,a.loop=!1):(a.changeBgSize&&(a.nzHeight>a.nzWidth?("lens"==a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"}),a.zoomWindow.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"})):("lens"!=a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvaluewidth+
44"px "+a.largeHeight/a.newvaluewidth+"px"}),a.zoomWindow.css({"background-size":a.largeWidth/a.newvaluewidth+"px "+a.largeHeight/a.newvaluewidth+"px"})),a.changeBgSize=!1),a.zoomWindow.css({backgroundPosition:a.xp+"px "+a.yp+"px"}))},16))):(a.changeBgSize&&(a.nzHeight>a.nzWidth?("lens"==a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"}),a.zoomWindow.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/
45a.newvalueheight+"px"})):("lens"==a.options.zoomType&&a.zoomLens.css({"background-size":a.largeWidth/a.newvaluewidth+"px "+a.largeHeight/a.newvaluewidth+"px"}),a.largeHeight/a.newvaluewidth<a.options.zoomWindowHeight?a.zoomWindow.css({"background-size":a.largeWidth/a.newvaluewidth+"px "+a.largeHeight/a.newvaluewidth+"px"}):a.zoomWindow.css({"background-size":a.largeWidth/a.newvalueheight+"px "+a.largeHeight/a.newvalueheight+"px"})),a.changeBgSize=!1),a.zoomWindow.css({backgroundPosition:a.windowLeftPos+
46"px "+a.windowTopPos+"px"}))},setTintPosition:function(b){this.nzOffset=this.$elem.offset();this.tintpos=String(-1*(b.pageX-this.nzOffset.left-this.zoomLens.width()/2));this.tintposy=String(-1*(b.pageY-this.nzOffset.top-this.zoomLens.height()/2));this.Etoppos&&(this.tintposy=0);this.Eloppos&&(this.tintpos=0);this.Eboppos&&(this.tintposy=-1*(this.nzHeight-this.zoomLens.height()-2*this.options.lensBorderSize));this.Eroppos&&(this.tintpos=-1*(this.nzWidth-this.zoomLens.width()-2*this.options.lensBorderSize));
47this.options.tint&&(this.fullheight&&(this.tintposy=0),this.fullwidth&&(this.tintpos=0),this.zoomTintImage.css({left:this.tintpos+"px"}),this.zoomTintImage.css({top:this.tintposy+"px"}))},swaptheimage:function(b,a){var c=this,e=new Image;c.options.loadingIcon&&(c.spinner=d("<div style=\"background: url('"+c.options.loadingIcon+"') no-repeat center;height:"+c.nzHeight+"px;width:"+c.nzWidth+'px;z-index: 2000;position: absolute; background-position: center center;"></div>'),c.$elem.after(c.spinner));
48c.options.onImageSwap(c.$elem);e.onload=function(){c.largeWidth=e.width;c.largeHeight=e.height;c.zoomImage=a;c.zoomWindow.css({"background-size":c.largeWidth+"px "+c.largeHeight+"px"});c.zoomWindow.css({"background-size":c.largeWidth+"px "+c.largeHeight+"px"});c.swapAction(b,a)};e.src=a},swapAction:function(b,a){var c=this,e=new Image;e.onload=function(){c.nzHeight=e.height;c.nzWidth=e.width;c.options.onImageSwapComplete(c.$elem);c.doneCallback()};e.src=b;c.currentZoomLevel=c.options.zoomLevel;c.options.maxZoomLevel=
49!1;"lens"==c.options.zoomType&&c.zoomLens.css({backgroundImage:"url('"+a+"')"});"window"==c.options.zoomType&&c.zoomWindow.css({backgroundImage:"url('"+a+"')"});"inner"==c.options.zoomType&&c.zoomWindow.css({backgroundImage:"url('"+a+"')"});c.currentImage=a;if(c.options.imageCrossfade){var f=c.$elem,g=f.clone();c.$elem.attr("src",b);c.$elem.after(g);g.stop(!0).fadeOut(c.options.imageCrossfade,function(){d(this).remove()});c.$elem.width("auto").removeAttr("width");c.$elem.height("auto").removeAttr("height");
50f.fadeIn(c.options.imageCrossfade);c.options.tint&&"inner"!=c.options.zoomType&&(f=c.zoomTintImage,g=f.clone(),c.zoomTintImage.attr("src",a),c.zoomTintImage.after(g),g.stop(!0).fadeOut(c.options.imageCrossfade,function(){d(this).remove()}),f.fadeIn(c.options.imageCrossfade),c.zoomTint.css({height:c.$elem.height()}),c.zoomTint.css({width:c.$elem.width()}));c.zoomContainer.css("height",c.$elem.height());c.zoomContainer.css("width",c.$elem.width());"inner"!=c.options.zoomType||c.options.constrainType||
51(c.zoomWrap.parent().css("height",c.$elem.height()),c.zoomWrap.parent().css("width",c.$elem.width()),c.zoomWindow.css("height",c.$elem.height()),c.zoomWindow.css("width",c.$elem.width()))}else c.$elem.attr("src",b),c.options.tint&&(c.zoomTintImage.attr("src",a),c.zoomTintImage.attr("height",c.$elem.height()),c.zoomTintImage.css({height:c.$elem.height()}),c.zoomTint.css({height:c.$elem.height()})),c.zoomContainer.css("height",c.$elem.height()),c.zoomContainer.css("width",c.$elem.width());c.options.imageCrossfade&&
52(c.zoomWrap.css("height",c.$elem.height()),c.zoomWrap.css("width",c.$elem.width()));c.options.constrainType&&("height"==c.options.constrainType&&(c.zoomContainer.css("height",c.options.constrainSize),c.zoomContainer.css("width","auto"),c.options.imageCrossfade?(c.zoomWrap.css("height",c.options.constrainSize),c.zoomWrap.css("width","auto"),c.constwidth=c.zoomWrap.width()):(c.$elem.css("height",c.options.constrainSize),c.$elem.css("width","auto"),c.constwidth=c.$elem.width()),"inner"==c.options.zoomType&&
53(c.zoomWrap.parent().css("height",c.options.constrainSize),c.zoomWrap.parent().css("width",c.constwidth),c.zoomWindow.css("height",c.options.constrainSize),c.zoomWindow.css("width",c.constwidth)),c.options.tint&&(c.tintContainer.css("height",c.options.constrainSize),c.tintContainer.css("width",c.constwidth),c.zoomTint.css("height",c.options.constrainSize),c.zoomTint.css("width",c.constwidth),c.zoomTintImage.css("height",c.options.constrainSize),c.zoomTintImage.css("width",c.constwidth))),"width"==
54c.options.constrainType&&(c.zoomContainer.css("height","auto"),c.zoomContainer.css("width",c.options.constrainSize),c.options.imageCrossfade?(c.zoomWrap.css("height","auto"),c.zoomWrap.css("width",c.options.constrainSize),c.constheight=c.zoomWrap.height()):(c.$elem.css("height","auto"),c.$elem.css("width",c.options.constrainSize),c.constheight=c.$elem.height()),"inner"==c.options.zoomType&&(c.zoomWrap.parent().css("height",c.constheight),c.zoomWrap.parent().css("width",c.options.constrainSize),c.zoomWindow.css("height",
55c.constheight),c.zoomWindow.css("width",c.options.constrainSize)),c.options.tint&&(c.tintContainer.css("height",c.constheight),c.tintContainer.css("width",c.options.constrainSize),c.zoomTint.css("height",c.constheight),c.zoomTint.css("width",c.options.constrainSize),c.zoomTintImage.css("height",c.constheight),c.zoomTintImage.css("width",c.options.constrainSize))))},doneCallback:function(){this.options.loadingIcon&&this.spinner.hide();this.nzOffset=this.$elem.offset();this.nzWidth=this.$elem.width();
56this.nzHeight=this.$elem.height();this.currentZoomLevel=this.options.zoomLevel;this.widthRatio=this.largeWidth/this.nzWidth;this.heightRatio=this.largeHeight/this.nzHeight;"window"==this.options.zoomType&&(lensHeight=this.nzHeight<this.options.zoomWindowWidth/this.widthRatio?this.nzHeight:String(this.options.zoomWindowHeight/this.heightRatio),lensWidth=this.options.zoomWindowWidth<this.options.zoomWindowWidth?this.nzWidth:this.options.zoomWindowWidth/this.widthRatio,this.zoomLens&&(this.zoomLens.css("width",
57lensWidth),this.zoomLens.css("height",lensHeight)))},getCurrentImage:function(){return this.zoomImage},getGalleryList:function(){var b=this;b.gallerylist=[];b.options.gallery?d("#"+b.options.gallery+" a").each(function(){var a="";d(this).data("zoom-image")?a=d(this).data("zoom-image"):d(this).data("image")&&(a=d(this).data("image"));a==b.zoomImage?b.gallerylist.unshift({href:""+a+"",title:d(this).find("img").attr("title")}):b.gallerylist.push({href:""+a+"",title:d(this).find("img").attr("title")})}):
58b.gallerylist.push({href:""+b.zoomImage+"",title:d(this).find("img").attr("title")});return b.gallerylist},changeZoomLevel:function(b){this.scrollingLock=!0;this.newvalue=parseFloat(b).toFixed(2);newvalue=parseFloat(b).toFixed(2);maxheightnewvalue=this.largeHeight/(this.options.zoomWindowHeight/this.nzHeight*this.nzHeight);maxwidthtnewvalue=this.largeWidth/(this.options.zoomWindowWidth/this.nzWidth*this.nzWidth);
58"inner"!=this.options.zoomType&&(maxheightnewvalue<=newvalue?(this.heightRatio=this.largeHeight/
59maxheightnewvalue/this.nzHeight,this.newvalueheight=maxheightnewvalue,this.fullheight=!0):(this.heightRatio=this.largeHeight/newvalue/this.nzHeight,this.newvalueheight=newvalue,this.fullheight=!1),maxwidthtnewvalue<=newvalue?(this.widthRatio=this.largeWidth/maxwidthtnewvalue/this.nzWidth,this.newvaluewidth=maxwidthtnewvalue,this.fullwidth=!0):(this.widthRatio=this.largeWidth/newvalue/this.nzWidth,this.newvaluewidth=newvalue,this.fullwidth=!1),"lens"==this.options.zoomType&&(maxheightnewvalue<=newvalue?
60(this.fullwidth=!0,this.newvaluewidth=maxheightnewvalue):(this.widthRatio=this.largeWidth/newvalue/this.nzWidth,this.newvaluewidth=newvalue,this.fullwidth=!1)));"inner"==this.options.zoomType&&(maxheightnewvalue=parseFloat(this.largeHeight/this.nzHeight).toFixed(2),maxwidthtnewvalue=parseFloat(this.largeWidth/this.nzWidth).toFixed(2),newvalue>maxheightnewvalue&&(newvalue=maxheightnewvalue),newvalue>maxwidthtnewvalue&&(newvalue=maxwidthtnewvalue),maxheightnewvalue<=newvalue?(this.heightRatio=this.largeHeight/
61newvalue/this.nzHeight,this.newvalueheight=newvalue>maxheightnewvalue?maxheightnewvalue:newvalue,this.fullheight=!0):(this.heightRatio=this.largeHeight/newvalue/this.nzHeight,this.newvalueheight=newvalue>maxheightnewvalue?maxheightnewvalue:newvalue,this.fullheight=!1),maxwidthtnewvalue<=newvalue?(this.widthRatio=this.largeWidth/newvalue/this.nzWidth,this.newvaluewidth=newvalue>maxwidthtnewvalue?maxwidthtnewvalue:newvalue,this.fullwidth=!0):(this.widthRatio=this.largeWidth/newvalue/this.nzWidth,this.newvaluewidth=
62newvalue,this.fullwidth=!1));scrcontinue=!1;"inner"==this.options.zoomType&&(this.nzWidth>this.nzHeight&&(this.newvaluewidth<=maxwidthtnewvalue?scrcontinue=!0:(scrcontinue=!1,this.fullwidth=this.fullheight=!0)),this.nzHeight>this.nzWidth&&(this.newvaluewidth<=maxwidthtnewvalue?scrcontinue=!0:(scrcontinue=!1,this.fullwidth=this.fullheight=!0)));"inner"!=this.options.zoomType&&(scrcontinue=!0);scrcontinue&&(this.zoomLock=0,this.changeZoom=!0,this.options.zoomWindowHeight/this.heightRatio<=this.nzHeight&&
63(this.currentZoomLevel=this.newvalueheight,"lens"!=this.options.zoomType&&"inner"!=this.options.zoomType&&(this.changeBgSize=!0,this.zoomLens.css({height:String(this.options.zoomWindowHeight/this.heightRatio)+"px"})),"lens"==this.options.zoomType||"inner"==this.options.zoomType)&&(this.changeBgSize=!0),this.options.zoomWindowWidth/this.widthRatio<=this.nzWidth&&("inner"!=this.options.zoomType&&this.newvaluewidth>this.newvalueheight&&(this.currentZoomLevel=this.newvaluewidth),"lens"!=this.options.zoomType&&
64"inner"!=this.options.zoomType&&(this.changeBgSize=!0,this.zoomLens.css({width:String(this.options.zoomWindowWidth/this.widthRatio)+"px"})),"lens"==this.options.zoomType||"inner"==this.options.zoomType)&&(this.changeBgSize=!0),"inner"==this.options.zoomType&&(this.changeBgSize=!0,this.nzWidth>this.nzHeight&&(this.currentZoomLevel=this.newvaluewidth),this.nzHeight>this.nzWidth&&(this.currentZoomLevel=this.newvaluewidth)));this.setPosition(this.currentLoc)},closeAll:function(){self.zoomWindow&&self.zoomWindow.hide();
65self.zoomLens&&self.zoomLens.hide();self.zoomTint&&self.zoomTint.hide()},changeState:function(b){"enable"==b&&(this.options.zoomEnabled=!0);"disable"==b&&(this.options.zoomEnabled=!1)}};d.fn.elevateZoom=function(b){return this.each(function(){var a=Object.create(k);a.init(b,this);d.data(this,"elevateZoom",a)})};d.fn.elevateZoom.options={zoomActivation:"hover",zoomEnabled:!0,preloading:1,zoomLevel:1,scrollZoom:!1,scrollZoomIncrement:0.1,minZoomLevel:!1,maxZoomLevel:!1,easing:!1,easingAmount:12,lensSize:200,
66zoomWindowWidth:400,zoomWindowHeight:400,zoomWindowOffetx:0,zoomWindowOffety:0,zoomWindowPosition:1,zoomWindowBgColour:"#fff",lensFadeIn:!1,lensFadeOut:!1,debug:!1,zoomWindowFadeIn:!1,zoomWindowFadeOut:!1,zoomWindowAlwaysShow:!1,zoomTintFadeIn:!1,zoomTintFadeOut:!1,borderSize:4,showLens:!0,borderColour:"#888",lensBorderSize:1,lensBorderColour:"#000",lensShape:"square",zoomType:"window",containLensZoom:!1,lensColour:"white",lensOpacity:0.4,lenszoom:!1,tint:!1,tintColour:"#333",tintOpacity:0.4,gallery:!1,
67galleryActiveClass:"zoomGalleryActive",imageCrossfade:!1,constrainType:!1,constrainSize:!1,loadingIcon:!1,cursor:"default",responsive:!0,onComplete:d.noop,onZoomedImageLoaded:function(){},onImageSwap:d.noop,onImageSwapComplete:d.noop}})(jQuery,window,document);
68; 
69/// <reference path="jquery-1.8.3.min.js" />
70
71/*!
72* JavaScript fbits.produto.atributos Library v1.0.0
73* Copyright 2012, Fbits e-Partner Business
74*
75* Modificado 
76* Date: 04/09/2012
77* Por: Maykol Rypka
78* 
79*Funções:
80*		adicionaEventosASelecaoAtributos
81*   appendHtmlSelectedAttrGroup
82*		carregarOpcoes
83*		changeEventsSelQuantidade
84*		checkOpcoesSelecionadas
85*   initProdutoAtributos
86*   hideErrors
87*   removeHtmlSelectedAttrGroup		
88*		selectedUnits
89*   showError
90*		showSelectedUnits
91*/
92var Fbits = Fbits || { __namespace: true };
93Fbits.Produto = Fbits.Produto || { __namespace: true };
94Fbits.Produto.Atributos = Fbits.Produto.Atributos || {};
95Fbits.Produto.Atributos.urlAtualizar = fbits.ecommerce.urlEcommerce + 'Produto/AtualizarProduto';
96
97/**
98* Para identificar as classes no visual studio
99*/
100Fbits.Produto.Atributos.__class = true
101
102//Variaveis
103var caminhoProdutoDetalhe = ""; //Caminho Action Atualizar
104var produtoId = 0; //Id do produto em questão
105var btnRemove = "divRemoveItem-";
106var labelErroPartialId = 'mensagem-erro-';
107
108//Configurações das escolhas do produto
109var htmlProductOptions = '';
110var divOpcoesPartialId = 'divOpcoes-';
111var selectAtributoPartialId = 'selAtributo-';
112var divItensComboPartialId = 'divItensCombo-';
113
114var divBtnRemove = document.createElement('div');
115$(divBtnRemove).attr('id', 'divRemoveItem');
116$(divBtnRemove).attr('class', 'delete');
117$(divBtnRemove).html('<span>Excluir Seleção</span>');
118
119var divMsgErro = document.createElement('div');
120$(divMsgErro).attr('id', 'divMsgErro');
121$(divMsgErro).attr('class', 'erro');
122$(divMsgErro).text('Você selecionou uma quantidade acima do permitido. Por favor verifique.');
123
124//Adiciona o novo elementento abaixo do elemento passado como parametro.
125function appendHtmlSelectedAttrGroup(beforeElement) {
126    var divOpcoesId = $(beforeElement).attr('id');
127    var divOpcoesContador = parseInt(divOpcoesId.replace(divOpcoesPartialId, ''));
128    var tempHtml = htmlProductOptions.clone().addClass('opcoesProdutosFirst');
129
130    tempHtml.attr('id', divOpcoesPartialId + (divOpcoesContador + 1));
131    tempHtml.find('#divRemoveItem').attr('id', btnRemove + (divOpcoesContador + 1));
132
133    //tempHtml.find('[id^="' + divItensComboPartialId + '"]').append(labelErro());
134    var msgErroNovoId = tempHtml.find('[id^="' + labelErroPartialId + '"]').attr('id').replace(labelErroPartialId, '');
135    tempHtml.find('[id^="' + labelErroPartialId + '"]').attr('id', labelErroPartialId + (parseInt(msgErroNovoId) + 1));
136
137    $(beforeElement).after(tempHtml);
138
139    changeEventsSelQuantidade();
140}
141
142/*
143* A cada mudança de seleção de qualquer uma das comboboxes das 
144* opções de produto, realiza uma requisição AJAX
145* passando o código do produto (Grade) e as opções selecionadas.
146* No retorno da chamada AJAX, atualiza os dados do produto e dos
147* atributos	nas "Selects"
148*/
149function carregarOpcoes(elementOpcoes) {
150
151    if (elementOpcoes.href != undefined) {
152        if ($(elementOpcoes).find('div[data-valoratributo]').length > 0)
153            elementOpcoes = $(elementOpcoes).find('div[data-valoratributo]');
154        else
155            return;
156    }
157
158    //VARIAVEIS
159    var produtoId = $('#hdnProdutoId').val();
160    var atributoProduto = [];
161    var atributoSelecionado = "";
162    var opcaoSelecionada = 0;
163    var comboSelecionado = 0;
164    var grupoAtributos = 0;
165    var optionString = "Selecione";
166    var isThumb = false;
167    var produtoVarianteIdAdicional = 0;
168    var isCompreJunto = false;
169
170    //INICIALIZAÇÃO DAS VARIAVEIS
171    var domOpcoes = $(elementOpcoes);
172    opcaoSelecionada = domOpcoes.parents('div[id^="divOpcoes-"]').attr('id').replace('divOpcoes-', '');
173    comboSelecionado = domOpcoes.parents('li[id^="liComboItem-"]').attr('id').replace('liComboItem-', '');
174    produtoId = domOpcoes.parents('div[id^="dvGrupoSelecaoAtributos-"]').find('input[id="hdnProdutoId"]').val();
175    ///troca do id da div do produto
176
177    var assinaturaSelecionada = $("input[name=tipo-produto]:radio:checked", domOpcoes.parents('[id^=produto-item]')).val()
178
179    if (!assinaturaSelecionada)
180        assinaturaSelecionada = false;
181
182    if (domOpcoes.is('select')) { // domopcoes é o objeto select.
183        domOpcoes = domOpcoes.children("option:selected")  // atribui o "option" selecionado para o domOpcoes.
184    }
185
186    // Marca o valor dos outros atributo como não selecionado.
187    domOpcoes.parents('[data-codigoatributo]').find('[data-valoratributo]').attr("data-atributoSelecionado", "False");
188
189    // Marca o valor do atributo atual como selecionado.
190    domOpcoes.attr('data-atributoSelecionado', 'True');
191
192    //Verifica se é um tumb, somente quando selecionar dados do veja tambem ou compre junto.
193    if (domOpcoes.parents('div[id^="spotVejaTambem-"]').length > 0) {
194        produtoId = domOpcoes.parents('div[id^="divSpotProdutoRecomendado"]').find('input[id="hdnProdutoId"]').val();
195
196        //Verifica id do produto variante, somente para o veja tambem ou compre junto.
197        var idSpotRecomendadoSelecionado = domOpcoes.parents('div[id^="spotVejaTambem-"]').attr('id');
198        $.each(domOpcoes
199            .parents('[id^=liGrupoProduto]')
200            .find('div[id^="spotVejaTambem-"]'), function (index, item) {
201                if ($(item).attr('id') != idSpotRecomendadoSelecionado) {
202                    produtoVarianteIdAdicional = $(item).find('#hdnProdutoVarianteId').val();
203                }
204            });
205
206        if (domOpcoes.parents('div[id^="spotVejaTambem-"]').find('div[id^="divFotosProduto-"]').length > 0) {
207            isThumb = domOpcoes.parents('div[id^="spotVejaTambem-"]').find('div[id^="divFotosProduto-"]').attr('data-isthumb');
208            isThumb = (isThumb == 'undefined' || isThumb == undefined) ? false : isThumb;
209        }
210    }
211
212    //Pega os dados dos elementos do combo.
213    domOpcoes
214        .parents('li[id^="liComboItem-' + comboSelecionado + '"]')
215        .find('[data-codigoatributo]')
216        .each(function () {
217            //$(this) = elemento da iteração
218
219            var codigoAtributo = $(this).attr('data-codigoAtributo');
220            var valorAtributo = 'Selecione';
221
222            if ($(this).find('[data-atributoSelecionado="True"]').length == 1) {
223                valorAtributo = $($(this).find('[data-atributoSelecionado="True"]')[0]).attr('data-valoratributo');
224            }
225
226            atributoProduto.push(valorAtributo + ";" + codigoAtributo);
227        });
228
229
230
231    // Último elemento selecionado.
232    if (domOpcoes.attr('data-valorAtributo') != "") {
233
234        var valorAtributo = domOpcoes.attr('data-valorAtributo');
235        var codigoAtributo = domOpcoes.parent().attr('data-codigoAtributo');
236        if (domOpcoes.attr('data-produtoId') != "" && domOpcoes.attr('data-produtoId') != undefined) {
237            produtoId = domOpcoes.attr('data-produtoId');
238        }
239
240        if (codigoAtributo == undefined)
241            codigoAtributo = domOpcoes.parents('[data-codigoatributo]').attr('data-codigoatributo');
242
243        atributoSelecionado = valorAtributo + ";" + codigoAtributo;
244    }
245
246    // Indica se a seleção se refere aos atributos principais da página do produto (E não de produtos relacionados, lista de desejos, etc).
247    var isPagProduto = false;
248
249    if (domOpcoes.parents('li[id^="liComboItem-' + comboSelecionado + '"]').find('[data-atributospagproduto="True"]').length > 0)
250        isPagProduto = true;
251
252    //Verifica se elemento contem div compre junto
253    if (domOpcoes.parents('div[id^="divCompreJunto"]').length > 0) {
254        isThumb = true;
255        isCompreJunto = true;
256        isPagProduto = false;
257    }
258    var quantidade = 1;
259    var sellerId = 0;
260
261    if ((typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "true") && $("input[name='checkBuyBox']:checked").length > 0) {
262        sellerId = $("input[name='checkBuyBox']:checked").data("resellerid");
263    }
264
265    //if ($("#item-quantidade-1").length > 0)
266    //    quantidade = $("#item-quantidade-1").val();
267
268    if (isCompreJunto) {
269        if ($("#produto-item-0-" + produtoId).find('[id^="item-quantidade-"]').length > 0) {
270            quantidade = $("#produto-item-0-" + produtoId).find('[id^="item-quantidade-"]').val();
271        }
272    } else {
273        if ($('[id^="item-quantidade-"]').length > 0) {
274            quantidade = $('[id^="item-quantidade-"]').val();
275        }
276    }
277
278    //seta o valor do produto id caso tenha mudado 
279    domOpcoes.parents('div[id^="dvGrupoSelecaoAtributos-"]').find('input[id="hdnProdutoId"]').val(produtoId);
280    domOpcoes.parents("[id^=produto-item]").first()[0].id = "produto-item-0-" + produtoId;
281    if ($("#hdnProdutoId").first().val() != produtoId)
282        domOpcoes.parents('div[id^="dvGrupoSelecaoAtributos-"]').first()[0].id = "dvGrupoSelecaoAtributos-" + produtoId;
283
284    $.ajax({
285        type: 'POST',
286        url: Fbits.Produto.Atributos.urlAtualizar,
287        data: {
288            "atributoProduto": atributoProduto.join("|")
289            , "atributoSelecionado": atributoSelecionado
290            , "produtoId": produtoId
291            , "comboIdSelecionado": comboSelecionado
292            , "opcaoParalelaSelecionada": opcaoSelecionada
293            , "optionString": optionString
294            , "isThumb": isThumb
295            , "produtoVarianteIdAdicional": produtoVarianteIdAdicional
296            , "assinaturaSelecionada": assinaturaSelecionada
297            , "isPagProduto": isPagProduto
298            , "quantidade": quantidade
299            , "sellerId": sellerId
300        },
301        success: function (data) {
302
303            if (data.redirecionar)
304                window.location = data.urlRedirecionamento;
305
306            // Se o produto variante estiver indisponível, desabilita o botão de compra
307            if (data.disponivel) {
308                $('[id^=produto-comprar-]', domOpcoes).show();
309                $('body').removeClass('fbits-produto-indisponivel');
310            }
311            else {
312                $('[id^=produto-comprar-]', domOpcoes).hide();
313            }
314
315            ////Verifica a necessidade de renderizar as views opcionais
316            if (data.renderizarOpcao) {
317                // substitui o sku do produto
318                if (!isCompreJunto)
319                    domOpcoes.parents('div[id^="produto-item"]').find(".fbits-sku").html("SKU " + data.SKU);
320
321                if ($("#componentePrecoCalculado.fbits-preco-calculado-precopor").length > 0 && data.precoCalculado != "") {
322                    $("#componentePrecoCalculado.fbits-preco-calculado-precopor #spanPrecoCalculadoComponente").text(data.precoCalculado);
323                }
324
325                if ($("#componentePrecoCalculado.fbits-preco-calculado-precodesconto").length > 0 && data.precoCalculadoComDesconto != "") {
326                    $("#componentePrecoCalculado.fbits-preco-calculado-precodesconto #spanPrecoCalculadoComponente").text(data.precoCalculadoComDesconto);
327                }
328
329                if ($("#fbits-buyBox").length > 0 && data.partialBuyBox != "") {
330                    $("#fbits-buyBox").replaceWith(data.partialBuyBox);
331                }
332
333                if (isThumb) {
334                    // Verifica se é compre junto do tipo produto
335                    if (domOpcoes.parents('div[id^="spotVejaTambem-"]').length > 0) {
336                        //Verifica se é a mesma foto, se for não recarrega.
337                        var fotoProdutoThumbId = domOpcoes.parents('div[id^="spotVejaTambem-"]').find('div[id^="divFotosProduto"]').find('input[id="FotoProdutoId"]').val();
338
339                        // Verifica se o produto variante está indisponível, imprimindo a div "avisoIndisponivel", senão imprime as formas de pagamento
340                        if (data.fotoProdutoId != fotoProdutoThumbId) {
341                            domOpcoes.parents('div[id^="spotVejaTambem-"]').find('div[id^="divFotosProduto-"]').html(data.partialImagens);
342                        }
343                        domOpcoes.parents('div[id^="spotVejaTambem-"]').find('[id^="produto-nome-"]').text(data.nomeProdutoVariante);
344
345                        domOpcoes.parents('div[id^="spotVejaTambem-"]').find('#hdnProdutoVarianteId').val(data.produtoVarianteId).trigger('change');
346                        var opcaoResult = domOpcoes.parents('div[id^="divOpcoes-"]').attr("id").replace("divOpcoes-", "");
347                        domOpcoes.parents('div[id^="spotVejaTambem-"]').find('#hdnProdutoVarianteId-' + opcaoResult).val(data.produtoVarianteId);
348
349                        var valorTotalProdutos = 0;
350
351                        domOpcoes.parents('[id^=liGrupoProduto]').find('span[id="spnValorTotal"]').text(data.precoProduto);
352                        domOpcoes.parents('[id^=liGrupoProduto]').find('span[id="spnValorTotalParcelado"]').text(data.precoProdutoParcelado);
353
354                    } else {
355                        var fotoProdutoThumbId = domOpcoes.parents('div[id^="produto-item-"]').first().find("#divFotosProduto-Principal").find('input[id="FotoProdutoId"]').val();
356                        // Verifica se o produto variante está indisponível, imprimindo a div "avisoIndisponivel", senão imprime as formas de pagamento
357                        if (data.fotoProdutoId != fotoProdutoThumbId) {
358                            domOpcoes.parents('div[id^="produto-item-"]').first().find("#divFotosProduto-Principal").html(data.partialImagens);
359                        }
360
361                        if (novoCheckout) {
362                            var opcaoResult = domOpcoes.parents('div[id^="divOpcoes-"]').attr("id").replace("divOpcoes-", "");
363                            domOpcoes.parents('div[id^="produto-item-"]').first().find("#hdnProdutoVarianteId-" + opcaoResult).val(data.produtoVarianteId).trigger('change');
364                        }
365                        else
366                            domOpcoes.parents('div[id^="produto-item-"]').first().find("#hdnProdutoVarianteId-").val(data.produtoVarianteId).trigger('change');
367
368                        // Atualiza o nome do produto variante.
369                        domOpcoes.parents('[id^="produto-item-"]').first().find('[id^="produto-nome-"]').text(data.nomeProdutoVariante);
370                        var valorTotalProdutos = 0;
371                        domOpcoes.parents('[id^=liGrupoProduto]').find('span[id="spnValorTotal"]').text(data.precoProduto);
372                        domOpcoes.parents('[id^=liGrupoProduto]').find('span[id="spnValorTotalParcelado"]').text(data.precoProdutoParcelado);
373                    }
374
375                } else {
376
377
378                    // Atualiza o hidden do produtoVarianteId
379                    if (novoCheckout) {
380                        var opcaoResult = domOpcoes.parents('div[id^="divOpcoes-"]').attr("id").replace("divOpcoes-", "");
381                        domOpcoes.parents('div[id^="produto-item-"]').first().find("#hdnProdutoVarianteId-" + opcaoResult).val(data.produtoVarianteId).trigger('change');
382                    }
383                    else
384                        domOpcoes.parents('div[id^="produto-item-"]').first().find('[id^="hdnProdutoVarianteId-"]').first().val(data.produtoVarianteId).trigger('change');
385
386
387                    // Atualiza o nome do produto variante.
388                    domOpcoes.parents('[id^="produto-item-"]').first().find('[id^="produto-nome-"]').first().text(data.nomeProdutoVariante);
389					
390					if (Fbits.Produto.Atributos.urlAtualizar.includes("ListaDeDesejos/AtualizarProduto")) {
391						domOpcoes.parents('.produtosListaDesejos').find('[id^="produto-preco-"]').find('.precoPor').first().text("R$ " + data.precoProduto)
392					}
393
394                    domOpcoes.parents('[id^="produto-item-"]').first().find('[id^="produto-pagamentoparcelamento-"]').html(data.partialParcelamentoPadrao);
395                    domOpcoes.parents('[id^="produto-item-"]').first().find('[id^="fbits-componente-parcelamento-"]').html(data.partialParcelamento);
396                    adicionaEventoParcelamento();
397
398                    //Verifica se é a mesma foto, se for não recarrega. 
399                    //          var fotoProdutoId = domOpcoes.parents('div[id^="produto-item-"]').find('div[id="divFotosProduto"]').find('input[id="FotoProdutoId"]').val();
400                    var fotoProdutoId = domOpcoes.parents('[id^="produto-item-"]').find('[id^="produto-imagem-"]').find('input[id="FotoProdutoId"]').val();
401                    /*if (domOpcoes.parents('[id^="produto-item-"]').first().find('[id^="produto-imagem-"]').length > 0)
402                        fotoProdutoId = */
403
404                    if (data.fotoProdutoId != fotoProdutoId) {
405                        domOpcoes.parents('[id^="produto-item-"]').find('[id^="produto-imagem-"]').html(data.partialImagens);
406
407                        if ($('#zoomImagemProduto').length > 0) {
408                            adicionaEventosImagens();
409                            adicionaEventosImagensModal();
410                        }
411                    }
412
413                    //TODO: VERIFICAR CÓDIGO REPLICADO: PAGINA DE PRODUTO UTILIZANDO O MÉTODO ANTIGO DE INCLUIR PRODUTO NO CARRINHO.
414                    // Se produto variante não estiver disponível, substitui a divFormaPagamento pela avisoIndisponivel
415                }
416
417                if (!isCompreJunto)//se o produto atualizado for compre junto não atualiza o parcelamento do gateway
418                    atualizaPartialGateway(data, produtoId);
419                // Combinação de atributos não existe em nenhum variante.
420                if (data.combinacaoInexistente != "") {
421                    showCombinacaoIndexistente(domOpcoes.parents('[id^="produto-item-"]'), data);
422                }
423                else {
424                    if (typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "false") {
425                        if (data.disponivel) {
426                            if (isCompreJunto)
427                            {
428                                showComprar(domOpcoes.parents('[id^="produto-item-"]').first(), data, true);
429                            }
430                            else {
431                                var el = domOpcoes.parents('[id^="produto-item-"]');
432                                el.find('[id^="combinacao-inexistente"]').first().hide();
433                                if (window.location.href.includes("checkout") && el.find('[id^="produto-variante"]').length != 0) {
434                                    el = el.find('[id^="produto-variante"]');
435                                }
436
437                                showComprar(el, data, false);
438                            }
439                        }
440                        else {
441                            showAviseme(domOpcoes.parents('[id^="produto-item-"]').first(), data);
442                        }
443                    }
444                }
445            }
446
447            if (!isCompreJunto) {
448                domOpcoes.parents('[id^="produto-item-"]').find('[id^="produto-variante"]').html(data.partialComplete);
449            }
450
451            //Tem 3 tipos de quantidade, só estava mudando o 1
452            if (domOpcoes.parents('[id^="produto-item-"]').find('[id^="item-quantidade-"]').first().length > 0) {
453                domOpcoes.parents('[id^="produto-item-"]').find('[id^="item-quantidade-"]').first().focus();
454                domOpcoes.parents('[id^="produto-item-"]').find('[id^="item-quantidade-"]').first().val('');
455                domOpcoes.parents('[id^="produto-item-"]').find('[id^="item-quantidade-"]').first().val(quantidade);
456            }
457            //if (domOpcoes.parents('[id^="produto-item-"]').find('[id=item-quantidade-1]').length > 0) {
458            //    domOpcoes.parents('[id^="produto-item-"]').find('[id=item-quantidade-1]').val(quantidade);
459            //}
460            
461            var comprarModal = false;
462            //Eventos comprar do produto
463            $('[id^=produto-botao-comprar-]').unbind('click');
464            if ($(elementOpcoes).closest("div[id^='produto-modal-']").length > 0) {
465                comprarModal = true;
466                $('[id^=produto-botao-comprar-]').bind('click', function () {
467                    comprarProdutoModal($(this).parents('[id^="produto-item-"]'), true, $(this));
468                });
469            } else {
470                $('[id^=produto-botao-comprar-]').bind('click', function () {
471                    comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
472                });
473            }
474
475            $('[id^=produto-servico-botao-comprar-]').unbind('click');
476            $('[id^=produto-servico-botao-comprar-]').bind('click', function () {
477                comprarComServico($(this).parents('[id^="produto-servico-item-"]'), true, $(this));
478            });
479            //Eventos comprar do produto
480            $('[id^=produto-assinatura-botao-comprar-]').unbind('click');
481            $('[id^=produto-assinatura-botao-comprar-]').bind('click', function () {                
482                if (novoCheckout) {
483                    if (vincularAssinaturaRecorrencia) {
484                        vincularAssinaturaRecorrencia();
485                    }
486
487                    if (comprarModal) {
488                        comprarProdutoModal($(this).parents('[id^="produto-item-"]'), true, $(this));
489                    } else {
490                        comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
491                    }
492
493                } else {
494                    comprarComAssinatura($(this).parents('[id^="produto-item-"]'), true, $(this));
495                }
496            });
497
498            $('#msgEstoqueDisponivel').html(data.msgEstoqueDisponivel);
499            //Retorna a partialView de opções
500            domOpcoes.parents('div[id^="divOpcoes-"]').find('li[id^="liComboItem-' + comboSelecionado + '"]').html(data.partialAtributos);
501
502            // atribui o evento de carrossel nas imagens do mobile
503            if ($("#imagensProduto") != null && $("#imagensProduto").children().length > 1) {
504                $("#imagensProduto").slidesjs(produtoArgs());
505            }
506
507            /*Imagens e vídeo*/
508            $('[id="thumbItem"]').click(function () {
509                clickImagemThumb(this);
510            });
511
512            if (typeof details_shim !== 'undefined' && $.isFunction(details_shim)) { details_shim.init(); }
513
514            if (typeof (atualizaEtiquetaAtacado) !== typeof (undefined))
515                atualizaEtiquetaAtacado(data);
516			
517            ajustaTamanhoDivCores();
518
519            $.each(loadEvents, function (_, f) { f(); });
520        }
521
522    });
523
524} // FIM carregarOpcoes
525
526function ajustaTamanhoDivCores() {
527    for (var i = 0; i < $('[class*="valorAtributo valorAtributoCor"]').length; i++) {
528        var url = $('[class*="valorAtributo valorAtributoCor"]')[i].style.background.split("=")
529        var newUrl = url[0] + "=" + url[1] + "=" + $('[class*="valorAtributo valorAtributoCor"]')[i].scrollWidth + url[2].substring(url[2].indexOf("&")) + "=" + $('[class*="valorAtributoCor"]')[i].scrollHeight + "\")";
530        $('[class*="valorAtributo valorAtributoCor"]')[i].style.background = newUrl;
531    }
532}
533
534function atualizaPartialGateway(data, produtoId) {
535    if ($('div[id^="produto-parcelamento-gateway"]').length > 0) {
536        var urlAtualizaBoleto = fbits.ecommerce.urlEcommerce + 'Produto/AtualizarProdutoVarianteBoleto';
537        var precoPor = data.precoProduto.replace(" ", "").replace("R$", "").replace(".", "").replace(",", ".");
538        precoPor = parseFloat(precoPor);
539        //$('div[id^="produto-variante"').first().find('class=precoPor').val();
540        $("div[id^='produto-parcelamento-gateway-']").each(function (index) {
541            var grupo = $(this);
542            var config = grupo.data('componente-fbits-config');
543
544            $.ajax({
545                type: 'POST',
546                url: urlAtualizaBoleto,
547                data: JSON.stringify({ "produtoId": produtoId, "config": config, "precoPor": precoPor }),
548                contentType: 'application/json; charset=utf-8',
549                dataType: 'json',
550                success: function (data) {
551                    if (data.ParcelamentoGateway.trim() != "") {
552                        grupo.replaceWith(data.ParcelamentoGateway);
553
554                        $(".summary").click(function (event) {
555                            $(this).parent().find('.details-content').slideToggle(200);
556                            $(this).parent().find('.details-content').prev().toggleClass("opened");
557
558                            event.stopImmediatePropagation();
559                        });
560                    }
561                }
562            });
563
564        });
565    }
566}
567/**
568* Mostra o combinação inexistente na pagina de produtos, lista de desejos e carrinho
569*/
570function showCombinacaoIndexistente(produtoItemElement, data) {
571    //Site: Pagina de produto.
572    produtoItemElement.find('[id^=produto-comprar-]').hide();
573    produtoItemElement.find('[id^="produto-aviseme-"]').hide();
574    produtoItemElement.find('[id^="combinacao-inexistente"]').replaceWith(data.combinacaoInexistente);
575    produtoItemElement.find('[id^="combinacao-inexistente"]').show();
576    produtoItemElement.find('[id^=produto-servicos-]').hide();
577    produtoItemElement.find('[id=fbits-produto-promocao-divulgacao]').hide();
578
579    produtoItemElement.find('[id^="produto-botao-adicionar-carrinho-"]').hide();
580
581    //Site: Lista de desejos.
582    produtoItemElement.find('td[id^=produto-preco-]').replaceWith(data.combinacaoInexistente);
583    produtoItemElement.find('[id^="produto-comprar-"]').hide();
584
585    //Carrinho: Produto brinde.
586    produtoItemElement.find('[id^=produto-brinde-quantidade-]').hide();
587    produtoItemElement.find('[id^=produto-brinde-validar-]').hide();
588    produtoItemElement.find('[id^=produto-brinde-texto-]').hide();
589    produtoItemElement.find('[id^=produto-brinde-combinacao-inexistente-]').show();
590    produtoItemElement.find('[id^=produto-brinde-aviseme-]').hide();
591
592    //Produto: Produto recomendado.
593    produtoItemElement.find('[id^=produto-recomendado-aviseme-]').hide();
594    produtoItemElement.find('[id^=produto-recomendado-comprar-]').hide();
595    produtoItemElement.find('[id^=produto-recomendado-combinacao-inexistente-]').show();
596}
597
598function adicionaEventoParcelamento() {
599    var togView = false;
600    $("#summary").on('click', function () {
601        if (togView == false) {
602            $(this).parent().find('.details-content').slideToggle(200);
603            $(this).parent().find('.details-content').prev().toggleClass("opened");
604            togView = true;
605            return false;
606        }
607        togView = false;
608    });
609}
610
611/**
612* Mostra o avise-me na pagina de produtos, lista de desejos e carrinho
613*/
614function showAviseme(produtoItemElement, data) {
615    //Generico
616    produtoItemElement.find('[id^=produto-comprar-]').hide();
617    $('.fbits-comprar[data-componente-fbits-id=27]').hide();
618
619    //Site: Pagina de produto.
620    produtoItemElement.find('[id="divFormaPagamento"]').replaceWith(data.partialFormaPagamento);
621    produtoItemElement.find('[id^="produto-aviseme-"]').replaceWith(data.partialAviseMe);
622    produtoItemElement.find('[id^="produto-aviseme-"]').show();
623    produtoItemElement.find('[id^="combinacao-inexistente"]').hide();
624    produtoItemElement.find('[id^=produto-servicos-]').hide();
625    produtoItemElement.find('[id=fbits-produto-promocao-divulgacao]').hide();
626    //atualiza preço do produto mesmo quando estiver indisponível
627    $('.fbits-preco[data-componente-fbits-id=26]').replaceWith(data.partialPreco);
628
629    //Site: Lista de desejos.
630    produtoItemElement.find('[id^=produto-preco-]').replaceWith(data.partialAviseMe);
631    produtoItemElement.find('[id^="produto-comprar-"]').hide();
632
633    //Carrinho: Produto brinde.
634    produtoItemElement.find('[id^=produto-brinde-quantidade-]').hide();
635    produtoItemElement.find('[id^=produto-brinde-validar-]').hide();
636    produtoItemElement.find('[id^=produto-brinde-texto-]').hide();
637    produtoItemElement.find('[id^=produto-brinde-combinacao-inexistente-]').hide();
638
639    produtoItemElement.find('[id^=produto-brinde-aviseme-]').html(data.partialAviseMe);
640    produtoItemElement.find('[id^=produto-brinde-aviseme-]').show();
641
642    //Produto: Produto recomendado.
643    produtoItemElement.find('[id^=produto-recomendado-aviseme-]').html(data.partialAviseMe);
644    produtoItemElement.find('[id^=produto-recomendado-aviseme-]').show();
645    produtoItemElement.find('[id^=produto-recomendado-comprar-]').hide();
646    produtoItemElement.find('[id^=produto-recomendado-combinacao-inexistente-]').hide();
647}
648
649/**
650* Mostra as opçoes de compra do produto e esconde views como avise-me e combinação inexistente.
651*/
652function showComprar(produtoItemElement, data, isCompreJunto) {
653    //Genericos
654    produtoItemElement.find('[id^=produto-comprar-]').show();
655    $('.fbits-comprar[data-componente-fbits-id=27]').show();
656
657    //Site: Pagina de produto.
658    produtoItemElement.find('[id="divFormaPagamento"]').first().replaceWith(data.partialFormaPagamento);
659
660    if (!isCompreJunto) {
661        $('.fbits-preco[data-componente-fbits-id=26]').replaceWith(data.partialPreco);
662    }
663    //produtoItemElement.find('[id^="produto-pagamentoparcelamento-"]').html(data.partialParcelamentoPadrao);
664
665    if (produtoItemElement.find('div[id="precoCompreJuntoPorProduto"]').length == 1)
666        produtoItemElement.find('div[id="precoCompreJuntoPorProduto"]').html(data.partialFormaPagamento);
667
668    if (Fbits.Evento && Fbits.Evento.TemEventoAtivo && data.partialBotaoComprar !== undefined)
669        produtoItemElement.find("[id^=produto-comprar-]").first().replaceWith(data.partialBotaoComprar);
670
671    produtoItemElement.find('[id^=produto-servicos-]').html(data.partialServicos);
672    produtoItemElement.find('[id=fbits-produto-promocao-divulgacao]').show();
673    produtoItemElement.find('[id=fbits-produto-promocao-divulgacao]').html(data.partialDivulgacao);
674    produtoItemElement.find('[id=fbits-div-preco-off]').html(data.partialDesconto);
675
676    $("[id^=produto-servico-botao-comprar-]").unbind("click");
677    $("[id^=produto-servico-botao-comprar-]").bind("click", function () {
678        comprarComServico($(this).parents('[id^="produto-servico-item-"]'), true, $(this));
679    });
680
681    produtoItemElement.find('[id^="produto-aviseme-"]').hide();
682    produtoItemElement.find('[id^="combinacao-inexistente"]').hide();
683
684    //Site: Lista de desejos.
685    produtoItemElement.find('[id^=produto-preco-]').html(data.partialFormaPagamento);
686    produtoItemElement.find('td[id^="produto-preco-"]').attr('colspan', 1);
687
688    //Carrinho: Produto brinde.
689    produtoItemElement.find('[id^=produto-brinde-quantidade-]').show();
690    produtoItemElement.find('[id^=produto-brinde-validar-]').show();
691    produtoItemElement.find('[id^=produto-brinde-texto-]').show();
692    produtoItemElement.find('[id^=produto-servicos-]').show();
693    produtoItemElement.find('[id^=produto-brinde-aviseme-]').hide();
694    produtoItemElement.find('[id^=produto-brinde-combinacao-inexistente-]').hide();
695
696    //Produto: Produto recomendado.
697    produtoItemElement.find('[id^=produto-recomendado-aviseme-]').hide();
698    produtoItemElement.find('[id^=produto-recomendado-combinacao-inexistente-]').hide();
699    produtoItemElement.find('[id^=produto-recomendado-comprar-]').show();
700
701    produtoItemElement.find('[id^="produto-botao-adicionar-carrinho-"]').show();
702}
703
704//Elemento do change dos atributos
705function changeEventsSelQuantidade() {
706
707    $('div[id="' + $(divBtnRemove).attr('id') + '"]').unbind();
708    $('div[id^="' + $(divBtnRemove).attr('id') + '"]').click(function () { removeProductOptions(this); });
709
710
711    //Atribui evento de change nos selects de quantidade
712    $('div[id^="dvGrupoSelecaoAtributos"]').find('select[id="selQuantidade"]').unbind('change');
713
714
715    $('div[id^="dvGrupoSelecaoAtributos"]')
716        .find('select[id="selQuantidade"]')
717        .change(function () {
718            var domGrupoSelecaoAtributos = $(this).parents('div[id^="dvGrupoSelecaoAtributos-"]');
719            var ultimaQuantidadeSelecionada = $(this).val();
720            var quantidadeSelecionada = selectedUnits(domGrupoSelecaoAtributos);
721            var quantidadePermitida = $(this).parents('div[id^="divItensCombo-"]').find('input[id^="hdnMaxItemCombo-"]').val();
722            var quantidadeNaoSelecionada = $(domGrupoSelecaoAtributos).children('div[id^="' + divOpcoesPartialId + '"]').find('select[id="selQuantidade"][value="
7220"] :selected ').length;
723
724            showSelectedUnits(quantidadeSelecionada);
725            if (quantidadePermitida > 0) {
726                if (ultimaQuantidadeSelecionada > 0) {
727                    if (quantidadeSelecionada < quantidadePermitida) {
728
729                        if (quantidadeNaoSelecionada <= 0) {
730                            appendHtmlSelectedAttrGroup($(this).parents('div[id^="' + divOpcoesPartialId + '"]').first());
731
732                        }
733                    }
734                    else {
735                        if (quantidadeNaoSelecionada > 0) {
736                            removeHtmlSelectedAttrGroup(this);
737                        }
738                    }
739
740                    //Insere a frase de erro
741                    if (quantidadeSelecionada > quantidadePermitida && quantidadePermitida > 0 /*&& $(this).parents('div[id^="divItensCombo-"]').children('div[id="' + $(divMsgErro).attr('id') + '"]').length <= 0*/) {
742                        //$(this).parents('div[id^="divItensCombo-"]').after(divMsgErro).fadeIn('slow', 100);
743                        showError($(this).parents('div[id^="divItensCombo-"]'), 'Você selecionou uma quantidade acima do permitido. Por favor verifique.');
744                        if (quantidadeNaoSelecionada > 0) {
745                            removeHtmlSelectedAttrGroup(this);
746                        }
747                    }
748                }
749                else {
750                    if (quantidadeSelecionada >= quantidadePermitida) {
751                        if (quantidadeNaoSelecionada > 0) {
752                            removeHtmlSelectedAttrGroup(this);
753                        }
754                    }
755                    else {
756                        if (quantidadeNaoSelecionada > 1) {
757                            removeHtmlSelectedAttrGroup(this);
758                        }
759                    }
760                }
761
762                if ($('div[id^="' + btnRemove + '"]').length >= $('div[id^="' + divOpcoesPartialId + '"]').length) {
763                    $('div[id^="' + btnRemove + '"]').first().remove();
764                }
765            }
766        });
767}
768
769/**
770* Valida as opções selecionadas.
771*/
772function checkOpcoesSelecionadas(domGrupoSelecaoAtributos) {
773    var quantidadeSelecionada = selectedUnits(domGrupoSelecaoAtributos);                                       //Quantidade selecionada
774    var quantidadePermitida = $(domGrupoSelecaoAtributos).find('input[id^="hdnMaxItemCombo-"]').first().val(); //Limite de compra utilizado para produtos combo
775
776    //Validação para kits de produtos
777    if (quantidadePermitida > 0) {
778        if (quantidadeSelecionada == 0) {
779            showError($(domGrupoSelecaoAtributos).find('[id^="' + labelErroPartialId + '"]').last(), "Por favor selecione as opções para completar este Produto.");
780            return false;
781        } else if (quantidadeSelecionada > quantidadePermitida) {
782            showError($(domGrupoSelecaoAtributos).find('[id^="' + labelErroPartialId + '"]').last(), "Você deve selecionar no máximo " + quantidadePermitida + " opções para completar este Produto.");
783            return false;
784        } else if (quantidadeSelecionada < quantidadePermitida) {
785            showError($(domGrupoSelecaoAtributos).find('[id^="' + labelErroPartialId + '"]').last(), "Por favor selecione mais " + (quantidadePermitida - quantidadeSelecionada) + " opções para completar este Produto.");
786            return false;
787        } else {
788            if ($(domGrupoSelecaoAtributos).find('select[id^="selAtributo-"][value="Selecione"] :selected').length > 0) {
789                showError($(domGrupoSelecaoAtributos).find('[id^="' + labelErroPartialId + '"]').last(), "Por favor selecione as opções para completar este Produto.");
790                return false;
791            }
792        }
793    }
794    return true;
795}
796
797/**
798* Método responsavel por esconder mensagens de erro
799* @method hideErrors
800*/
801function hideErrors() {
802    $('[id^="' + labelErroPartialId + '"]').html('').fadeOut('slow');
803}
804
805//Inicializa a pagina de produtos, carregando o zoom se necessario e adicionando a função as dropdown
806function initProdutoAtributos() {
807    var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]');
808    if (domGrupoSelecaoAtributos.find('#hdnQuantidadeOpcoes').val() == 1) {
809        var atrbs = domGrupoSelecaoAtributos.find('#divOpcoes-0').find('.optionAtributos');
810        if (atrbs.length == 0) {
811            domGrupoSelecaoAtributos.find('#divOpcoes-0').find("#selQuantidade[value=0]").val(1);
812            domGrupoSelecaoAtributos.find('#divOpcoes-0').find("#selQuantidade option[value=0]").hide();
813            showSelectedUnits(1);
814        }
815    }
816    changeEventsSelQuantidade();
817
818    //Copia o html de opções dos produtos
819    htmlProductOptions = $('div[id^="' + divOpcoesPartialId + '"]').first().clone();
820    htmlProductOptions.find('div[id^="divItensCombo-"]').children().first().before(divBtnRemove);
821
822
823} // FIM InitProduto
824
825//Remove os atributos - Verificar
826function removeHtmlSelectedAttrGroup(obj) {
827    $(obj).parents('div[id^="dvGrupoSelecaoAtributos-"]').children('div[id^="' + divOpcoesPartialId + '"]')
828        .find('select[id="selQuantidade"][value="0"] :selected ')
829        .last()
830        .parents('div[id^="' + divOpcoesPartialId + '"]')
831        .remove();
832}
833
834/**
835* Método responsável por remover as div´s de opções de atributos.
836* @method removeProductOptions
837*/
838function removeProductOptions(btnRemoveElement) {
839    $(btnRemoveElement).parents('div[id^="' + divOpcoesPartialId + '"]').remove();
840    showSelectedUnits(selectedUnits());
841}
842
843/**
844* Método responsavel por demonstrar as mensagens de erro na tela.
845* @method showError
846*/
847function showError(errorObj, msg) {
848    var obj;
849    var objId = errorObj.attr('id');
850
851    if (obj == undefined && objId == undefined) {
852        obj = $("#mensagem-erro");
853    }
854    else {
855        if (objId.replace(labelErroPartialId) != objId) {
856            obj = errorObj;
857        }
858        else {
859            obj = errorObj.parents('[id^="' + divOpcoesPartialId + '"]').find('[id^="' + labelErroPartialId + '"]');
860        }
861    }
862
863    obj.first().stop().html(msg).fadeTo('slow', 1.0).delay(7000).fadeOut('slow');
864}
865
866/**
867* Método responsável por verificar a quantidade de produtos selecionados.
868* @method selectedUnits
869*/
870function selectedUnits(domGrupoSelecaoAtributos) {
871    var quantidade = 0;
872    $(domGrupoSelecaoAtributos).find('[id="selQuantidade"]').each(function (index) {
873        if ($(this).val() == undefined || $(this).val() == 'undefined' || $(this).val() < 0) quantidade = 0;
874        quantidade += parseInt($(this).val());
875    });
876
877    return quantidade;
878}
879
880/**
881* Método responsável por demonstrar a quantidade de produtos selecionada selecionada.
882* @method selectedUnits
883*/
884function showSelectedUnits(quantidade) {
885    $('div[id="productAmount-Principal"]').find('span[id="spnQuantidade"]').text(quantidade);
886}
887
888/*
889* Atualiza o preço de atacado do produto quando não tem mais de uma variante
890*/
891function atualizarPrecoAtacado(quantidadeSelecionada) {
892
893    var quantidade = 1;
894    var produtoId = $('#hdnProdutoId').val();
895    var produtoVarianteId = $('div[id^="produto-item-"]').first().find('[id^="hdnProdutoVarianteId-"]').first().val();
896
897    //if ($("#item-quantidade-1").length > 0) {
898    //    quantidade = $("#item-quantidade-1").val();
899    //}
900
901    //if ($("#item-quantidade-2").length > 0) {
902    //    quantidade = $("#item-quantidade-2").val();
903    //}
904
905    if ($(quantidadeSelecionada).length > 0) {
906        quantidade = $(quantidadeSelecionada).val();
907    }
908
909    $.ajax({
910        type: 'POST',
911        url: fbits.ecommerce.urlEcommerce + 'Produto/AtualizarPrecoAtacado',
912        data: {
913            "produtoId": produtoId,
914            "quantidade": quantidade,
915            "produtoVarianteId": produtoVarianteId
916        },
917        success: function (data) {
918            //$('[id^="produto-item-"]').find('[id=item-quantidade-1]').val(quantidade);
919            if (data.disponivel) {
920                showComprar($('[id^="produto-item-"]').eq(0), data, false);
921            }
922
923            if (typeof (atualizaEtiquetaAtacado) !== typeof (undefined))
924                atualizaEtiquetaAtacado(data);
925
926        }
927    });
928    if ($('[data-atributoselecionado="True"]').first().length > 0 && $('[id^="divOpcoes-"]').first().is(":hidden") == false) {
929        carregarOpcoes($('[data-atributoselecionado="True"]').first());
930    }   
931    
932}
933
934//Adiciona eventos...
935$(function () {
936    //Função responsavel por adicionar os eventos relacionados aos atributos
937    $('body').on('change', 'select[data-codigoatributo]', function (event) {
938        carregarOpcoes(this);
939    }); // Os elementos select.
940    $('body').on('click', 'div[data-codigoatributo] > * > *', function (event) {
941        event.preventDefault();
942        carregarOpcoes(this);
943    }); // Todas as opções div.
944
945    $("body").on("change", "#item-quantidade-1", function () {
946        if (Fbits.Produto.EtiquetaAtacado != undefined && Fbits.Produto.EtiquetaAtacado.length > 0)
947            atualizarPrecoAtacado(this);
948    });
949
950    $("body").on("keyup", "#item-quantidade-2", function () {
951        if (Fbits.Produto.EtiquetaAtacado != undefined && Fbits.Produto.EtiquetaAtacado.length > 0)
952            atualizarPrecoAtacado(this);
953    });
954});
955
956; 
957/// <reference path="jquery-1.8.3.min.js" />
958/// <reference path="fbits.carrinho.cabecalho.js" />
959
960/*!
961* JavaScript fbits.produto.atributos Library v1.0.0
962* Copyright 2012, Fbits e-Partner Business
963*
964* Date: 29/10/2012
965*/
966//var novoCheckout = document.cookie.indexOf('carrinho-id') >= 0;
967/**
968* Adiciona os eventos aos elementos da página
969*/
970$(document).ready(function () {
971    adicionaEventosImagens();
972    ajustaTamanhoDivCores();
973});
974
975var personalizacaoPendente = false;
976
977$(function () {
978    //$('[id^=spot-comprar-]', 'body').on('click', function () {
979    //    if ($(this).attr('data-abrirModal') == 'True') {
980    //        abrirProdutoModal($(this));
981    //    } else {  
982    //        comprarProdutoSpot($(this));
983    //    }
984    //});
985
986    $('[id^=produto-botao-comprar-]', 'body').on('click', function () {
987        comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
988    });
989
990    //Eventos comprar do spot
991    //$('[id^=spot-comprar-]').unbind('click');
992    //$('[id^=spot-comprar-]').click(function () {
993    //  if ($(this).attr('data-abrirModal') == 'True') {
994    //    abrirProdutoModal($(this));
995    //  } else {
996    //    comprarProdutoSpot($(this));
997    //  }
998    //});
999
1000    //Eventos comprar do produto
1001    //$('[id^=produto-botao-comprar-]').unbind('click');
1002    //$('[id^=produto-botao-comprar-]').bind('click', function () {
1003    //  comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
1004    //});
1005
1006    $('[id^=produto-botao-adicionar-carrinho-]').unbind('click');
1007    $('[id^=produto-botao-adicionar-carrinho-]').bind('click', function () {
1008        comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoAdicionar");
1009    });
1010
1011    $('[id^=produto-servico-botao-comprar-]').unbind('click');
1012    $('[id^=produto-servico-botao-comprar-]').bind('click', function () {
1013        comprarComServico($(this).parents('[id^="produto-servico-item-"]'), true, $(this));
1014    });
1015
1016    //Eventos comprar do produto
1017    $('[id^=produto-assinatura-botao-comprar-]').unbind('click');
1018    $('[id^=produto-assinatura-botao-comprar-]').bind('click', function () {
1019        if (novoCheckout) {
1020            if (vincularAssinaturaRecorrencia) {
1021                vincularAssinaturaRecorrencia();
1022            }
1023            comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
1024        } else {
1025            comprarComAssinatura($(this).parents('[id^="produto-item-"]'), true, $(this));
1026        }
1027    });
1028
1029    $("#tipoVisualizacao li").click(this, selecionaTipoVisualizacao);
1030
1031    //Eventos de video.
1032    adicionaEventosImagens();
1033
1034    //Função responsavel por adicionar os eventos relacionados aos atributos
1035    $('body').on('change', 'select[data-codigoServico]', function (event) {
1036        if (event.srcElement) atualizarServico(event.srcElement);
1037    }); // Os elementos select.
1038    $('body').on('click', 'div[data-codigoServico] > *', function (event) {
1039        if (event.srcElement) atualizarServico(event.srcElement);
1040        else if (event.target) atualizarServico(event.target);
1041    }); // Todas as opções div.
1042});
1043
1044/**
1045* Atualiza o resumo do carrinho.
1046*/
1047function atualizarResumoCarrinho() {
1048    if (window.carregarCarrinho) //Verifica se existe a function
1049        carregarCarrinho();        //Atualiza o resumo do carrinho
1050}
1051
1052/**
1053* Busca a quantidade de itens na tela.
1054*/
1055function buscaQuantidadeItensLista() {
1056    var quantidade = 0;
1057    quantidade = $('[id^=produto-item-]').length;
1058    quantidade = quantidade == undefined ? 0 : quantidade;
1059
1060    return quantidade;
1061}
1062
1063/**
1064* Busca os dados do produto da tela.
1065*/
1066function buscaParametrosTela(domGrupoSelecaoAtributos) {
1067    //Variavéis
1068    var quantidade = 0;
1069    var quantidadeOpcoesTela = 0;
1070    var quantidadeOpcoesParalelas = 0;
1071    var quantidadeOpcoesParalelasSelecionadas = 0
1072    var optionString = "Selecione";
1073    var prePedidiProdutoBrindeId = 0;
1074    var produtoIdPagina = 0;
1075    var produtoComboId = 0;
1076    var produtoVarianteId = 0;
1077    var textoPopUpValorReferente = '';
1078    var IsAssinatura = false;
1079
1080    quantidadeOpcoesParalelas = $('input[id="hdnQuantidadeOpcoes"]', domGrupoSelecaoAtributos).val(); //Busca quantidade de opções paralelas
1081    quantidadeOpcoesTela = $('div[id^="divOpcoes-"]', domGrupoSelecaoAtributos).length;               //Busca quantidade de opções da tela
1082    quantidadeOpcoesTela = quantidadeOpcoesTela != undefined ? quantidadeOpcoesTela : 0;
1083    produtoComboId = $('input[id="hdnProdutoComboId"]', domGrupoSelecaoAtributos).val();              //Busca o identificador do produto combo
1084    produtoIdPagina = $('input[id="hdnProdutoId"]', domGrupoSelecaoAtributos).val();                  //Busca o identigicador do produto
1085    textoPopUpValorReferente = $('span[id="spnValorReferente"]', domGrupoSelecaoAtributos).text();    //Busca o texto para popup de valor referente
1086
1087    if (($("#tipo-produto-assinatura").length > 0 && $("#tipo-produto-assinatura:checked").length > 0) ||
1088        ($("#tipo-produto-assinatura").length == 0 && $("a[id^='produto-assinatura-botao-comprar-']").length > 0)) {
1089        IsAssinatura = true;
1090    }
1091
1092    if (produtoIdPagina == 0 || produtoIdPagina == undefined) { //Verifica se o produtoId é válido
1093        return null; //Retorna para a tela
1094    }
1095
1096    //Lista utilizada para enviar os parametros para a controller
1097    var listaParametros = new Array();
1098
1099    var i = 0;
1100    var attrNome;
1101
1102    do {  //While nas opções paralelas
1103        var quantidade = 0;
1104        var opcaoSelecionada = true;
1105        var attrNaoSelecionado = false;
1106        var comboId = 0;
1107        var produtoId = 0;
1108        var dadosAtributo = [];
1109        var listaPersonalizacoes = [];
1110
1111        domGrupoSelecaoAtributos
1112            .find('div[id="divOpcoes-' + i + '"]')
1113            .find('[data-codigoatributo]')
1114            .each(function (contadorItemCombo, itemCombo) {
1115                //$(this) = elemento da iteração
1116                var attrId = $(itemCombo).attr('data-codigoAtributo');
1117                attrNome = $(itemCombo).attr('data-nomeAtributo');
1118                var attrValor = 'Selecione';
1119                comboId = $(itemCombo).parents('li[id^="liComboItem-"]').attr('id').replace('liComboItem-', '');
1120                produtoId = $('input[id^="hdnProdutoId"]', itemCombo).val();    //Busca o produtoId do componente do combo
1121
1122                if ($(itemCombo).find('[data-atributoSelecionado="True"]').length == 1) {
1123                    attrValor = $($(itemCombo).find('[data-atributoSelecionado="True"]')[0]).attr('data-valoratributo');
1124                }
1125
1126                if (novoCheckout && attrValor == optionString && opcaoSelecionada == true && quantidadeOpcoesParalelas == 1) {
1127                    showError($('[id^=mensagem-erro-]', domGrupoSelecaoAtributos), "Selecione um(a) " + attrNome + " do produto.");
1128                    attrNaoSelecionado = true;
1129                }
1130
1131                dadosAtributo.push({ AtributoId: attrId, Valor: attrValor }); //Insere os dados na lista            
1132
1133                //Verifica se a opção não foi selecionada
1134                if (attrValor == optionString && opcaoSelecionada == true) { opcaoSelecionada = false; }
1135            });
1136
1137        if (opcaoSelecionada) { quantidadeOpcoesParalelasSelecionadas++; }
1138
1139        //SELECIONA A QUANTIDADE
1140        if (domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]').find('[id^="item-quantidade"]').length > 0)//Com base na opção paralela
1141            quantidade = domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]').find('[id^="item-quantidade"]').first().val();
1142        else if (domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]').find('[id="selQuantidade"]').length > 0)//Com no modelo antigo
1143            quantidade = domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]').find('[id="selQuantidade"]').val();
1144        else//Com base em qualquer posição da tela.
1145            if ($("#tipo-produto-assinatura").is(":checked"))
1146                quantidade = $('div[id^="produto-assinatura-item-"]').find('[id^="item-quantidade-"]').first().val();
1147            else if ($('[id ^=produto-variante-][id $=' + produtoIdPagina + ']').find('[id^="item-quantidade-"]').length > 0)
1148                quantidade = $('[id ^=produto-variante-][id $=' + produtoIdPagina + ']').find('[id^="item-quantidade-"]').val();
1149            else
1150                quantidade = $(domGrupoSelecaoAtributos).parents('[id^=produto-item-]').find('[id^="item-quantidade-"]').first().val();
1151
1152        if (typeof quantidade === 'undefined') {
1153            quantidade = 1;
1154        }
1155
1156        //SELECIONA O PRODUTO VARIANTE ID
1157        produtoVarianteId = domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]').parent().find('input[id="hdnProdutoVarianteId-' + i + '"]').val();
1158
1159        if (typeof produtoVarianteId === 'undefined') {
1160            produtoVarianteId = domGrupoSelecaoAtributos.find('input[id="hdnProdutoVarianteId-' + i + '"]').val();
1161        }
1162
1163        listaPersonalizacoes = buscarPersonalizacoes(domGrupoSelecaoAtributos.find('div[id="divOpcoes-' + i + '"]'));
1164
1165        if ($("#grupo-produto-personalizacao-").attr('data-personalizacao-obrigatorio') == "True" && listaParametros.length == 0 && listaPersonalizacoes == null && quantidadeOpcoesParalelas - 1 == i) {
1166            showError($('[id^=mensagem-erro-]', domGrupoSelecaoAtributos), "Selecione uma personalização do produto.");
1167            attrNaoSelecionado = true;
1168        }
1169
1170        //ADICIONA OS PARAMETROS NA LISTA
1171        if (listaPersonalizacoes != null) {
1172            listaParametros.push({
1173                ProdutoComboId: produtoComboId,
1174                ProdutoVarianteId: produtoVarianteId,
1175                ComboId: comboId,
1176                ProdutoId: produtoId,
1177                Atributos: dadosAtributo,
1178                Quantidade: quantidade,
1179                ListaPersonalizacoes: listaPersonalizacoes
1180            });
1181        }
1182
1183        i++;
1184    } while (i < quantidadeOpcoesParalelas || i < quantidadeOpcoesTela)
1185
1186    var sellerBuyBoxNaoSelecionado = false;
1187
1188    if ((typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "true") && $("input[name='checkBuyBox']:checked").length == 0) {
1189        showError($('#mensagem-erro-buyBox'), "Selecione uma loja.");
1190        if (!attrNaoSelecionado) {
1191            sellerBuyBoxNaoSelecionado = true;
1192        }
1193        attrNaoSelecionado = true;
1194    }
1195
1196    //Se for opção paralela e não tiver nenhum selecionado, apresenta erro e não vai para checkout
1197    if (quantidadeOpcoesParalelas > 1 && quantidadeOpcoesParalelasSelecionadas == 0 && (typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "false")) {
1198        showError($('[id^=mensagem-erro-]', domGrupoSelecaoAtributos), "Selecione um(a) " + attrNome + " do produto.");
1199        attrNaoSelecionado = true;
1200    }
1201
1202    //Se for opção paralela e ter algum selecionado, porém sem quantidade selecionada, apresenta erro e não vai para checkout
1203    if (novoCheckout && quantidadeOpcoesParalelas > 1 && quantidadeOpcoesParalelasSelecionadas > 0) {
1204        for (var i = 0; i < listaParametros.length; i++) {
1205            if (listaParametros[i].Atributos.length > 0 && listaParametros[i].Atributos[0].Valor != "Selecione" && listaParametros[i].Quantidade == 0) {
1206                showError($('[id^=mensagem-erro-]', domGrupoSelecaoAtributos), "Selecione a quantidade do produto.");
1207                attrNaoSelecionado = true;
1208                break;
1209            }
1210        }
1211    }
1212
1213    var objetoParametroComprarProduto = {};                       //Objeto a ser enviado para requisição
1214    objetoParametroComprarProduto.ProdutoId = produtoIdPagina;    //Identificador do produto da página
1215    objetoParametroComprarProduto.StrOpcional = optionString,     //String opcional da DropDownList
1216        objetoParametroComprarProduto.IsAssinatura = IsAssinatura,    //Identificador de assinatura
1217        objetoParametroComprarProduto.DadosProduto = listaParametros,  /*Dados da tela, utilizado para identificar um combo, quantidade e atributos selecionados*/
1218        objetoParametroComprarProduto.attrNaoSelecionado = attrNaoSelecionado, //Identifica que algum atributo não está selecionado
1219        objetoParametroComprarProduto.sellerBuyBoxNaoSelecionado = sellerBuyBoxNaoSelecionado //Identifica se somente está faltando selecionar o buybox
1220
1221    return objetoParametroComprarProduto;
1222}
1223
1224/**
1225* Incluir determinado produto no carrinho.
1226* @method validarItens 
1227*/
1228function comprarProduto(domProdutoItem, redirecionar, clickElement, origem) {
1229
1230    if ($().fancybox && origem == "botaoAdicionar") {
1231        $.fancybox.showActivity();
1232    }
1233
1234    habilitarCompra(false); //Desabilida botões de compra
1235    redirecionar = redirecionar == undefined ? false : redirecionar;
1236
1237    //Busca o elemento qual possui os dados para compra do produto.
1238    var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', domProdutoItem); //Busca elemento principal
1239    if (checkOpcoesSelecionadas(domGrupoSelecaoAtributos)) {
1240        if ($(".divCompreJuntoCarrossel").length > 0) {
1241            comprarProdutoCompreJunto($('[id^="produto-item-"]'), origem);
1242            return habilitarCompra(true);              //Habilita botões de compra
1243        } /*else {
1244                domGrupoSelecaoAtributos = $("#dvGrupoSelecaoAtributos-0");
1245            }*/
1246    }
1247
1248    var produtoIdMKP = 0;
1249    var produtoVarianteIdMKP = 0;
1250
1251    if ((typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "true")) {
1252        var buyBoxProdutoId = $("input[name='checkBuyBox']:checked").data("produtoid");
1253        var buyBoxProdutoVarianteId = $("input[name='checkBuyBox']:checked").val();
1254
1255        if (buyBoxProdutoId != undefined && buyBoxProdutoVarianteId != undefined) {
1256
1257            produtoIdMKP = $("#dvGrupoSelecaoAtributos-0 #hdnProdutoId").val();
1258            produtoVarianteIdMKP = $("#dvGrupoSelecaoAtributos-0 #hdnProdutoVarianteId-0").val();
1259
1260            $("#dvGrupoSelecaoAtributos-0 #hdnProdutoId").val(buyBoxProdutoId);
1261            $("#dvGrupoSelecaoAtributos-0 #hdnProdutoVarianteId-0").val(buyBoxProdutoVarianteId);
1262        }
1263    }
1264
1265    var objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);      //Busca parametros da tela
1266    var objetoParametroComprarServico = buscarServicosTela(clickElement);
1267    objetoParametroComprarProduto.ListaServicos = objetoParametroComprarServico.ListaServicos;
1268    objetoParametroComprarProduto.VerificarServico = objetoParametroComprarServico.VerificarServico;
1269
1270    if (objetoParametroComprarProduto != undefined) {
1271        if (typeof (objetoParametroComprarProduto.DadosProduto) !== 'undefined') {
1272            // remove produtos com ids inválidos retornados pelo método 'buscaParametrosTela' (Acontece apenas em cenário de Compre Junto)
1273            for (var i = objetoParametroComprarProduto.DadosProduto.length - 1; i >= 0; i--) {
1274                if (typeof (objetoParametroComprarProduto.DadosProduto[i].ProdutoVarianteId) === 'undefined') {
1275                    objetoParametroComprarProduto.DadosProduto.splice(i, 1);
1276                }
1277                else if (novoCheckout) {
1278                    //remove opção não selecionada (no caso de opção paralela, estava mandando pro novo checkout uma opção não selecionada)
1279                    var atributosSelecionados = objetoParametroComprarProduto.DadosProduto[i].Atributos.filter(function (atributo) { return atributo.Valor !== 'Selecione' });
1280                    if (objetoParametroComprarProduto.DadosProduto[i].Atributos.length > 0 && atributosSelecionados.length !== objetoParametroComprarProduto.DadosProduto[i].Atributos.length) {
1281                        objetoParametroComprarProduto.DadosProduto.splice(i, 1);
1282                    }
1283                }
1284            }
1285        }
1286
1287        if ((typeof isBuyBox !== 'undefined' && isBuyBox.toLocaleLowerCase() == "true") && produtoIdMKP > 0) {
1288            $("#dvGrupoSelecaoAtributos-0 #hdnProdutoId").val(produtoIdMKP);
1289            $("#dvGrupoSelecaoAtributos-0 #hdnProdutoVarianteId-0").val(produtoVarianteIdMKP);
1290        }
1291
1292        if (novoCheckout && !objetoParametroComprarProduto.attrNaoSelecionado) {
1293            comprarProdutoRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, redirecionar, origem); //Realiza a requisição para comprar o produto
1294        }
1295        else if (!novoCheckout) {
1296            comprarProdutoRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, redirecionar, origem); //Realiza a requisição para comprar o produto
1297        }
1298        else if (novoCheckout && objetoParametroComprarProduto.attrNaoSelecionado) {
1299            $.fancybox.hideActivity();
1300        }
1301    }
1302
1303    habilitarCompra(true);              //Habilita botões de compra
1304}
1305
1306/**
1307* Função responsável por enviar a requisição de compra do produto para o server.
1308*/
1309function comprarProdutoRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, origem) {
1310    var parametroCompraProduto = JSON.stringify(objetoParametroComprarProduto); //Transforma o objeto no tipo JSON.
1311    var urlCompraProduto = fbits.ecommerce.urlEcommerce; //Url para compra de produtos.
1312
1313
1314    if (Fbits.Evento.TemEventoAtivo && Fbits.Evento.Perfil === "Dono") {
1315        // caso aja evento ativo deverá ser encaminhado para "/Produto/Comprar" 
1316        urlCompraProduto = fbits.ecommerce.urlEcommerce;
1317    }
1318    else if (typeof (ListaDeDesejosCheckout) !== 'undefined' || novoCheckout) {
1319        urlCompraProduto = fbits.ecommerce.urlCarrinho;
1320    }
1321
1322
1323    var _compraProduto = function () {
1324        $.ajax({
1325            type: 'POST',
1326            url: urlCompraProduto + 'Produto/ComprarProduto',
1327            data: parametroCompraProduto,
1328            async: false,
1329            contentType: 'application/json; charset=utf-8',
1330            dataType: 'json',
1331            xhrFields: { withCredentials: novoCheckout },
1332            success: function (data) {
1333                if (Fbits.Evento.TemEventoAtivo && Fbits.Evento.Perfil == "Dono" && data.resultadoCompra.StatusRequisicao === 0 && (data.resultadoCompra.Mensagem == "" || data.resultadoCompra.Mensagem == null)) {
1334                    if ($().fancybox) {
1335                        $.fancybox('<div class="retornoVinculoEvento">' +
1336                            '<div class="evento-modal" >' +
1337                            '<div class="evento-modal_header">' +
1338                            '<div class="tray-r">' +
1339                            '<div class="tray-c-3">' +
1340                            '<img src="' + Fbits.Produto.FotoPrincipal + '" width="100" height="auto">' +
1341                            '</div>' +
1342                            ' <div class="tray-c-9">' +
1343                            '<h3 class="evento-modal_title">' + Fbits.Produto.Nome + '</h3>' +
1344                            '</div>' +
1345                            '</div>' +
1346                            '</div>' +
1347                            '<div class="tray-r">' +
1348                            '<div class="mg-t-50 pd-t-30 mg-b-50">' +
1349                            '<p>' +
1350                            'Produto foi adicionado ao seu evento com sucesso! <br/> ' +
1351                            'Continue adicionando produtos ao seu evento.' +
1352                            '</p>' +
1353                            '</div>' +
1354                            '</div>' +
1355                            '</div>' +
1356                            '</div>'
1357                        );
1358                        if ($("[id^=produto-comprar-]").first().find("a").length > 0)
1359                            $("[id^=produto-comprar-]").first().find("a").text("Produto já adicionado a lista");
1360                    }
1361                } else {
1362                    if (novoCheckout) {
1363                        //Se for novo checkout, verifica o products para validar quantidade selecionada e estoque disponível
1364                        var redirecionar = data.redirecionar;
1365                        $.ajax({
1366                            type: 'GET',
1367                            url: fbits.ecommerce.urlEcommerce + "Produto/GetDadosProdutoFromProducts/",
1368                            data: { produtoVarianteId: objetoParametroComprarProduto.DadosProduto[0].ProdutoVarianteId },
1369                            contentType: 'application/json; charset=utf-8',
1370                            dataType: 'json',
1371                            success: function (dataProducts) {
1372                                if (dataProducts.retorno != null && dataProducts.retorno != undefined) {
1373                                    var retorno = jQuery.parseJSON(dataProducts.retorno);
1374                                    if (retorno != null && retorno != undefined && retorno.EstoqueFisico != undefined && retorno.EstoqueFisico != null) {
1375                                        //url http://localhost:51189/api/produtovariante/padrao?Ids=301
1376                                        //var estoqueFisico = retorno[0].Estoque[0].EstoqueFisiso;
1377                                        //var estoqueReservado = retorno[0].Estoque[0].EstoqueReservado;
1378                                        //url http://localhost:51189/api/produtovariante/padrao/estoque/301
1379                                        var estoqueFisico = retorno.EstoqueFisico != undefined ? retorno.EstoqueFisico : 0;
1380                                        var estoqueReservado = retorno.EstoqueReservado != undefined ? retorno.EstoqueReservado : 0;
1381                                        var estoqueAtual = estoqueFisico - estoqueReservado;
1382                                        var quantidadeSelecionada = parseInt(objetoParametroComprarProduto.DadosProduto[0].Quantidade, 10) != undefined ? parseInt(objetoParametroComprarProduto.DadosProduto[0].Quantidade, 10) : 0;
1383                                        if (estoqueAtual < quantidadeSelecionada) {
1384                                            redirecionar = false;
1385                                            data.resultadoCompra.Mensagem = "Não foi possível atender a quantidade solicitada, existem apenas " + estoqueAtual + " unidades disponíveis.";
1386                                            data.resultadoCompra.StatusRequisicao = 1;
1387                                        }
1388                                    }
1389
1390                                }
1391                                //return redirecionar;
1392                            },
1393                            error: function (jqXHR, textStatus, errorThrown) {
1394                                personalizacaoPendente = false;
1395                                console.log(jqXHR);
1396                                console.log(textStatus);
1397                                console.log(errorThrown);
1398                                resolveResultadoComprar(data, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, objetoParametroComprarProduto, origem);
1399                            }
1400
1401                        }).done(function (dataProducts) {
1402                            data.redirecionar = redirecionar;
1403                            resolveResultadoComprar(data, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, objetoParametroComprarProduto, origem);
1404                        }).fail(function () {
1405                            resolveResultadoComprar(data, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, objetoParametroComprarProduto, origem);
1406                        });
1407
1408                    } else {
1409                        resolveResultadoComprar(data, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, objetoParametroComprarProduto, origem);
1410                    }
1411
1412
1413                }
1414            }
1415        });
1416    }
1417
1418    if (novoCheckout) {
1419        $.ajax({
1420            url: fbits.ecommerce.urlCarrinho + 'api/carrinho/',
1421            xhrFields: {
1422                withCredentials: true
1423            },
1424            crossDomain: true,
1425            success: function (carrinho) {
1426
1427                var guidParceiro = Fbits.Framework.Cookie.getCookie("Parceiro");
1428                if (guidParceiro != undefined && guidParceiro != null && guidParceiro != "") {
1429
1430                    var dataParceiro = {
1431                        carrinhoId: carrinho.Id,
1432                        Parceiro: guidParceiro
1433                    };
1434
1435                    var nomeCliente = fbits.ecommerce.nomeModificado;
1436                    nomeCliente = (nomeCliente.split(' ').join('')).toLowerCase();
1437
1438                    $.ajax({
1439                        type: 'POST',
1440                        async: false,
1441                        url: "https://parceiros-pub.fbits.net/parceiros/" + nomeCliente + "/encrypt/carrinho",
1442                        contentType: 'application/json',
1443                        data: JSON.stringify(dataParceiro),
1444                        async: false,
1445                        success: function (dataParceiroResponse) {
1446                            if (dataParceiroResponse) {
1447                                console.log("Parceiro vinculado com sucesso!");
1448                            }
1449                        }
1450                    });
1451                }
1452
1453                //var temPersonalizacao = Boolean($('.produto-personalizacao').find("[id^='txt-personalizacao']").val());
1454                //if (temPersonalizacao) {
1455                //    var qtdeProdutos = parseInt($('[id^="item-quantidade"]').val());
1456                //    var obj = {
1457                //        carrinhoId: carrinho.Id,
1458                //        prodComPersonalizacoes: Array.apply(null, new Array(qtdeProdutos)).map(function () {
1459                //            return {
1460                //                produtoId: objetoParametroComprarProduto.ProdutoId,
1461                //                produtoVarianteId: objetoParametroComprarProduto.DadosProduto[0].ProdutoVarianteId,
1462                //                personalizacoes: objetoParametroComprarProduto.DadosProduto[0].ListaPersonalizacoes.map(function (x) {
1463                //                    return { personalizacaoId: x.GrupoPersonalizacaoDetalheId, valor: x.Personalizacao };
1464                //                })
1465                //            }
1466                //        }).reduce((acc, val) => acc.concat(val), [])
1467                //    }
1468                //}
1469
1470                ////se tem personalização faz request
1471                //if (temPersonalizacao && obj.prodComPersonalizacoes[0].personalizacoes.length) {
1472
1473                var aux = [];
1474                var produtosComPersonalizacao = objetoParametroComprarProduto.DadosProduto.filter(dp => dp.ListaPersonalizacoes.length > 0);
1475                var temPersonalizacao = produtosComPersonalizacao.length > 0;
1476
1477                // Se existem produtos com itens na ListaPersonalizacoes montamos o objeto para enviar para o custom
1478                if (objetoParametroComprarProduto.DadosProduto.map(function (dp) { return dp.ListaPersonalizacoes }).length > 0) {
1479                    var produtosPersonalizados = [];
1480                    for (var i = 0; i < objetoParametroComprarProduto.DadosProduto.length; i++) {
1481                        var produtoPersonalizado = {
1482                            produtoId: objetoParametroComprarProduto.ProdutoId,
1483                            produtoVarianteId: objetoParametroComprarProduto.DadosProduto[i].ProdutoVarianteId,
1484                            personalizacoes: objetoParametroComprarProduto.DadosProduto[i].ListaPersonalizacoes.map(function (p, key) { return aux[key] = { personalizacaoId: p.GrupoPersonalizacaoDetalheId, valor: p.Personalizacao } })
1485                        };
1486
1487                        // Adicionamos na lista de acordo com a quantidade de produtos
1488                        for (var ii = 0; ii < objetoParametroComprarProduto.DadosProduto[i].Quantidade; ii++) {
1489                            produtosPersonalizados.push(produtoPersonalizado);
1490                        }
1491
1492                    }
1493
1494                    var obj = {
1495                        carrinhoId: carrinho.Id,
1496                        prodComPersonalizacoes: produtosPersonalizados
1497                    }
1498                }
1499
1500                //se tem personalização faz request
1501                if (temPersonalizacao) {
1502                    if (!personalizacaoPendente) {
1503                        personalizacaoPendente = true;
1504                        $.ajax({
1505                            type: 'POST',
1506                            url: fbits.ecommerce.urlCustom + '/list',
1507                            contentType: 'application/json',
1508                            data: JSON.stringify(obj),
1509                            success: _compraProduto,
1510                            error: function (ex) {
1511                                personalizacaoPendente = false;
1512                                $('div.produto-personalizacao').first().append('<div class="erro-personalizacao" data-error="true">Ops! Houve um problema ao personalizar!</div>');
1513                                setTimeout(function () {
1514                                    $('div.produto-personalizacao div[data-error]').remove();
1515                                }, 4000);
1516                            }
1517                        });
1518                    }
1519                } else {
1520                    _compraProduto();
1521                }
1522            }
1523        });
1524    } else {
1525        _compraProduto();
1526    }
1527}
1528
1529function resolveResultadoComprar(data, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho, objetoParametroComprarProduto, origem) {
1530
1531    var removerItensComSucesso = false;
1532
1533    if (data.redirecionar) { //Remove ou não os itens
1534        removerItensComSucesso = true;
1535    }
1536
1537    tratarResultadoCompraProduto(data.resultadoCompra, domGrupoSelecaoAtributos, removerItensComSucesso); //Trata sucesso e erros da requisição
1538
1539    if (data.resultadoCompra.AbrirModal && data.urlRedirecionar) {
1540        $.get(data.urlRedirecionar, function (data) {
1541            if ($().fancybox) {
1542                var a = $.fancybox(data);
1543                $('[id^=produto-botao-comprar-]').unbind('click');
1544                $('[id^=produto-botao-comprar-]').bind('click', function () {
1545                    comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
1546                });
1547            }
1548
1549            $('[id^="tb-servico-item-"]').click(function (event) {
1550                if ($(this).find('input[id^="radio-sem-servico-"]').length > 0) {
1551                    $(this).find('input[id^="radio-sem-servico-"]').prop('checked', true);
1552                    atualizarServico($(this).find('input[id^="radio-sem-servico-"]'));
1553                }
1554                else if ($(this).find('input[id^="radio-servico-"]').length > 0) {
1555                    $(this).find('input[id^="radio-servico-"]').prop('checked', true);
1556                    atualizarServico($(this).find('input[id^="radio-servico-"]'));
1557                }
1558            });
1559        });
1560    }
1561    else if (data.redirecionar && enviarUsuarioAoCarrinho) { //Redireciona o usuário para o carrinho
1562        if (origem == "botaoComprar") {
1563            location.href = data.urlRedirecionar;
1564        } else if (origem == "botaoAdicionar") {
1565            personalizacaoPendente = false;
1566            $.ajax({
1567                type: 'POST',
1568                url: fbits.ecommerce.urlEcommerce + 'Produto/ModalConfirmacaoProduto',
1569                data: { produtoId: objetoParametroComprarProduto.ProdutoId },
1570                success: function (data) {
1571                    if ($().fancybox) {
1572                        if (novoCheckout) {
1573                            $.ajax({
1574                                type: "GET",
1575                                url: fbits.ecommerce.urlCarrinho + "/api/carrinho?cache=false",
1576                                xhrFields: { withCredentials: true },
1577                                success: function (dataCheckout) {
1578                                    var total = 0
1579                                    var tipoItem = "item"
1580                                    for (var i = 0, _len = dataCheckout.Produtos.length; i < _len; i++) {
1581                                        total += dataCheckout.Produtos[i].Quantidade
1582                                    }
1583
1584                                    tipoItem = total > 1 ? "itens" : "item";
1585
1586                                    var modal = data.dados.replace('<span class="qtdaModalItensCesta">0</span>', '<span class="qtdaModalItensCesta">' + total + '</span>');
1587                                    modal = modal.replace('<span class="itensModalItensCesta">item</span>', '<span class="itensModalItensCesta">' + tipoItem + '</span>');
1588
1589                                    $.fancybox(modal)
1590                                },
1591                                crossDomain: true
1592                            });
1593                        } else {
1594                            $.fancybox(data.dados);
1595                        }
1596                    }
1597                }
1598            });
1599
1600        }
1601    }
1602    else {
1603        personalizacaoPendente = false;
1604        if ($().fancybox && origem == "botaoAdicionar") {
1605            $.fancybox.hideActivity();
1606        }
1607
1608        //Mostra mensagens para o usuario
1609        $('html, body').animate({
1610            //scrollTop: $(this.domGrupoSelecaoAtributos).offset().top - 70
1611            scrollTop: $(".produtoInfo").offset().top
1612        }, 'slow');
1613    }
1614
1615
1616}
1617
1618/**
1619* Função responsável por enviar a requisição de compra do produto para o server.
1620*/
1621function comprarProdutoAssinaturaRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho) {
1622
1623    var parametroCompraProduto = JSON.stringify(objetoParametroComprarProduto); //Transforma o objeto no tipo JSON.
1624    var urlCompraProduto = '/Produto/ComprarProdutoAssinatura';             //Url para compra de produtos.
1625
1626    //Realiza a requisição ajax
1627    $.ajax({
1628        type: 'POST',
1629        url: urlCompraProduto,
1630        data: parametroCompraProduto,
1631        contentType: 'application/json; charset=utf-8',
1632        dataType: 'json',
1633        context: { domGrupoSelecaoAtributos: domGrupoSelecaoAtributos, enviarUsuarioAoCarrinho: enviarUsuarioAoCarrinho },
1634        success: function (data) {
1635            var removerItensComSucesso = false;
1636
1637            if (data.redirecionar) { //Remove ou não os itens
1638                removerItensComSucesso = true;
1639            }
1640
1641            tratarResultadoCompraProduto(data.resultadoCompra, this.domGrupoSelecaoAtributos, removerItensComSucesso); //Trata sucesso e erros da requisição
1642
1643            if (data.resultadoCompra.AbrirModal && data.urlRedirecionar) {
1644                $.get(data.urlRedirecionar, function (data) {
1645                    if ($().fancybox) {
1646                        var a = $.fancybox(data);
1647                        $('[id^=produto-assinatura-botao-comprar-]').unbind('click');
1648                        $('[id^=produto-assinatura-botao-comprar-]').bind('click', function () {
1649                            if (novoCheckout) {
1650                                if (vincularAssinaturaRecorrencia) {
1651                                    vincularAssinaturaRecorrencia();
1652                                }
1653                                comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this), "botaoComprar");
1654                                return;
1655                            } else {
1656                                comprarProduto($(this).parents('[id^="produto-item-"]'), true, $(this));
1657                            }
1658                        });
1659                    }
1660                    $('table[id^="tb-servico-item-"]').click(function (event) {
1661                        $(event.srcElement).parents('table').find('input[id^="radio-servico-"]').click();
1662                        if ($(event.srcElement).parents('table').find('input[id^="radio-servico-"]')) atualizarServico($(event.srcElement).parents('table').find('input[id^="radio-servico-"]'));
1663                    });
1664                });
1665            }
1666            else if (data.redirecionar && this.enviarUsuarioAoCarrinho) { //Redireciona o usuário para o carrinho
1667                location.href = data.urlRedirecionar;
1668            }
1669            else {
1670                //Mostra mensagens para o usuario
1671                $('html, body').animate({
1672                    scrollTop: $(this.domGrupoSelecaoAtributos).offset().top - 70
1673                }, 'slow');
1674            }
1675        }
1676    });
1677}
1678
1679// Compra todos os produtos selecionados na tela
1680function comprarProdutoCompreJunto(domListaProdutoItens, origem) {
1681    /*habilitarCompra(false); //Desabilida botões de compra
1682
1683    var domGrupoSelecaoAtributos = {};
1684    var listaParametros = [];
1685    var objetoParametroComprarProduto = {};
1686    var atributosSelecionados = true;
1687    var IdSeletor = 0;
1688    $(domListaProdutoItens).each(function (contador, produtoItem) {
1689        //Busca o elemento qual possui os dados para compra do produto.
1690        if ($(produtoItem).find("[id^=Adicionar-ProdutoId]").length == 1 && !$(produtoItem).hasClass("detalhe-produto-itens")) {
1691            if ($(produtoItem).find("[id^=Adicionar-ProdutoId]").is(":checked") == false)
1692                return;
1693            else
1694                IdSeletor = produtoItem.id.split("-").pop(-1);
1695        }
1696        if ($(produtoItem).parents("#divGruposProdutoRecomendado").length == 1)
1697            return;
1698
1699        domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-' + IdSeletor + '"]');  //Busca elemento principal
1700        checkOpcoesSelecionadas(domGrupoSelecaoAtributos); //Verifica a quantidade, utilizada para validar os combos
1701
1702        objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);     //Busca parametros da tela
1703
1704        if (objetoParametroComprarProduto != null) //Adiciona o objeto com os dados da tela na lista
1705            listaParametros.push(objetoParametroComprarProduto);
1706
1707    });
1708
1709    if (listaParametros.length > 0)
1710        comprarProdutoTodosRequest(listaParametros); //Realiza a requisição para comprar o produto
1711
1712    habilitarCompra(true); //Habilita botões de compra*/
1713
1714    habilitarCompra(false); //Desabilida botões de compra
1715
1716
1717    var domGrupoSelecaoAtributos = {};
1718    var listaParametros = [];
1719    var objetoParametroComprarProduto = {};
1720    var atributosSelecionados = true;
1721    var IdSeletor = 0;
1722
1723    $(domListaProdutoItens).each(function (contador, produtoItem) {
1724        //Busca o elemento qual possui os dados para compra do produto.
1725        if ($(produtoItem).find("[id^=Adicionar-ProdutoId]").length == 1 && !$(produtoItem).hasClass("detalhe-produto-itens")) {
1726            if ($(produtoItem).find("[id^=Adicionar-ProdutoId]").is(":checked") == false)
1727                return;
1728            else
1729                IdSeletor = produtoItem.id.split("-").pop(-1);
1730        }
1731        if ($(produtoItem).parents("#divGruposProdutoRecomendado").length == 1)
1732            return;
1733
1734        domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-' + IdSeletor + '"]');  //Busca elemento principal
1735        checkOpcoesSelecionadas(domGrupoSelecaoAtributos); //Verifica a quantidade, utilizada para validar os combos
1736
1737        objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);     //Busca parametros da tela
1738
1739        if (objetoParametroComprarProduto != null) { //Adiciona o objeto com os dados da tela na lista
1740            if (objetoParametroComprarProduto.attrNaoSelecionado) {
1741                atributosSelecionados = false;
1742                return;
1743            }
1744
1745            listaParametros.push(objetoParametroComprarProduto);
1746        }
1747    });
1748
1749    if (novoCheckout && objetoParametroComprarProduto.attrNaoSelecionado) {
1750        $.fancybox.hideActivity();
1751        return;
1752    }
1753
1754    var _compraProdutoJuntosPersonalizacao = function () {
1755        if (listaParametros.length > 0 && atributosSelecionados)
1756            comprarProdutoTodosRequest(listaParametros, origem); //Realiza a requisição para comprar o produto
1757
1758        habilitarCompra(true); //Habilita botões de compra
1759    }
1760
1761    if (novoCheckout) {
1762        $.ajax({
1763            url: fbits.ecommerce.urlCarrinho + 'api/carrinho/',
1764            xhrFields: {
1765                withCredentials: true
1766            },
1767            crossDomain: true,
1768            success: function (carrinho) {
1769
1770                var guidParceiro = Fbits.Framework.Cookie.getCookie("Parceiro");
1771                if (guidParceiro != undefined && guidParceiro != null && guidParceiro != "") {
1772
1773                    var dataParceiro = {
1774                        carrinhoId: carrinho.Id,
1775                        Parceiro: guidParceiro
1776                    };
1777
1778                    $.ajax({
1779                        type: 'POST',
1780                        async: false,
1781                        url: "https://parceiros-pub.fbits.net/parceiros/" + (fbits.ecommerce.nome.replace(" ", "")).toLowerCase() + "/encrypt/carrinho",
1782                        contentType: 'application/json',
1783                        data: JSON.stringify(dataParceiro),
1784                        success: function (dataParceiroResponse) {
1785                            if (dataParceiroResponse) {
1786                                console.log("Parceiro vinculado com sucesso!");
1787                            }
1788                        }
1789                    });
1790                }
1791
1792                if (listaParametros.length > 0) {
1793                    var aux = {};
1794                    var produtos = [];
1795                    var hasPersonalizacao = false;
1796                    var qtdeProdutos = 0;
1797                    var produtosPersonalizados = [];
1798                    var aux2 = [];
1799
1800                    $("[id^='produto-item']").each(function () {
1801
1802                        var textPersonalizacao = "";
1803
1804                        if ($(this).find("[id^='txt-personalizacao']").length > 0)
1805                            textPersonalizacao = String($(this).find("[id^='txt-personalizacao']").val());
1806                        else if ($(this).find("[id^='ddl-personalizacao-']").length > 0)
1807                            textPersonalizacao = String($(this).find("[id^='ddl-personalizacao-']").val());
1808
1809                        if (textPersonalizacao !== undefined && textPersonalizacao !== "undefined" && textPersonalizacao !== '') {
1810                            hasPersonalizacao = true;
1811                            // Se existem produtos com itens na ListaPersonalizacoes montamos o objeto para enviar para o custom
1812                            if (objetoParametroComprarProduto.DadosProduto.map(function (dp) {
1813                                return dp.ListaPersonalizacoes
1814                            }).length > 0) {
1815
1816                                for (var a = 0; a < listaParametros.length; a++) {
1817                                    for (var i = 0; i < listaParametros[a].DadosProduto.length; i++) {
1818                                        var produtoPersonalizado = {
1819                                            produtoId: listaParametros[a].ProdutoId,
1820                                            produtoVarianteId: listaParametros[a].DadosProduto[i].ProdutoVarianteId,
1821                                            personalizacoes: listaParametros[a].DadosProduto[i].ListaPersonalizacoes.map(function (p, key) {
1822                                                return aux2[key] = {
1823                                                    personalizacaoId: p.GrupoPersonalizacaoDetalheId,
1824                                                    valor: p.Personalizacao
1825                                                }
1826                                            })
1827                                        };
1828
1829                                        // Adicionamos na lista de acordo com a quantidade de produtos
1830                                        for (var ii = 0; ii < listaParametros[a].DadosProduto[i].Quantidade; ii++) {
1831                                            if (produtoPersonalizado.produtoId != null && produtoPersonalizado.produtoVarianteId != null) {
1832                                                produtosPersonalizados.push(produtoPersonalizado);
1833                                            }
1834                                        }
1835
1836                                    }
1837                                }
1838                            }
1839                        }
1840                    });
1841
1842                    var obj = {
1843                        carrinhoId: carrinho.Id,
1844                        prodComPersonalizacoes: produtosPersonalizados
1845                    }
1846                }
1847
1848                if (hasPersonalizacao) {
1849                    $.ajax({
1850                        type: 'POST',
1851                        url: fbits.ecommerce.urlCustom + '/list',
1852                        contentType: 'application/json',
1853                        data: JSON.stringify(obj),
1854                        success: _compraProdutoJuntosPersonalizacao,
1855                        error: function (ex) {
1856                            $('#divCompreJunto').first().append('<div class="erro-personalizacao" data-error="true">Ops! Houve um problema ao personalizar!</div>');
1857                            setTimeout(function () {
1858                                $('#divCompreJunto div[data-error]').remove();
1859                            }, 4000);
1860                        }
1861                    });
1862                } else {
1863                    _compraProdutoJuntosPersonalizacao();
1864                }
1865            }
1866        });
1867    } else {
1868        _compraProdutoJuntosPersonalizacao();
1869    }
1870}
1871
1872/**
1873* Incluir uma lista de produtos no carrinho.
1874* @method validarItens 
1875*/
1876function comprarProdutoTodos(domListaProdutoItens) {
1877    habilitarCompra(false); //Desabilida botões de compra
1878
1879    var domGrupoSelecaoAtributos = {};
1880    var listaParametros = [];
1881    var objetoParametroComprarProduto = {};
1882    var atributosSelecionados = true;
1883    $(domListaProdutoItens).each(function (contador, produtoItem) {
1884        if (!produtoItem.parentElement.id.includes("produto-dados-variante-")) {
1885            //Busca o elemento qual possui os dados para compra do produto.
1886            domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', produtoItem);  //Busca elemento principal
1887            checkOpcoesSelecionadas(domGrupoSelecaoAtributos); //Verifica a quantidade, utilizada para validar os combos
1888
1889            objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);     //Busca parametros da tela
1890
1891            if (objetoParametroComprarProduto != null) //Adiciona o objeto com os dados da tela na lista
1892                listaParametros.push(objetoParametroComprarProduto);
1893        }
1894
1895    });
1896
1897    if ($.grep(listaParametros, function (dados) { return dados.attrNaoSelecionado; }).length > 0) {
1898        habilitarCompra(true);
1899        return;
1900    }
1901
1902    if (listaParametros.length > 0)
1903        comprarProdutoTodosRequest(listaParametros, 'botaoComprar'); //Realiza a requisição para comprar o produto
1904
1905    habilitarCompra(true); //Habilita botões de compra
1906}
1907
1908/**
1909* Função responsável por enviar a requisição de compra do produto para o server.
1910*/
1911function comprarProdutoTodosRequest(listaObjetoParametroComprarProduto, origem) {
1912    var listaParametroCompraProduto = JSON.stringify(listaObjetoParametroComprarProduto); //Transforma o objeto no tipo JSON.
1913    var urlCompraProduto = (novoCheckout ? fbits.ecommerce.urlCarrinho : fbits.ecommerce.urlEcommerce) + '/Produto/ComprarProdutoTodos';                  //Url para compra de produtos.
1914
1915    if (typeof (ListaDeDesejosCheckout) != 'undefined') {
1916        urlCompraProduto = fbits.ecommerce.urlCarrinho + 'Produto/ComprarProdutoTodos'
1917    }
1918
1919    //Realiza a requisição ajax
1920    $.ajax({
1921        type: 'POST',
1922        url: urlCompraProduto,
1923        data: listaParametroCompraProduto,
1924        contentType: 'application/json; charset=utf-8',
1925        dataType: 'json',
1926        xhrFields: { withCredentials: novoCheckout },
1927        success: function (data) {
1928            tratarResultadoCompraProdutoTodos(data.resultadoCompra, data.redirecionar, origem); //Trata sucesso e erros da requisição
1929        }
1930    });
1931}
1932
1933/**
1934* Habilita ou desabilita elementos de inclusão do produto no carrinho
1935* @param halibitar 
1936*     true habilita elementos.
1937*     false desabilita elementos. 
1938* caso seja diferente desabilita os elementos
1939*/
1940function habilitarCompra(halibitar) {
1941    if (halibitar) { //Habilita o botão comprar e esconde a div de carregando.
1942        $('input[id^=comprar-]').removeAttr('disabled');
1943        $('input[id^=carrinho-comprar]').removeAttr('disabled');
1944        $('input[id=todos-comprar]').removeAttr('disabled');
1945        $('input[id^=um-clique-comprar-]').removeAttr('disabled');
1946        $('[id^=spot-comprar-]').removeAttr('disabled');
1947    } else { //Desabilita o botão para evitar varios cliques
1948        $('input[id^=comprar-]').attr('disabled', 'disabled');
1949        $('input[id^=carrinho-comprar]').attr('disabled', 'disabled');
1950        $('input[id=todos-comprar]').attr('disabled', 'disabled');
1951        $('input[id^=um-clique-comprar-]').attr('disabled', 'disabled');
1952        $('[id^=spot-comprar-]').attr('disabled', 'disabled');
1953    }
1954}
1955
1956/**
1957* Função responsável por tratar o resultado da compra de produto.
1958* @param data Dados da resposta da requisição.
1959* @param domGrupoSelecaoAtributos elemento DOM o qual comtem os dados do determinado produto.
1960*/
1961function tratarResultadoCompraProduto(data, domGrupoSelecaoAtributos, removerItem) {
1962    if (domGrupoSelecaoAtributos != undefined) { //Vefica a existencia do grupo de seleção de atributos
1963        var produtoItem = $(domGrupoSelecaoAtributos).parents('[id^=produto-item-]'); //Busca os dados do item
1964        removerItem = (removerItem == undefined) ? true : removerItem;
1965
1966        if (data.StatusRequisicao == 0 && produtoItem != undefined) //Produto comprado com sucesso
1967        {
1968            $(produtoItem).addClass("itemEnabled");
1969            if (removerItem) {
1970                $('input[id^="produto-remover-"]', produtoItem).trigger('click'); //Chama o evento de remover do botão
1971            }
1972            atualizarResumoCarrinho();
1973        }
1974        else //Trata erros
1975        {
1976            //Seta as mensagens de erro.
1977            //$('[id^="divOpcoes-"]').each(function () {
1978            //  hideErrors();
1979            //});
1980
1981            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(''); //Limpa mensagens de erro
1982            var index = data.indexOpcoes == undefined || data.indexOpcoes < 0 ? 0 : data.indexOpcoes; //Checa o index do produto a receber a mensagem
1983            //$('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(data.Mensagem); //Seta mensagem
1984            $(produtoItem).addClass("itemDisabled");
1985            $('[id="produto-legenda"]').removeClass('displayNone').addClass('displayBlock');
1986
1987
1988            if (data.erroIndex >= 0) {
1989                //domGrupoSelecaoAtributos.find('#divOpcoes-' + data.erroIndex).find('.erro').html();
1990                showError(domGrupoSelecaoAtributos.find('#divOpcoes-' + data.erroIndex).find('[id^="' + labelErroPartialId + '"]'), data.Mensagem)
1991            }
1992            else {
1993                if (data.Mensagem != "") {
1994                    showError($('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos), data.Mensagem)
1995                }
1996                else {
1997                    $('[id^="divOpcoes-"]').each(function () {
1998                        showError($(this).find('[id^="' + labelErroPartialId + '"]'), data.Mensagem);
1999                    });
2000                }
2001            }
2002
2003        }
2004    }
2005}
2006
2007/**
2008* Função responsável por tratar o resultado da compra de produto (quando existem múltiplos produtos na página).
2009* @param data Dados da resposta da requisição.
2010* @param domGrupoSelecaoAtributos elemento DOM o qual comtem os dados do determinado produto.
2011*/
2012function tratarResultadoCompraProduto2(data, domGrupoSelecaoAtributos, removerItem) {
2013    if (domGrupoSelecaoAtributos != undefined) { //Vefica a existencia do grupo de seleção de atributos
2014        var produtoItem = $(domGrupoSelecaoAtributos).parents('[id^=produto-item-]');
2014 //Busca os dados do item
2015        removerItem = (removerItem == undefined) ? true : removerItem;
2016
2017        if (data.StatusRequisicao == 0 && produtoItem != undefined) //Produto comprado com sucesso
2018        {
2019            $(produtoItem).addClass("itemEnabled");
2020            if (removerItem) {
2021                $('input[id^="produto-remover-"]', produtoItem).trigger('click'); //Chama o evento de remover do botão
2022            }
2023            atualizarResumoCarrinho();
2024        }
2025        else //Trata erros
2026        {
2027            //Seta as mensagens de erro.
2028            $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).html('').fadeOut('slow');
2029            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(''); //Limpa mensagens de erro
2030            var index = data.indexOpcoes == undefined || data.indexOpcoes < 0 ? 0 : data.indexOpcoes; //Checa o index do produto a receber a mensagem
2031            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(data.Mensagem); //Seta mensagem
2032            $(produtoItem).addClass("itemDisabled");
2033            $('[id="produto-legenda"]').removeClass('displayNone').addClass('displayBlock');
2034
2035            if (data.erroIndex >= 0) {
2036                domGrupoSelecaoAtributos.find('#divOpcoes-' + data.erroIndex).find('[id^="' + labelErroPartialId + '"]').stop().html(data.msgErro).fadeTo('slow', 1.0).delay(7000).fadeOut('slow');
2037            }
2038            else {
2039                if (data.Mensagem != "") {
2040                    if ($(domGrupoSelecaoAtributos).parents('div[id^="divCompreJunto"]').length > 0) {
2041                        $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).stop().html(data.msgErro).focus();
2042                    } else {
2043                        $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).stop().html(data.msgErro).fadeTo("slow", 1).delay(7000).fadeOut("slow")
2044                    }
2045                }
2046                else {
2047                    $('[id^="divOpcoes-"]').each(function () {
2048                        $(this).find('[id^="' + labelErroPartialId + '"]').stop().html(data.msgErro).fadeTo('slow', 1.0).delay(7000).fadeOut('slow');
2049                    });
2050                }
2051            }
2052        }
2053    }
2054}
2055
2056/**
2057* Função responsável por tratar o resultado da compra de um conjunto de produtos.
2058* @param data Dados da resposta da requisição.
2059*/
2060function tratarResultadoCompraProdutoTodos(data, redirecionar, origem) {
2061    //Variaveis
2062    var domGrupoSelecaoAtributos = {};
2063    var redirecionar = (redirecionar == undefined) ? false : redirecionar;
2064    var removerItensComSucesso = false;
2065    var isCompreJunto = ($("#divCompreJunto").length > 0);
2066    if (redirecionar) { //Remove ou não os itens
2067        removerItensComSucesso = true;
2068    }
2069
2070    if (window.location.href.toLowerCase().indexOf("listadedesejos") > -1) {
2071        $.each($('div[id^="dvGrupoSelecaoAtributos-"]', '[id^="produto-item-"]'), function (index, value) {
2072            //console.log(value)
2073            //console.log($('input[id^="produto-remover-"]', $(value).parents('[id^=produto-item-]')));
2074            tratarResultadoCompraProduto2(data, value, removerItensComSucesso);
2075        });
2076    } else {
2077        //Iteração com os itens do retorno
2078        $.each(data, function (index, value) {
2079            if (isCompreJunto)
2080                tratarResultadoComprarCompreJunto(value);
2081            else {
2082                domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', '[id^="produto-item-"]')[index];
2083                tratarResultadoCompraProduto2(value, domGrupoSelecaoAtributos, removerItensComSucesso);
2084            }
2085        });
2086    }
2087
2088    if (origem == "botaoComprar") {
2089        if (redirecionar) { //Redireciona o usuário para o carrinho
2090            location.href = fbits.ecommerce.urlCarrinho;
2091        }
2092        else { //Mostra mensagens para o usuario
2093            if (!isCompreJunto)
2094                $('html, body').animate({ scrollTop: 100 }, 'slow');
2095        }
2096    } else if (origem == "botaoAdicionar") {
2097        $.ajax({
2098            type: 'POST',
2099            url: fbits.ecommerce.urlEcommerce + 'Produto/ModalConfirmacaoProduto',
2100            data: { produtoId: 0 },
2101            success: function (data) {
2102                if ($().fancybox) {
2103                    if (novoCheckout) {
2104                        $.ajax({
2105                            type: "GET",
2106                            url: fbits.ecommerce.urlCarrinho + "/api/carrinho?cache=false",
2107                            xhrFields: { withCredentials: true },
2108                            success: function (dataCheckout) {
2109                                var total = 0
2110                                var tipoItem = "item"
2111                                for (var i = 0, _len = dataCheckout.Produtos.length; i < _len; i++) {
2112                                    total += dataCheckout.Produtos[i].Quantidade
2113                                }
2114
2115                                tipoItem = total > 1 ? "itens" : "item";
2116
2117                                var modal = data.dados.replace('<span class="qtdaModalItensCesta">0</span>', '<span class="qtdaModalItensCesta">' + total + '</span>');
2118                                modal = modal.replace('<span class="itensModalItensCesta">item</span>', '<span class="itensModalItensCesta">' + tipoItem + '</span>');
2119
2120                                $.fancybox(modal)
2121                            },
2122                            crossDomain: true
2123                        });
2124                    } else {
2125                        $.fancybox(data.dados);
2126                    }
2127                }
2128            }
2129        });
2130    }
2131}
2132/*
2133Trata do resultado da compra do componente compre junto
2134*/
2135function tratarResultadoComprarCompreJunto(data) {
2136
2137    if (identificador !== null && identificador !== undefined) {
2138        var identificador = data.IdentificadorDOM.split("-")[0];
2139        var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', '[id ^=produto-item-][id $=' + identificador + ']').first();
2140    }
2141
2142    if (domGrupoSelecaoAtributos != undefined && domGrupoSelecaoAtributos.length > 0) { //Vefica a existencia do grupo de seleção de atributos
2143
2144        if (data.StatusRequisicao == 0) //Produto comprado com sucesso
2145        {
2146            $(domGrupoSelecaoAtributos).addClass("itemEnabled");
2147            atualizarResumoCarrinho();
2148        }
2149        else //Trata erros
2150        {
2151            //Seta as mensagens de erro.
2152            $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).html('').fadeOut('slow');
2153            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(''); //Limpa mensagens de erro
2154            var index = data.indexOpcoes == undefined || data.indexOpcoes < 0 ? 0 : data.indexOpcoes; //Checa o index do produto a receber a mensagem
2155            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(data.Mensagem); //Seta mensagem
2156            $(domGrupoSelecaoAtributos).addClass("itemDisabled");
2157            $('[id="produto-legenda"]').removeClass('displayNone').addClass('displayBlock');
2158
2159            if (data.erroIndex >= 0) {
2160                domGrupoSelecaoAtributos.find('#divOpcoes-' + data.erroIndex).find('[id^="' + labelErroPartialId + '"]').stop().html(data.msgErro).fadeTo('slow', 1.0).delay(7000).fadeOut('slow');
2161            }
2162            else {
2163                if (data.Mensagem != "") {
2164                    if ($(domGrupoSelecaoAtributos).parents('div[id^="divCompreJunto"]').length > 0) {
2165                        var indexSlide = domGrupoSelecaoAtributos.parents(".slick-slide").attr("data-slick-index");
2166                        $('.divCompreJuntoCarrossel').slick('slickGoTo', indexSlide, true);
2167                        $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).stop().html(data.msgErro);
2168                    } else {
2169                        $('[id^="' + labelErroPartialId + '"]', domGrupoSelecaoAtributos).stop().html(data.msgErro).fadeTo("slow", 1).delay(7000).fadeOut("slow")
2170                    }
2171                }
2172                else {
2173                    $('[id^="divOpcoes-"]').each(function () {
2174                        $(this).find('[id^="' + labelErroPartialId + '"]').stop().html(data.msgErro).fadeTo('slow', 1.0).delay(7000).fadeOut('slow');
2175                    });
2176                }
2177            }
2178        }
2179    }
2180}
2181
2182/**
2183* Abre uma modal pop up com os dados do produto a ser comprado.
2184* @method validarItens
2185*/
2186
2187function trataModalProduto(event) {
2188    //var element = document.getElementById(event.context.id);
2189    var element = document.querySelector('[data-produtoId="' + event.context.dataset.produtoid + '"]');
2190    if (element.getAttribute("data-abrirmodal") == 'True') {
2191        if (/Mobi/.test(navigator.userAgent)) {
2192            window.location.href = '/produto/' + event.attr('data-produtoId');
2193        } else {
2194            abrirProdutoModal(event);
2195        }
2196    } else {
2197        if (novoCheckout)
2198            comprarProdutoSpotNovoCarrinho(event);
2199        else
2200            comprarProdutoSpot(event);
2201    }
2202}
2203function abrirProdutoModal(domProdutoItem) {
2204    var produtoId = domProdutoItem.attr('data-produtoId');
2205    var imageElement = domProdutoItem.parents('[id^=produto-spot-item-]').find('[id^=produto-spot-imagem]');
2206    if ($().fancybox) {
2207
2208        $.fancybox.showActivity();
2209    }
2210    $.get('/ProdutoModal/' + produtoId,
2211        function (data) {
2212            if ($().fancybox) {
2213                //Monta a modal 
2214                $.fancybox(data, {
2215                    'showCloseButton': true,
2216                    'onComplete': function () {
2217                        try {
2218                            if (typeof loadFacebookShare == 'function') {
2219                                loadFacebookShare();
2220                                if (typeof FB !== 'undefined') {
2221                                    FB.XFBML.parse($('.shareFacebook')[0]);
2222                                }
2223                            }
2224                            if (typeof loadTwitter == 'function') {
2225                                loadTwitter();
2226                                if (typeof twttr !== 'undefined') {
2227                                    twttr.widgets.load();
2228                                }
2229                            }
2230                            if (typeof loadGooglePlus == 'function') {
2231                                loadGooglePlus();
2232                            }
2233                            if (typeof loadAddThis == 'function') {
2234                                loadAddThis();
2235                            }
2236                        } catch (e) {
2237                            console.log("houve um problema na funçao 'OnComplete' da função abrirProdutoModal()")
2238                        }
2239
2240                    },
2241                    'onClosed': function () {
2242                        removeModalZoomContainer();
2243                    },
2244                    'onCleanup': function () {
2245                        removeModalZoomContainer();
2246                    }
2247                });
2248                //Setamos eventos da modal
2249                adicionaEventosImagensModal();
2250
2251                if (changeEventsSelQuantidade) {
2252                    changeEventsSelQuantidade();
2253                }
2254                //Seta eventos comprar do produto
2255                $('[id^=produto-botao-comprar-]', '[id^=produto-modal-]').unbind('click');
2256                $('[id^=produto-botao-comprar-]', '[id^=produto-modal-]').bind('click', function (event) {
2257                    event.preventDefault();
2258                    comprarProdutoModal($(this).parents('[id^="produto-item-"]'), imageElement);
2259                });
2260            }
2261        }
2262    );
2263
2264}
2265
2266// método para evitar que a div de zoom seja indevidamente removida
2267function removeModalZoomContainer() {
2268    var containers = $(".zoomContainer");
2269    if (typeof containers !== 'undefined') {
2270        var containersCount = containers.length;
2271        if (containersCount > 1) {
2272            var $zoomContainer = $(".zoomContainer")[1];
2273            if (typeof $zoomContainer !== 'undefined') {
2274                $(".zoomContainer")[1].remove();
2275            }
2276        }
2277    }
2278}
2279
2280/**
2281* Incluir determinado produto no carrinho.
2282* @method validarItens 
2283*/
2284function comprarProdutoModal(domProdutoItem, imageElement) {
2285    habilitarCompra(false);
2286    //Busca o elemento qual possui os dados para compra do produto.
2287    var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', domProdutoItem); //Busca elemento principal
2288    if (checkOpcoesSelecionadas(domGrupoSelecaoAtributos)) {
2289        var objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);      //Busca parametros da tela
2290
2291        if (objetoParametroComprarProduto != undefined && objetoParametroComprarProduto.attrNaoSelecionado == false)
2292            comprarProdutoModalRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, imageElement); //Realiza a requisição para comprar o produto
2293    }
2294    habilitarCompra(true);
2295}
2296
2297/**
2298* Função responsável por enviar a requisição de compra do produto para o server.
2299*/
2300function comprarProdutoModalRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, imageElement) {
2301    var parametroCompraProduto = JSON.stringify(objetoParametroComprarProduto); //Transforma o objeto no tipo JSON.
2302    var urlCompraProduto = fbits.ecommerce.urlEcommerce + 'Produto/ComprarProduto';//Url para compra de produtos.
2303
2304    if (Fbits.Evento.TemEventoAtivo && Fbits.Evento.Perfil == "Dono") {
2305        // caso aja evento ativo deverá ser encaminhado para "/Produto/Comprar" 
2306        urlCompraProduto = fbits.ecommerce.urlEcommerce + 'Produto/ComprarProduto';
2307    }
2308    else if (novoCheckout) {
2309        urlCompraProduto = fbits.ecommerce.urlCarrinho + 'Produto/ComprarProduto';
2310    }
2311    //Realiza a requisição ajax
2312    var _compraProduto = function () {
2313        $.ajax({
2314            type: 'POST',
2315            url: urlCompraProduto,
2316            data: parametroCompraProduto,
2317            contentType: 'application/json; charset=utf-8',
2318            dataType: 'json',
2319            xhrFields: { withCredentials: novoCheckout },
2320            context: { domGrupoSelecaoAtributos: domGrupoSelecaoAtributos, imageElement: imageElement },
2321            success: function (data) {
2322                tratarResultadoCompraProdutoModal(data.resultadoCompra, this.domGrupoSelecaoAtributos, this.imageElement); //Trata sucesso e erros da requisição
2323            }
2324        });
2325    };
2326
2327    if (novoCheckout) {
2328        $.ajax({
2329            url: fbits.ecommerce.urlCarrinho + 'api/carrinho/',
2330            xhrFields: {
2331                withCredentials: true
2332            },
2333            crossDomain: true,
2334            success: function (carrinho) {
2335                // vincular personalizações pelo add produto na modal (trecho similar ao do método "comprarProdutoRequest")
2336                var aux = [];
2337                var produtosComPersonalizacao = objetoParametroComprarProduto.DadosProduto.filter(dp => dp.ListaPersonalizacoes.length > 0);
2338                var temPersonalizacao = produtosComPersonalizacao.length > 0;
2339
2340                // Se existem produtos com itens na ListaPersonalizacoes montamos o objeto para enviar para o custom
2341                if (objetoParametroComprarProduto.DadosProduto.map(function (dp) { return dp.ListaPersonalizacoes }).length > 0) {
2342                    var produtosPersonalizados = [];
2343                    for (var i = 0; i < objetoParametroComprarProduto.DadosProduto.length; i++) {
2344                        var produtoPersonalizado = {
2345                            produtoId: objetoParametroComprarProduto.ProdutoId,
2346                            produtoVarianteId: objetoParametroComprarProduto.DadosProduto[i].ProdutoVarianteId,
2347                            personalizacoes: objetoParametroComprarProduto.DadosProduto[i].ListaPersonalizacoes.map(function (p, key) { return aux[key] = { personalizacaoId: p.GrupoPersonalizacaoDetalheId, valor: p.Personalizacao } })
2348                        };
2349
2350                        // Adicionamos na lista de acordo com a quantidade de produtos
2351                        for (var ii = 0; ii < objetoParametroComprarProduto.DadosProduto[i].Quantidade; ii++) {
2352                            produtosPersonalizados.push(produtoPersonalizado);
2353                        }
2354                    }
2355
2356                    var obj = {
2357                        carrinhoId: carrinho.Id,
2358                        prodComPersonalizacoes: produtosPersonalizados
2359                    }
2360                }
2361
2362                //se tem personalização faz request
2363                if (temPersonalizacao) {
2364                    if (!personalizacaoPendente) {
2365                        personalizacaoPendente = true;
2366                        $.ajax({
2367                            type: 'POST',
2368                            url: fbits.ecommerce.urlCustom + '/list',
2369                            contentType: 'application/json',
2370                            data: JSON.stringify(obj),
2371                            // success: _compraProduto, // neste caso não chama o _compraProduto pois ele vai ser chamado no if ou else do trecho que valida o parceiro
2372                            error: function (ex) {
2373                                personalizacaoPendente = false;
2374                                $('div.produto-personalizacao').first().append('<div class="erro-personalizacao" data-error="true">Ops! Houve um problema ao personalizar!</div>');
2375                                setTimeout(function () {
2376                                    $('div.produto-personalizacao div[data-error]').remove();
2377                                }, 4000);
2378                            }
2379                        });
2380                    }
2381                }
2382
2383                var guidParceiro = Fbits.Framework.Cookie.getCookie("Parceiro");
2384                if (guidParceiro != undefined && guidParceiro != null && guidParceiro != "") {
2385                    var dataParceiro = {
2386                        carrinhoId: carrinho.Id,
2387                        Parceiro: guidParceiro
2388                    };
2389
2390                    var nomeCliente = fbits.ecommerce.nomeModificado;
2391                    nomeCliente = (nomeCliente.split(' ').join('')).toLowerCase();
2392
2393                    $.ajax({
2394                        type: 'POST',
2395                        async: false,
2396                        url: "https://parceiros-pub.fbits.net/parceiros/" + nomeCliente + "/encrypt/carrinho",
2397                        contentType: 'application/json',
2398                        data: JSON.stringify(dataParceiro),
2399                        async: false,
2400                        success: _compraProduto
2401                    });
2402                }
2403                else {
2404                    _compraProduto();
2405                }
2406            }
2407        });
2408    } else {
2409        _compraProduto();
2410    }
2411}
2412
2413/**
2414* Função responsável por tratar o resultado da compra de produto da modal.
2415* @param data Dados da resposta da requisição.
2416* @param domGrupoSelecaoAtributos elemento DOM o qual comtem os dados do determinado produto.
2417*/
2418function tratarResultadoCompraProdutoModal(data, domGrupoSelecaoAtributos, imageElement) {
2419    if (domGrupoSelecaoAtributos != undefined) { //Vefica a existencia do grupo de seleção de atributos
2420        var produtoItem = $(domGrupoSelecaoAtributos).parents('[id^=produto-item-]'); //Busca os dados do item
2421
2422        if (data.StatusRequisicao == 0 && produtoItem != undefined) //Produto comprado com sucesso
2423        {
2424            if (Fbits.Evento.TemEventoAtivo && Fbits.Evento.Perfil == "Dono") {
2425                if ($().fancybox) {
2426                    $.fancybox('<div class="retornoVinculoEvento">' +
2427                        '<div class="evento-modal" >' +
2428                        '<div class="evento-modal_header">' +
2429                        '<div class="tray-r">' +
2430                        '<div class="tray-c-3">' +
2431                        '<img src="' + Fbits.Produto.FotoPrincipal + '" width="100" height="auto">' +
2432                        '</div>' +
2433                        ' <div class="tray-c-9">' +
2434                        '<h3 class="evento-modal_title">' + Fbits.Produto.Nome + '</h3>' +
2435                        '</div>' +
2436                        '</div>' +
2437                        '</div>' +
2438                        '<div class="tray-r">' +
2439                        '<div class="mg-t-50 pd-t-30 mg-b-50">' +
2440                        '<p>' +
2441                        'Produto foi adicionado ao seu evento com sucesso! <br/> ' +
2442                        'Continue adicionando produtos ao seu evento.' +
2443                        '</p>' +
2444                        '</div>' +
2445                        '</div>' +
2446                        '</div>' +
2447                        '</div>'
2448                    );
2449                }
2450            } else {
2451                if ($().fancybox) {
2452                    $.fancybox.close();
2453                }
2454                atualizarResumoCarrinho();
2455                efeitoSpotComprar(imageElement, $('.carrinho:first'));
2456            }
2457        }
2458        else //Trata erros
2459        {
2460            //Seta as mensagens de erro.
2461            $('[id^="divOpcoes-"]').each(function () {
2462                hideErrors();
2463            });
2464
2465            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(''); //Limpa mensagens de erro
2466            var index = data.indexOpcoes == undefined || data.indexOpcoes < 0 ? 0 : data.indexOpcoes; //Checa o index do produto a receber a mensagem
2467            $('div[id="divOpcoes-' + index + '"] [id^="mensagem-erro-"]', domGrupoSelecaoAtributos).html(data.Mensagem); //Seta mensagem
2468            $(produtoItem).addClass("itemDisabled");
2469            $('[id="produto-legenda"]').removeClass('displayNone').addClass('displayBlock');
2470
2471            if (data.erroIndex >= 0) {
2472                showError(domGrupoSelecaoAtributos.find('#divOpcoes-' + data.erroIndex).find('[id^="' + labelErroPartialId + '"]'), data.msgErro)
2473            }
2474            else {
2475                $('[id^="divOpcoes-"]').each(function () {
2476                    showError($(this).find('[id^="' + labelErroPartialId + '"]'), data.msgErro);
2477                });
2478            }
2479        }
2480    }
2481}
2482
2483/**
2484* Incluir determinado produto no carrinho.
2485* @method validarItens 
2486*/
2487function comprarProdutoSpot(spotComprarElement) {
2488    $(spotComprarElement).attr('disabled', 'disabled');
2489    var produtoId = spotComprarElement.attr('data-produtoId');
2490    var produtoVarianteId = spotComprarElement.attr('data-produtoVarianteId');
2491    var urlCompraProdutoVariante = (novoCheckout ? fbits.ecommerce.urlCarrinho : fbits.ecommerce.urlEcommerce) + '/Produto/ComprarProdutoVariante';             //Url para compra de produtos.
2492    var imageElement = spotComprarElement.parents('[id^=produto-spot-item-]').find('img');
2493    var quantidade = spotComprarElement.parents('[id^=produto-spot-item-]').find('[id^=produto-spot-quantidade]').val();
2494
2495    if (quantidade === undefined) {
2496        quantidade = 1;
2497    }
2498
2499    //Realiza a requisição ajax
2500    $.ajax({
2501        type: 'POST',
2502        url: urlCompraProdutoVariante,
2503        data: { produtoId: produtoId, produtoVarianteId: produtoVarianteId, quantidade: quantidade },
2504        context: { spotComprarElement: spotComprarElement },
2505        success: function (data) {
2506            if (data.resultadoCompra.StatusRequisicao == 0) {
2507                efeitoSpotComprar(imageElement, $('.carrinho:first'));
2508            } else {
2509                showError($(spotComprarElement).parents('[id^="produto-spot-item-"]').find('[id="mensagem-erro-spot"]'), data.resultadoCompra.Mensagem);
2510            }
2511        },
2512        complete: function () {
2513            $(spotComprarElement).removeAttr('disabled');
2514            if (atualizarResumoCarrinho) { atualizarResumoCarrinho(); }
2515        }
2516    });
2517}
2518
2519/**
2520* Compra produto spot novo carrinho.
2521*/
2522function comprarProdutoSpotNovoCarrinho(spotComprarElement) {
2523    var produtoId = spotComprarElement.attr("data-produtoId");
2524    var produtoVarianteId = spotComprarElement.attr("data-produtoVarianteId");
2525    var imageElement = spotComprarElement.parents('[id^=produto-spot-item-]').find('img');
2526    var parametroCompraProduto = '{"ProdutoId":"{0}","StrOpcional":"Selecione","IsAssinatura":false,"DadosProduto":[{"ProdutoComboId":"0","ProdutoVarianteId":"{1}","ComboId":0,"ProdutoId":0,"Atributos":[],"Quantidade":"{2}","ListaPersonalizacoes":[]}],"attrNaoSelecionado":false,"ListaServicos":[],"VerificarServico":false}';
2527    var quantidade = spotComprarElement.parents("[id^=produto-spot-item-]").find("[id^=produto-spot-quantidade]").val();
2528    if (quantidade === undefined) {
2529        quantidade = 1
2530    }
2531    parametroCompraProduto = parametroCompraProduto.replace('{0}', produtoId);
2532    parametroCompraProduto = parametroCompraProduto.replace('{1}', produtoVarianteId);
2533    parametroCompraProduto = parametroCompraProduto.replace('{2}', quantidade);
2534
2535    var _compraProduto = function () {
2536        $.ajax({
2537            type: "POST",
2538            url: fbits.ecommerce.urlCarrinho + "Produto/ComprarProduto",
2539            data: parametroCompraProduto,
2540            async: false,
2541            contentType: "application/json; charset=utf-8",
2542            dataType: "json",
2543            xhrFields: {
2544                withCredentials: novoCheckout
2545            },
2546            success: function (data) {
2547                if (data.resultadoCompra.StatusRequisicao == 0) {
2548                    efeitoSpotComprar(imageElement, $('.carrinho:first'));
2549                } else {
2550                    showError($(spotComprarElement).parents('[id^="produto-spot-item-"]').find('[id="mensagem-erro-spot"]'), data.resultadoCompra.Mensagem);
2551                }
2552                //window.location.href = fbits.ecommerce.urlCarrinho;
2553            },
2554            complete: function () {
2555                $(spotComprarElement).removeAttr('disabled');
2556                if (atualizarResumoCarrinho) { atualizarResumoCarrinho(); }
2557            },
2558            fail: function (data) {
2559                showError($(spotComprarElement).parents('[id^="produto-spot-item-"]').find('[id="mensagem-erro-spot"]'), 'Não foi possivel inserir o produto no carrinho.');
2560            }
2561        });
2562    }
2563
2564    if (novoCheckout) {
2565        $.ajax({
2566            url: fbits.ecommerce.urlCarrinho + 'api/carrinho/',
2567            xhrFields: {
2568                withCredentials: true
2569            },
2570            crossDomain: true,
2571            success: function (carrinho) {
2572
2573                var guidParceiro = Fbits.Framework.Cookie.getCookie("Parceiro");
2574                if (guidParceiro != undefined && guidParceiro != null && guidParceiro != "") {
2575                    var dataParceiro = {
2576                        carrinhoId: carrinho.Id,
2577                        Parceiro: guidParceiro
2578                    };
2579
2580                    var nomeCliente = fbits.ecommerce.nomeModificado;
2581                    nomeCliente = (nomeCliente.split(' ').join('')).toLowerCase();
2582
2583                    $.ajax({
2584                        type: 'POST',
2585                        async: false,
2586                        url: "https://parceiros-pub.fbits.net/parceiros/" + nomeCliente + "/encrypt/carrinho",
2587                        contentType: 'application/json',
2588                        data: JSON.stringify(dataParceiro),
2589                        async: false,
2590                        success: _compraProduto
2591                    });
2592                }
2593                else {
2594                    _compraProduto();
2595                }
2596            }
2597        });
2598    } else {
2599        _compraProduto();
2600    }
2601}
2602
2603
2604/**
2605* Cria o efeito de que o produto spot esta indo para o carrinho.
2606*/
2607function efeitoSpotComprar(elementoOrigem, elementoDestino) {
2608    // Clona a foto e posiciona acima da foto original do spot
2609    var clone = $(elementoOrigem).clone();
2610    $('html').append(clone);
2611    clone.css({
2612        'position': 'absolute', 'width': elementoOrigem.width(),
2613        'height': elementoOrigem.height(), 'left': elementoOrigem.offset().left,
2614        'top': elementoOrigem.offset().top, 'z-index': 999999
2615    });
2616
2617    // Envia elemento ao seu destino
2618    $(clone).animate({
2619        width: '1px',
2620        height: '1px',
2621        opacity: 0.3,
2622        top: elementoDestino.offset().top,
2623        left: elementoDestino.offset().left
2624    }, 1000, function () {
2625        clone.remove();
2626    });
2627}
2628
2629/**
2630* Adiciona os eventos das imagens do produto.
2631*/
2632function adicionaEventosImagens() {
2633    //Seleção de imagens 
2634    $('#imagem-pagina-produto .zoom-thumbnail').on('click', function (event) {
2635        $("#videoPrincipal").hide();
2636        $("#videoPrincipal iframe").remove();
2637        $("#zoomImagemProduto").show();
2638        $(".zoomWrapper").show();
2639        $(".zoomContainer").show();
2640    });
2641
2642    //------------------------- Tratamento do zoom -----------------------------------//
2643
2644    if (typeof tipoZoom != 'undefined') { // bug #16862
2645
2646        if (tipoZoom == 1) {
2647
2648            $("#zoomImagemProduto").elevateZoom({
2649                gallery: 'galeria',
2650                galleryActiveClass: "active",
2651                zoomType: "inner",
2652                cursor: "crosshair",
2653                zoomWindowWidth: 422,
2654                zoomWindowHeight: 422
2655            });
2656
2657        } else if (tipoZoom == 3) {
2658
2659            $('#zoomImagemProduto').elevateZoom({
2660                gallery: 'galeria',
2661                galleryActiveClass: "active",
2662                zoomType: "lens",
2663                lensShape: "round",
2664                containLensZoom: true,
2665                lensSize: 200
2666            });
2667
2668            $("body").append("<style> .zoomContainer .zoomWindowContainer div { border: none !important; } </style>");
2669
2670        } else { //Padrão é 2
2671
2672            $("#zoomImagemProduto").elevateZoom({
2673                gallery: 'galeria',
2674                galleryActiveClass: "active",
2675                cursor: 'crosshair',
2676                imageCrossfade: true,
2677                zoomWindowWidth: 422,
2678                zoomWindowHeight: 422
2679            });
2680
2681        }
2682    }
2683
2684    //pass the images to Fancybox 
2685    $("#zoomImagemProduto").bind("click", function (e) {
2686        var ez = $('#zoomImagemProduto').data('elevateZoom');
2687        var lst = ez.getGalleryList();
2688        var nlst = [];
2689        for (var i in lst) {
2690            if (lst[i].href && lst[i].href != "") {
2691                nlst.push(lst[i]);
2692            }
2693        }
2694        $.fancybox(nlst);
2695        return false;
2696    });
2697
2698    //------------------------- Tratamento do zoom -----------------------------------//
2699
2700}
2701
2702
2703/**
2704* Adiciona os eventos das imagens do produto. (para a modal de quick view)
2705*/
2706function adicionaEventosImagensModal() {
2707
2708    //Seleção de imagens 
2709    $('[id^="produto-modal"] .zoom-thumbnail').on('click', function (event) {
2710        $('[id^="produto-modal"] #videoPrincipal').hide();
2711        $('[id^="produto-modal"] #videoPrincipal iframe').remove();
2712        $('[id^="produto-modal"] #zoomImagemProduto').show();
2713        $('[id^="produto-modal"] .zoomWrapper').show();
2714        $('[id^="produto-modal"] .zoomContainer').show();
2715    });
2716
2717    //------------------------- Tratamento do zoom -----------------------------------//
2718
2719    if (typeof tipoZoom != 'undefined') { // bug #16862
2720        if (tipoZoom == 1) {
2721
2722            $('[id^="produto-modal"] #zoomImagemProduto').elevateZoom({
2723                gallery: 'galeria',
2724                galleryActiveClass: "active",
2725                zoomType: "inner",
2726                cursor: "crosshair",
2727                zoomWindowWidth: 422,
2728                zoomWindowHeight: 422
2729            });
2730
2731        } else if (tipoZoom == 3) {
2732
2733            $('[id^="produto-modal"] #zoomImagemProduto').elevateZoom({
2734                gallery: 'galeria',
2735                galleryActiveClass: "active",
2736                zoomType: "lens",
2737                lensShape: "round",
2738                containLensZoom: true,
2739                lensSize: 200
2740            });
2741
2742            $("body").append("<style> .zoomContainer .zoomWindowContainer div { border: none !important; } </style>");
2743
2744        } else { //Padrão é 2
2745
2746            $('[id^="produto-modal"] #zoomImagemProduto').elevateZoom({
2747                gallery: 'galeria',
2748                galleryActiveClass: "active",
2749                cursor: 'crosshair',
2750                imageCrossfade: true,
2751                zoomWindowWidth: 422,
2752                zoomWindowHeight: 422
2753            });
2754
2755        }
2756    }
2757
2758    //pass the images to Fancybox 
2759    $('[id^="produto-modal"] #zoomImagemProduto').bind("click", function (e) {
2760        var ez = $('[id^="produto-modal"] #zoomImagemProduto').data('elevateZoom');
2761        $.fancybox(ez.getGalleryList());
2762        return false;
2763    });
2764
2765    //------------------------- Tratamento do zoom -----------------------------------//
2766}
2767
2768
2769/**
2770* Função responsável pela compra do produto com um determinado serviço.
2771*/
2772function comprarComServico(domServicoItem, redirecionar, clickElement) {
2773    habilitarCompra(false); //Desabilida botões de compra
2774
2775    //Variaveis iniciais
2776    var errorElement = $(domServicoItem).find('[id^="servico-mensagem-erro-"]');
2777    var objetoParametroComprarServico = buscarServicosTela(clickElement);
2778
2779    //Validações
2780    if (objetoParametroComprarServico.ListaServicos.lenght <= 0) {
2781        showError(errorElement, 'Por favor selecione um serviço!'); return;
2782    }
2783
2784    if (!objetoParametroComprarServico.ListaServicos[0].RegulamentoAceito) {
2785        showError(errorElement, 'Você precisa aceitar o regulamento.'); return;
2786    }
2787
2788    if (!objetoParametroComprarServico.ListaServicos[0].ServicoId) {
2789        showError(errorElement, 'Não foi possivel adicionar este serviço. Favor contactar o SAC.'); return;
2790    }
2791
2792    if (!objetoParametroComprarServico.ListaServicos[0].ProdutoVarianteServicoId || objetoParametroComprarServico.ListaServicos[0].ProdutoVarianteServicoId == 0) {
2793        showError(errorElement, 'Por favor selecione um serviço!'); return;
2794    }
2795
2796    //Busca o item, caso servico esteja fora do item
2797    var domProdutoItem = $(domServicoItem).parents('[id^="produto-item-"]');
2798
2799    if (domProdutoItem == undefined) {
2800        domProdutoItem = $('[id^="produto-item-"]').first();
2801        console.log('Não encontrou o produto-item pai. Então pegou o primeiro.');
2802    }
2803
2804    redirecionar = redirecionar == undefined ? false : redirecionar;
2805
2806    //Busca o elemento qual possui os dados para compra do produto.
2807    var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', domProdutoItem); //Busca elemento principal
2808    if (checkOpcoesSelecionadas(domGrupoSelecaoAtributos)) {
2809        var objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);      //Busca parametros da tela
2810        objetoParametroComprarProduto.ListaServicos = objetoParametroComprarServico.ListaServicos;
2811        objetoParametroComprarProduto.VerificarServico = objetoParametroComprarServico.VerificarServico;
2812
2813        if (objetoParametroComprarProduto != undefined)
2814            comprarProdutoRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, redirecionar); //Realiza a requisição para comprar o produto
2815    }
2816
2817    habilitarCompra(true); //Habilita botões de compra
2818}
2819
2820
2821/**
2822* Função responsável pela compra do produto com assinatura.
2823*/
2824function comprarComAssinatura(domProdutoItem, redirecionar, clickElement) {
2825    habilitarCompra(false); //Desabilida botões de compra
2826
2827    //Variaveis iniciais
2828    var errorElement = $(domProdutoItem).find('[id^="assinatura-mensagem-erro-"]');
2829
2830    if (domProdutoItem == undefined) {
2831        domProdutoItem = $('[id^="produto-item-"]').first();
2832        console.log('Não encontrou o produto-item pai. Então pegou o primeiro.');
2833    }
2834
2835    redirecionar = redirecionar == undefined ? false : redirecionar;
2836
2837    //Busca o elemento qual possui os dados para compra do produto.
2838    var domGrupoSelecaoAtributos = $('div[id^="dvGrupoSelecaoAtributos-"]', domProdutoItem); //Busca elemento principal
2839    if (checkOpcoesSelecionadas(domGrupoSelecaoAtributos)) {
2840        var objetoParametroComprarProduto = buscaParametrosTela(domGrupoSelecaoAtributos);     //Busca parametros da tela
2841        objetoParametroComprarProduto.GrupoAssinaturaPeriodoRecorrenciaId = $(domGrupoSelecaoAtributos).parents('[id^=produto-item-]').find('[name=GrupoAssinaturaPeriodoRecorrenciaId]').val();
2842
2843        if (objetoParametroComprarProduto != undefined)
2844            comprarProdutoAssinaturaRequest(objetoParametroComprarProduto, domGrupoSelecaoAtributos, redirecionar); //Realiza a requisição para comprar o produto
2845    }
2846
2847    habilitarCompra(true); //Habilita botões de compra
2848}
2849
2850/**
2851* Atualiza os campos de seleção de serviço, podem ser select, radios ou divs.
2852*/
2853function atualizarServico(elementOpcoes) {
2854    //INICIALIZAÇÃO DAS VARIAVEIS
2855    var domOpcoes = $(elementOpcoes);
2856
2857    // domopcoes é o objeto select.
2858    if (domOpcoes.is('select'))
2859        domOpcoes = domOpcoes.children("option:selected")  // atribui o "option" selecionado para o domOpcoes.
2860
2861    domOpcoes.parents('[id^=produto-servico-item-]').find('[data-servicoselecionado]').attr('data-servicoselecionado', 'False'); //Marca todos como não selecionados.
2862    domOpcoes.parents('[id^=tb-servico-item-]').find("[data-servicoselecionado]").attr('data-servicoselecionado', 'True'); //Marca o item como selecionado
2863}
2864
2865/**
2866* Busca os dados dos servicos 
2867*/
2868function buscarServicosTela(clickElement) {
2869    var verificarServico = $(clickElement).attr('data-comprarComServico') == 'True';
2870
2871    var listaServicos = [];
2872
2873    //Busca todos os serviços disponiveis selecionados.
2874    var item = $(clickElement).parents('[id^="produto-item-"]').find("[id^='radio-servico-']:checked").parents('[id^="tb-servico-item-"]');
2875    var servicoId = $(item).find('[data-codigoServico]').first().attr('data-codigoServico');
2876    var tempoServico = $(item).find('[data-tempoServico]').first().attr('data-tempoServico');
2877    var produtoVarianteServicoId = $(item).find('[data-servicoSelecionado="True"]').first().attr('data-codigoprodutovarianteservico');
2878    var regulamentoAceito = $("input[id^=produto-servico-termocondicoes-]:checked", item)[0];
2879
2880    if (servicoId > 0) {
2881        //Adiciona item a lista
2882        listaServicos.push({ ServicoId: servicoId, ProdutoVarianteServicoId: produtoVarianteServicoId, Tempo: tempoServico, RegulamentoAceito: regulamentoAceito != undefined });
2883    }
2884
2885    return { VerificarServico: verificarServico, ListaServicos: listaServicos };
2886}
2887
2888// Seta a visualização selecionada pelo usuario
2889function selecionaTipoVisualizacao(dados) {
2890    $("#tipoVisualizacao li").each(function () {
2891        $(".mainBar").removeClass($(this).attr("data-visualizacao"));
2892    });
2893    var tipo = $(dados.currentTarget).attr("data-visualizacao");
2894    if (tipo != "") {
2895        $(".mainBar").addClass(tipo);
2896    }
2897    Fbits.Framework.Cookie.setCookie("tipoVisualizacao", tipo, 30);
2898}
2899
2900/**
2901* Busca os dados das personalizacoes 
2902*/
2903function buscarPersonalizacoes(domGrupoSelecaoAtributos) {
2904    var listaPersonalizacoes = [];
2905    var personalizacaoNaoSelecionada = false;
2906
2907    $('input[id^="txt-personalizacao-"], select[id^="ddl-personalizacao-"]', domGrupoSelecaoAtributos).each(function () {
2908        var id = $(this).attr('data-personalizacao-id');
2909        var nome = $(this).attr('data-personalizacao-nome');
2910        var ordem = $(this).attr('data-personalizacao-ordem');
2911        var valor = $(this).attr('data-personalizacao-valor');
2912        var personalizacao = $(this).val();
2913
2914        if ($(this).attr('data-personalizacao-obrigatorio') == "True" && personalizacao == "") {
2915            personalizacaoNaoSelecionada = true;
2916        }
2917
2918        if (personalizacao != "") {
2919            //Adiciona item a lista
2920            listaPersonalizacoes.push({ Nome: nome, Ordem: ordem, GrupoPer
2920sonalizacaoDetalheId: id, Valor: valor, Personalizacao: personalizacao });
2921        }
2922    });
2923
2924    if (personalizacaoNaoSelecionada) {
2925        listaPersonalizacoes = null;
2926    }
2927
2928    return listaPersonalizacoes;
2929}
2930
2931
2932function UpdateQueryString(key, value, url) {
2933    if (!url) url = window.location.href;
2934    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
2935        hash;
2936
2937    if (re.test(url)) {
2938        if (typeof value !== 'undefined' && value !== null)
2939            return url.replace(re, '$1' + key + "=" + value + '$2$3');
2940        else {
2941            hash = url.split('#');
2942            url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
2943            if (typeof hash[1] !== 'undefined' && hash[1] !== null)
2944                url += '#' + hash[1];
2945            return url;
2946        }
2947    }
2948    else {
2949        if (typeof value !== 'undefined' && value !== null) {
2950            var separator = url.indexOf('?') !== -1 ? '&' : '?';
2951            hash = url.split('#');
2952            url = hash[0] + separator + key + '=' + value;
2953            if (typeof hash[1] !== 'undefined' && hash[1] !== null)
2954                url += '#' + hash[1];
2955            return url;
2956        }
2957        else
2958            return url;
2959    }
2960}
2961
2962function getParameterByName(name, url) {
2963    if (!url) url = window.location.href;
2964    name = name.replace(/[\[\]]/g, "\\$&");
2965    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
2966        results = regex.exec(url);
2967    if (!results) return null;
2968    if (!results[2]) return '';
2969    return decodeURIComponent(results[2].replace(/\+/g, " "));
2970}
2971
2972function ajustaTamanhoDivCores() {
2973    for (var i = 0; i < $('[class*="valorAtributo valorAtributoCor"]').length; i++) {
2974        var url = $('[class*="valorAtributo valorAtributoCor"]')[i].style.background.split("=")
2975        var newUrl = url[0] + "=" + url[1] + "=" + $('[class*="valorAtributo valorAtributoCor"]')[i].scrollWidth + url[2].substring(url[2].indexOf("&")) + "=" + $('[class*="valorAtributoCor"]')[i].scrollHeight + "\")";
2976        $('[class*="valorAtributo valorAtributoCor"]')[i].style.background = newUrl;
2977    }
2978}
2979
2980; 
2981var Fbits = Fbits || {};
2982Fbits.Assinatura = Fbits.Assinatura || {};
2983Fbits.Assinatura.Dados = Fbits.Assinatura.Dados || {};
2984
2985$(function () {
2986    if (novoCheckout && $('[id^=produto-assinatura-botao-comprar-]').length > 0) {
2987        $(document).ajaxComplete(function (event, request, settings) {
2988            if (typeof request.responseText !== undefined) {
2989                if (request.responseText.indexOf('header-Assinatura') > 0 || request.responseText.indexOf('produto-assinatura-botao-comprar') > 0) {
2990                    initializeAssinatura();
2991                }
2992            }
2993        });
2994        initializeAssinatura();
2995    }
2996});
2997
2998function initializeAssinatura() {
2999    var recorrenciasContainer = $('.periodo');
3000    var descontoLabel = $("#header-Assinatura > label > span");
3001    recorrenciasContainer.hide(); // esconde a recorrencia legado
3002    descontoLabel.hide(); // esconde a desconto legado
3003    $.ajax({
3004        type: "GET",
3005        url: fbits.ecommerce.urlCarrinho + "api/carrinho",
3006        xhrFields: {
3007            withCredentials: true
3008        }
3009    }).success(function (carrinhoData) {
3010        var carrinhoId = carrinhoData.Id;
3011        var produtoId = $("#hdnProdutoId").val();
3012        var produtoVarianteId = $('div[id^="produto-item-"]').first().find("#hdnProdutoVarianteId").val();
3013        var endpoint = "https://pub-assinatura.fbits.net/CarrinhoAssinatura/" + carrinhoData.Loja.Nome + "?carrinhoId=" + carrinhoId + "&produtoId=" + produtoId + "&produtoVarianteId=" + produtoVarianteId;
3014
3015        $.ajax({
3016            type: "GET",
3017            url: endpoint
3018        }).success(function (data) {
3019            Fbits.Assinatura.Dados = data;
3020            Fbits.Assinatura.CarrinhoId = carrinhoId;
3021            var html = '';
3022
3023            var recorrenciaIdSelecionado = 0;
3024            var result;
3025
3026            for (i = 0; i < data.length; i++) {
3027                if (data[i].produtoVarianteId === parseInt(produtoVarianteId)) {
3028                    result = data[i];
3029                    break;
3030                }
3031            }
3032
3033            if (typeof result === 'undefined')
3034                return;
3035
3036            console.log('Assinatura produtoVarianteId ' + produtoVarianteId);
3037
3038            var selecionado;
3039
3040            for (i = 0; i < result.recorrencias.length; i++) {
3041                if (result.recorrencias[i].selecionado === true) {
3042                    selecionado = result.recorrencias[i];
3043                    break;
3044                }
3045            }
3046
3047            if (typeof selecionado !== 'undefined')
3048                recorrenciaIdSelecionado = selecionado.recorrenciaId;
3049
3050            html = '';
3051
3052            html += '<div id="box-assinatura-' + produtoVarianteId + '" style="display: block;"><div class="col-lg-12 fbits-responsive-carrinho-assinatura-border" style="margin-top:10px;margin-bottom:10px;"><div class="col-lg-4" data-assinatura-produtovarianteid="' + produtoVarianteId + '" style="margin-top:10px;"><label>ENTREGA: </label><select id="select-assinatura-id-' + produtoVarianteId + '" class="form-control col-md-1">';
3053
3054            if (!result.somenteAssinatura) {
3055                html += '<option value="selecione-0" ' + (recorrenciaIdSelecionado === 0 ? 'selected' : '') + '>Selecione</option>';
3056            }
3057
3058            for (var y = 0; y < result.recorrencias.length; y++) {
3059                html += '<option value="' + result.recorrencias[y].recorrenciaId + "-" + result.recorrencias[y].grupoAssinaturaId + '" '
3060                    + (recorrenciaIdSelecionado === 0 ? result.somenteAssinatura && y === 0 ? 'selected' : '' : recorrenciaIdSelecionado === result.recorrencias[y].recorrenciaId
3061                        ? 'selected' : '') + '>' + result.recorrencias[y].nome + '</option>';
3062            }
3063
3064            html += '</select><div id="MensagemInformativa-' + produtoVarianteId + '"</div></div></div></div>';
3065
3066            if (recorrenciaIdSelecionado === 0) {
3067                var maxDesconto = Math.max.apply(Math, result.recorrencias.map(function (o) { return o.grupoAssinaturaDesconto; }));
3068                if (maxDesconto > 0) {
3069                    descontoLabel.text("Ganhe até " + maxDesconto + "% de desconto");
3070                } else {
3071                    descontoLabel.text("");
3072                }
3073            } else {
3074                var recorrenciaSelecionadoObj;
3075                for (i = 0; i < result.recorrencias.length; i++) {
3076                    if (result.recorrencias[i].recorrenciaId === recorrenciaIdSelecionado) {
3077                        recorrenciaSelecionadoObj = result.recorrencias[i];
3078                        break;
3079                    }
3080                }
3081                ajustarAssinaturaDesconto(recorrenciaSelecionadoObj !== undefined ? recorrenciaSelecionadoObj.grupoAssinaturaDesconto : 0);
3082            }
3083            recorrenciasContainer.html(html);
3084            recorrenciasContainer.show();
3085            descontoLabel.show();
3086        });
3087    });
3088
3089}
3090
3091function ajustarAssinaturaDesconto(desconto) {
3092    var descontoLabel = $("#header-Assinatura > label > span");
3093    if (desconto > 0) {
3094        descontoLabel.text("Ganhe " + desconto + "% de desconto");
3095    } else {
3096        descontoLabel.text("");
3097    }
3098}
3099
3100function mostraRecorrencia(produtoVarianteId) {
3101    $('#box-assinatura-' + produtoVarianteId).show();
3102    $('#botao-assinatura-produtoVarianteId-' + produtoVarianteId).hide();
3103}
3104
3105// Método que deve ser chamado pelo botão ASSINAR na página do produto
3106function vincularAssinaturaRecorrencia() {
3107    if ($('input[id^="hdnProdutoVarianteId-"]') != undefined && $('input[id^="hdnProdutoVarianteId-"]').length > 1) {
3108        if ($('[id^="select-assinatura-id-"]').length < 1)
3109            return;
3110
3111        var carrinhoId = Fbits.Assinatura.CarrinhoId;
3112        var dados = $('[id^="select-assinatura-id-"]').first().val().split("-");
3113
3114        dados[0] = dados[0] === "selecione" ? 0 : dados[0];
3115
3116        if (typeof Fbits.Assinatura !== "undefined" && typeof Fbits.Assinatura.Dados !== "undefined" &&
3117            Fbits.Assinatura.Dados.length > 0 && typeof Fbits.Assinatura.Dados[0].recorrencias !== "undefined") {
3118            var recorrenciaSelecionadoObj;
3119            for (i = 0; i < Fbits.Assinatura.Dados[0].recorrencias.length; i++) {
3120                if (Fbits.Assinatura.Dados[0].recorrencias[i].recorrenciaId === Number(dados[0])) {
3121                    recorrenciaSelecionadoObj = Fbits.Assinatura.Dados[0].recorrencias[i];
3122                    break;
3123                }
3124            }
3125            ajustarAssinaturaDesconto(typeof recorrenciaSelecionadoObj !== "undefined" ? recorrenciaSelecionadoObj.grupoAssinaturaDesconto : 0);
3126        }
3127
3128        for (let x = 0; x < $('input[id^="hdnProdutoVarianteId-"]').length; x++) {
3129            var produtoVarianteId = $('input[id^="hdnProdutoVarianteId-"]')[x].value;
3130
3131            var data = {
3132                CarrinhoId: carrinhoId,
3133                ProdutoVarianteId: Number(produtoVarianteId),
3134                RecorrenciaId: Number(dados[0]),
3135                GrupoAssinaturaId: Number(dados[1])
3136            };
3137
3138            $.ajax({
3139                url: "https://pub-assinatura.fbits.net/CarrinhoAssinatura/",
3140                type: "POST",
3141                data: JSON.stringify(data),
3142                contentType: "application/json",
3143                async: false,
3144                success: function () {
3145                    var msg = data.RecorrenciaId !== 0 ? "Assinatura adicionada com sucesso" : "Assinatura removida";
3146                    $("#MensagemInformativa-" + produtoVarianteId).html("<span style='color:green;font-size:10px'>" + msg + "</span>");
3147                },
3148                error: function (jqXHR, status, err) {
3149                    $("#MensagemInformativa-" + produtoVarianteId).html("<span style='color:red;font-size:10px'>Ocorreu um erro na adição da assinatura.</span>");
3150                }
3151            });
3152        }
3153
3154    }
3155    else {
3156        var produtoVarianteId = $('div[id^="produto-item-"]').first().find("#hdnProdutoVarianteId").val();
3157
3158        if ($("#select-assinatura-id-" + produtoVarianteId).length === 0) // se por algum motivo a combo de recorrencia não tenha sido renderizada, pode pular esse vinculo, porque ele pode ser adicionado no checkout
3159            return;
3160
3161        var carrinhoId = Fbits.Assinatura.CarrinhoId;
3162        var dados = $("#select-assinatura-id-" + produtoVarianteId).val().split("-");
3163
3164        dados[0] = dados[0] === "selecione" ? 0 : dados[0];
3165
3166        if (typeof Fbits.Assinatura !== "undefined" && typeof Fbits.Assinatura.Dados !== "undefined" &&
3167            Fbits.Assinatura.Dados.length > 0 && typeof Fbits.Assinatura.Dados[0].recorrencias !== "undefined") {
3168            var recorrenciaSelecionadoObj;
3169            for (i = 0; i < Fbits.Assinatura.Dados[0].recorrencias.length; i++) {
3170                if (Fbits.Assinatura.Dados[0].recorrencias[i].recorrenciaId === Number(dados[0])) {
3171                    recorrenciaSelecionadoObj = Fbits.Assinatura.Dados[0].recorrencias[i];
3172                    break;
3173                }
3174            }
3175            ajustarAssinaturaDesconto(typeof recorrenciaSelecionadoObj !== "undefined" ? recorrenciaSelecionadoObj.grupoAssinaturaDesconto : 0);
3176        }
3177
3178        var data = {
3179            CarrinhoId: carrinhoId,
3180            ProdutoVarianteId: Number(produtoVarianteId),
3181            RecorrenciaId: Number(dados[0]),
3182            GrupoAssinaturaId: Number(dados[1])
3183        };
3184
3185        $.ajax({
3186            url: "https://pub-assinatura.fbits.net/CarrinhoAssinatura/",
3187            type: "POST",
3188            data: JSON.stringify(data),
3189            contentType: "application/json",
3190            success: function () {
3191                var msg = data.RecorrenciaId !== 0 ? "Assinatura adicionada com sucesso" : "Assinatura removida";
3192                $("#MensagemInformativa-" + produtoVarianteId).html("<span style='color:green;font-size:10px'>" + msg + "</span>");
3193            },
3194            error: function (jqXHR, status, err) {
3195                $("#MensagemInformativa-" + produtoVarianteId).html("<span style='color:red;font-size:10px'>Ocorreu um erro na adição da assinatura.</span>");
3196            }
3197        });
3198    }
3199}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.