").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
/**
* BxSlider v4.1.2 - Fully loaded, responsive content slider
* http://bxslider.com
*
* Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
* Written while drinking Belgian ales and listening to jazz
*
* Released under the MIT license - http://opensource.org/licenses/MIT
*/
!function(t){var e={},s={mode:"horizontal",slideSelector:"",infiniteLoop:!0,hideControlOnEnd:!1,speed:500,easing:null,slideMargin:0,startSlide:0,randomStart:!1,captions:!1,ticker:!1,tickerHover:!1,adaptiveHeight:!1,adaptiveHeightSpeed:500,video:!1,useCSS:!0,preloadImages:"visible",responsive:!0,slideZIndex:50,touchEnabled:!0,swipeThreshold:50,oneToOneTouch:!0,preventDefaultSwipeX:!0,preventDefaultSwipeY:!1,pager:!0,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:!0,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:!1,startText:"Start",stopText:"Stop",autoControlsCombine:!1,autoControlsSelector:null,auto:!1,pause:4e3,autoStart:!0,autoDirection:"next",autoHover:!1,autoDelay:0,minSlides:1,maxSlides:1,moveSlides:0,slideWidth:0,onSliderLoad:function(){},onSlideBefore:function(){},onSlideAfter:function(){},onSlideNext:function(){},onSlidePrev:function(){},onSliderResize:function(){}};t.fn.bxSlider=function(n){if(0==this.length)return this;if(this.length>1)return this.each(function(){t(this).bxSlider(n)}),this;var o={},r=this;e.el=this;var a=t(window).width(),l=t(window).height(),d=function(){o.settings=t.extend({},s,n),o.settings.slideWidth=parseInt(o.settings.slideWidth),o.children=r.children(o.settings.slideSelector),o.children.length
1||o.settings.maxSlides>1,o.carousel&&(o.settings.preloadImages="all"),o.minThreshold=o.settings.minSlides*o.settings.slideWidth+(o.settings.minSlides-1)*o.settings.slideMargin,o.maxThreshold=o.settings.maxSlides*o.settings.slideWidth+(o.settings.maxSlides-1)*o.settings.slideMargin,o.working=!1,o.controls={},o.interval=null,o.animProp="vertical"==o.settings.mode?"top":"left",o.usingCSS=o.settings.useCSS&&"fade"!=o.settings.mode&&function(){var t=document.createElement("div"),e=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var i in e)if(void 0!==t.style[e[i]])return o.cssPrefix=e[i].replace("Perspective","").toLowerCase(),o.animProp="-"+o.cssPrefix+"-transform",!0;return!1}(),"vertical"==o.settings.mode&&(o.settings.maxSlides=o.settings.minSlides),r.data("origStyle",r.attr("style")),r.children(o.settings.slideSelector).each(function(){t(this).data("origStyle",t(this).attr("style"))}),c()},c=function(){r.wrap(''),o.viewport=r.parent(),o.loader=t('
'),o.viewport.prepend(o.loader),r.css({width:"horizontal"==o.settings.mode?100*o.children.length+215+"%":"auto",position:"relative"}),o.usingCSS&&o.settings.easing?r.css("-"+o.cssPrefix+"-transition-timing-function",o.settings.easing):o.settings.easing||(o.settings.easing="swing"),f(),o.viewport.css({width:"100%",overflow:"hidden",position:"relative"}),o.viewport.parent().css({maxWidth:p()}),o.settings.pager||o.viewport.parent().css({margin:"0 auto 0px"}),o.children.css({"float":"horizontal"==o.settings.mode?"left":"none",listStyle:"none",position:"relative"}),o.children.css("width",u()),"horizontal"==o.settings.mode&&o.settings.slideMargin>0&&o.children.css("marginRight",o.settings.slideMargin),"vertical"==o.settings.mode&&o.settings.slideMargin>0&&o.children.css("marginBottom",o.settings.slideMargin),"fade"==o.settings.mode&&(o.children.css({position:"absolute",zIndex:0,display:"none"}),o.children.eq(o.settings.startSlide).css({zIndex:o.settings.slideZIndex,display:"block"})),o.controls.el=t('
'),o.settings.captions&&P(),o.active.last=o.settings.startSlide==x()-1,o.settings.video&&r.fitVids();var e=o.children.eq(o.settings.startSlide);"all"==o.settings.preloadImages&&(e=o.children),o.settings.ticker?o.settings.pager=!1:(o.settings.pager&&T(),o.settings.controls&&C(),o.settings.auto&&o.settings.autoControls&&E(),(o.settings.controls||o.settings.autoControls||o.settings.pager)&&o.viewport.after(o.controls.el)),g(e,h)},g=function(e,i){var s=e.find("img, iframe").length;if(0==s)return i(),void 0;var n=0;e.find("img, iframe").each(function(){t(this).one("load",function(){++n==s&&i()}).each(function(){this.complete&&t(this).load()})})},h=function(){if(o.settings.infiniteLoop&&"fade"!=o.settings.mode&&!o.settings.ticker){var e="vertical"==o.settings.mode?o.settings.minSlides:o.settings.maxSlides,i=o.children.slice(0,e).clone().addClass("bx-clone"),s=o.children.slice(-e).clone().addClass("bx-clone");r.append(i).prepend(s)}o.loader.remove(),S(),"vertical"==o.settings.mode&&(o.settings.adaptiveHeight=!0),o.viewport.height(v()),r.redrawSlider(),o.settings.onSliderLoad(o.active.index),o.initialized=!0,o.settings.responsive&&t(window).bind("resize",Z),o.settings.auto&&o.settings.autoStart&&H(),o.settings.ticker&&L(),o.settings.pager&&q(o.settings.startSlide),o.settings.controls&&W(),o.settings.touchEnabled&&!o.settings.ticker&&O()},v=function(){var e=0,s=t();if("vertical"==o.settings.mode||o.settings.adaptiveHeight)if(o.carousel){var n=1==o.settings.moveSlides?o.active.index:o.active.index*m();for(s=o.children.eq(n),i=1;i<=o.settings.maxSlides-1;i++)s=n+i>=o.children.length?s.add(o.children.eq(i-1)):s.add(o.children.eq(n+i))}else s=o.children.eq(o.active.index);else s=o.children;return"vertical"==o.settings.mode?(s.each(function(){e+=t(this).outerHeight()}),o.settings.slideMargin>0&&(e+=o.settings.slideMargin*(o.settings.minSlides-1))):e=Math.max.apply(Math,s.map(function(){return t(this).outerHeight(!1)}).get()),e},p=function(){var t="100%";return o.settings.slideWidth>0&&(t="horizontal"==o.settings.mode?o.settings.maxSlides*o.settings.slideWidth+(o.settings.maxSlides-1)*o.settings.slideMargin:o.settings.slideWidth),t},u=function(){var t=o.settings.slideWidth,e=o.viewport.width();return 0==o.settings.slideWidth||o.settings.slideWidth>e&&!o.carousel||"vertical"==o.settings.mode?t=e:o.settings.maxSlides>1&&"horizontal"==o.settings.mode&&(e>o.maxThreshold||e0)if(o.viewport.width()o.maxThreshold)t=o.settings.maxSlides;else{var e=o.children.first().width();t=Math.floor(o.viewport.width()/e)}else"vertical"==o.settings.mode&&(t=o.settings.minSlides);return t},x=function(){var t=0;if(o.settings.moveSlides>0)if(o.settings.infiniteLoop)t=o.children.length/m();else for(var e=0,i=0;e0&&o.settings.moveSlides<=f()?o.settings.moveSlides:f()},S=function(){if(o.children.length>o.settings.maxSlides&&o.active.last&&!o.settings.infiniteLoop){if("horizontal"==o.settings.mode){var t=o.children.last(),e=t.position();b(-(e.left-(o.viewport.width()-t.width())),"reset",0)}else if("vertical"==o.settings.mode){var i=o.children.length-o.settings.minSlides,e=o.children.eq(i).position();b(-e.top,"reset",0)}}else{var e=o.children.eq(o.active.index*m()).position();o.active.index==x()-1&&(o.active.last=!0),void 0!=e&&("horizontal"==o.settings.mode?b(-e.left,"reset",0):"vertical"==o.settings.mode&&b(-e.top,"reset",0))}},b=function(t,e,i,s){if(o.usingCSS){var n="vertical"==o.settings.mode?"translate3d(0, "+t+"px, 0)":"translate3d("+t+"px, 0, 0)";r.css("-"+o.cssPrefix+"-transition-duration",i/1e3+"s"),"slide"==e?(r.css(o.animProp,n),r.bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){r.unbind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),D()})):"reset"==e?r.css(o.animProp,n):"ticker"==e&&(r.css("-"+o.cssPrefix+"-transition-timing-function","linear"),r.css(o.animProp,n),r.bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){r.unbind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),b(s.resetValue,"reset",0),N()}))}else{var a={};a[o.animProp]=t,"slide"==e?r.animate(a,i,o.settings.easing,function(){D()}):"reset"==e?r.css(o.animProp,t):"ticker"==e&&r.animate(a,speed,"linear",function(){b(s.resetValue,"reset",0),N()})}},w=function(){for(var e="",i=x(),s=0;i>s;s++){var n="";o.settings.buildPager&&t.isFunction(o.settings.buildPager)?(n=o.settings.buildPager(s),o.pagerEl.addClass("bx-custom-pager")):(n=s+1,o.pagerEl.addClass("bx-default-pager")),e+='"}o.pagerEl.html(e)},T=function(){o.settings.pagerCustom?o.pagerEl=t(o.settings.pagerCustom):(o.pagerEl=t(''),o.settings.pagerSelector?t(o.settings.pagerSelector).html(o.pagerEl):o.controls.el.addClass("bx-has-pager").append(o.pagerEl),w()),o.pagerEl.on("click","a",I)},C=function(){o.controls.next=t(''+o.settings.nextText+" "),o.controls.prev=t(''+o.settings.prevText+" "),o.controls.next.bind("click",y),o.controls.prev.bind("click",z),o.settings.nextSelector&&t(o.settings.nextSelector).append(o.controls.next),o.settings.prevSelector&&t(o.settings.prevSelector).append(o.controls.prev),o.settings.nextSelector||o.settings.prevSelector||(o.controls.directionEl=t('
'),o.controls.directionEl.append(o.controls.prev).append(o.controls.next),o.controls.el.addClass("bx-has-controls-direction").append(o.controls.directionEl))},E=function(){o.controls.start=t('"),o.controls.stop=t('"),o.controls.autoEl=t('
'),o.controls.autoEl.on("click",".bx-start",k),o.controls.autoEl.on("click",".bx-stop",M),o.settings.autoControlsCombine?o.controls.autoEl.append(o.controls.start):o.controls.autoEl.append(o.controls.start).append(o.controls.stop),o.settings.autoControlsSelector?t(o.settings.autoControlsSelector).html(o.controls.autoEl):o.controls.el.addClass("bx-has-controls-auto").append(o.controls.autoEl),A(o.settings.autoStart?"stop":"start")},P=function(){o.children.each(function(){var e=t(this).find("img:first").attr("title");void 0!=e&&(""+e).length&&t(this).append(''+e+"
")})},y=function(t){o.settings.auto&&r.stopAuto(),r.goToNextSlide(),t.preventDefault()},z=function(t){o.settings.auto&&r.stopAuto(),r.goToPrevSlide(),t.preventDefault()},k=function(t){r.startAuto(),t.preventDefault()},M=function(t){r.stopAuto(),t.preventDefault()},I=function(e){o.settings.auto&&r.stopAuto();var i=t(e.currentTarget),s=parseInt(i.attr("data-slide-index"));s!=o.active.index&&r.goToSlide(s),e.preventDefault()},q=function(e){var i=o.children.length;return"short"==o.settings.pagerType?(o.settings.maxSlides>1&&(i=Math.ceil(o.children.length/o.settings.maxSlides)),o.pagerEl.html(e+1+o.settings.pagerShortSeparator+i),void 0):(o.pagerEl.find("a").removeClass("active"),o.pagerEl.each(function(i,s){t(s).find("a").eq(e).addClass("active")}),void 0)},D=function(){if(o.settings.infiniteLoop){var t="";0==o.active.index?t=o.children.eq(0).position():o.active.index==x()-1&&o.carousel?t=o.children.eq((x()-1)*m()).position():o.active.index==o.children.length-1&&(t=o.children.eq(o.children.length-1).position()),t&&("horizontal"==o.settings.mode?b(-t.left,"reset",0):"vertical"==o.settings.mode&&b(-t.top,"reset",0))}o.working=!1,o.settings.onSlideAfter(o.children.eq(o.active.index),o.oldIndex,o.active.index)},A=function(t){o.settings.autoControlsCombine?o.controls.autoEl.html(o.controls[t]):(o.controls.autoEl.find("a").removeClass("active"),o.controls.autoEl.find("a:not(.bx-"+t+")").addClass("active"))},W=function(){1==x()?(o.controls.prev.addClass("disabled"),o.controls.next.addClass("disabled")):!o.settings.infiniteLoop&&o.settings.hideControlOnEnd&&(0==o.active.index?(o.controls.prev.addClass("disabled"),o.controls.next.removeClass("disabled")):o.active.index==x()-1?(o.controls.next.addClass("disabled"),o.controls.prev.removeClass("disabled")):(o.controls.prev.removeClass("disabled"),o.controls.next.removeClass("disabled")))},H=function(){o.settings.autoDelay>0?setTimeout(r.startAuto,o.settings.autoDelay):r.startAuto(),o.settings.autoHover&&r.hover(function(){o.interval&&(r.stopAuto(!0),o.autoPaused=!0)},function(){o.autoPaused&&(r.startAuto(!0),o.autoPaused=null)})},L=function(){var e=0;if("next"==o.settings.autoDirection)r.append(o.children.clone().addClass("bx-clone"));else{r.prepend(o.children.clone().addClass("bx-clone"));var i=o.children.first().position();e="horizontal"==o.settings.mode?-i.left:-i.top}b(e,"reset",0),o.settings.pager=!1,o.settings.controls=!1,o.settings.autoControls=!1,o.settings.tickerHover&&!o.usingCSS&&o.viewport.hover(function(){r.stop()},function(){var e=0;o.children.each(function(){e+="horizontal"==o.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)});var i=o.settings.speed/e,s="horizontal"==o.settings.mode?"left":"top",n=i*(e-Math.abs(parseInt(r.css(s))));N(n)}),N()},N=function(t){speed=t?t:o.settings.speed;var e={left:0,top:0},i={left:0,top:0};"next"==o.settings.autoDirection?e=r.find(".bx-clone").first().position():i=o.children.first().position();var s="horizontal"==o.settings.mode?-e.left:-e.top,n="horizontal"==o.settings.mode?-i.left:-i.top,a={resetValue:n};b(s,"ticker",speed,a)},O=function(){o.touch={start:{x:0,y:0},end:{x:0,y:0}},o.viewport.bind("touchstart",X)},X=function(t){if(o.working)t.preventDefault();else{o.touch.originalPos=r.position();var e=t.originalEvent;o.touch.start.x=e.changedTouches[0].pageX,o.touch.start.y=e.changedTouches[0].pageY,o.viewport.bind("touchmove",Y),o.viewport.bind("touchend",V)}},Y=function(t){var e=t.originalEvent,i=Math.abs(e.changedTouches[0].pageX-o.touch.start.x),s=Math.abs(e.changedTouches[0].pageY-o.touch.start.y);if(3*i>s&&o.settings.preventDefaultSwipeX?t.preventDefault():3*s>i&&o.settings.preventDefaultSwipeY&&t.preventDefault(),"fade"!=o.settings.mode&&o.settings.oneToOneTouch){var n=0;if("horizontal"==o.settings.mode){var r=e.changedTouches[0].pageX-o.touch.start.x;n=o.touch.originalPos.left+r}else{var r=e.changedTouches[0].pageY-o.touch.start.y;n=o.touch.originalPos.top+r}b(n,"reset",0)}},V=function(t){o.viewport.unbind("touchmove",Y);var e=t.originalEvent,i=0;if(o.touch.end.x=e.changedTouches[0].pageX,o.touch.end.y=e.changedTouches[0].pageY,"fade"==o.settings.mode){var s=Math.abs(o.touch.start.x-o.touch.end.x);s>=o.settings.swipeThreshold&&(o.touch.start.x>o.touch.end.x?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto())}else{var s=0;"horizontal"==o.settings.mode?(s=o.touch.end.x-o.touch.start.x,i=o.touch.originalPos.left):(s=o.touch.end.y-o.touch.start.y,i=o.touch.originalPos.top),!o.settings.infiniteLoop&&(0==o.active.index&&s>0||o.active.last&&0>s)?b(i,"reset",200):Math.abs(s)>=o.settings.swipeThreshold?(0>s?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto()):b(i,"reset",200)}o.viewport.unbind("touchend",V)},Z=function(){var e=t(window).width(),i=t(window).height();(a!=e||l!=i)&&(a=e,l=i,r.redrawSlider(),o.settings.onSliderResize.call(r,o.active.index))};return r.goToSlide=function(e,i){if(!o.working&&o.active.index!=e)if(o.working=!0,o.oldIndex=o.active.index,o.active.index=0>e?x()-1:e>=x()?0:e,o.settings.onSlideBefore(o.children.eq(o.active.index),o.oldIndex,o.active.index),"next"==i?o.settings.onSlideNext(o.children.eq(o.active.index),o.oldIndex,o.active.index):"prev"==i&&o.settings.onSlidePrev(o.children.eq(o.active.index),o.oldIndex,o.active.index),o.active.last=o.active.index>=x()-1,o.settings.pager&&q(o.active.index),o.settings.controls&&W(),"fade"==o.settings.mode)o.settings.adaptiveHeight&&o.viewport.height()!=v()&&o.viewport.animate({height:v()},o.settings.adaptiveHeightSpeed),o.children.filter(":visible").fadeOut(o.settings.speed).css({zIndex:0}),o.children.eq(o.active.index).css("zIndex",o.settings.slideZIndex+1).fadeIn(o.settings.speed,function(){t(this).css("zIndex",o.settings.slideZIndex),D()});else{o.settings.adaptiveHeight&&o.viewport.height()!=v()&&o.viewport.animate({height:v()},o.settings.adaptiveHeightSpeed);var s=0,n={left:0,top:0};if(!o.settings.infiniteLoop&&o.carousel&&o.active.last)if("horizontal"==o.settings.mode){var a=o.children.eq(o.children.length-1);n=a.position(),s=o.viewport.width()-a.outerWidth()}else{var l=o.children.length-o.settings.minSlides;n=o.children.eq(l).position()}else if(o.carousel&&o.active.last&&"prev"==i){var d=1==o.settings.moveSlides?o.settings.maxSlides-m():(x()-1)*m()-(o.children.length-o.settings.maxSlides),a=r.children(".bx-clone").eq(d);n=a.position()}else if("next"==i&&0==o.active.index)n=r.find("> .bx-clone").eq(o.settings.maxSlides).position(),o.active.last=!1;else if(e>=0){var c=e*m();n=o.children.eq(c).position()}if("undefined"!=typeof n){var g="horizontal"==o.settings.mode?-(n.left-s):-n.top;b(g,"slide",o.settings.speed)}}},r.goToNextSlide=function(){if(o.settings.infiniteLoop||!o.active.last){var t=parseInt(o.active.index)+1;r.goToSlide(t,"next")}},r.goToPrevSlide=function(){if(o.settings.infiniteLoop||0!=o.active.index){var t=parseInt(o.active.index)-1;r.goToSlide(t,"prev")}},r.startAuto=function(t){o.interval||(o.interval=setInterval(function(){"next"==o.settings.autoDirection?r.goToNextSlide():r.goToPrevSlide()},o.settings.pause),o.settings.autoControls&&1!=t&&A("stop"))},r.stopAuto=function(t){o.interval&&(clearInterval(o.interval),o.interval=null,o.settings.autoControls&&1!=t&&A("start"))},r.getCurrentSlide=function(){return o.active.index},r.getCurrentSlideElement=function(){return o.children.eq(o.active.index)},r.getSlideCount=function(){return o.children.length},r.redrawSlider=function(){o.children.add(r.find(".bx-clone")).outerWidth(u()),o.viewport.css("height",v()),o.settings.ticker||S(),o.active.last&&(o.active.index=x()-1),o.active.index>=x()&&(o.active.last=!0),o.settings.pager&&!o.settings.pagerCustom&&(w(),q(o.active.index))},r.destroySlider=function(){o.initialized&&(o.initialized=!1,t(".bx-clone",this).remove(),o.children.each(function(){void 0!=t(this).data("origStyle")?t(this).attr("style",t(this).data("origStyle")):t(this).removeAttr("style")}),void 0!=t(this).data("origStyle")?this.attr("style",t(this).data("origStyle")):t(this).removeAttr("style"),t(this).unwrap().unwrap(),o.controls.el&&o.controls.el.remove(),o.controls.next&&o.controls.next.remove(),o.controls.prev&&o.controls.prev.remove(),o.pagerEl&&o.settings.controls&&o.pagerEl.remove(),t(".bx-caption",this).remove(),o.controls.autoEl&&o.controls.autoEl.remove(),clearInterval(o.interval),o.settings.responsive&&t(window).unbind("resize",Z))},r.reloadSlider=function(t){void 0!=t&&(n=t),r.destroySlider(),d()},d(),this}}(jQuery);/*
Masked Input plugin for jQuery
Copyright (c) 2007-2013 Josh Bush (digitalbush.com)
Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
Version: 1.3.1
*/
(function(e){function t(){var e=document.createElement("input"),t="onpaste";return e.setAttribute(t,""),"function"==typeof e[t]?"paste":"input"}var n,a=t()+".mask",r=navigator.userAgent,i=/iphone/i.test(r),o=/android/i.test(r);e.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},dataName:"rawMaskFn",placeholder:"_"},e.fn.extend({caret:function(e,t){var n;if(0!==this.length&&!this.is(":hidden"))return"number"==typeof e?(t="number"==typeof t?t:e,this.each(function(){this.setSelectionRange?this.setSelectionRange(e,t):this.createTextRange&&(n=this.createTextRange(),n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select())})):(this[0].setSelectionRange?(e=this[0].selectionStart,t=this[0].selectionEnd):document.selection&&document.selection.createRange&&(n=document.selection.createRange(),e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length),{begin:e,end:t})},unmask:function(){return this.trigger("unmask")},mask:function(t,r){var c,l,s,u,f,h;return!t&&this.length>0?(c=e(this[0]),c.data(e.mask.dataName)()):(r=e.extend({placeholder:e.mask.placeholder,completed:null},r),l=e.mask.definitions,s=[],u=h=t.length,f=null,e.each(t.split(""),function(e,t){"?"==t?(h--,u=e):l[t]?(s.push(RegExp(l[t])),null===f&&(f=s.length-1)):s.push(null)}),this.trigger("unmask").each(function(){function c(e){for(;h>++e&&!s[e];);return e}function d(e){for(;--e>=0&&!s[e];);return e}function m(e,t){var n,a;if(!(0>e)){for(n=e,a=c(t);h>n;n++)if(s[n]){if(!(h>a&&s[n].test(R[a])))break;R[n]=R[a],R[a]=r.placeholder,a=c(a)}b(),x.caret(Math.max(f,e))}}function p(e){var t,n,a,i;for(t=e,n=r.placeholder;h>t;t++)if(s[t]){if(a=c(t),i=R[t],R[t]=n,!(h>a&&s[a].test(i)))break;n=i}}function g(e){var t,n,a,r=e.which;8===r||46===r||i&&127===r?(t=x.caret(),n=t.begin,a=t.end,0===a-n&&(n=46!==r?d(n):a=c(n-1),a=46===r?c(a):a),k(n,a),m(n,a-1),e.preventDefault()):27==r&&(x.val(S),x.caret(0,y()),e.preventDefault())}function v(t){var n,a,i,l=t.which,u=x.caret();t.ctrlKey||t.altKey||t.metaKey||32>l||l&&(0!==u.end-u.begin&&(k(u.begin,u.end),m(u.begin,u.end-1)),n=c(u.begin-1),h>n&&(a=String.fromCharCode(l),s[n].test(a)&&(p(n),R[n]=a,b(),i=c(n),o?setTimeout(e.proxy(e.fn.caret,x,i),0):x.caret(i),r.completed&&i>=h&&r.completed.call(x))),t.preventDefault())}function k(e,t){var n;for(n=e;t>n&&h>n;n++)s[n]&&(R[n]=r.placeholder)}function b(){x.val(R.join(""))}function y(e){var t,n,a=x.val(),i=-1;for(t=0,pos=0;h>t;t++)if(s[t]){for(R[t]=r.placeholder;pos++a.length)break}else R[t]===a.charAt(pos)&&t!==u&&(pos++,i=t);return e?b():u>i+1?(x.val(""),k(0,h)):(b(),x.val(x.val().substring(0,i+1))),u?t:f}var x=e(this),R=e.map(t.split(""),function(e){return"?"!=e?l[e]?r.placeholder:e:void 0}),S=x.val();x.data(e.mask.dataName,function(){return e.map(R,function(e,t){return s[t]&&e!=r.placeholder?e:null}).join("")}),x.attr("readonly")||x.one("unmask",function(){x.unbind(".mask").removeData(e.mask.dataName)}).bind("focus.mask",function(){clearTimeout(n);var e;S=x.val(),e=y(),n=setTimeout(function(){b(),e==t.length?x.caret(0,e):x.caret(e)},10)}).bind("blur.mask",function(){y(),x.val()!=S&&x.change()}).bind("keydown.mask",g).bind("keypress.mask",v).bind(a,function(){setTimeout(function(){var e=y(!0);x.caret(e),r.completed&&e==x.val().length&&r.completed.call(x)},0)}),y()}))}})})(jQuery);/* Cristall Box v1.1 - продукт линейки Cristall Group
управляет модальными окнами, показывает произвольное содержимое в модальном окне
по ajax, элемент страницы, одиночные изображения или группу изображений
разработчик: Большаков Е.В.
mail: cristall-group@yandex.ru
17.07.2015
*/
(function($){
// установка на страницу
$.fn.cristallBox = function( options ){
// настройки по умолчанию
var settings = {
speed: 500, // скорость анимации
ajaxPath: '/ajax/', // путь к папке ajax-файлов
offset: -10, // смещение модального окна относительно верха страницы
widthOffset: 20, // поправка по ширине при масштабировании окна
heightOffset: 100, // поправка по высоте при масштабировании окна
widthOffsetH: 60, // поправка по ширине при масштабировании окна для высоких и узких изображений
heightOffsetH: 110, // поправка по высоте при масштабировании окна для высоких и узких изображений
};
// настройки программы
var sett = $.extend( settings, options||{});
var el$ = this, startEl, imgAll, top, paramsEl, buttons = '';
var ekran = $('#ekranBlock'), modalBlock = $( '#modalBlock' );
// добавляем на страницу необходимые HTML-элементы ( если их нет в DOM )
makeElements();
// добавляем скорость анимации в стили
$('#ekranBlock').css( 'transition', sett.speed / 1000 + 's' );
// события модуля работы модальных окон
$.modalActions = function( e ){
e = e ? e : $( '[data-modal]' );
// навешиваем события на элементы обернутого набора
e.unbind( 'click' );
e.click( function(){
// элемент-источник вызова окна
startEl = $(this);
// имя открываемого окна
var blockOpen = startEl.data( 'modal' );
// действия на открытие окна
$.modalOpenActions( { block:blockOpen, htmlEl:true } );
// отменяем переход по ссылке
return false;
});
}
$.modalActions( el$ );
// открытие модальных окон
$.modalOpenActions = function ( paramsEl ){
// получаем данные для показа окна
paramsEl = getData( paramsEl );
if( ekran.length < 1 ){
ekran = $('#ekranBlock');
}
if( modalBlock.length < 1 ){
modalBlock = $( '#modalBlock' );
}
// показываем экран, если он не открыт
if( ekran.is(':hidden') ){
// сначала показываем блок
ekran.addClass( 'act' );
// теперь проявляем
setTimeout(function(){ ekran.addClass( 'active' ) }, 1 );
}
// функция исполняемая до открытия окна
if( paramsEl['script'] ){
eval( paramsEl['script'] );
}
// показываем модальное окно
modalOpen( paramsEl );
};
$(window).resize(function(){
var o = $('.modalItem.imgBox .imgItem.active img');
if( o.length > 0 ){
$( '.imgBlock' ).css( getImgSize( o ) );
}
});
// установки для добавления содержимого модального окна
function setContent( paramsEl, str ){
// контент-зона
if( paramsEl['content'] ){
// контент-зона блока
var cont = $( str + ' .content' );
// тип содержимого
switch( paramsEl['content'] ){
// содержимое по ajax
case 'ajax':
ajaxActions( paramsEl, str );
break;
// изображения
case 'img':
if( paramsEl['group'] ){
var index = paramsEl['index'] ? paramsEl['index'] : 0;
// группа изображений
var g = $('img[data-group=' + paramsEl['group'] + ']');
if( g.length > 0 ){
imgAll = [];
// обходим все элементы входящие в эту группу
g.each(function( i ){
var classN = '', e = $(this), title = e.attr('title');
// для первого элемента списка
if( i == index ){ classN = 'active'; }
title = title ? "" + title + ' ' : '' ;
imgAll.push(
""+
"
" + title +
"
" );
});
imgAll = galleryHtml( imgAll );
}
}else{ // одиночное изображение внутри ссылки открытия модального окна
if( !startEl ){ return false; }
var imgBlock = startEl.find('img');
if( imgBlock.length > 0 ){
var src = imgBlock.attr('src');
if( src ){
var titleImg = imgBlock.attr('title') ? imgBlock.attr('title') : '';
}else{
src = 'no_img.jpg';
var titleImg = 'Изображения нет';
}
imgAll =
"" +
"
" +
"
" +
"
" + titleImg + ' ' +
'
' +
'
';
}else{
// любое количество изображений по ссылке
if( paramsEl['src'] ){
src = paramsEl['src'].split(',');
var count = src.length;
if( count > 0 ){
imgAll = [];
for( var i = 0; i < count; i++ ){
var classN = i ? '' : 'active';
imgAll.push(
"" +
"
" +
"
" );
}
imgAll = galleryHtml( imgAll );
}
}
}
}
var str = '#modalBlock';
// для галереи добавляем отдельный класс, для оформления
$( str + ' .modalItem.' + paramsEl['block'] ).addClass( 'imgBox' );
if( !paramsEl['title'] ){
paramsEl['title'] = 'Фотогалерея';
}
// вставляем галерею в окно
cont.html( imgAll );
// события на кнопки управления галереей
if( buttons ){
var leftButton = $( str + ' .left' );
leftButton.unbind('click');
leftButton.click(function(){
buttonsActions( true );
});
var rightButton = $( str + ' .right' );
rightButton.unbind('click');
rightButton.click(function(){
buttonsActions(false);
});
}
break;
// текст для контент-зоны
case 'text':
cont.html( paramsEl['text'] );
break;
// содержимое блока из элемента страницы
default:
cont.html( $( paramsEl['content'] ).html() );
break;
}
}
// заголовок окна
if( paramsEl['title'] ){
$( str ).find( 'h2' ).html( paramsEl['title'] );
}
};
// обновление контент-зоны для ajax
function ajaxActions( paramsEl, str ){
var cont = $( str + ' .content' ); // контент-зона блока
if( !paramsEl['path'] ){
paramsEl['path'] = sett.ajaxPath + paramsEl['block'] + '.php';
}
if( paramsEl['params'] ){
cont.load( paramsEl['path'], { 'params':paramsEl['params'] }, function(){
if( paramsEl['reload'] ){
$.modalActions(); // перезагружаем события на модальные окна
}
});
}else{
cont.load( paramsEl['path'], function(){
if( paramsEl['reload'] ){
$.modalActions();
}
});
}
};
// действия появления \ скрытия модального окна
function modalOpen( paramsEl ){
var str = '#modalBlock .modalItem';
var str2 = str + '.' + paramsEl['block'];
// если окно открыто
if( $( str2 + '.active' ).length > 0 ){
// обновляем зону контента
if( paramsEl['content'] == 'ajax' || paramsEl['path'] ){
ajaxActions( paramsEl, str2 );
}
// когда есть заголовок, обновляем его
if( paramsEl.title ){
$( str2 + '.active h2' ).text( paramsEl.title );
}
// далее ничего не делаем
return false;
}
// ранее открытые окна скрываем
var open = $( str + ':visible' );
if( open.length > 0 ){
open.removeClass('active');
setTimeout(function(){ open.removeClass('act') }, sett.speed );
}
// имеем имя блока, но его нет в DOM
if( $( str2 ).length < 1 ){
// создаем модальное окно по имени блока
modalBlock.append( $.modalBlockTemplate( paramsEl['block'] ) );
}
// получаем содержимое в зависимости от типа его получения
setContent( paramsEl, str2 );
// устанавливаем позицию модальных окон
setModalPosition();
if( paramsEl['content'] == 'img' ){
img = $( '.imgBlock .imgItem.active img' );
// изменяем размеры окна с изображениями
$( '.imgBlock' ).css( getImgSize( img ) );
}
// показываем запрашиваемое окно
// установлена пауза до открытия окна
if( paramsEl['pause'] && paramsEl['pause'] > sett.speed ){
setTimeout( function(){ openActions( str2 ); }, paramsEl['pause'] );
}else{
// даем время для заполнения контент-зоны, также если одно окно открыто, заменяем другим через паузу
setTimeout( function(){ openActions( str2 ); }, sett.speed );
}
};
// действия по открытию окна
function openActions( str ){
modalBlock.addClass( 'active' );
var o = $( str );
o.addClass( 'act' );
setTimeout(function(){ o.addClass( 'active' ) }, 1 );
setTimeout(function(){
// восстанавливаем события на закрытие модальных окон
modalCloseEvent( true );
// прячем индикатор загрузки
ekran.find( 'i,span' ).addClass( 'hide' );
}, sett.speed * 2 );
};
// событие на ссылки закрытия модальных окон и экран
function modalCloseEvent( mark ){
var e = $( '.modalClose, #ekranBlock');
e.unbind('click');
e.click(function(){
$.modalCloseActions( mark );
});
};
// действия по закрытию окна
$.modalCloseActions = function( mark ){
modalBlock.removeClass( 'active' );
// сначала закрываем окно
var o = $( '#modalBlock .modalItem' )
o.removeClass('active');
setTimeout(function(){
o.removeClass( 'act' );
// следом экран
ekran.removeClass( 'active' );
setTimeout(function(){
ekran.removeClass( 'act' );
setTimeout(function(){
// восстанавливаем события на открытие модальных окон
$.modalActions( el$ );
// восстанавливаем видимость индикатора загрузки
ekran.find( 'i,span' ).removeClass( 'hide' );
}, sett.speed );
}, sett.speed );
}, sett.speed );
$( '#modalBlock .errorInfo' ).remove();
};
// шаблон модального окна
$.modalBlockTemplate = function( block ){
var text =
"" +
"
Информационное сообщение " +
"
Контент-зона пуста. Проверьте атрибут 'data-content' для получения содержимого
" +
"
× " +
"
";
return text;
};
// устанавливаем позицию окна
function setModalPosition(){
// определяем позицию окна браузера
top = window.pageYOffset - sett['offset'];
// устанавливаем положение модального окна
modalBlock.css( 'top', top + 'px' );
};
// кнопки управления слайдером
function buttonsActions( left ){
var str = '#modalBlock .imgItem';
var imgItems = $( str );
var index = $( str + '.active' ).data('index');
// идем налево
if( left ){
if( index ){
index--;
}else{
index = imgItems.length - 1;
}
}else{ // направо
if( index == imgItems.length - 1 ){
index = 0;
}else{
index++;
}
}
// получаемый блок изображения
var ob = $( str + '[data-index='+ index +']' );
// получаем размеры окна для показа нового изображения
img = ob.find( 'img' );
// изменяем размеры окна с изображениями
ob.closest( '.imgBlock' ).css( getImgSize( img ) );
// растворяем предыдущее изображение
$( '#modalBlock .imgItem img.active, #modalBlock .imgItem .imgTitle.active').removeClass('active');
setTimeout(function(){
// скрываем блок изображения
$( str + '.active' ).removeClass('active');
// открываем следующий блок
ob.addClass('active');
setTimeout(function(){
// проявляем изображение
ob.find( 'img' ).addClass( 'active' );
setTimeout(function(){
// показываем заголовок
ob.find( '.imgTitle' ).addClass( 'active' );
}, sett.speed / 2 );
}, sett.speed / 2 );
}, sett.speed );
};
// устанавливаем размеры блока для изображений для реализации анимационного изменения размеров окна
function getImgSize( img ){
var width, height;
// размеры изображения
var iw = img[0]['naturalWidth']; // исходная ширина изображения
var ih = Number( img[0]['naturalHeight'] ) + 45; // исходная высота изображения + место для подписи к изображению
//console.log( 'widthImg_' + iw + ' heightImg_' +ih );
var iratio = iw / ih; // пропорции изображения
// размеры окна
var wh = $( window ).height() - sett.heightOffset; // высота окна
// широкие изображения
if( iratio > 1 ){
var ww = $( window ).width() * 0.9 - sett.widthOffset; // ширина окна
width = ww;
height = ww / iratio;
// после этого высота оказалась больше необходимой
if( height > wh ){
width = wh * iratio;
height = wh;
}
if( height > ih ){
height = ih;
}
if( width > iw + 80 ){
width = iw + 80;
}
// console.log( 'width_' + width + ' height_' + height );
}else{ // подгоняем высокие изображения
var ww = $( window ).width() * 0.9 - sett.widthOffsetH; // ширина окна
if( ih > wh ){
// считаем от высоты
width = wh * iratio;
height = wh;
//console.log(1);
}else{
//console.log( 2 );
width = iw;
height = ih;
}
//console.log( 'width_' + width + ' height_' + height );
if( width > ww ){
width = ww;
height = width / iratio;
}
}
// console.log( 'width_' + width + ' height_' + height );
return { 'width' : width, 'height' : height };
}
// формируем содержимое фото галереи
function galleryHtml( imgArr ){
// изображений больше 1 -> добавляем кнопки слайдера
if( imgArr.length > 1 ){
buttons =
" "+
" ";
}
// html содержимого фото галереи
return "" + imgArr.join( '' ) + '
' + buttons;
};
// получаем данные для показа окна
function getData( paramsEl ){
// получено имя открываемого блока в виде строки
if( typeof( paramsEl ) == 'string' ){
startEl = false;
return {block:paramsEl};
}
// данные как атрибуты html-элемента
if( paramsEl['htmlEl'] ){
if( !paramsEl['block'] ){
alert( 'Не установлен атрибут data-modal' );
return false;
}
// список всех возможных атрибутов
var attr = ['title', 'content', 'script', 'path', 'params', 'group', 'src', 'text', 'pause', 'index', 'reload'];
$.each( attr, function( k, v ){
var tmp = startEl.data( v );
if( tmp != undefined ){
paramsEl[ v ] = tmp;
}
});
}
if( paramsEl['text'] ){
paramsEl['content'] = 'text';
}
if( paramsEl['path'] ){
paramsEl['content'] = 'ajax';
}
return paramsEl;
};
// добавляем на страницу необходимые HTML-элементы ( если их нет в DOM )
function makeElements(){
// проверяем наличие экрана
if( $( '#ekranBlock' ).length < 1 ){
modalBlock.before( "... идет загрузка ...
" );
}
if( $( '#boxBlocks' ).length < 1 ){
// уже есть блок с HTML готовых модальных окон
if( modalBlock.length > 0 ){
// добавляем блок - обертку блока модальных окон
modalBlock.wrap( "
" );
// нужных элементов нет -> добавляем их
}else{
$('body').append(
""+
"
"+
"
"+
" "+
" "+
"... идет загрузка ... "+
"
"+
"
"+
"
"+
"
"+
"
" );
}
}
// проверяем наличие сервисного блока
if( $( '#serviceBlock' ).length < 1 ){
modalBlock.after( "
" );
}
};
return el$;
}
})(jQuery);/* cristallForm.v1.0.js - продукт линейки Cristall Group
скрипты обеспечения работы форм, валидация полей
разработчик: Большаков Е.В.
mail: cristall-group@yandex.ru
17.07.2015
использование $('form').cristallForm();
атрибут form data-act='no' - снимает наблюдение за этой формой;
атрибут form data-act='reload' - после проверки полей, обрабатываем форму через перезагрузку страницы;
проверяемые поля помечаем class='check';
атрибут поля data-required='1' - обязательное поле
атрибут поля data-min='10' - минимальное количество слов 10 шт
атрибут поля data-type='...' - тип содержимого поля для проверки ( email, text, num-число, phone, common, link, checkbox, select )
- этот класс позволяет использовать вместо стандартного вида поля типа checkbox любое изображение за счет toggle класса act
для наблюдением за полем checkbox добавить атрибут data-type='checkbox'
для наблюдением за полем select добавить атрибут data-type='select'
скрытое поле формы name='Type' value='myfile' - /ajax/myfile.php примет на себя обработку формы
все выведенное на экран в этом файле, будет опубликовано на странице в специальном служебном html-блоке, таким образом мы можем обеспечить любое поведение сценария после обработки формы через js
для перезагрузки событий на формы вызвать функцию $.startFormsActions();
*/
(function($){
// установка на страницу
$.fn.cristallForm = function( options ){
// настройки по умолчанию
var settings = {
errorBlock: 'errorInfo', // имя блока для текста ошибки поля формы
sleepTime: 3500, // время блокирования кнопки submit
serviceBlock: '#serviceBlock', // служебный блок для обеспечения работы модуля
ajaxPath: '/ajax/', // путь до папки с файлами ajax
requiredText: 'обязательно для заполнения', // тексты ошибок
mailText: 'не коректный email',
text: 'здесь может быть только текст',
numText: 'здесь могут быть только цифры',
phoneTextLength:'число должно быть длинее 3 символов',
phoneText: 'не корректный номер телефона',
commonText: 'допустим текст, цифры и знаки препинания',
linkText: 'не корректный текст ссылки',
min: 'минимальное количество символов - ',
minWord: 'минимальное количество слов - ',
editorBlock: '[name=Content]'
};
// настройки программы
var sett = $.extend( settings, options||{});
var el$ = this;
// значение по-умолчанию, когда не задан объект формы
if( el$.length < 1 ){
el$ = $( 'form:not([data-act=no])' );
}
// если нет обязательного html-блока, добавляем его
if( $( '#serviceBlock' ).length < 1 ){
$( 'body' ).append( "
")
}
// события на элементы форм
$.startFormsActions = function( elem ){
// удаление текстов ошибок с прошлых разов
$( '.' + sett.errorBlock ).remove();
$('select').unbind('click');
$('select').click(function(){ $(this).find( '.' + sett.errorBlock ).remove(); });
// работа чекбоксов
checkboxInput();
// onsubmit форм
submitForms( elem );
};
$.startFormsActions( el$ );
// onsubmit форм
function submitForms( elem ){
elem.unbind('submit');
elem.submit(function(){
// делаем неактивной на время кнопку SUBMIT, чтобы избежать двойной отправки
$('input[type=submit]').attr('disabled', true );
try{
if( elem.find( sett.editorBlock ).length > 0 ){
// обновление содержимого полей формы CKEDITOR перед сохранением данных на ajax
for ( instance in CKEDITOR.instances ){
CKEDITOR.instances[instance].updateElement();
}
}
}catch(e){}
// время на задержки и анимации
setTimeout(function(){ // возвращаем активность формам
$('input[type=submit]').attr('disabled', false );
}, sett.sleepTime );
var e = $(this), act = e.data('act');
// эту форму не надо обрабатывать
if( act == 'no'){ return true }
// при отсутствии ошибок формы - отправляем данные на обработку
if( !error_form( this ) ){
// эта форма обрабатывается при перезагрузке страницы
if( act == 'reload' ){
return true;
}
// есть действие при отсутствии ошибок
var ok_actions = el$.data( 'ok' );
if( ok_actions != 'undefined' ){
eval( ok_actions );
}
// обработка формы через ajax
var inp = e.find('[name=Type]');
var type = inp.val(); // имя файла
var path = inp.data( 'path' ); // путь к файлу - если он отличается от значения по-умолчанию
path = path ? path + type : sett.ajaxPath + type;
var data_form = e.serializeArray();
//test( data_form );
$( sett.serviceBlock ).load( path, data_form );
}
return false;
});
};
// валидация полей форм
function error_form(e){
$( 'form .' + sett.errorBlock ).remove(); // очищаем форму от предыдущих ошибок
var result = false;
$(e).find('.check').each(function(){
var el = $(this);
var val_el = $.trim( el.val() );
var type = el.data('type');
// не пустые поля
if( val_el ){
switch( type ){
case 'email':
if( val_el.match(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/ ) === null){
$.err_block_add( el, sett.mailText );
result = true;
}
break;
case 'text':
if( val_el.match(/^[a-zA-Zа-яёА-ЯЁ -.,]+$/ ) === null){
$.err_block_add( el, sett.text );
result = true;
}
break;
case 'num':
if( val_el.match(/^[0-9]+$/) === null ){
$.err_block_add( el, sett.numText );
result = true;
}
break;
case 'phone':
if( val_el.length < 4 ){
el.after( $.err_block( sett.phoneTextLength ) );
result = true;
}else{
if( val_el.match(/^[+. 0-9,()-]+$/) === null ){
$.err_block_add( el, sett.phoneText );
result = true;
}
}
break;
case 'common':
if( val_el.match(/^[a-zA-Zа-яёА-ЯЁ ()-.—,!?@;0-9_ «»":=\/ /\s/ ]+$/ ) === null){
$.err_block_add( el, sett.commonText );
result = true;
}
break;
case 'link':
if( val_el.match(/^[a-zA-Zа-яёА-ЯЁ :@%#-.,0-9_ ?&=\/]+$/ ) === null){
$.err_block_add( el, sett.linkText );
result = true;
}
break;
case 'checkbox':
if( el.attr('data-required') == '1' ){
if( el.is(':checked') ){
break;
}else{
var id = $(el).attr('id');
if( id ){ // поле вне label
$.err_block_add( $('label[for=' + id + ']'), sett.requiredText );
}else{ // поле внутри label
$.err_block_add( $(el).closest('label'), sett.requiredText, false, true );
}
result = true;
}
}
break;
}
}else{
// обязательные поля
if( el.attr('data-required') == '1' ){
if( el.data('type') == 'select' ){
$.err_block_add( el, sett.requiredText, true );
}else{
$.err_block_add( el, sett.requiredText );
}
result = true;
}
}
// установлена минимальная длина значения поля
var min_length = el.data('min');
if( min_length ){
if( val_el.length < min_length ){
$.err_block_add( el, sett.min + min_length );
result = true;
}
}
// минимальное количество слов
var min_word = el.data( 'min_word' );
if( min_word ){
var a = val_el.split( ' ' );
if( a.length < min_word ){
$.err_block_add( el, sett.minWord + min_word );
result = true;
}
}
});
// удаление ошибки при помещении фокуса в поле формы или клику по ней
clearError();
return result;
};
// блок с текстом ошибки
$.err_block = function( text ){ return "" + text + " "; }
// блок с текстом ошибки для select
$.err_block_select = function( text ){
return "" + text + " ";
};
// появление блока ошибки
$.err_block_add = function( el, text, select, append ){
text = select ? $.err_block_select( text ) : $.err_block( text );
if( append ){
el.append( text );
}else{
el.after( text );
}
setTimeout(function(){
$( '.' + sett.errorBlock ).addClass('visible');
}, 10 );
}
// работа чекбокса
function checkboxInput(){
// помечаем label с выбранным checkbox
$('label.checkbox input').each(function(){
if( $(this).prop( 'checked' ) ){
$(this).closest( 'label' ).addClass( 'act' );
}else{
$(this).closest( 'label' ).removeClass( 'act' );
}
});
$('label.checkbox').unbind( 'click' );
$('label.checkbox').click(function(){
var e = $(this);
e.find( '.' + sett.errorBlock ).remove();
var el, id = e.attr( 'for' );
if( id ){ // поле вынесено за пределы label
el = $( '#' + id );
}else{
el = e.find( 'input' ); // поле внутри label
}
if( el.is( ':checked' ) ){
e.addClass( 'act' );
}else{
e.removeClass( 'act' );
}
});
};
// удаление ошибки при помещении фокуса в поле формы
function clearError(){
$('form .check').unbind('focus');
$('form .check').focus(function(){
clearErrorAct( $(this) );
});
// и клику по блоку ошибки
$( '.' + sett.errorBlock ).unbind('click');
$( '.' + sett.errorBlock ).click(function(){
clearErrorAct( $(this) );
});
};
// действия на удаление ошибки в поле формы
function clearErrorAct( e ){
e.parent('label').find( '.' + sett.errorBlock ).remove();
e.next( '.' + sett.errorBlock ).remove();
};
return el$;
}
})(jQuery);
/* Cristall Cart v1.0 - продукт линейки Cristall Group
Добавление товаров в покупательскую корзину
разработчик: Большаков Е.В.
mail: cristall-group@yandex.ru
03.06.2016
*/
(function($){
// установка на страницу
$.fn.cristallCart = function( options ){
// настройки по умолчанию
var settings = {
path: '/ajax/cart/', // путь к папке php - обработки заказа
pathSync: '/ajax/cart/sync/', // синхронизируем данные из хранилища с сервером для данных старше 1 дня
pathAdd: '/ajax/cart/add/', // добавляем товар в корзину при не работающем localStorage
local_storage: true, // для хранения содержимого корзины используем localStorage
keyItem: 'id', // имя для ключа в массиве с товарами корзины
floatInfo: true, // окно информирования о содержании корзины на странице - плавающее; false - статичное
sync_server: true, // включена синхронизация с сервером
addScript: false, // произвольный скрипт для добавления в товара корзину
floatParent: 'body', // блок для загрузки окна информирования о содержании корзины на странице
prefix_cart: 'cart_', // префикс к ключу строки в localStorage для добавленного товара
prefix_favourite: 'favourite_', // префикс к ключу строки в localStorage для отложенного товара, false - не обрабатываем добавление в избранное
useAmountItemManager: true, // использовать изменение количества добавляемого товара в карточке товара
moreActions: false, // дополнительные события по окончании добавления товара
discount: false, // скидка на стоимость товара
rounding: false, // округление суммы
// состав блока добавления товара - в дальнейшем потребует доработки для поддержки вариантов ( комплектация, вес, цвет и т.д )
containHtml:
"Добавлено в избранное " +
" " +
" ",
// инфо-блок содержимого корзины - пустая строка - не показываем
basketInfo:
"" +
"
" +
"
" +
"
" +
"
Содержимое корзины " +
"
× " +
"
" +
"
" +
"
" +
"
" +
"
",
// элемент списка товара - с заголовками
basketItemTh:
"" +
"Товары " +
"Количество " +
"Цена " +
"Сумма " +
" ",
// элемент списка товара в корзине
basketItem:
"" +
"" +
" " +
" " +
"" +
"
" +
"
" +
"Код товара: " +
"<%code%> " +
"Производитель: " +
"<%brand%> " +
"Марка/модель: " +
"<%model%> " +
" "+
"
" +
"<%amountblock%>" +
" " +
"
" +
"
" +
" " +
" ",
// блок управления количеством товара
amountBlock:
"" +
" - " +
" " +
" + " +
" ",
textAdd: 'Товар в корзине',
textFavorite: 'Добавлено в избранное',
afterAdd: "e.parent().addClass( 'added' );setTimeout(function(){e.parent().removeClass( 'added' )},1500);", // действия после добавления товара
amountNoneText: "товара нет в наличии ", // текст на отсутствие товара в наличии
cartInfoAmount: '.cartInfoAmount', // куда выводим результат о количестве
cartInfoSumm: '.cartInfoSumm', // куда выводим результат о сумме
cartInfoFavorite: '.cartInfoFavorite', // куда выводим результат о количестве избранного
toCart: '.toCart', // класс кнопки добавления в корзину
toFavorite: '.toFavorite', // класс кнопки добавления в избранное
inputId: '.id', // класс поля с ID элемента
replaceBsk: '.replaceBsk', // класс ссылки на перемещение товара из корзины в избранное
inputPrice: '.price', // класс поля с ценой элемента
inputTitle: '.title', // класс поля с заголовком элемента
inputAmount: '.amount', // класс поля с количеством товара
parentBlock: '.itemBsk', // класс контейнера с карточкой товара
basketBsk: '.basketBsk', // имя блока плавающей корзины
contBsk: '.contBsk', // контент зона плавающей корзины
bodyBsk: '.bodyBsk', // имя блока с товарами в корзине
bottomBsk: '.bottomBsk', // имя блока с итоговой информацией в корзине
countType: '.countType', // имя блока количества наименований
cleanBskAll: '.cleanBskAll', // имя ссылки на полную очистку корзины
paramsAttrName: 'item_params', // имя атрибута с данными товара
cartInputName: 'input[name=CartContent]', // имя поля формы с содержимым корзины
isNoAmoutText: "Нет в наличии ", // текст вместо кнопок добавления при отсутствии товара на складе
};
settings.resultItem = settings.amountBlock +
"* " +
"<%price%> <%discountText%> " +
"= " +
"<%summ%> ";
// настройки программы
var sett = $.extend( settings, options||{});
var el$ = this;
// получаем из атрибутов данные в виде объекта
$.cartSetParams = function( el ){
var params = el.data( sett.paramsAttrName );
params.keyItem = sett.keyItem;
var e = el.find( 'input.amountBsk' );
if( e.length > 0 ){
params.amount = e.val();
}
return params;
}
// проверяем доступность локального хранилища
if( sett.local_storage ){
sett.local_storage = checkStorage();
}
/*localStorage.removeItem('dateStart'); */
// localStorage.clear();
// localStorage['dateStart'] = '2017.2.5';
// test( localStorage );
// localStorage['dateControl'] = '2016.11.12';
// текущая дата
var tmp = new Date();
var month = 1 + tmp.getMonth();
var now = tmp.getFullYear() + '.' + month + '.' + tmp.getDate();
// синхронизируем свои данные с сервером
$.syncServer = function( d, answer ){
d['key_cart'] = sett.prefix_cart;
d['key_favorite'] = sett.prefix_favourite;
// синхронизируем только не пустую корзину
if( checkCartLength() < 1 ){
// стираем даты прежних покупок для пустой корзины
localStorage.removeItem( 'dateStart' );
localStorage.removeItem( 'dateControl' );
return true;
}
// в настройках разрешена синхронизация с сервером
if( sett.sync_server ){
$.ajax({
type: 'post',
url: sett.pathSync,
data: { Type:'sync', UserData:JSON.stringify( d ) } ,
success: function( str_json ){
try{
// информацию получаем в виде строки JSON
var tmp = JSON.parse( str_json );
if( tmp ){
// обновляем данные в хранилище
for( var a in tmp ){
localStorage[ a ] = tmp[a];
}
// обновляем дату синхронизации с сервером
localStorage['dateControl'] = now;
if( answer != undefined ){
// обход хранилища и обновление информации в корзине
goForLocalStorage( localStorage, block );
}
}
}catch(e){ }
},
});
}
}
// в хранилище есть покупки
if( localStorage['dateControl'] ){
// дата покупок не совпадает с текущей датой
if( sett.sync_server && now > localStorage['dateControl'] ){
// синхронизируем свои данные с сервером
$.syncServer( localStorage );
}
}
// блок для содержимого корзины
blockInfo();
// добавляем кнопки добавления товара
el$.each(function(){
var e = $(this);
var htmlTxt = sett.containHtml;
if( sett.useAmountItemManager ){
var param = $.cartSetParams( e );
var mark = false;
if( param.is_amount != undefined ){
if( Number( param.is_amount ) > 1 ){
mark = true;
}
if( Number( param.is_amount ) < 1 ){
htmlTxt = sett.isNoAmoutText;
}
}else{
mark = true;
}
if( mark ){
var tmp = sett.amountBlock;
tmp = tmp.replace( '<%amount%>', '1' );
htmlTxt = htmlTxt + tmp.replace( '<%hidd%>', '' );
}
}
e.html( htmlTxt )
});
// навешиваем события на элементы обернутого набора
$.cartOn = function( e ){
var o = e.find( sett.toCart );
o.unbind( 'click' );
o.click(function(){
// действия на добавление в корзину
if( sett.addScript ){
eval( sett.addScript );
return false;
}else{
$.cartAdd( $(this), sett.prefix_cart );
}
// отменяем переход по ссылке, если есть
return false;
});
// есть разрешение на обработку добавления в избранное
if( sett.prefix_favourite ){
var o = e.find( sett.toFavorite );
o.click(function(){
// действия на добавление в корзину
$.cartAdd( $(this), sett.prefix_favourite );
// отменяем переход по ссылке, если есть
return false;
});
}
// полная очистка корзины
var o = $( sett.cleanBskAll );
o.unbind( 'click' );
o.click(function(){
$.cartClean();
});
}
// события на элементы корзины
$.cartOn( el$ );
// события на элементы корзины
allActionsBsk();
// показываем информацию о состоянии корзины
$.showCart = function( e ){
// блок для списка покупок в корзине
block = e ? e : '.bodyBsk';
// работаем с localStorage
if( sett.local_storage ){
// обход хранилища и обновление информации в корзине
goForLocalStorage( localStorage, block );
// хранилище - запрещено - обращаемся за данными на сервер
}else{
$.ajax({
type: 'post',
url: sett.path,
data: { Type:'info' } ,
success: function( str_json ){
try{
// информацию получаем в виде строки JSON
var tmp = JSON.parse( str_json );
alert( 'без хранилища - ответ сервера еще не реализован' );
goForLocalStorage( tmp, block );
}catch(e){ }
},
});
}
// test( localStorage );
}
// состояние корзины
$.showCart();
// действия на добавление в корзину
$.cartAdd = function( e, prefix ){
// все данные хранятся в родительском элементе
var el = e.parent();
// извлекаем данные переданные через data-? элемента
var param = $.cartSetParams( el );
// сохраняем на клиенте
if( sett.local_storage ){
// хранилище еще пустое
if( !localStorage['dateStart'] ){
// создаем 2 даты - начало заполнения корзины и контрольную дату для возможности дальнейшего обновления параметров товара с сервера
localStorage['dateControl'] = localStorage['dateStart'] = now;
}
addActions( e, param, prefix );
}else{
// сохраняем на сервере
$.ajax({
type: 'post',
url: sett.pathAdd,
data: { Type:prefix } ,
success: function( a ){
// действие на добавление товара
},
});
}
}
// очищаем корзину
$.cartClean = function( mark ){
// очищаем все
if( mark ){
localStorage.clear();
}else{
// очищаем только корзину
for( var a in localStorage ){
// по префиксу находим строки добавленных товаров
var tm = a.split( sett.prefix_cart );
if( tm.length > 1 ){
localStorage.removeItem( a );
}
}
// если разрешено избранное - даты оставляем для синхронизации с сервером
if( !sett.prefix_favourite ){
localStorage.removeItem( 'dateStart' );
localStorage.removeItem( 'dateControl' );
}
}
$.showCart();
}
// получение содержимого корзины
$.getCartData = function( prefix ){
return getFromPrefix( prefix );
}
function getFromPrefix( prefix ){
// получаем часть данных по префиксу ( корзина, избранное )
if( prefix ){
var d = {};
for( var a in localStorage ){
// по префиксу находим строки добавленных товаров
var tm = a.split( prefix );
if( tm.length > 1 ){
d[ a ] = localStorage[ a ];
}
}
}else{
// все
var d = localStorage;
}
return d;
}
// блок с содержимым корзины
function blockInfo(){
if( sett.basketInfo ){
// блок еще не добавлен на страницу - проверка необходима при перезагрузке событий на ajax
if( $( '.basketBsk' ).length < 1 ){
$( sett.floatParent ).append( sett.basketInfo );
floatBasket();
$( '.basketLabel').click(function(){
$( sett.basketBsk ).toggleClass( 'activeBsk' );
});
$( '.closeBsk' ).click(function(){
$( '.activeBsk' ).removeClass( 'activeBsk' );
});
}
//управляем высотой блока плавающей корзины
var e = $( sett.bodyBsk );
// высота родительского блока - блок с итоговой информацией
var h = e.closest( sett.basketBsk ).height() - $( sett.contBsk + sett.bottomBsk ).height();
// устанавливаем высоту блока с товарами
e.css( 'max-height', h + 'px' );
}
}
// действия в ответ на добавление товара
function addActions( e, param, prefix ){
// ранее добавленный товар - берем оттуда количество
if( localStorage[ setNameEl( prefix, param ) ] ){
var tmp = JSON.parse( localStorage[ setNameEl( prefix, param ) ] );
var newSign = parseInt( param.amount );
var oldSign = parseInt( tmp.amount );
oldSign = oldSign ? oldSign : 0;
param.amount = newSign + oldSign;
}
// разрешено управление количеством товара
if( sett.useAmountItemManager && param.is_amount != 'undefined' ){
// не позволяем добавить товара больше,чем есть в наличии
if( Number( param.amount ) > Number( param.is_amount ) ){
param.amount = param.is_amount
}
}
// сохраняем строку
localStorage[ setNameEl( prefix, param ) ] = JSON.stringify( param );
// текст ответа
str = sett.textAdd;
if( prefix == sett.prefix_favourite ){
str = sett.textFavorite
}
e.parent().find( 'strong' ).html( str );
/* test( prefix );
test( sett.prefix_favourite ) ;
test( str ) ; */
// информируем о результатах
eval( sett.afterAdd );
// обновляем информацию о состоянии корзины
setTimeout(function(){ $.showCart() },100 );
//test( localStorage );
}
function setNameEl( prefix, param ){
if( !param.package_id ){
param.package_id = 0;
}
return prefix + param[ sett.keyItem ] + '_' + param.package_id;
}
// проверяем количество элементов в корзине
function checkCartLength(){
var i = 0;
for( var a in localStorage ){
// по префиксу находим строки добавленных товаров
var tm = a.split( sett.prefix_cart );
if( tm.length > 1 ){
i++;
}
// по префиксу находим строки товаров в избранном
var tm = a.split( sett.prefix_favourite );
if( tm.length > 1 ){
i++;
}
}
return i;
}
// получаем данные и формируем html корзины
function goForLocalStorage( ob, block ){
var summ = 0;
var count_cart = 0;
var count_favourite = 0;
var amountItem = 0;
var productsId = [];
var flag = $( '.basketBsk' ).length;
var float_basket = [ sett.basketItemTh ];
// проходим по хранилищу
for( var a in ob ){
if( a == 'cart_undefined_undefined' ){
localStorage.removeItem( 'cart_undefined_undefined' );
}else{
// по префиксу находим строки добавленных товаров
var tm = a.split( sett.prefix_cart );
if( tm.length > 1 ){
amountItem++;
// преобразуем строку параметров в объект
var tmp = JSON.parse( ob[ a ] );
// параметры товара в корзине
tmp.params_item = ob[ a ];
tmp.params_attr = sett.paramsAttrName;
// если разрешено управление количеством
if( sett.useAmountItemManager && tmp.is_amount != undefined ){
// управляем видимостью кнопки увеличения количества товара в корзине
tmp.hidd = parseInt( tmp.amount ) < parseInt( tmp.is_amount ) ? '' : 'hidden';
}
// общее количество товаров
count_cart = parseInt( count_cart ) + parseInt( tmp.amount );
// общая сумма
if( tmp.price ){
var xPrice = parseFloat( tmp.price ) * 100;
if( Number( tmp.discount ) > 0 ){
var xDiscount = parseFloat( tmp.discount ) * 100;
tmp.discountText = ' - ' + tmp.discount;
}else{
var xDiscount = 0;
tmp.discountText = '';
}
var xSumm = parseInt( tmp.amount ) * parseInt( xPrice ) - xDiscount;
tmp.summ = xSumm / 100;
summ = xSumm + summ;
}
productsId.push( tmp.id );
// разрешена плавающая корзина
if( flag > 0 ){
// 0 - товара нет
if( Number( tmp.is_amount ) < 1 ){
tmp.amountblock = "товара нет в наличии ";
}else{
tmp.amountblock = templating( sett.resultItem, tmp );
}
tmp.package_title = ( tmp.package_title ? " / " + tmp.package_title : '' );
tmp.key = a;
float_basket.push( templating( sett.basketItem, tmp ) );
}
}
// есть разрешение на избранное
if( sett.prefix_favourite ){
var tm = a.split( sett.prefix_favourite );
if( tm.length > 1 ){
count_favourite++;
}
}
}
}
if( sett.discount ){
var discountSumm = parseInt( summ * sett.discount / 100 );
var old_summ = summ;
summ = ( summ - discountSumm );
// избавляет от лишних 0 после запятой - глюк js
summ = Math.round( summ * 100 ) / 100;
}
// переводим в рубли из копеек
summ = summ / 100;
if( sett.rounding ){
summ = parseInt( summ );
}
// пустая корзина
if( float_basket.length < 2 ){
float_basket.push( "Список товаров пуст " );
}
if( flag > 0 ){
// обновляем информацию в блоке корзины
$( block ).html( float_basket.join( '' ) );
if( sett.discount ){
$( '.summBsk strong' ).html( "" + old_summ + ' ' + summ );
}else{
$( '.summBsk strong' ).html( summ );
}
}
// показываем информацию о состоянии корзины на странице в блоки установленные в настройках
$( sett.cartInfoAmount ).html( count_cart );
// количество наименований товара
$( sett.countType ).html( amountItem );
$( sett.cartInfoSumm ).html( summ );
$( 'input[name=productsIdBsk]' ).val( productsId.join( ',' ) );
$( sett.cartInfoFavorite ).html( count_favourite );
// события на элементы корзины
allActionsBsk();
// при изменении данных в корзине
var a = $( sett.cartInputName );
// при наличии поля формы для содержимого корзины
if( a.length > 0 ){
// записываем туда эти данные
var cartData = JSON.stringify( getFromPrefix( 'cart_' ) );
a.val( cartData );
}
}
// позиционирование плавающей корзины
function floatBasket(){
if( sett.floatInfo ){
setTimeout(function(){
$( window ).scroll(function(){
if( $('.basketBsk .contBsk').width() < 1 ){
var pos = $( window ).scrollTop();
var h = $('.basketBsk').height();
var bodyH = $('body').height();
var bott = 1 * pos + h + 100; // 1* - подстраховался от подмены типа данных
// test( 'basketBskH - ' + h + ' bodyH - ' + bodyH + ' pos - ' + pos + ' bott - ' + bott );
if( bott < bodyH ){
$('.basketBsk').css( 'top', pos );
}
}
});
},100 );
}
}
// все события внутри корзины
function allActionsBsk(){
// удаление товара из корзины
dellFromBsk();
// изменение количества товара
changeAmountBsk();
// увеличение количества кнопкой +
changePlusBsk();
// уменьшение количества кнопкой -
changeMinusBsk();
// перемещение товара из корзины покупок в избранное
replaceItemBsk();
// удаление из избранного
dellFavourite();
// если передать в настройках дополнительное событие, исполнится здесь
if( sett.moreActions ){
eval( sett.moreActions );
}
}
// удаление товара из корзины
function dellFromBsk(){
var o = $( '.dellBsk' );
o.unbind( 'click' );
o.click(function(){
var key = $( this ).closest( '[data-key]' ).attr( 'data-key' );
localStorage.removeItem( key );
$.showCart();
});
}
// очистка корзины
function dellAllmBsk(){
var o = $( '.dellBskAll' );
o.unbind( 'click' );
o.click(function(){
localStorage.clear();
$.showCart();
});
}
// изменение количества товара
function changeAmountBsk(){
var o = $( '.amountBsk' );
o.unbind( 'change' );
o.change(function(){
changeActions( $( this ) );
return true;
});
o.unbind( 'keyup' );
o.keyup(function(){
changeActions( $( this ) );
return true;
});
}
// увеличение количества кнопкой +
function changePlusBsk(){
var o = $( '.plusBsk' );
o.unbind( 'click' );
o.click(function(){
var e = $( this ).parent().find( '.amountBsk' );
var v = parseInt( e.val() ) + 1;
e.val( v );
changeActions( e );
});
}
// уменьшение количества кнопкой -
function changeMinusBsk(){
var o = $( '.minusBsk' );
o.unbind( 'click' );
o.click(function(){
var e = $( this ).parent().find( '.amountBsk' );
var v = e.val();
v = v < 2 ? 1 : parseInt( v ) - 1;
e.val( v );
changeActions( e );
});
}
function changeActions( e ){
// защищаем от недопустимых значений
var v = parseInt( $.trim( e.val() ) );
if( v < 1 || isNaN( v ) ){
v = 1;
}
if( sett.useAmountItemManager ){
var param = $.cartSetParams( e.closest( '[data-' + sett.paramsAttrName + ']' ) );
if( param.is_amount != 'undefined' ){
// test( v + ' - ' + param.is_amount );
if( parseInt( v ) == parseInt( param.is_amount ) ){
e.parent().find( '.plusBsk' ).addClass( 'hidden' );
}
if( parseInt( v ) > parseInt( param.is_amount ) ){
v = parseInt( param.is_amount );
}
if( parseInt( v ) < parseInt( param.is_amount ) ){
e.parent().find( '.plusBsk' ).removeClass( 'hidden' );
}
}
}
e.val( v );
// это изменение количества товара происходит в корзине ( может еще в карточке товара )
var key = e.closest( '[data-key]' ).attr( 'data-key' );
if( key != undefined ){
var tmp = JSON.parse( localStorage[ key ] );
tmp.amount = v;
localStorage[ key ] = JSON.stringify( tmp );
$.showCart();
}
}
// перемещение товара из корзины покупок в избранное
function replaceItemBsk(){
var o = $( sett.replaceBsk + ':visible' );
o.unbind( 'click' );
o.click( function(){
var e = $( this ).closest( '[data-key]' );
// ключ корзины
var key = e.attr( 'data-key' );
var tmp = JSON.parse( localStorage[ key ] );
tmp = tmp['package_id'];
// ключ избранного
var key2 = key.replace( sett.prefix_cart, sett.prefix_favourite );
key2 = key2.replace( '_' + tmp, '_0' );
// добавляем избранное
localStorage[ key2 ] = localStorage[ key ];
// удаляем из корзины
localStorage.removeItem( key );
// перезагружаем корзину
$.showCart();
});
}
// удаление из избранного
function dellFavourite(){
$( '.toDellBsk' ).unbind( 'click' );
$( '.toDellBsk' ).click(function(){
var e = $( this );
var key = e.data( 'key' );
localStorage.removeItem( key );
e.closest( '.itemBsk' ).remove();
// перезагружаем корзину
$.showCart();
});
}
// проверяем доступность локального хранилища
function checkStorage(){
try{
return 'localStorage' in window && window['localStorage'] !== null;
}catch(e){
return false;
}
}
// шаблонизатор на js
function templating( html, ob ){
for( var a in ob ){
// комплексная замена ключа на значение из прилагаемого объекта
html = html.replace( new RegExp( '<%' + a + '%>' ,'g'), ob[ a ] );
}
return html;
}
return el$;
}
})(jQuery);/* файл скриптов оформления заказа */
$(function(){
// управляем видимостью дополнительной формы по оформлению доставки
$( 'input[name=TypeDelivery]' ).change(function(){
var e = $( this );
var p = e.closest( 'form' );
if( e.val() > 0 ){
p.addClass( 'delivery' );
$( '.delivery_details .required' ).attr( 'data-required', '1' );
}else{
p.removeClass( 'delivery' );
$( '.delivery_details .required' ).removeAttr( 'data-required' );
}
});
// заполняем поля формы доставки
$( '.filler_forms' ).click(function(){
// снимаем ошибки
$( '.delivery_details .errorInfo' ).remove();
// заполняем поля формы
var v = $( '.order_form [name=Name]' ).val();
var e = $( '.delivery_details [name=DeliveryPersone]' );
if( !e.val() ){
e.val( v );
}
v = $( '.order_form [name=Phone]' ).val();
e = $( '.delivery_details [name=DeliveryPhone]' );
if( !e.val() ){
e.val( v );
}
v = $( '.order_form [name=PostAddress]' ).val();
e = $( '.delivery_details [name=DeliveryAddress]' );
if( !e.val() ){
e.val( v );
}
});
});$(function(){
// подключаем модальные окна
$( '[data-modal]' ).cristallBox();
// подключаемся к формам
$().cristallForm();
$( '.search' ).submit(function(){
var e = $( this );
// если заполнено любое из этих полей - обрабатываем форму
if( e.find( '.brand' ).val() ){
return true;
}
if( e.find( 'label.checkbox input' ).prop( 'checked' ) ){
return true;
}
// полнотекстовый поиск
var v = $.trim( e.find( 'input[name="search_text"]' ).val() );
if( v.length < 2 ){
var o = $( this );
o.append( "минимум - 2 символа × " );
setTimeout(function(){
o.find( '.errorInfo' ).addClass( 'visible' );
}, 100 );
return false;
}
return true;
});
$( 'form' ).on( 'click', '.errorInfo', function(){ $( this ).remove(); } );
// управляем расширенным фильтром
$( '.search a' ).click(function(){
var el = $( '.form_element' );
var e = $( this ).closest( 'form' );
var clN = e.attr( 'class' );
// закрываем фильтр
if( clN == 'search active' ){
e.removeClass( 'active' );
// убираем из полей имя
el.removeAttr( 'name' );
}else{
// открываем фильтр
e.addClass( 'active' );
el.each(function(){
var e = $( this );
// добавляем имя к полям
var name = e.data( 'name' );
e.attr( 'name', name );
});
}
});
// управляем боковым меню
$( 'aside' ).on( 'click', '.click_link', function(){
var e = $( this ).closest( 'li' );
var classN = e.attr( 'class' );
if( classN == 'menu-item' ){
// закрываем элементы на том же уровне вложенности
e.closest( 'ul' ).find( 'li.active' ).removeClass( 'active' );
// открываем нужный
e.addClass( 'active' );
}else{
// закрываем открытых потомков
e.find( '.active' ).removeClass( 'active' );
// закрываем текущий элемент
e.removeClass( 'active' );
}
});
// управляем лимитом элементов на странице
var e = $( '.manager_block select' );
if( e.length > 0 ){
e.change(function(){
$.post( '/ajax/save_view/', { limit:$( this ).val() }, function(){
location.reload();
});
});
}
// управляем внешним видом
var e = $( '.manager_block i[data-view]' );
if( e.length > 0 ){
e.click(function(){
$.post( '/ajax/save_view/', { view:$( this ).data( 'view' ) }, function(){
location.reload();
});
});
}
// управляем сортировкой
var e = $( '.manager_block a[data-sort]' );
if( e.length > 0 ){
e.click(function(){
var e = $( this );
var way = e.closest( 'li' ).attr( 'class' );
way = way ? way : 'up';
$.post( '/ajax/save_view/', { sort:e.data( 'sort' ), way:way }, function(){
location.reload();
});
});
}
// управляем формой оформления заказа
$( 'a.order' ).click(function(){
$( '.order_block' ).toggleClass( 'active' );
});
// добавили корзину
//$( '.item .btn_block' ).cristallCart( { floatInfo:false, basketInfo:false, syncServer:false, prefix_favourite:false, containHtml:containHtml } );
$( '.item .btn_block' ).cristallCart( { discount:user_discount, keyItem:'code1c', floatInfo:false, prefix_favourite:false, floatParent:'.container.big', basketInfo:basketInfo, basketItem:basketItem, basketItemTh:basketItemTh, containHtml:containHtml } );
// скрываем кнопку оформления заказа когда в корзине пусто
setTimeout(function(){
if( $( '.staticBsk li[data-key]' ).length < 1 ){
$( '.btn.add.order' ).hide();
}
}, 1000 );
//$('input.use_mask').mask('+7 (999) 999-99-99');
// управляем профилем в личном кабинете
$( '.order_form .edit' ).click(function(){
$( '.order_form' ).addClass( 'active' );
$( '.order_form .disabled' ).removeAttr( 'disabled' );
});
$( '.order_form .no_edit' ).click(function(){
$( '.order_form' ).removeClass( 'active' );
$( '.order_form .disabled' ).attr( 'disabled', 'true' );
});
// управляем видимостью списка заказов в личном кабинете
$( '.more_elements' ).click(function(){
$( '.more_elements' ).toggleClass( 'on' );
$( '.table_parent tr.hid' ).toggleClass( 'on' );
});
// добавляем дополнительные пункты меню
$.post( '/ajax/Menu/more/', function( d ){
// добавляем подменю для Новых поступлений
$( 'aside a[href="/search/?new_add=1"]' ). after( d );
// делаем активными соответствующие пункты меню
var x = $( '[href $= "' + location.search + '"]' );
if( x.length > 0 ){
var x1 = x.parent().closest( 'li.menu-item' );
if( x1.length > 0 ){
x1.addClass( 'active' );
var x2 = x1.parent().closest( 'li.menu-item' );
if( x2.length > 0 ){
x2.addClass( 'active' );
}
}
}
});
});
// код кнопки добавления товара в карточке товара
var containHtml =
"Товар в корзине ";
// инфо-блок содержимого корзины
var basketInfo =
"" +
"
" +
"
" +
"Список товаров пуст " +
" " +
"
" +
"
" +
"
" +
"
" +
" " +
"Корзина " +
" " +
// использование формы позволяет легко реализовать сопутствующие товары на странице корзины
"
" +
"
Наименований:0
" +
"
Товаров:0
" +
"
Сумма: 0
" +
"
Купить " +
"
Очистить " +
"
" +
"
" +
"
";
// элемент списка товара в корзине
var basketItem =
"" +
"" +
" " +
" " +
"" +
"
" +
"
" +
"Артикул: " +
"<%model%> " +
"Код товара: " +
"<%code%> " +
"Производитель: " +
"<%brand%> " +
"Количество в упаковке: " +
"<%amount_pack%> " +
"Наличие на складе: " +
"<%is_amount%> " +
" "+
"
='<%params_item%>'>" +
"<%amountblock%>" +
" " +
"
" +
"
" +
" " +
" ";
var basketItemTh =
"" +
"Код товара " +
"Наименование " +
"Артикул " +
"Количество " +
"Цена " +
"Сумма " +
" ";
basketItemTh = '';
// показываем контакты
function show_contacts( block ){
$( block ).click(function(){
var e = $( this );
var id = e.data( 'id' );
var title = e.text();
$.modalOpenActions( { block:'contacts', title:title, path:'/ajax/show_contacts/', params:{"id":id} } );
});
}
function test( str ){
console.log( str );
}
function openMenu(){
$('header nav').toggleClass( 'open' );
}