{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/third-party-plugins/esm/GSAP/TweenLite.js","webpack:///./src/components/swiper/js/third-party/swiper-bundle.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/third-party-plugins/esm/Miscellaneous/scrollLock.js","webpack:///./src/third-party-plugins/esm/Miscellaneous/attrExt.js","webpack:///./src/components/_global/js/fn/UixParallax.js","webpack:///./src/components/form/js/fn/select.js","webpack:///./src/third-party-plugins/esm/Miscellaneous/hashchange.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./src/components/counter/js/fn/count-to.js","webpack:///./src/components/flexslider/js/third-party/jquery.flexslider.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./src/components/form-progress/js/fn/form-progress-to-next.js","webpack:///./src/components/form/js/fn/normal-radio.js","webpack:///./src/components/form/js/third-party/jquery.mousewheel.esm.js","webpack:///./src/components/form/js/fn/controls-hover.js","webpack:///./src/components/form/js/fn/single-seletor.js","webpack:///./src/components/form/js/fn/multi-seletor.js","webpack:///./src/components/form/js/fn/file-dropzone.js","webpack:///./src/components/form/js/fn/upload.js","webpack:///./src/components/form/js/fn/controls-disable.js","webpack:///./src/components/form/js/fn/controls-line.js","webpack:///./src/components/form/js/fn/radio-and-checkbox.js","webpack:///./src/components/table/js/fn/sort-elements.js","webpack:///./src/components/text-effect/js/fn/text-anime.js","webpack:///./src/components/_global/js/index.js","webpack:///./src/components/_global/js/fn/UixModuleFilter.js","webpack:///./src/components/_global/js/fn/UixApplyAsyncScripts.js","webpack:///./src/components/_global/js/fn/UixApplyAsyncAllScripts.js","webpack:///./src/components/_global/js/modules/body-and-header.js","webpack:///./src/components/_global/js/modules/common-height.js","webpack:///./src/components/_global/js/modules/custom-data-attrs.js","webpack:///./src/components/_global/js/modules/loader.js","webpack:///./src/components/_global/js/modules/mega-menu.js","webpack:///./src/components/_global/js/modules/mobile-menu.js","webpack:///./src/components/_global/js/modules/navigation.js","webpack:///./src/components/_global/js/modules/set-background.js","webpack:///./src/components/_global/js/modules/videos.js","webpack:///./src/components/_main/js/index.js","webpack:///./src/components/accordion-img/js/index.js","webpack:///./src/components/accordion/js/index.js","webpack:///./src/components/advanced-slider/js/basic.js","webpack:///./src/third-party-plugins/esm/GSAP/PixiPlugin.js","webpack:///./src/components/advanced-slider/js/special.js","webpack:///./src/components/AJAX-push/js/index.js","webpack:///./src/components/AJAX/js/index.js","webpack:///./src/third-party-plugins/esm/GSAP/ScrollToPlugin.js","webpack:///./src/components/back-to-top/js/index.js","webpack:///./src/components/circle-layout/js/index.js","webpack:///./src/components/counter/js/index.js","webpack:///./src/components/dropdown-menu/js/index.js","webpack:///./src/components/dropdown-menu2/js/index.js","webpack:///./src/components/dynamic-dropdown-list-json/js/index.js","webpack:///./src/components/flexslider/js/index.js","webpack:///./src/components/floating-side-element/js/index.js","webpack:///./src/components/form-progress/js/index.js","webpack:///./src/components/form/js/third-party/jquery.datetimepicker.esm.js","webpack:///./src/components/form/js/fn/datepicker.js","webpack:///./src/components/form/js/index.js","webpack:///./src/components/gallery/js/index.js","webpack:///./src/components/hybrid-content-slider/js/index.js","webpack:///./src/components/hover-delay-interaction/js/index.js","webpack:///./src/components/image-shapes/js/index.js","webpack:///./src/components/infinite-scrolling-element/js/index.js","webpack:///./src/components/lava-lamp-style-menu/js/index.js","webpack:///./src/components/lightbox/js/index.js","webpack:///./src/components/list-bulleted/js/index.js","webpack:///./src/components/list-posts/js/index.js","webpack:///./src/components/fullwidth-column-to-edge/js/index.js","webpack:///./src/components/login-templates/js/index.js","webpack:///./src/components/modal-dialog/js/fn/fire-modal-dialog.js","webpack:///./src/components/modal-dialog/js/fn/close-modal-dialog.js","webpack:///./src/components/modal-dialog/js/index.js","webpack:///./src/components/mousewheel-interaction/js/index.js","webpack:///./src/third-party-plugins/esm/GSAP/ModifiersPlugin.js","webpack:///./src/components/multi-items-carousel/js/index.js","webpack:///./src/components/one-page/js/index.js","webpack:///./src/components/one-page2/js/index.js","webpack:///./src/components/parallax/js/index.js","webpack:///./src/components/periodical-scroll/js/index.js","webpack:///./src/components/pricing/js/index.js","webpack:///./src/components/progress-bar/js/index.js","webpack:///./src/components/progress-line/js/index.js","webpack:///./src/components/retina/js/index.js","webpack:///./src/components/rotating-elements/js/index.js","webpack:///./src/components/scroll-reveal/js/index.js","webpack:///./src/components/scrollspy-animate/js/index.js","webpack:///./src/components/show-more-less/js/index.js","webpack:///./src/components/skew-on-scroll/js/index.js","webpack:///./src/components/smooth-scrolling-anchor-link/js/index.js","webpack:///./src/components/smooth-scrolling-page/js/index.js","webpack:///./src/components/sticky-elements/js/index.js","webpack:///./src/components/svg-map/js/china.js","webpack:///./src/components/svg-map/js/world.js","webpack:///./src/components/svg-mask-slider/js/index.js","webpack:///./src/components/swiper/js/index.js","webpack:///./src/third-party-plugins/esm/THREE/extensions/ShaderRuntime.custom.js","webpack:///./src/components/simple-3D-background-three/js/index.js","webpack:///./src/components/simple-3D-background-three2/js/index.js","webpack:///./src/components/simple-3D-background-three2/js/shader/fragment-custom.glsl","webpack:///./src/components/simple-3D-background-three2/js/shader/vertex-custom.glsl","webpack:///./src/components/simple-3D-background-three3/js/index.js","webpack:///./src/components/simple-3D-background/js/index.js","webpack:///./src/components/simple-3D-carousel/js/index.js","webpack:///./src/third-party-plugins/esm/THREE/controls/OrbitControls.js","webpack:///./src/components/simple-3D-gallery/js/index.js","webpack:///./src/components/simple-3D-image-transition/js/index.js","webpack:///./src/components/simple-3D-image-transition/js/shader/vertex-custom.glsl","webpack:///./src/components/simple-3D-image-transition/js/shader/fragment-custom.glsl","webpack:///./src/third-party-plugins/esm/THREE/loaders/GLTFLoader.js","webpack:///./src/components/simple-3D-model/js/index.js","webpack:///./src/third-party-plugins/esm/THREE/renderers/CSS3DRenderer.js","webpack:///./src/components/simple-3D-pages/js/index.js","webpack:///./src/components/simple-3D-particle-effect/js/index.js","webpack:///./src/components/simple-3D-sphere-three/js/index.js","webpack:///./src/components/simple-3D-obj-anim-interaction/js/index.js","webpack:///./src/components/simple-3D-mouse-interaction/js/index.js","webpack:///./src/components/simple-3D-mouse-interaction2/js/index.js","webpack:///./src/third-party-plugins/esm/THREE/modifiers/ExplodeModifier.js","webpack:///./src/components/simple-3D-shatter-slider/js/index.js","webpack:///./src/components/simple-3D-explosive-particle-slider/js/index.js","webpack:///./src/components/simple-3D-liquid-scrollspy-slider/js/index.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/EffectComposer.js","webpack:///./src/components/simple-3D-liquid-scrollspy-slider/js/shader/vertex-custom.glsl","webpack:///./src/components/simple-3D-liquid-scrollspy-slider/js/shader/fragment-custom.glsl","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/MaskPass.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/TexturePass.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/ShaderPass.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/RenderPass.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/ClearPass.js","webpack:///./src/third-party-plugins/esm/THREE/shaders/CopyShader.js","webpack:///./src/third-party-plugins/esm/THREE/shaders/ConvolutionShader.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/BloomPass.js","webpack:///./src/third-party-plugins/esm/THREE/postprocessing/FilmPass.js","webpack:///./src/third-party-plugins/esm/THREE/shaders/FilmShader.js","webpack:///./src/components/simple-3D-filmic-effects/js/index.js","webpack:///./src/components/simple-3D-simulate-html-layout/js/index.js","webpack:///./src/components/table/js/basic.js","webpack:///./src/components/table/js/sorter.js","webpack:///./src/components/tabs/js/index.js","webpack:///./src/components/team-focus/js/index.js","webpack:///./src/components/text-effect/js/index.js","webpack:///./src/components/timeline/js/index.js","webpack:///./src/components/vertical-menu/js/index.js","webpack:///./src/components/wordpress/js/index.js"],"names":["parentHotUpdateCallback","window","chunkId","moreModules","hotAvailableFilesMap","hotRequestedFilesMap","moduleId","Object","prototype","hasOwnProperty","call","hotUpdate","hotWaitingFiles","hotChunksLoading","hotUpdateDownloaded","hotAddUpdateChunk","hotCurrentChildModule","hotApplyOnUpdate","hotCurrentHash","hotRequestTimeout","hotCurrentModuleData","hotCurrentParents","hotCurrentParentsTemp","hotCreateRequire","me","installedModules","__webpack_require__","fn","request","hot","active","parents","indexOf","push","children","console","warn","name","defineProperty","configurable","enumerable","get","set","value","ObjectFactory","e","hotStatus","hotSetStatus","then","finishChunkLoading","err","hotWaitingFilesMap","hotEnsureUpdateChunk","t","mode","hotStatusHandlers","newStatus","i","length","hotDeferred","hotUpdateNewHash","hotQueuedInvalidatedModules","toModuleId","id","hotCheck","apply","Error","requestTimeout","Promise","resolve","reject","XMLHttpRequest","requestPath","p","open","timeout","send","onreadystatechange","readyState","status","update","JSON","parse","responseText","hotApplyInvalidatedModules","c","h","promise","script","document","createElement","charset","src","head","appendChild","deferred","hotApply","result","outdatedModules","options","hotApplyInternal","cb","j","module","getAffectedStuff","updateModuleId","outdatedDependencies","queue","map","chain","queueItem","pop","_selfAccepted","_selfInvalidated","_selfDeclined","type","_main","parentId","parent","_declinedDependencies","concat","_acceptedDependencies","addAllToSet","a","b","item","appliedUpdate","warnUnexpectedRequire","abortError","doApply","doDispose","chainInfo","join","onDeclined","ignoreDeclined","onUnaccepted","ignoreUnaccepted","onAccepted","onDisposed","outdatedSelfAcceptedModules","slice","errorHandler","keys","forEach","installedChunks","idx","data","disposeHandlers","_disposeHandlers","child","splice","dependency","moduleOutdatedDependencies","undefined","modules","error","callbacks","onErrored","dependencyId","ignoreErrored","err2","originalError","list","hotApplyInvalidatedModule","exports","l","accept","dep","callback","decline","dispose","addDisposeHandler","removeDisposeHandler","invalidate","this","check","addStatusHandler","removeStatusHandler","m","d","getter","o","r","Symbol","toStringTag","__esModule","ns","create","key","bind","n","object","property","s","_gsScope","global","globals","_exports","_doc","_globals","GreenSockGlobals","TweenLite","_namespace","split","_slice","_emptyFunc","Definition","dependencies","func","sc","_defLookup","gsClass","_classes","init","cur","cl","missing","_tickerActive","toString","array","gs","_tinyNum","_isArray","obj","Array","_gsDefine","_class","_baseParams","Ease","extraParams","power","_func","_type","_power","_params","_easeMap","_easeReg","register","ease","names","types","na","ta","easing","getRatio","_calcEnd","pw","linear","Linear","easeIn","swing","Quad","easeInOut","EventDispatcher","target","_listeners","_eventTarget","addEventListener","scope","useParam","priority","listener","index","_ticker","wake","pr","up","removeEventListener","dispatchEvent","_reqAnimFrame","requestAnimationFrame","_cancelAnimFrame","cancelAnimationFrame","_getTime","Date","now","getTime","_lastUpdate","fps","useRAF","_tick","manual","overlap","dispatch","elapsed","_lagThreshold","_startTime","_adjustedLag","_self","time","_nextTime","_fps","frame","_gap","_id","_req","_useRAF","tick","lagSmoothing","threshold","adjustedLag","arguments","Math","min","sleep","clearTimeout","seamless","f","setTimeout","visibilityState","Ticker","events","constructor","Animation","duration","vars","tl","_duration","_totalDuration","_delay","Number","delay","_timeScale","_active","immediateRender","_reversed","reversed","_rootTimeline","useFrames","_rootFramesTimeline","add","_time","paused","ticker","_dirty","_gc","_initted","_paused","_totalTime","_rawPrevTime","_next","_last","_onUpdate","_timeline","timeline","_checkTimeout","unref","play","from","suppressEvents","seek","pause","atTime","resume","totalTime","restart","includeDelay","reverse","totalDuration","render","force","_enabled","isActive","rawTime","startTime","enabled","ignoreTimeline","_remove","_kill","kill","_uncache","includeSelf","tween","_swapSelfInParams","params","copy","_callback","v","callbackScope","eventCallback","substr","smoothChildTiming","uncapped","_pauseTime","_lazyTweens","_lazyRender","progress","totalProgress","ratio","_sortChildren","endTime","includeRepeats","timeScale","pauseTime","raw","SimpleTimeline","autoRemoveChildren","_first","_recent","insert","position","align","stagger","prevTween","st","_prev","skipDisable","next","_isSelector","nodeType","style","selector","targ","targets","isSelector","jquery","overwrite","_overwrite","_overwriteLookup","defaultOverwrite","_targets","_propLookup","_siblings","_register","_applyOverwrite","_firstPT","_overwrittenProps","_startAt","_notifyPluginsOfEnabled","_lazy","version","defaultEase","_ease","autoSleep","$","jQuery","querySelectorAll","getElementById","charAt","_setRatio","val","pt","blob","end","start","_tween","_target","fp","_blobRound","_blobDif","filter","startNums","endNums","num","nonNumbers","currentNum","charIndex","color","match","_numbersExp","_applyPT","parseFloat","parseInt","round","setRatio","_relExp","test","_addPropTween","prop","overwriteProp","mod","funcParam","stringFilter","getterName","isRelative","pg","isNaN","replace","defaultStringFilter","_lazyLookup","_internals","isArray","lazyTweens","blobDif","_plugins","_tweenLookup","tweenLookup","_tweenLookupNum","_reservedProps","reservedProps","onComplete","onCompleteParams","onCompleteScope","runBackwards","startAt","onUpdate","onUpdateParams","onUpdateScope","onStart","onStartParams","onStartScope","onReverseComplete","onReverseCompleteParams","onReverseCompleteScope","onRepeat","onRepeatParams","onRepeatScope","easeParams","yoyo","repeat","repeatDelay","autoCSS","lazy","onOverwrite","yoyoEase","none","all","auto","concurrent","allOnStart","preexisting","_nextGCFrame","lazyRender","_updateRoot","tweens","_onOverwrite","overwrittenTween","overwritingTween","killedProps","r1","r2","scrub","_gsTweenID","props","siblings","changed","curTween","globalStart","overlaps","oCount","zeroDur","_checkOverlap","reference","ts","_init","initPlugins","startVars","op","dur","immediate","to","config","_easeType","_easePower","_initProps","_onPluginEvent","propLookup","overwrittenProps","plugin","css","_autoCSS","_onInitTween","_priority","_overwriteProps","_onInitAllProps","_onDisable","_onEnable","isComplete","rawPrevTime","pow","self","prevTime","prevRawPrevTime","killProps","record","killed","simultaneousOverwrite","firstPT","_tempKill","fromTo","fromVars","toVars","delayedCall","getTweensOf","onlyActive","killTweensOf","killDelayedCallsTo","TweenPlugin","_propName","_super","API","_addTween","lookup","_mod","_roundProps","pt2","first","last","activate","plugins","propName","overwriteProps","initAll","Plugin","toUpperCase","_gsQueue","log","nonGlobals","com","greensock","core","Power1","Power2","Power3","Power4","factory","_defineProperties","descriptor","writable","_extends","assign","source","isObject","extend","ssrDocument","body","activeElement","blur","nodeName","querySelector","createEvent","initEvent","childNodes","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","matchMedia","getWindow","win","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","_construct","Parent","args","Class","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","instance","Function","_wrapNativeSuper","_cache","Map","TypeError","has","Wrapper","Dom7","_Array","subClass","superClass","items","proto","_this","ReferenceError","_assertThisInitialized","arrayFlat","arr","res","el","arrayFilter","context","html","trim","toCreate","tempParent","innerHTML","qsa","uniqueArray","arrayUnique","support","device","browser","Methods","addClass","_len","classes","_key","classNames","_el$classList","classList","removeClass","_len2","_key2","_el$classList2","remove","hasClass","_len4","_key4","className","contains","toggleClass","_len3","_key3","toggle","attr","attrs","getAttribute","attrName","removeAttr","removeAttribute","transform","transition","on","_len5","_key5","eventType","targetSelector","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","_parents","k","handleEvent","_event","dom7LiveListeners","proxyListener","event","dom7Listeners","off","_len6","_key6","handlers","handler","dom7proxy","trigger","_len9","_key9","evt","detail","bubbles","cancelable","dataIndex","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","_styles","styles","offsetWidth","outerHeight","_styles2","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","_prop","each","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","prepend","insertBefore","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","_parent","closest","find","foundElements","found","removeChild","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isObject$1","extend$1","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","bindModuleMethods","subKey","getSupport","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","opts","gestures","getDevice","overrides","_temp","platform","ua","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","ios","width","height","os","getBrowser","isEdge","isSafari","toLowerCase","isWebView","methodName","Resize","swiper","resize","resizeHandler","destroyed","initialized","emit","orientationChangeHandler","destroy","Observer","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","observe","attributes","childList","characterData","observers","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","disconnect","Observer$1","onResize","allowSlideNext","allowSlidePrev","snapGrid","breakpoints","setBreakpoint","updateSize","updateSlides","updateSlidesClasses","slidesPerView","isEnd","isBeginning","centeredSlides","slideTo","slides","activeIndex","autoplay","running","run","watchOverflow","checkOverflow","dummyEventAttached","dummyEventListener","defaults","direction","touchEventsTarget","initialSlide","speed","cssMode","updateOnWindowResize","preventInteractionOnTransition","url","edgeSwipeDetection","edgeSwipeThreshold","freeMode","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeSticky","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","spaceBetween","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","slidesPerGroupSkip","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","allowTouchMove","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","preloadImages","updateOnImagesReady","loop","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","prototypes","modular","useParams","instanceParams","moduleName","useModules","modulesParams","moduleParams","moduleEventName","eventsEmitter","method","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","clientWidth","clientHeight","isHorizontal","isVertical","size","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","slidesGrid","slidesSizesGrid","slidesForMargin","slideEl","slideIndex","offsetBefore","offsetAfter","slidesNumberEvenToRows","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","floor","ceil","max","newSlidesGrid","allSlidesSize","maxSnap","_allSlidesSize","allSlidesOffset","slidesPerRow","numFullColumns","slideSize","groupIndex","slideIndexInGroup","columnsInGroup","row","column","newSlideOrderIndex","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","_boxSizing","slide","order","swiperSlideSize","abs","_i","slidesGridItem","_i2","_slidesGridItem","slideSizeValue","snap","snapIndex","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","setTransition","visibleSlides","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","visibleSlidesIndexes","slideBefore","slideAfter","slideProgress","minTranslate","updateProgress","multiplier","translatesDiff","maxTranslate","wasBeginning","wasEnd","activeSlide","realIndex","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","skip","previousIndex","previousRealIndex","previousSnapIndex","updateClickedSlide","slideFound","clickedSlide","clickedIndex","currentTranslate","setTranslate","byController","wrapperEl","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","newTranslate","_wrapperEl$scrollTo","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","transitionStart","dir","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","diff","loopDestroy","setGrabCursor","moving","isLocked","cursor","unsetGrabCursor","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","attachEvents","touchEvents","onTouchStart","$targetEl","startX","startY","preventDefault","shouldPreventDefault","touchEventsData","touches","originalEvent","isTouchEvent","which","button","isTouched","isMoved","allowClick","currentX","targetTouches","pageX","currentY","pageY","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","diffX","diffY","sqrt","atan2","PI","nested","stopPropagation","startTranslate","allowMomentumBounce","disableParentSwiper","velocities","onTouchEnd","currentPos","lastMoveEvent","velocityEvent","distance","touchEndTime","timeDiff","lastClickTime","velocity","momentumDuration","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","moveDistance","currentSlideSize","doBounce","bounceAmount","stopIndex","groupSize","_increment","navigation","nextEl","prevEl","onScroll","onClick","stopImmediatePropagation","move","passive","cancel","detachEvents","breakpoint","breakpointOnlyParams","breakpointParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","_swiper$loopedSlides","getBreakpoint","currentBreakpoint","param","paramValue","originalParams","emitContainerClasses","changeDirection","points","point","minRatio","innerHeight","sort","_points$i","innerWidth","wasLocked","lastSlidePosition","addClasses","suffixes","suffix","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","eventName","desktop","swipers","containerEl","newParams","shadowRoot","touchEventsTouch","touchEventsDesktop","clickTimeout","Constructor","protoProps","staticProps","_proto","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","Virtual","_swiper$params","_swiper$params$virtua","addSlidesBefore","addSlidesAfter","_swiper$virtual","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","slidesAfter","offsetProp","slidesBefore","onRendered","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","cache","$slideEl","newCache","numberOfNewSlides","cachedIndex","$cachedEl","cachedElIndex","Virtual$1","beforeInit","overwriteParams","Keyboard","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","enable","disable","Keyboard$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","element","isSupported","implementation","hasFeature","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","mousewheel","eventsTarget","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","_newEvent","sign","ignoreWheelEvents","_recentWheelEvents","_prevEvent","firstEvent","snapToThreshold","sensitivity","shift","autoplayDisableOnInteraction","stop","newEvent","prevEvent","animateSlider","releaseScroll","thresholdDelta","thresholdTime","Navigation","_swiper$navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","_swiper$navigation2","Pagination","pagination","current","progressbarDirection","scale","scaleX","scaleY","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBulletsLength","bulletsOffset","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarOpposite","progressbarFillClass","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","getPointerPosition","clientX","clientY","setDragPosition","dragStartPos","positionRatio","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragClass","dragEl","draggable","Parallax","setTransform","currentOpacity","currentScale","parallax","parallaxEl","$parallaxEl","parallaxDuration","Zoom","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","onGestureChange","scaleMove","onGestureEnd","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","out","in","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","toggleGestures","slideSelector","enableGestures","gesturesEnabled","disableGestures","activeListenerWithCapture","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","background","$pictureEl","slideOriginalIndex","originalSlide","duplicatedSlide","sourceEl","$source","preloaderClass","slideExist","initialImageLoaded","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Controller","LinearSpline","guess","i1","i3","binarySearch","interpolate","getInterpolateFunction","controller","spline","_setTranslate","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","A11y","makeElFocusable","makeElNotFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","a11y","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","message","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","History","hashNavigation","paths","getPathValues","scrollToSlide","setHistoryPopState","urlOverride","URL","pathArray","part","setHistory","currentState","slugify","includes","state","HashNavigation","onHashCange","newHash","setHash","watchState","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","waitForTransition","onVisibilityChange","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","$cubeShadowEl","swiperWidth","swiperHeight","cubeEffect","wrapperRotate","shadow","shadowAngle","scale1","scale2","slideAngle","tz","shadowBefore","shadowAfter","slideShadows","shadowOffset","shadowScale","sin","cos","zFactor","Flip","flipEffect","limitRotation","rotateY","rotateX","zIndex","Coverflow","coverflowEffect","center","rotate","depth","offsetMultiplier","modifier","translateZ","stretch","$shadowBeforeEl","$shadowAfterEl","slideTransform","Thumbs","thumbsParams","thumbs","SwiperClass","swiperCreated","thumbsContainerClass","onThumbClick","currentIndex","thumbsSwiper","slideThumbActiveClass","initial","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","newThumbsIndex","autoScrollOffset","useOffset","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","components","hideOnClick","toEdge","fromEdge","isHidden","_swiper$navigation3","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","touchStart","touchEnd","doubleTap","slideChange","loadOnTransitionStart","scroll","scrollbarDragMove","notificationClass","paginationUpdate","disableOnInteraction","beforeTransitionStart","sliderFirstMove","beforeDestroy","define","g","saveStyles","styleStrs","styleAttr","$html","styleHash","styleString","keyValue","prevStyles","lock","appliedLock","locked","prevScroll","lockStyles","unlock","scrollLock","old","specified","UixParallax","settings","bg","xPos","bgEff","$this","bgXpos","spyTop","TweenMax","backgroundPosition","UixRenderCustomSelect","targetWrapper","itemsWrapper","not","labelText","dataExist","template","selected","wrap","after","$selectWrapper","$selectCurWrapper","curVal","change","$cusSelect","newOptions","msie","RegExp","$1","fake_onhashchange","timeout_id","iframe","iframe_src","last_hash","history_set","history_get","str_hashchange","special","doc_mode","documentMode","supports_onhashchange","get_fragment","fn_retval","poll","history_hash","setup","teardown","one","insertAfter","contentWindow","onpropertychange","propertyName","title","iframe_doc","domain","write","close","originalModule","webpackPolyfill","UixCountTo","fixed","refreshInterval","dilimiter","doubleDigits","loops","$self","loopCount","formattedValue","toFixed","interval","clearInterval","setInterval","removeData","focused","flexslider","slider","watchedEventClearTimer","namespace","msGesture","msPointerEnabled","MSGesture","watchedEvent","vertical","carousel","itemWidth","fade","animation","asNav","asNavFor","methods","animatingTo","atEnd","containerSelector","container","count","syncExists","sync","manualPause","stopped","started","startTimeout","transitions","video","useCSS","pfx","ensureAnimationEnd","controlsContainer","manualControls","customDirectionNav","randomize","random","empty","doMath","controlNav","directionNav","multipleKeyboard","keycode","getTarget","flexAnimate","pauseOnAction","pausePlay","slideshow","pauseInvisible","pauseOnHover","hover","manualPlay","initDelay","smoothHeight","currentItem","_slider","that","_gesture","currentTarget","addPointer","pointerId","$slide","posFromX","right","setupManual","setupPaging","controlNavScaffold","pagingCount","captn","altText","thumbCaptions","delegate","setToClearWatchedEvent","action","pos","directionNavScaffold","prevText","nextText","animationLoop","pausePlayScaffold","playText","pauseText","cwidth","dx","startT","scrolling","localX","localY","accDx","msTouchAction","w","limit","itemW","itemMargin","cloneOffset","transX","transY","translationX","translationY","MSGESTURE_FLAG_INERTIA","setProps","setImmediate","updateDx","canAdvance","computedW","viewport","newSlides","$obj","animate","playing","uniqueID","$clone","visProp","evtname","getHiddenProp","prefixes","override","withSync","fromNav","master","visible","dimension","margin","calcNext","slideString","before","wrapup","animationSpeed","unbind","animateSlides","animatedSlides","slideshowSpeed","posCheck","sliderOffset","fadeFirstSlide","appendTo","cloneCount","makeArray","clone","computedM","slideMargin","minItems","maxItems","boxPadding","itemT","itemM","minW","maxW","added","removed","focus","allowOneSlide","$slides","fadeIn","$slider","Timeout","clearFn","_clearFn","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","nextHandle","tasksByHandle","currentlyRunningATask","registerImmediate","channel","messagePrefix","attachTo","runIfPresent","task","onGlobalMessage","process","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","attachEvent","MessageChannel","port1","port2","documentElement","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","noop","env","argv","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","UixFormProgressToNext","formTarget","indicator","tarIndex","curIndex","$sections","$formTarget","$indicator","allStep","stepPerValue","durString","isMS","numberNum","animeSpeed","currentFormStep","$nextForm","currentFormIndex","currentContentH","curText","UixRenderNormalRadio","controls","targetID","switchIDs","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","onmousewheel","getLineHeight","getPageHeight","elem","$elem","$parent","adjustOldDeltas","normalizeOffset","absDelta","lineHeight","pageHeight","boundingRect","orgEvent","offsetX","offsetY","fix","shouldAdjustOldDeltas","deltaFactor","nullLowestDelta","unmousewheel","UixRenderControlsHover","UixRenderCustomSingleSel","UixRenderCustomMultiSel","UixRenderCustomFileDropzone","$dropZone","dropZoneTimeout","node","reader","input","files","FileReader","imgName","readAsDataURL","UixRenderCustomFile","$fileInput","$fileBtn","$filePath","focusin","UixRenderControlsDisable","UixRenderControlsLineEff","customControls","UixRenderCustomRadioCheckbox","radioWrapper","checkboxWrapper","customRadio","customToggle","customCheckbox","offText","onText","show","sortElements","comparator","getSortable","placements","sortElement","nextSibling","createTextNode","UixTextEff","selectors","scrollSpy","txtEff","scrollUpdate","anime","elasticity","actived","templateUrl","homeUrl","APP_ROOTPATH","ajaxUrl","_APP","ActiveXObject","UixModuleInstance","documentReady","pageLoaded","isFunction","waitForImages","ready","setContext","contextSelector","component","UixGUID","UixMath","evaluate","chars","oplast","UixCssProperty","getTransitionDuration","webkitTransitionDuration","webkitTransitionDelay","getAbsoluteCoordinates","leftPos","topPos","parentElement","UixModuleFilter","UixApplyAsyncScripts","scrollReveal","ajaxPostList","ajaxDDList","counterAnim","lightBox","MAIN","COMMON_HEIGHT","ADVANCED_SLIDER","ADVANCED_SLIDER_FILTER","FULL_WIDTH_COLUMN_TO_EDGE","STICKY_EL","TEXT_EFFECT","TIMELINE","HYBRID_CONTENT_SLIDER","TABLE","TABLE_SORTER","MODAL_DIALOG","PARALLAX","VIDEOS","BODY_AND_HEADER","SET_BG","GET_CUSTOM_ATTRS","PAGINATION","FORM","FLEXSLIDER","RETINA","SHOW_MORELESS","DROPDOWN_MENU","DROPDOWN_MENU2","ACCORDION","GALLERY","IMAGE_SHAPES","PERIODICAL_SCROLL","PRICING","PROGRESS_BAR","PROGRESS_LINE","ROTATING_EL","SMOOTH_SCROLLING_ANCHORLINK","SWIPER","TABS","TEAM_FOCUS","LAVA_LAMP_STYLE_MENU","CIRCLE_LAYOUT","MULTI_ITEMS_CAROUSEL","THREE_BACKGROUND","THREE_CAROUSEL","THREE_LIQUID_SCROLLSPY_SLIDER","SCROLL_REVEAL","POST_LIST_AJAX","DYNAMIC_DD_LIST","COUNTER","LIGHTBOX","uix_sc_init","UixApplyAsyncAllScripts","runAll","scipts_pageLoaded","scipts_documentReady","$window","headerInit","$headerPlaceholder","commonHeightInit","maxHeight","curAttrs","customPostData","LOADER","lastTouchEnd","videosTotal","videos","videosLoaded","loadingAnim","per","loadedPercent","imgTotal","loaded","success","done","loadedFun","remainedPercentComplete","_src","videoURL","currentPercent","MEGA_MENU","megaMenuInit","$menuWrap","maxWidth","mega_old_item","mega_single_w","chkWidth","root_li","col_total","mega_div","mega_div_w","root_li_left","perDefaultW","MOBILE_MENU","$toggle","$toggleBody","mobileMenuInit","when","logoURL","$e","$sub","NAVIGATION","ulForDesktop","curMenuIndex","mTop","easeOut","setBGInit","dataImg","dataPos","dataSize","dataRepeat","dataEasing","dataOffsetTop","dataParallax","dataMove","moveAnim","moveAnimLoop","moveEasing","fill","Modernizr","cssanimations","btnEv","curVideoID","coverPlayBtnID","videoWrapperW","dataAuto","dataLoop","dataControls","dataW","dataH","touchevents","myPlayer","videojs","initVideo","curW","videoWidth","curH","videoHeight","newW","newH","muted","currentTime","modalDialogTrigger","vmp4","vwebm","vogv","videoSrcIfm","videoSrcMp4","videoSrcWebm","videoSrcOgv","videoPoster","videoContainerMid","videoContainerVid","displayVC","$vContainer","alpha","$vLoader","vid","newMaxW","newMaxH","myPlayerInit","$ifm","mt","ACCORDION_BG","aEvent","outReset","offsetVal","closeBtn","$li","itemInit","openItem","firstShow","expanded","$content","animDelay","$sliderWrapper","sliderInit","nativeItemW","nativeItemH","dataControlsPagination","dataControlsArrows","dataDraggable","dataDraggableCursor","dataCountTotal","dataCountCur","dataTiming","imgURL","img","$items","$first","activated","dequeue","addItemsToStage","isFinite","sliderAutoPlay","playTimes","mouseenter","mouseleave","timing","countTotalID","countCurID","paginationID","arrowsID","sliderUpdates","draggableCursor","itemTotal","normalSliderVideoInit","_dot","curDir","$dragDropTrigger","origin_mouse_x","origin_mouse_y","elementIndex","$current","dirIndicatorClass","currentLlement","itemDefaultInit","wrapper","$replayBtn","_colorStringFilter","_numExp","_relNumExp","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","fuchsia","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","m1","m2","_parseColor","format","wasHSL","toHSL","_formatColors","temp","colors","_colorExp","parsed","_idMatrix","_lumR","_lumG","_lumB","_applyMatrix","z","_setSaturation","inv","_colorize","_setHue","_setContrast","_getFilter","filterClass","PIXI","filters","_addColorMatrixFilterCacheTween","_applyBrightnessToMatrix","brightness","ColorMatrixFilter","_CMFdefaults","contrast","saturation","colorizeAmount","colorize","hue","_addColorTween","colorSetter","proxy","_buildColorSetter","graphics","dirty","clearDirty","_colorProps","tint","lineColor","fillColor","_xyContexts","_contexts","tileX","tileY","_colorMatrixFilterProps","colorMatrixFilter","combineCMF","_DEG2RAD","_degreesToRadians","combined","PixiPlugin","values","DisplayObject","colorMatrix","padding","isV4","VERSION","rotation","_gsColorMatrixFilter","combine","startMatrix","resolution","_parseColorMatrixFilter","blurPadding","Graphics","geometry","graphicsData","colorProps","parseColor","formatColors","colorStringFilter","registerPIXI","utils","skipHello","renderer","renderer__filter","stage__filter","container__items","displacementSprite","displacementFilter","animSpeed","canvasHeights","rendererOuterID","rendererCanvasID","rendererCanvasID__filter","dataSpeed","dataFilterTexture","webgl","filterTexture","imgCur","$thisItem","curW_img","curH_img","newH_img","Application","antialias","autoResize","view","autoDetectRenderer","Container","Sprite","Texture","DisplacementFilter","texture","curSprite","videoSource","baseTexture","resource","anchor","stage","addChild","canvasDefaultInit","canvasRatio","interactive","wrapMode","WRAP_MODES","REPEAT","autoFit","autoStart","CLAMP","curSpriteMask","lineStyle","beginFill","moveTo","lineTo","endFill","mask","transitionInteractions","fixCanvasTagSize","prevElementIndex","goType","$myRenderer","$allItems","spTotal","pixi","curSp","videoSource2","_texture","imageType","prevSp","baseTimeline","TimelineMax","clear","rotateSpite","restoreX","parallaxSpeed","curSpParallax","prevSpParallax","objParallax","restoreItems","AJAX_PUSH_CONTENT","timeClockInit","AJAXPageLinks","sources","ajaxConfig","loadedProgress","pushAction","loading","btn","axiosInterceptor","axios","interceptors","formData","FormData","defaultPostData","responseType","response","htmlCode","pushContent","perInit","hideLoader","content","ajaxSucceeds","textureLoaded","promises","crossOrigin","path","loadImages","timeStart","eject","curURL","eleTarget","goURL","curConfig","backConfig","AJAX_PAGE_LOADER","animationTime","loaderRemoveDelay","$navs","$sectionsContainer","ajaxContainer","curAjaxPageID","lastAnimation","ajaxInit","customIndex","wheel","turl","oldContent","newContent","$originalItem","$cloneItem","prependTo","pageIndex","onDeviceWheel","timeNow","mobileDeltaY","_max","dim","client","_window","_buildGetter","pageXOffset","_getOffset","rect","isRoot","cRect","pageYOffset","offsets","_parseVal","currentVal","ScrollToPlugin","_wdw","_autoKill","autoKill","getX","getY","xPrev","yPrev","skipX","skipY","yDif","xDif","autoKillThreshold","onAutoKill","onAutoKillScope","onAutoKillParams","getOffset","buildGetter","scrollTo_x","scrollTo_y","BACK_TO_TOP","scrolled","$ul","liWidth","liHeight","radius","radius2","step","pad","angle","transitionDelay","$scrollElements","selectedIndex","offsetParent","$verticalMenuLi","ranID","ID","jsonFile","dataType","paramsWithJson","placeholderStrArr","controlIDsArr","appendTemp","jsonData","initSelectControls","selectIndex","$select","allControlsLength","controlView","curSelWrapperID","isCustomSel","$curSelWrapper","$targetClearSel","tid","curSelInputID","clearAllSelControls","emptyOption","_name","curDeep","$targetSel","sendData","parseHTML","lastData","lastSelWrapperID","defaultVal","pluginNamespace","getGridSize","initslides","sliderWrapper","thisSlider","fireState","myCustomDirectionNav","activeClass","prevClass","nextClass","$prev","$next","dataNhumbs","dataPNThumbs","dataTimeline","dataShowItems","dataShowItemsMove","dataCustomConID","curTotalWidth","pimg","nimg","$plink","$plinkPrev","$plinkNext","showCountTotal","showCountCur","countTotalSelector","countCurSelector","videoEmbedInit","lightbox","$sliderDefault","myControlsContainer","timer","wheeling","navThumbClass","dataDrag","dataWheel","dataPrev","dataNext","dataAnim","dataPaging","dataArrows","customConID","dataSync","my_itemWidth","my_move","my_minItems","my_maxItems","curSync","thisSliderID","slideNumber","childrenSlidesObj","childrenSlides","updateChildrenSlides","gridSize","FLOATING_SIDE_EL","documentHeight","$floatingSideEl","floatingOffset","maxPosition","sideBarHeight","DateFormatter","FORM_PROGRESS","formReset","u","dateSettings","days","daysShort","months","monthsShort","meridiem","ordinal","1","2","3","separators","validParts","intParts","tzParts","tzClip","getMonth","parseDate","date","year","month","day","hour","sec","guessDate","setMonth","setDate","getFullYear","setFullYear","setHours","setMinutes","setSeconds","parseFormat","D","getDate","N","getDay","Y","W","F","M","L","A","G","B","getUTCHours","getUTCMinutes","getUTCSeconds","getHours","H","getMinutes","getSeconds","getMilliseconds","exec","String","I","UTC","O","getTimezoneOffset","P","T","Z","U","formatDate","initDateFormatter","locale","default_options","i18n","globalLocale","dayOfWeek","dayOfWeekShort","substring","dateHelper","defaultDateHelper","dateFormatterOptionsDefault","ar","ro","fa","ru","uk","en","de","nl","tr","fr","es","th","pl","ch","se","km","kr","it","da","no","ja","vi","sl","cs","hu","az","bs","ca","et","eu","fi","gl","hr","ko","lt","lv","mk","mn","sk","sq","sr","sv","zh","ug","he","hy","kg","rm","ka","ownerDocument","formatTime","startDate","monthChangeSpinner","closeOnDateSelect","closeOnTimeSelect","closeOnWithoutClick","closeOnInputClick","openOnFocus","timepicker","datepicker","weeks","defaultTime","defaultDate","minDate","maxDate","minTime","maxTime","minDateTime","maxDateTime","allowTimes","opened","initTime","inline","theme","touchMovedThreshold","onSelectDate","onSelectTime","onChangeMonth","onGetWeekOfYear","onChangeYear","onChangeDateTime","onShow","onClose","onGenerate","withoutCopyright","inverseButton","hours12","dayOfWeekStart","parentID","timeHeightInTimePicker","timepickerScrollbar","todayButton","prevButton","nextButton","defaultSelect","scrollMonth","scrollTime","scrollInput","lazyInit","validateOnBlur","allowBlank","yearStart","yearEnd","monthStart","monthEnd","roundTime","weekends","highlightedDates","highlightedPeriods","allowDates","allowDateRe","disabledDates","disabledWeekDays","yearOffset","beforeShowDay","enterLikeTab","showApplyButton","insideParent","dateFormatters","moment","formatter","isFormatStandard","isValid","toDate","formatMask","datetimepicker","setLocale","newLocale","setDateFormatter","dateFormatter","df","standardFormats","RFC_2822","ATOM","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RSS","W3C","HighlightedDate","re","currentStyle","countDaysInMonth","xdsoftScroller","percent","pointerEventToXY","timebox","parentHeight","scroller","calcOffset","timeboxparent","maximumOffset","startTop","h1","startTopScroll","arguments_callee","percentage","noTriggerScroll","sh","coord","opt","opt2","CTRLKEY","ENTER","ESC","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","TAB","F5","AKEY","CKEY","VKEY","ZKEY","YKEY","ctrlDown","isPlainObject","lazyInitTimer","createDateTimePicker","xchangeTimer","timerclick","current_time_index","setPos","_xdsoft_datetime","forEachAncestorOf","xdsoft_copyright","month_picker","calendar","applyButton","monthselect","yearselect","triggerAfterOpen","select","handleTouchMoved","touchPosition","touchStartPosition","xMovement","yMovement","touchMoved","getCurrentValue","ct","strToDate","strToDateTime","strtotime","isValidDate","setMask","isValidValue","reg","setCaretPos","createTextRange","textRange","collapse","moveEnd","moveStart","setSelectionRange","pastedData","clipboardData","getData","selectionStart","digit","selLength","defaultBlank","selReplacementRemainder","selEnd","selectionEnd","hasSel","fromCharCode","maskValueAtCurPos","posShorterThanMaskLength","posGreaterThanZero","getValue","getCurrentTime","setOptions","_options","exDesc","splitData","hDate","keyDate","dateTest","dateEnd","setCurrentTime","str","dateFormat","splittedHours","splittedMinutes","dayOfWeekStartPrev","norecursion","setMilliseconds","dTime","requireValidDate","nextMonth","prevMonth","getWeekOfYear","datetime","week","onejan","sDateTime","timeOffset","tmpDate","sDate","sTime","currentDate","arguments_callee1","arguments_callee2","period","arguments_callee4","pheight","arguments_callee5","customDateSettings","line_time","description","maxDateTimeDay","table","today","newRow","currentDay","minTimeMinutesOfDay","maxTimeMinutesOfDay","current_time","isALlowTimesInit","currentMinutesOfDay","classType","xdevent","$input","datetimepickerElem","dateInputHasFixedAncestor","datetimepickerCss","$dateInput","dateInputOffset","dateInputElem","verticalAnchorEdge","verticalPosition","windowScrollTop","ancestorNode","bottom","arguments_callee6","elementSelector","destroyDateTimePicker","cmdDown","defaultValue","initOnActionCallback","UixRenderDatePicker","timeEnable","lang","myminDate","mymaxDate","rtlEnable","customSpecialFormsInit","submit","$addButton","$appendWrapper","loopCls","defaultItems","maxField","addOne","fieldCode","decimals","$numberInput","numberInputVal","multiSel","$selector","$option","tarVal","resVal","hideAllSingleSelItems","$sel","deffaultSwitchIndex","singleSel","switchID","hideAllNormalRadioItems","normalRadio","checked","filterCat","$grid","$filterOptions","MuuriGrid","galleryType","Muuri","showDuration","showEasing","hideDuration","hideEasing","visibleStyles","hiddenStyles","layout","fillGaps","horizontal","alignRight","alignBottom","rounding","layoutOnResize","layoutOnInit","layoutDuration","layoutEasing","dragEnabled","refreshItems","group","filterFieldValue","curCats","getElement","$carouselWrapper","$carousel","$carouselItem","amountVisible","carouselDir","carouselSpeed","carouselNext","carouselPrev","carouselPagination","carouseDraggable","carouseDraggableCursor","eachItemNewWidth","tempItemsPos","eachItemNewHeight","_height","totalItemsHeight","setButtonTargetIndex","setContainerSize","setItemState","eachItemOldWidth","boxWidth","yIncrement","carouselReOrder","movePositionWithButton","setPaginationState","hammerProps","inputClass","Hammer","TouchInput","dragDropElement","dragDropMC","elAnim","targetIndex","allHeightStr","autoMove","indexGo","moveX","moveYIncrement","itemUpdates","curBtn","dragging","itemsHeight","$curItems","itemsHeightArr","btnType","xIncrement","_gsTransform","curWidthIncrement","setButtonState","createStoreLatestPosition","draggingItemHeight","curHeightIncrement","paginationEnable","$btn","$curWrapper","btnDisabled","tIndex","moveY","nextBtn","prevBtn","nextBtnOldTargetIndex1","prevBtnOldTargetIndex1","nextBtnOldTargetIndex2","prevBtnOldTargetIndex2","firstOffset","lastOffset","DIRECTION_ALL","ev","simulationButtonNext","simulationButtonPrev","currentIsFirstOrLast","firstItemOffset","deltaNext","deltaPrev","HOVER_DELAY_INTERACTION","shapesInit","newSvgHeight","curImgW","curImgH","svgPath","svgW","svgH","svgRatio","curImgURL","imgW","svgOut","INFINITE_SCROLLING_EL","$list","$clonedList","listWidth","force3D","easeNone","$menuContainer","menu","followEl","mouseFollowEv","offsetBody","Elastic","_content","innerEl","loaderEl","maskEl","closeEl","largeImgCloseEl","docURL","lightboxThumbSwitch","$largePhoto","$thumb","_cur","imgClick","sw","ow","oh","$lbTarImg","lightboxClose","prevURL","decodeURIComponent","cookie","encodeURIComponent","backURL","dataPhoto","dataHtmlID","dataFixed","dataMaskClose","dataAjax","htmlContent","imgSrcStr","imgSrcStrToW","showLightbox","showLightboxContent","largePhotos","large","tempID","thumb","ratioW","$htmlAjaxContainer","htmlContentLoaded","ajaxURL","BULLETED_LIST","ajaxLoadInit","ajaxWrapper","curPage","totalPage","perShow","template7ID","triggerActive","pushContainer","noneInfo","returnEmptyInfo","$button","$divRoot","compiledTemplate","Template7","compile","curHtml","htmlEl","wrapperID","initCurPage","infinitescroll","pageParmStr","prevTrigger","nextTrigger","triggerStr","displayPerPage","currentPage","fullwidthToDir","_dis","dividerPosition","dividerWidth","bsGridGutter","LOGIN_UI","$loginToggle","$loginForms","$form1","$form2","UixFireModalDialog","autoClose","closeOnlyBtn","dataID","linkBtn","closeTime","setCloseModalDialog","closeModalDialog","UixCloseModalDialog","modalSpeed","MOUSEWHEEL_INTERACTION","quietPeriod","scrollCount","scrollMoveInit","_modCSS","cssp","hasBezier","rotationZ","oldSetRatio","xs0","xs1","_cssRatioSetter","_vars","_modInitted","_add","carouselLoop","eachItemOldHeight","boxHeight","wrapWidth","wrapHeight","modifiers","ONEPAGE","sectionTotal","topSpacing","$primaryMenu","$sidefixedMenu","hashID","curSectionIndex","getRelatedNavigation","menuObj","echoIndex","getAllNavigation","goPageSection","loc","navMinTop","navMaxTop","minTop","maxTop","$block","ONEPAGE2","secIndex","sectionsDepthInit","parallaxInit","$curImg","dataSkew","dataOverlay","dataFullyVisible","dataXPos","curSize","itemHeight","$item","eachItemAnimOKDelay","staggerFromTo","staggerTo","pricingInit","$initHeight","priceBGH","priceBGH_excerpt","tempheight","tempheight_excerpt","priceBGH_Max","btnColor","unit","$progressLineCircle","progressLineAnimGo","hasRetina","rootRetina","devicePixelRatio","mouseX","mouseY","pointer","pointerBox","centers","transformOrigin","mouseSpy","pointerEvent","centerY","centerX","degrees","deg","fromCSS","toCSS","myEase","myDuration","myDelay","infinite","fromIsString","spyImageTrans","_imgIds","SCROLLSPY_ANIM","$txtContainer","filterSprite","txtStyle","tHeight","TextStyle","fontSize","letterSpacing","breakWords","dropShadow","dropShadowAngle","dropShadowAlpha","dropShadowColor","dropShadowBlur","fontFamily","fontStyle","fontWeight","wordWrap","Text","filterArea","elHeight","elOffsetTop","translateTitle","titleScale","titleOpacity","scrollProgress","$con","$btnTxt","defaultHeight","SKEW_ON_SCROLL","$animObj","followY","dy","skewY","curndex","$target","browserURL","linkURL","locArr","locIndex","locURL","SMOOTH_SCROLLING_PAGE","endY","resizeRequest","scrollRequest","requestId","elTop","tlTarget1","toAlpha","tlAction","scene2_progress","scene2Action","scene3_progress","scene3Action","initSmoothScrollingPageWrapper","resized","$wrapper","elOpacity","scrollPercent","Sine","scene2_height","scene2_spyTop","scene2_scrollPercent","scene3_height","scene3_spyTop","scene3_scrollPercent","lastScrollTop","stickyInit","oWidth","clsID","$ph","targetTop","elClass","SVG_MAP_CHINA","$svgEl","svgMapRestore","svgNameIndex","goName","goText","svgCurName","SVG_MAP_WORLD","SVG_MASK_SLIDER","svgAnimating","txtTimeline","txtMaskTimeline","Circ","_item","tl1","tl2","swiper2","cusProgressBar","swiper8","swiper8Thumbs","swiper9BTN","swiper9","640","768","1024","mousewheelControl","keyboardControl","innerTranslate","curSwiper","curSlides","animationProgress","thisSwiper","durationInSeconds","perSlide","_btns","ShaderRuntime","mainCamera","cubeCameras","reserved","cameraPosition","umap","float","int","vec2","THREE","Vector2","vec3","Vector3","vec4","Vector4","samplerCube","sampler2D","getUmap","sourceOrSources","onlyOneSource","loadedShaders","itemsLoaded","FileLoader","json","loadSource","loadJSON","registerCamera","camera","Camera","registerCubeCamera","renderTarget","unregisterCamera","updateSource","identifier","findBy","shaderTypes","shader","newShaderData","runningShaders","material","_ref","cloned","omit","needsUpdate","renameShader","oldName","newName","shaderType","initted","shaderName","uniform","uniformName","newData","fragmentShader","fragment","vertexShader","vertex","uniforms","glslType","withoutId","RawShaderMaterial","updateRuntime","updateShaders","viewMatrix","matrixWorldInverse","THREE_BACKGROUND_THREE","sceneSubjects","MainStage","scene","light","shaderSprite","clock","Clock","spriteAnim","windowHalfX","windowHalfY","runtime","onWindowResize","aspect","updateProjectionMatrix","setSize","onDocumentMouseMove","onDocumentMouseDown","onDocumentMouseUp","shaders","PerspectiveCamera","Scene","AmbientLight","SpotLight","WebGLRenderer","canvas","SphereGeometry","Mesh","setScalar","renderDepth","defaultMaterial","MeshPhongMaterial","flatShading","vertexColors","VertexColors","objectType","numObjects","Geometry","Euler","geom","Color","BoxGeometry","setRGB","IcosahedronGeometry","getRandomFloat","CylinderGeometry","faces","Face3","applyVertexColors","updateMatrix","merge","generateGeometry","objVector","getDelta","setClearColor","getElapsedTime","lookAt","getRendererCanvasID","getScene","getCamera","THREE_BACKGROUND_THREE2","domElement","ShaderMaterial","TextureLoader","wrapS","RepeatWrapping","wrapT","THREE_BACKGROUND_THREE3","mouseVector","sphereTarget","xrad","degToRad","yrad","lerp","destination","sphereGeo","SphereBufferGeometry","sphereMat","MeshBasicMaterial","wireframe","base","reset","multiple","divOffset","divTop","divLeft","divWidth","divHeight","mousePosition","mousePos","pctX","pctY","elementSub","rotateDeg","mX","mY","rmX","rmY","tX","tY","rotationY","rotationX","$clone3","$clone2_1","$clone2_2","$clone1_1","$clone1_2","$clone1_3","itemCount","dataPrevBtn","dataNextBtn","autoSwap","startItem","resetCount","leftitem","carousel3DPos","OrbitControls","quat","quatInverse","lastPosition","lastQuaternion","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","MOUSE","ZOOM","MIDDLE","PAN","target0","position0","zoom0","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","changeEvent","STATE","NONE","Quaternion","setFromUnitVectors","sub","applyQuaternion","setFromVector3","rotateLeft","sphericalDelta","makeSafe","panOffset","setFromSpherical","multiplyScalar","zoomChanged","distanceToSquared","EPS","dot","quaternion","onContextMenu","onMouseDown","onMouseWheel","onMouseMove","onMouseUp","onKeyDown","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY_PAN","Spherical","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","rotateUp","panLeft","objectMatrix","setFromMatrixColumn","panUp","crossVectors","pan","targetDistance","isPerspectiveCamera","tan","fov","isOrthographicCamera","dollyIn","dollyScale","dollyOut","subVectors","handleMouseMoveRotate","handleKeyDown","handleTouchMoveRotate","defineProperties","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","THREE_GALLERY","allImages","scrollValue","lastScrollValue","imgs","loader","galleryRadius","eachItemAngleToRad","imgLoader","itemRadAngle","PlaneGeometry","mesh","minFilter","LinearFilter","overdraw","THREE_IMAGE_TRANSITION","filterMaterial","onDocumentMouseEnter","dispFactor","Expo","onDocumentMouseLeave","texture1","texture2","dispImage","disp","magFilter","anisotropy","capabilities","getMaxAnisotropy","PlaneBufferGeometry","effectFactor","GLTFLoader","manager","DefaultLoadingManager","dracoLoader","GLTFRegistry","objects","removeAll","onLoad","onProgress","onError","LoaderUtils","extractUrlBase","setResponseType","setCrossOrigin","setPath","setDRACOLoader","extensions","decodeText","Uint8Array","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","asset","extensionsUsed","extensionName","extensionsRequired","KHR_LIGHTS","GLTFLightsExtension","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","MSFT_TEXTURE_DDS","GLTFTextureDDSExtension","parser","GLTFParser","scenes","cameras","animations","glTF","userData","addUnknownExtensionsToUserData","DDSLoader","ddsLoader","lights","lightId","lightNode","fromArray","DirectionalLight","PointLight","spot","innerConeAngle","outerConeAngle","penumbra","decay","intensity","getMaterialType","extendParams","materialParams","pending","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","BIN","headerView","DataView","header","magic","getUint32","chunkView","chunkIndex","byteLength","chunkLength","contentArray","byteOffset","chunkType","specularGlossinessParams","pbrSpecularGlossiness","ShaderLib","UniformsUtils","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","roughness","metalness","roughnessMap","metalnessMap","specular","setHex","glossiness","specularMap","glossinessMap","defines","specGlossIndex","diffuseFactor","diffuseTexture","emissive","glossinessFactor","specularFactor","specularGlossinessTexture","createMaterial","fog","isGLTFSpecularGlossinessMaterial","lightMap","lightMapIntensity","aoMap","aoMapIntensity","emissiveIntensity","emissiveMap","bumpMap","bumpScale","normalMap","normalScale","displacementMap","displacementScale","displacementBias","alphaMap","envMap","envMapIntensity","refractionRatio","derivatives","cloneMaterial","il","refreshUniforms","uvScaleMap","diffuse","isWebGLRenderTarget","matrixAutoUpdate","setUvTransform","uvTransform","offsetRepeat","flipEnvMap","isCubeTexture","USE_GLOSSINESSMAP","USE_ROUGHNESSMAP","GLTFCubicSplineInterpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","Interpolant","decodePrimitive","primitive","attributeName","accessorDef","componentType","bufferViewIndex","bufferView","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","ATTRIBUTES","accessors","WEBGL_COMPONENT_TYPES","normalized","getDependency","decodeDracoFile","attribute","interpolate_","t0","t1","stride","valueSize","stride2","stride3","td","pp","ppp","offset1","offset0","s0","s1","s2","s3","p0","m0","p1","WEBGL_CONSTANTS","Matrix3","Matrix4","5120","Int8Array","5121","5122","Int16Array","5123","Uint16Array","5125","Uint32Array","5126","Float32Array","WEBGL_FILTERS","9728","NearestFilter","9729","9984","NearestMipMapNearestFilter","9985","LinearMipMapNearestFilter","9986","NearestMipMapLinearFilter","9987","LinearMipMapLinearFilter","WEBGL_WRAPPINGS","33071","ClampToEdgeWrapping","33648","MirroredRepeatWrapping","10497","WEBGL_TEXTURE_FORMATS","6406","AlphaFormat","6407","RGBFormat","6408","RGBAFormat","6409","LuminanceFormat","6410","LuminanceAlphaFormat","WEBGL_TEXTURE_DATATYPES","UnsignedByteType","32819","UnsignedShort4444Type","32820","UnsignedShort5551Type","33635","UnsignedShort565Type","WEBGL_TYPE_SIZES","BackSide","FrontSide","NeverDepth","LessDepth","EqualDepth","LessEqualDepth","GreaterEqualDepth","NotEqualDepth","AlwaysDepth","AddEquation","SubtractEquation","ReverseSubtractEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","POSITION","NORMAL","TEXCOORD_0","TEXCOORD0","TEXCOORD","TEXCOORD_1","COLOR_0","COLOR0","COLOR","WEIGHTS_0","WEIGHT","JOINTS_0","JOINT","PATH_PROPERTIES","translation","weights","INTERPOLATION","CUBICSPLINE","InterpolateSmooth","LINEAR","InterpolateLinear","STEP","InterpolateDiscrete","ALPHA_MODES","resolveURL","knownExtensions","objectDef","gltfExtensions","isObjectEqual","isArrayEqual","getCachedGeometry","newPrimitive","cached","indices","cloneBufferAttribute","isInterleavedBufferAttribute","itemSize","getZ","getW","BufferAttribute","primitiveCache","multiplePrimitivesCache","multiPassGeometryCache","textureLoader","fileLoader","addPrimitiveAttributes","primitiveDef","gltfAttributeName","threeAttributeName","bufferAttribute","setIndex","hasMorphPosition","hasMorphNormal","morphPositions","morphNormals","normalAttribute","positionAttribute","jl","setXYZ","normal","morphAttributes","addMorphTargets","extras","markDefs","getMultiDependencies","nodeDefs","nodes","skinDefs","skins","meshDefs","meshes","meshReferences","meshUses","skinIndex","skinLength","joints","isBone","nodeIndex","nodeLength","nodeDef","skin","isSkinnedMesh","cacheKey","loadScene","loadNode","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadTexture","loadSkin","loadAnimation","loadCamera","getDependencies","defs","def","results","pendings","bufferIndex","bufferDef","buffers","uri","bufferViewDef","bufferViews","buffer","accessorIndex","sparse","pendingBufferViews","ibCacheKey","ib","TypedArray","elementBytes","BYTES_PER_ELEMENT","itemBytes","byteStride","InterleavedBuffer","InterleavedBufferAttribute","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","setArray","setX","setY","setZ","setW","textureIndex","webkitURL","textureDef","textures","textureExtensions","sourceURI","isObjectURL","Blob","mimeType","createObjectURL","Loader","Handlers","revokeObjectURL","flipY","internalFormat","sampler","samplers","textureName","materialIndex","sgExtension","materialType","kmuExtension","materialDef","materials","materialExtensions","MeshStandardMaterial","metallicFactor","roughnessFactor","metallicRoughnessTexture","doubleSided","side","DoubleSide","alphaMode","alphaTest","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","encoding","sRGBEncoding","loadGeometries","primitives","originalPrimitives","isMultiPass","primitive0","targets0","isMultiPassGeometry","geometryPromise","BufferGeometry","geometries","baseGeometry","getCachedMultiPassGeometry","accessor","addGroup","BufferGeometryUtils","baseGeometries","getCachedCombinedGeometry","mergeBufferGeometries","meshIndex","meshDef","originalMaterials","depthTest","isMultiMaterial","groups","SkinnedMesh","drawMode","TriangleStripDrawMode","TriangleFanDrawMode","LineSegments","Line","LineLoop","Points","updateMorphTargets","morphTargetInfluences","targetNames","morphTargetDictionary","useVertexColors","useFlatShading","useSkinning","useMorphTargets","useMorphNormals","pointsMaterial","lineMaterial","cachedMaterial","isPoints","uuid","PointsMaterial","Material","isLine","LineBasicMaterial","skinning","morphTargets","uv2","uv","onBeforeRender","Group","cameraIndex","cameraDef","radToDeg","yfov","aspectRatio","znear","zfar","OrthographicCamera","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","animationIndex","animationDef","tracks","channels","TypedKeyframeTrack","parameters","output","inputAccessor","outputAccessor","NumberKeyframeTrack","QuaternionKeyframeTrack","VectorKeyframeTrack","targetName","interpolation","traverse","isMesh","track","AnimationUtils","arraySlice","createInterpolant","times","getValueSize","isInterpolantFactoryMethodGLTFCubicSpline","AnimationClip","Bone","isGroup","Object3D","PropertyBinding","sanitizeNodeName","applyMatrix4","sceneIndex","sceneDef","nodeIds","buildNodeHierachy","nodeId","parentObject","allNodes","bones","boneInverses","mat","jointId","jointNode","Skeleton","matrixWorld","THREE_MODEL","mixerGLTF","getRadian","LoadingManager","textureURL","objURL","gltfMesh","shadowSide","castShadow","origPos","rx","ry","rz","AnimationMixer","thisAction","clipAction","setDuration","getClip","xhr","percentComplete","lengthComputable","CSS3DObject","CSS3DSprite","CSS3DRenderer","_width","_widthHalf","_heightHalf","REVISION","WeakMap","overflow","cameraElement","WebkitTransformStyle","transformStyle","isIE","epsilon","getCameraCSSMatrix","elements","getObjectCSSMatrix","cameraCSSMatrix","matrix3d","getSize","getDistanceToSquared","object1","object2","setFromMatrixPosition","zOrder","sorted","distanceToCameraSquared","zMax","projectionMatrix","WebkitPerspective","perspective","updateMatrixWorld","WebkitTransform","renderObject","cachedStyle","objectData","transpose","copyPosition","THREE_PAGES","viewRenderer","HemisphereLight","outerHTML","THREE_PARTICLE","particles","imagedata","sceneForLightPlane","sceneForSpotLight","sceneForAmbientLight","vFOV","visibleHeight","yLimit","particleRotation","isMouseDown","lastMousePos","backgroundBg","centerVector","previousTime","onDocumentTouchStart","onDocumentTouchMove","ang","fieldOfView","Fog","CircleGeometry","receiveShadow","spotLightAngle","mapSize","near","far","shadowMap","PCFSoftShadowMap","ctx","getContext","drawImage","getImageData","sizeAttenuation","vertices","geometryPR","TetrahedronGeometry","materialPR","shininess","particle","particle1","particle2","verticesNeedUpdate","THREE_SPHERE_THREE","pivot1","pivot2","pivot3","mesh1","mesh2","mesh3","THREE_OBJ_ANIM_INTERACTION","targetObj","segLength","segments","moveZ","Power0","vIndex","segIndex","negate","scaleTo","FlatShading","light1","light2","geo","addObject","THREE_MOUSE_INTERACTION","raycaster","intersects","INTERSECTED","atoms","_obj","targetAtomPos","destinationPos","setFromCamera","intersectObjects","screenData","rendererWidth","rendererHeight","vector","widthHalf","heightHalf","project","boxInfo","Box3","setFromObject","nestedObjectToScreenXYZAndWH","resumeAll","clickEnable","Raycaster","currentHex","getHex","THREE_MOUSE_INTERACTION2","targetPosition","targetPositionOnMouseDown","mouseYOnMouseDown","scrollPosY","domElem","domEl","onDocumentMousewheel","onDocumentMouseOut","getScrollPosY","targetPos","ExplodeModifier","modify","face","va","vb","vc","THREE_SHATTER_SLIDER","objTotal","renderLoaderID","allSources","objLoaded","isAnimating","imgH","geometryExplode","slideCurId","slideNextId","videoOb","localName","videoObCur","movementSpeed","rollSpeed","setPixelRatio","VideoTexture","wrapperInit","THREE_EXP_PARTICLE_SLIDER","cube_count","activeSlider","xgrid","ygrid","ox","oy","ux","uy","xsize","ysize","unitx","unity","offsetx","offsety","uvs","changeUVS","BoxBufferGeometry","newPosX","newPosY","newPosZ","imgAspect","scrollspyEnable","scrollspyConfigAutoAnim","scrollspyConfigItems","scrollspyConfigCountTotal","scrollspyConfigCountCur","scrollspyConfigControlsPagination","scrollspyConfigControlsArrows","scrollspyConfigLoop","makeThreeTexture","tx1ID","tx2ID","dataScrollspy","texturesInit","allTextures","objHeight","objWidth","FullScreenQuad","_mesh","EffectComposer","stencilBuffer","getDrawingBufferSize","WebGLRenderTarget","renderTarget1","renderTarget2","writeBuffer","readBuffer","renderToScreen","passes","CopyShader","ShaderPass","copyPass","_previousFrameTime","swapBuffers","tmp","addPass","pass","insertPass","isLastEnabledPass","passIndex","deltaTime","currentRenderTarget","getRenderTarget","maskActive","needsSwap","stencilFunc","NOTEQUAL","EQUAL","MaskPass","ClearMaskPass","setRenderTarget","Pass","writeValue","clearValue","setLocked","stencil","setTest","setOp","REPLACE","setFunc","ALWAYS","setClear","KEEP","TexturePass","depthWrite","fsQuad","oldAutoClear","autoClear","textureID","autoClearColor","autoClearDepth","autoClearStencil","RenderPass","overrideMaterial","clearColor","clearAlpha","clearDepth","oldClearColor","oldClearAlpha","getClearColor","getClearAlpha","ClearPass","ConvolutionShader","buildKernel","sigma","sum","halfWidth","kernelSize","exp","BloomPass","pars","renderTargetX","renderTargetY","copyShader","copyUniforms","materialCopy","blending","AdditiveBlending","convolutionShader","convolutionUniforms","blurX","materialConvolution","STENCIL_TEST","blurY","FilmPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","FilmShader","nIntensity","sIntensity","sCount","THREE_FILMIC_EFF","intersectionPlane","composer","bloomPass","filmPass","renderPass","effectCopy","planeGeometry","planeMaterial","MeshNormalMaterial","neutralMaterial","MeshLambertMaterial","neutralGeometry","starScene","terrainSize","starsGeometry","scalar","starMaterial","stars","THREE_SIMULATE_HTML_LAYOUT","scrollTrigger","dataBGSources","loadingManager","loaderImage","SubStageInit","$rendererInnerCanvas","wrapperHeight","wrapperWidth","shadowMapSoft","thisImg","visibleWidth","_curURL","_offsetLeft","SubStageRender","_curW","_curH","naturalWidth","naturalHeight","$innerCanvas","canvasPosOffsetY","$resTable","$thead","$tbody","resTableSCrolled","columns","rows","tableDataScrolledInit","$sortTable","wrapInner","$th","thIndex","thType","txt1","txt2","liNum","$contentbox","tabBoxID","fullwidth","rotationRadius","rotationWapperDeg","rotationDisplay","increase","endAngle","turn","tabID","teamFocusMask","thisID","hoverWidth","targetWidth","targetInfo","$cur","$neighbor","$info","cName","cPo","cIntro","Back","timelineUpdate","iscur","showEle","tNav","moveWidth","moveHeight","infoNewHeight","$container","$timeline","dateShowEle","counter","singleHeight","setEqualHeights","VERTICAL_MENU","menuWrapInit","winHeight","curULHeight","megaMenuW","megaMaxW","megaMenuCoLength","WP_CORE","cvalue"],"mappings":"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","file":"uix-kit.min.js","sourcesContent":[" \tfunction hotDisposeChunk(chunkId) {\n \t\tdelete installedChunks[chunkId];\n \t}\n \tvar parentHotUpdateCallback = window[\"webpackHotUpdate\"];\n \twindow[\"webpackHotUpdate\"] = // eslint-disable-next-line no-unused-vars\n \tfunction webpackHotUpdateCallback(chunkId, moreModules) {\n \t\thotAddUpdateChunk(chunkId, moreModules);\n \t\tif (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);\n \t} ;\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotDownloadUpdateChunk(chunkId) {\n \t\tvar script = document.createElement(\"script\");\n \t\tscript.charset = \"utf-8\";\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + hotCurrentHash + \".hot-update.js\";\n \t\tif (null) script.crossOrigin = null;\n \t\tdocument.head.appendChild(script);\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotDownloadManifest(requestTimeout) {\n \t\trequestTimeout = requestTimeout || 10000;\n \t\treturn new Promise(function(resolve, reject) {\n \t\t\tif (typeof XMLHttpRequest === \"undefined\") {\n \t\t\t\treturn reject(new Error(\"No browser support\"));\n \t\t\t}\n \t\t\ttry {\n \t\t\t\tvar request = new XMLHttpRequest();\n \t\t\t\tvar requestPath = __webpack_require__.p + \"\" + hotCurrentHash + \".hot-update.json\";\n \t\t\t\trequest.open(\"GET\", requestPath, true);\n \t\t\t\trequest.timeout = requestTimeout;\n \t\t\t\trequest.send(null);\n \t\t\t} catch (err) {\n \t\t\t\treturn reject(err);\n \t\t\t}\n \t\t\trequest.onreadystatechange = function() {\n \t\t\t\tif (request.readyState !== 4) return;\n \t\t\t\tif (request.status === 0) {\n \t\t\t\t\t// timeout\n \t\t\t\t\treject(\n \t\t\t\t\t\tnew Error(\"Manifest request to \" + requestPath + \" timed out.\")\n \t\t\t\t\t);\n \t\t\t\t} else if (request.status === 404) {\n \t\t\t\t\t// no update available\n \t\t\t\t\tresolve();\n \t\t\t\t} else if (request.status !== 200 && request.status !== 304) {\n \t\t\t\t\t// other failure\n \t\t\t\t\treject(new Error(\"Manifest request to \" + requestPath + \" failed.\"));\n \t\t\t\t} else {\n \t\t\t\t\t// success\n \t\t\t\t\ttry {\n \t\t\t\t\t\tvar update = JSON.parse(request.responseText);\n \t\t\t\t\t} catch (e) {\n \t\t\t\t\t\treject(e);\n \t\t\t\t\t\treturn;\n \t\t\t\t\t}\n \t\t\t\t\tresolve(update);\n \t\t\t\t}\n \t\t\t};\n \t\t});\n \t}\n\n \tvar hotApplyOnUpdate = true;\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentHash = \"749a21482df734bbb76c\";\n \tvar hotRequestTimeout = 10000;\n \tvar hotCurrentModuleData = {};\n \tvar hotCurrentChildModule;\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentParents = [];\n \t// eslint-disable-next-line no-unused-vars\n \tvar hotCurrentParentsTemp = [];\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotCreateRequire(moduleId) {\n \t\tvar me = installedModules[moduleId];\n \t\tif (!me) return __webpack_require__;\n \t\tvar fn = function(request) {\n \t\t\tif (me.hot.active) {\n \t\t\t\tif (installedModules[request]) {\n \t\t\t\t\tif (installedModules[request].parents.indexOf(moduleId) === -1) {\n \t\t\t\t\t\tinstalledModules[request].parents.push(moduleId);\n \t\t\t\t\t}\n \t\t\t\t} else {\n \t\t\t\t\thotCurrentParents = [moduleId];\n \t\t\t\t\thotCurrentChildModule = request;\n \t\t\t\t}\n \t\t\t\tif (me.children.indexOf(request) === -1) {\n \t\t\t\t\tme.children.push(request);\n \t\t\t\t}\n \t\t\t} else {\n \t\t\t\tconsole.warn(\n \t\t\t\t\t\"[HMR] unexpected require(\" +\n \t\t\t\t\t\trequest +\n \t\t\t\t\t\t\") from disposed module \" +\n \t\t\t\t\t\tmoduleId\n \t\t\t\t);\n \t\t\t\thotCurrentParents = [];\n \t\t\t}\n \t\t\treturn __webpack_require__(request);\n \t\t};\n \t\tvar ObjectFactory = function ObjectFactory(name) {\n \t\t\treturn {\n \t\t\t\tconfigurable: true,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: function() {\n \t\t\t\t\treturn __webpack_require__[name];\n \t\t\t\t},\n \t\t\t\tset: function(value) {\n \t\t\t\t\t__webpack_require__[name] = value;\n \t\t\t\t}\n \t\t\t};\n \t\t};\n \t\tfor (var name in __webpack_require__) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(__webpack_require__, name) &&\n \t\t\t\tname !== \"e\" &&\n \t\t\t\tname !== \"t\"\n \t\t\t) {\n \t\t\t\tObject.defineProperty(fn, name, ObjectFactory(name));\n \t\t\t}\n \t\t}\n \t\tfn.e = function(chunkId) {\n \t\t\tif (hotStatus === \"ready\") hotSetStatus(\"prepare\");\n \t\t\thotChunksLoading++;\n \t\t\treturn __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {\n \t\t\t\tfinishChunkLoading();\n \t\t\t\tthrow err;\n \t\t\t});\n\n \t\t\tfunction finishChunkLoading() {\n \t\t\t\thotChunksLoading--;\n \t\t\t\tif (hotStatus === \"prepare\") {\n \t\t\t\t\tif (!hotWaitingFilesMap[chunkId]) {\n \t\t\t\t\t\thotEnsureUpdateChunk(chunkId);\n \t\t\t\t\t}\n \t\t\t\t\tif (hotChunksLoading === 0 && hotWaitingFiles === 0) {\n \t\t\t\t\t\thotUpdateDownloaded();\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t};\n \t\tfn.t = function(value, mode) {\n \t\t\tif (mode & 1) value = fn(value);\n \t\t\treturn __webpack_require__.t(value, mode & ~1);\n \t\t};\n \t\treturn fn;\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotCreateModule(moduleId) {\n \t\tvar hot = {\n \t\t\t// private stuff\n \t\t\t_acceptedDependencies: {},\n \t\t\t_declinedDependencies: {},\n \t\t\t_selfAccepted: false,\n \t\t\t_selfDeclined: false,\n \t\t\t_selfInvalidated: false,\n \t\t\t_disposeHandlers: [],\n \t\t\t_main: hotCurrentChildModule !== moduleId,\n\n \t\t\t// Module API\n \t\t\tactive: true,\n \t\t\taccept: function(dep, callback) {\n \t\t\t\tif (dep === undefined) hot._selfAccepted = true;\n \t\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n \t\t\t\telse if (typeof dep === \"object\")\n \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n \t\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function() {};\n \t\t\t\telse hot._acceptedDependencies[dep] = callback || function() {};\n \t\t\t},\n \t\t\tdecline: function(dep) {\n \t\t\t\tif (dep === undefined) hot._selfDeclined = true;\n \t\t\t\telse if (typeof dep === \"object\")\n \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n \t\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n \t\t\t\telse hot._declinedDependencies[dep] = true;\n \t\t\t},\n \t\t\tdispose: function(callback) {\n \t\t\t\thot._disposeHandlers.push(callback);\n \t\t\t},\n \t\t\taddDisposeHandler: function(callback) {\n \t\t\t\thot._disposeHandlers.push(callback);\n \t\t\t},\n \t\t\tremoveDisposeHandler: function(callback) {\n \t\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n \t\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n \t\t\t},\n \t\t\tinvalidate: function() {\n \t\t\t\tthis._selfInvalidated = true;\n \t\t\t\tswitch (hotStatus) {\n \t\t\t\t\tcase \"idle\":\n \t\t\t\t\t\thotUpdate = {};\n \t\t\t\t\t\thotUpdate[moduleId] = modules[moduleId];\n \t\t\t\t\t\thotSetStatus(\"ready\");\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"ready\":\n \t\t\t\t\t\thotApplyInvalidatedModule(moduleId);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"prepare\":\n \t\t\t\t\tcase \"check\":\n \t\t\t\t\tcase \"dispose\":\n \t\t\t\t\tcase \"apply\":\n \t\t\t\t\t\t(hotQueuedInvalidatedModules =\n \t\t\t\t\t\t\thotQueuedInvalidatedModules || []).push(moduleId);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n \t\t\t\t\t\t// ignore requests in error states\n \t\t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t},\n\n \t\t\t// Management API\n \t\t\tcheck: hotCheck,\n \t\t\tapply: hotApply,\n \t\t\tstatus: function(l) {\n \t\t\t\tif (!l) return hotStatus;\n \t\t\t\thotStatusHandlers.push(l);\n \t\t\t},\n \t\t\taddStatusHandler: function(l) {\n \t\t\t\thotStatusHandlers.push(l);\n \t\t\t},\n \t\t\tremoveStatusHandler: function(l) {\n \t\t\t\tvar idx = hotStatusHandlers.indexOf(l);\n \t\t\t\tif (idx >= 0) hotStatusHandlers.splice(idx, 1);\n \t\t\t},\n\n \t\t\t//inherit from previous dispose call\n \t\t\tdata: hotCurrentModuleData[moduleId]\n \t\t};\n \t\thotCurrentChildModule = undefined;\n \t\treturn hot;\n \t}\n\n \tvar hotStatusHandlers = [];\n \tvar hotStatus = \"idle\";\n\n \tfunction hotSetStatus(newStatus) {\n \t\thotStatus = newStatus;\n \t\tfor (var i = 0; i < hotStatusHandlers.length; i++)\n \t\t\thotStatusHandlers[i].call(null, newStatus);\n \t}\n\n \t// while downloading\n \tvar hotWaitingFiles = 0;\n \tvar hotChunksLoading = 0;\n \tvar hotWaitingFilesMap = {};\n \tvar hotRequestedFilesMap = {};\n \tvar hotAvailableFilesMap = {};\n \tvar hotDeferred;\n\n \t// The update info\n \tvar hotUpdate, hotUpdateNewHash, hotQueuedInvalidatedModules;\n\n \tfunction toModuleId(id) {\n \t\tvar isNumber = +id + \"\" === id;\n \t\treturn isNumber ? +id : id;\n \t}\n\n \tfunction hotCheck(apply) {\n \t\tif (hotStatus !== \"idle\") {\n \t\t\tthrow new Error(\"check() is only allowed in idle status\");\n \t\t}\n \t\thotApplyOnUpdate = apply;\n \t\thotSetStatus(\"check\");\n \t\treturn hotDownloadManifest(hotRequestTimeout).then(function(update) {\n \t\t\tif (!update) {\n \t\t\t\thotSetStatus(hotApplyInvalidatedModules() ? \"ready\" : \"idle\");\n \t\t\t\treturn null;\n \t\t\t}\n \t\t\thotRequestedFilesMap = {};\n \t\t\thotWaitingFilesMap = {};\n \t\t\thotAvailableFilesMap = update.c;\n \t\t\thotUpdateNewHash = update.h;\n\n \t\t\thotSetStatus(\"prepare\");\n \t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\thotDeferred = {\n \t\t\t\t\tresolve: resolve,\n \t\t\t\t\treject: reject\n \t\t\t\t};\n \t\t\t});\n \t\t\thotUpdate = {};\n \t\t\tvar chunkId = 3;\n \t\t\t// eslint-disable-next-line no-lone-blocks\n \t\t\t{\n \t\t\t\thotEnsureUpdateChunk(chunkId);\n \t\t\t}\n \t\t\tif (\n \t\t\t\thotStatus === \"prepare\" &&\n \t\t\t\thotChunksLoading === 0 &&\n \t\t\t\thotWaitingFiles === 0\n \t\t\t) {\n \t\t\t\thotUpdateDownloaded();\n \t\t\t}\n \t\t\treturn promise;\n \t\t});\n \t}\n\n \t// eslint-disable-next-line no-unused-vars\n \tfunction hotAddUpdateChunk(chunkId, moreModules) {\n \t\tif (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])\n \t\t\treturn;\n \t\thotRequestedFilesMap[chunkId] = false;\n \t\tfor (var moduleId in moreModules) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\thotUpdate[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif (--hotWaitingFiles === 0 && hotChunksLoading === 0) {\n \t\t\thotUpdateDownloaded();\n \t\t}\n \t}\n\n \tfunction hotEnsureUpdateChunk(chunkId) {\n \t\tif (!hotAvailableFilesMap[chunkId]) {\n \t\t\thotWaitingFilesMap[chunkId] = true;\n \t\t} else {\n \t\t\thotRequestedFilesMap[chunkId] = true;\n \t\t\thotWaitingFiles++;\n \t\t\thotDownloadUpdateChunk(chunkId);\n \t\t}\n \t}\n\n \tfunction hotUpdateDownloaded() {\n \t\thotSetStatus(\"ready\");\n \t\tvar deferred = hotDeferred;\n \t\thotDeferred = null;\n \t\tif (!deferred) return;\n \t\tif (hotApplyOnUpdate) {\n \t\t\t// Wrap deferred object in Promise to mark it as a well-handled Promise to\n \t\t\t// avoid triggering uncaught exception warning in Chrome.\n \t\t\t// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666\n \t\t\tPromise.resolve()\n \t\t\t\t.then(function() {\n \t\t\t\t\treturn hotApply(hotApplyOnUpdate);\n \t\t\t\t})\n \t\t\t\t.then(\n \t\t\t\t\tfunction(result) {\n \t\t\t\t\t\tdeferred.resolve(result);\n \t\t\t\t\t},\n \t\t\t\t\tfunction(err) {\n \t\t\t\t\t\tdeferred.reject(err);\n \t\t\t\t\t}\n \t\t\t\t);\n \t\t} else {\n \t\t\tvar outdatedModules = [];\n \t\t\tfor (var id in hotUpdate) {\n \t\t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n \t\t\t\t\toutdatedModules.push(toModuleId(id));\n \t\t\t\t}\n \t\t\t}\n \t\t\tdeferred.resolve(outdatedModules);\n \t\t}\n \t}\n\n \tfunction hotApply(options) {\n \t\tif (hotStatus !== \"ready\")\n \t\t\tthrow new Error(\"apply() is only allowed in ready status\");\n \t\toptions = options || {};\n \t\treturn hotApplyInternal(options);\n \t}\n\n \tfunction hotApplyInternal(options) {\n \t\thotApplyInvalidatedModules();\n\n \t\tvar cb;\n \t\tvar i;\n \t\tvar j;\n \t\tvar module;\n \t\tvar moduleId;\n\n \t\tfunction getAffectedStuff(updateModuleId) {\n \t\t\tvar outdatedModules = [updateModuleId];\n \t\t\tvar outdatedDependencies = {};\n\n \t\t\tvar queue = outdatedModules.map(function(id) {\n \t\t\t\treturn {\n \t\t\t\t\tchain: [id],\n \t\t\t\t\tid: id\n \t\t\t\t};\n \t\t\t});\n \t\t\twhile (queue.length > 0) {\n \t\t\t\tvar queueItem = queue.pop();\n \t\t\t\tvar moduleId = queueItem.id;\n \t\t\t\tvar chain = queueItem.chain;\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (\n \t\t\t\t\t!module ||\n \t\t\t\t\t(module.hot._selfAccepted && !module.hot._selfInvalidated)\n \t\t\t\t)\n \t\t\t\t\tcontinue;\n \t\t\t\tif (module.hot._selfDeclined) {\n \t\t\t\t\treturn {\n \t\t\t\t\t\ttype: \"self-declined\",\n \t\t\t\t\t\tchain: chain,\n \t\t\t\t\t\tmoduleId: moduleId\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\tif (module.hot._main) {\n \t\t\t\t\treturn {\n \t\t\t\t\t\ttype: \"unaccepted\",\n \t\t\t\t\t\tchain: chain,\n \t\t\t\t\t\tmoduleId: moduleId\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\tfor (var i = 0; i < module.parents.length; i++) {\n \t\t\t\t\tvar parentId = module.parents[i];\n \t\t\t\t\tvar parent = installedModules[parentId];\n \t\t\t\t\tif (!parent) continue;\n \t\t\t\t\tif (parent.hot._declinedDependencies[moduleId]) {\n \t\t\t\t\t\treturn {\n \t\t\t\t\t\t\ttype: \"declined\",\n \t\t\t\t\t\t\tchain: chain.concat([parentId]),\n \t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\tparentId: parentId\n \t\t\t\t\t\t};\n \t\t\t\t\t}\n \t\t\t\t\tif (outdatedModules.indexOf(parentId) !== -1) continue;\n \t\t\t\t\tif (parent.hot._acceptedDependencies[moduleId]) {\n \t\t\t\t\t\tif (!outdatedDependencies[parentId])\n \t\t\t\t\t\t\toutdatedDependencies[parentId] = [];\n \t\t\t\t\t\taddAllToSet(outdatedDependencies[parentId], [moduleId]);\n \t\t\t\t\t\tcontinue;\n \t\t\t\t\t}\n \t\t\t\t\tdelete outdatedDependencies[parentId];\n \t\t\t\t\toutdatedModules.push(parentId);\n \t\t\t\t\tqueue.push({\n \t\t\t\t\t\tchain: chain.concat([parentId]),\n \t\t\t\t\t\tid: parentId\n \t\t\t\t\t});\n \t\t\t\t}\n \t\t\t}\n\n \t\t\treturn {\n \t\t\t\ttype: \"accepted\",\n \t\t\t\tmoduleId: updateModuleId,\n \t\t\t\toutdatedModules: outdatedModules,\n \t\t\t\toutdatedDependencies: outdatedDependencies\n \t\t\t};\n \t\t}\n\n \t\tfunction addAllToSet(a, b) {\n \t\t\tfor (var i = 0; i < b.length; i++) {\n \t\t\t\tvar item = b[i];\n \t\t\t\tif (a.indexOf(item) === -1) a.push(item);\n \t\t\t}\n \t\t}\n\n \t\t// at begin all updates modules are outdated\n \t\t// the \"outdated\" status can propagate to parents if they don't accept the children\n \t\tvar outdatedDependencies = {};\n \t\tvar outdatedModules = [];\n \t\tvar appliedUpdate = {};\n\n \t\tvar warnUnexpectedRequire = function warnUnexpectedRequire() {\n \t\t\tconsole.warn(\n \t\t\t\t\"[HMR] unexpected require(\" + result.moduleId + \") to disposed module\"\n \t\t\t);\n \t\t};\n\n \t\tfor (var id in hotUpdate) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n \t\t\t\tmoduleId = toModuleId(id);\n \t\t\t\t/** @type {TODO} */\n \t\t\t\tvar result;\n \t\t\t\tif (hotUpdate[id]) {\n \t\t\t\t\tresult = getAffectedStuff(moduleId);\n \t\t\t\t} else {\n \t\t\t\t\tresult = {\n \t\t\t\t\t\ttype: \"disposed\",\n \t\t\t\t\t\tmoduleId: id\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\t/** @type {Error|false} */\n \t\t\t\tvar abortError = false;\n \t\t\t\tvar doApply = false;\n \t\t\t\tvar doDispose = false;\n \t\t\t\tvar chainInfo = \"\";\n \t\t\t\tif (result.chain) {\n \t\t\t\t\tchainInfo = \"\\nUpdate propagation: \" + result.chain.join(\" -> \");\n \t\t\t\t}\n \t\t\t\tswitch (result.type) {\n \t\t\t\t\tcase \"self-declined\":\n \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n \t\t\t\t\t\tif (!options.ignoreDeclined)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because of self decline: \" +\n \t\t\t\t\t\t\t\t\tresult.moduleId +\n \t\t\t\t\t\t\t\t\tchainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"declined\":\n \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n \t\t\t\t\t\tif (!options.ignoreDeclined)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because of declined dependency: \" +\n \t\t\t\t\t\t\t\t\tresult.moduleId +\n \t\t\t\t\t\t\t\t\t\" in \" +\n \t\t\t\t\t\t\t\t\tresult.parentId +\n \t\t\t\t\t\t\t\t\tchainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"unaccepted\":\n \t\t\t\t\t\tif (options.onUnaccepted) options.onUnaccepted(result);\n \t\t\t\t\t\tif (!options.ignoreUnaccepted)\n \t\t\t\t\t\t\tabortError = new Error(\n \t\t\t\t\t\t\t\t\"Aborted because \" + moduleId + \" is not accepted\" + chainInfo\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"accepted\":\n \t\t\t\t\t\tif (options.onAccepted) options.onAccepted(result);\n \t\t\t\t\t\tdoApply = true;\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase \"disposed\":\n \t\t\t\t\t\tif (options.onDisposed) options.onDisposed(result);\n \t\t\t\t\t\tdoDispose = true;\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n \t\t\t\t\t\tthrow new Error(\"Unexception type \" + result.type);\n \t\t\t\t}\n \t\t\t\tif (abortError) {\n \t\t\t\t\thotSetStatus(\"abort\");\n \t\t\t\t\treturn Promise.reject(abortError);\n \t\t\t\t}\n \t\t\t\tif (doApply) {\n \t\t\t\t\tappliedUpdate[moduleId] = hotUpdate[moduleId];\n \t\t\t\t\taddAllToSet(outdatedModules, result.outdatedModules);\n \t\t\t\t\tfor (moduleId in result.outdatedDependencies) {\n \t\t\t\t\t\tif (\n \t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(\n \t\t\t\t\t\t\t\tresult.outdatedDependencies,\n \t\t\t\t\t\t\t\tmoduleId\n \t\t\t\t\t\t\t)\n \t\t\t\t\t\t) {\n \t\t\t\t\t\t\tif (!outdatedDependencies[moduleId])\n \t\t\t\t\t\t\t\toutdatedDependencies[moduleId] = [];\n \t\t\t\t\t\t\taddAllToSet(\n \t\t\t\t\t\t\t\toutdatedDependencies[moduleId],\n \t\t\t\t\t\t\t\tresult.outdatedDependencies[moduleId]\n \t\t\t\t\t\t\t);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\tif (doDispose) {\n \t\t\t\t\taddAllToSet(outdatedModules, [result.moduleId]);\n \t\t\t\t\tappliedUpdate[moduleId] = warnUnexpectedRequire;\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Store self accepted outdated modules to require them later by the module system\n \t\tvar outdatedSelfAcceptedModules = [];\n \t\tfor (i = 0; i < outdatedModules.length; i++) {\n \t\t\tmoduleId = outdatedModules[i];\n \t\t\tif (\n \t\t\t\tinstalledModules[moduleId] &&\n \t\t\t\tinstalledModules[moduleId].hot._selfAccepted &&\n \t\t\t\t// removed self-accepted modules should not be required\n \t\t\t\tappliedUpdate[moduleId] !== warnUnexpectedRequire &&\n \t\t\t\t// when called invalidate self-accepting is not possible\n \t\t\t\t!installedModules[moduleId].hot._selfInvalidated\n \t\t\t) {\n \t\t\t\toutdatedSelfAcceptedModules.push({\n \t\t\t\t\tmodule: moduleId,\n \t\t\t\t\tparents: installedModules[moduleId].parents.slice(),\n \t\t\t\t\terrorHandler: installedModules[moduleId].hot._selfAccepted\n \t\t\t\t});\n \t\t\t}\n \t\t}\n\n \t\t// Now in \"dispose\" phase\n \t\thotSetStatus(\"dispose\");\n \t\tObject.keys(hotAvailableFilesMap).forEach(function(chunkId) {\n \t\t\tif (hotAvailableFilesMap[chunkId] === false) {\n \t\t\t\thotDisposeChunk(chunkId);\n \t\t\t}\n \t\t});\n\n \t\tvar idx;\n \t\tvar queue = outdatedModules.slice();\n \t\twhile (queue.length > 0) {\n \t\t\tmoduleId = queue.pop();\n \t\t\tmodule = installedModules[moduleId];\n \t\t\tif (!module) continue;\n\n \t\t\tvar data = {};\n\n \t\t\t// Call dispose handlers\n \t\t\tvar disposeHandlers = module.hot._disposeHandlers;\n \t\t\tfor (j = 0; j < disposeHandlers.length; j++) {\n \t\t\t\tcb = disposeHandlers[j];\n \t\t\t\tcb(data);\n \t\t\t}\n \t\t\thotCurrentModuleData[moduleId] = data;\n\n \t\t\t// disable module (this disables requires from this module)\n \t\t\tmodule.hot.active = false;\n\n \t\t\t// remove module from cache\n \t\t\tdelete installedModules[moduleId];\n\n \t\t\t// when disposing there is no need to call dispose handler\n \t\t\tdelete outdatedDependencies[moduleId];\n\n \t\t\t// remove \"parents\" references from all children\n \t\t\tfor (j = 0; j < module.children.length; j++) {\n \t\t\t\tvar child = installedModules[module.children[j]];\n \t\t\t\tif (!child) continue;\n \t\t\t\tidx = child.parents.indexOf(moduleId);\n \t\t\t\tif (idx >= 0) {\n \t\t\t\t\tchild.parents.splice(idx, 1);\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// remove outdated dependency from module children\n \t\tvar dependency;\n \t\tvar moduleOutdatedDependencies;\n \t\tfor (moduleId in outdatedDependencies) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n \t\t\t) {\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (module) {\n \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n \t\t\t\t\tfor (j = 0; j < moduleOutdatedDependencies.length; j++) {\n \t\t\t\t\t\tdependency = moduleOutdatedDependencies[j];\n \t\t\t\t\t\tidx = module.children.indexOf(dependency);\n \t\t\t\t\t\tif (idx >= 0) module.children.splice(idx, 1);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Now in \"apply\" phase\n \t\thotSetStatus(\"apply\");\n\n \t\tif (hotUpdateNewHash !== undefined) {\n \t\t\thotCurrentHash = hotUpdateNewHash;\n \t\t\thotUpdateNewHash = undefined;\n \t\t}\n \t\thotUpdate = undefined;\n\n \t\t// insert new code\n \t\tfor (moduleId in appliedUpdate) {\n \t\t\tif (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {\n \t\t\t\tmodules[moduleId] = appliedUpdate[moduleId];\n \t\t\t}\n \t\t}\n\n \t\t// call accept handlers\n \t\tvar error = null;\n \t\tfor (moduleId in outdatedDependencies) {\n \t\t\tif (\n \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n \t\t\t) {\n \t\t\t\tmodule = installedModules[moduleId];\n \t\t\t\tif (module) {\n \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n \t\t\t\t\tvar callbacks = [];\n \t\t\t\t\tfor (i = 0; i < moduleOutdatedDependencies.length; i++) {\n \t\t\t\t\t\tdependency = moduleOutdatedDependencies[i];\n \t\t\t\t\t\tcb = module.hot._acceptedDependencies[dependency];\n \t\t\t\t\t\tif (cb) {\n \t\t\t\t\t\t\tif (callbacks.indexOf(cb) !== -1) continue;\n \t\t\t\t\t\t\tcallbacks.push(cb);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\tfor (i = 0; i < callbacks.length; i++) {\n \t\t\t\t\t\tcb = callbacks[i];\n \t\t\t\t\t\ttry {\n \t\t\t\t\t\t\tcb(moduleOutdatedDependencies);\n \t\t\t\t\t\t} catch (err) {\n \t\t\t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\t\t\ttype: \"accept-errored\",\n \t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\t\t\tdependencyId: moduleOutdatedDependencies[i],\n \t\t\t\t\t\t\t\t\terror: err\n \t\t\t\t\t\t\t\t});\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// Load self accepted modules\n \t\tfor (i = 0; i < outdatedSelfAcceptedModules.length; i++) {\n \t\t\tvar item = outdatedSelfAcceptedModules[i];\n \t\t\tmoduleId = item.module;\n \t\t\thotCurrentParents = item.parents;\n \t\t\thotCurrentChildModule = moduleId;\n \t\t\ttry {\n \t\t\t\t__webpack_require__(moduleId);\n \t\t\t} catch (err) {\n \t\t\t\tif (typeof item.errorHandler === \"function\") {\n \t\t\t\t\ttry {\n \t\t\t\t\t\titem.errorHandler(err);\n \t\t\t\t\t} catch (err2) {\n \t\t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\t\ttype: \"self-accept-error-handler-errored\",\n \t\t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\t\terror: err2,\n \t\t\t\t\t\t\t\toriginalError: err\n \t\t\t\t\t\t\t});\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\t\tif (!error) error = err2;\n \t\t\t\t\t\t}\n \t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t}\n \t\t\t\t} else {\n \t\t\t\t\tif (options.onErrored) {\n \t\t\t\t\t\toptions.onErrored({\n \t\t\t\t\t\t\ttype: \"self-accept-errored\",\n \t\t\t\t\t\t\tmoduleId: moduleId,\n \t\t\t\t\t\t\terror: err\n \t\t\t\t\t\t});\n \t\t\t\t\t}\n \t\t\t\t\tif (!options.ignoreErrored) {\n \t\t\t\t\t\tif (!error) error = err;\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\t// handle errors in accept handlers and self accepted module load\n \t\tif (error) {\n \t\t\thotSetStatus(\"fail\");\n \t\t\treturn Promise.reject(error);\n \t\t}\n\n \t\tif (hotQueuedInvalidatedModules) {\n \t\t\treturn hotApplyInternal(options).then(function(list) {\n \t\t\t\toutdatedModules.forEach(function(moduleId) {\n \t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n \t\t\t\t});\n \t\t\t\treturn list;\n \t\t\t});\n \t\t}\n\n \t\thotSetStatus(\"idle\");\n \t\treturn new Promise(function(resolve) {\n \t\t\tresolve(outdatedModules);\n \t\t});\n \t}\n\n \tfunction hotApplyInvalidatedModules() {\n \t\tif (hotQueuedInvalidatedModules) {\n \t\t\tif (!hotUpdate) hotUpdate = {};\n \t\t\thotQueuedInvalidatedModules.forEach(hotApplyInvalidatedModule);\n \t\t\thotQueuedInvalidatedModules = undefined;\n \t\t\treturn true;\n \t\t}\n \t}\n\n \tfunction hotApplyInvalidatedModule(moduleId) {\n \t\tif (!Object.prototype.hasOwnProperty.call(hotUpdate, moduleId))\n \t\t\thotUpdate[moduleId] = modules[moduleId];\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {},\n \t\t\thot: hotCreateModule(moduleId),\n \t\t\tparents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),\n \t\t\tchildren: []\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// __webpack_hash__\n \t__webpack_require__.h = function() { return hotCurrentHash; };\n\n\n \t// Load entry module and return exports\n \treturn hotCreateRequire(141)(__webpack_require__.s = 141);\n","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \"export to multiple environments\" in Definition().\n */\nexport var _gsScope = (typeof(window) !== \"undefined\") ? window : (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || {};\n\nexport var TweenLite = (function(window) {\n\n\t\t\"use strict\";\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.00000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \"undefined\" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && (_doc || {}).visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = !!vars.immediateRender;\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = !!vars.reversed;\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \"hidden\" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - _tinyNum));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"2.1.3\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\tif (!_doc) { //in some dev environments (like Angular 6), GSAP gets loaded before the document is defined! So re-query it here if/when necessary.\n\t\t\t\t_doc = window.document;\n\t\t\t}\n\t\t\treturn (!_doc) ? e : (_doc.querySelectorAll ? _doc.querySelectorAll(e) : _doc.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t_relExp = /[\\+-]=-?[\\.\\d]/,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : (v === 1 && this.end != null) ? this.end : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m.call(this._tween, val, this._target || pt.t, this._tween);\n\t\t\t\t\t} else if (val < min) if (val > -min && !pt.blob) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_blobRound = function(v) {\n\t\t\t\treturn (((v * 1000) | 0) / 1000) + \"\";\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\ta.end = end;\n\t\t\t\tstart = a[0] = start + \"\"; //ensure values are strings\n\t\t\t\tend = a[1] = end + \"\";\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : _blobRound}; //limiting to 3 decimal places and casting as a string can really help performance when array.join() is called!\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\tif (_relExp.test(end)) { //if the end string contains relative values, delete it so that on the final render (in _setRatio()), we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\t\t\t\t\ta.end = null;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar type = typeof(target[prop]),\n\t\t\t\t\tgetterName = (type !== \"function\") ? \"\" : ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3)),\n\t\t\t\t\ts = (start !== \"get\") ? start : !getterName ? target[prop] : funcParam ? target[getterName](funcParam) : target[getterName](),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob;\n\n\t\t\t\tif (typeof(s) !== \"number\" || (typeof(end) !== \"number\" && !isRelative)) {\n\t\t\t\t\tif (funcParam || isNaN(s) || (!isRelative && isNaN(end)) || typeof(s) === \"boolean\" || typeof(end) === \"boolean\") {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, (isRelative ? (parseFloat(pt.s) + pt.c) + (pt.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : end), stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t: blob, p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: overwriteProp || prop, pr: 0, m: 0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tif (!isRelative) {\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1, yoyoEase:1, stagger:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar l = _lazyTweens.length,\n\t\t\t\t\ti, tween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add tiny amount to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t//ignore\n\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= _tinyNum * 2)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tl = curTween._firstPT; //we need to discern if there were property tweens originally; if they all get removed in the next line's _kill() call, the tween should be killed. See https://github.com/greensock/GreenSock-JS/issues/278\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted && l)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\tstartAt = this._startAt,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.data = \"isStart\";\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tstartVars.onUpdate = v.onUpdate;\n\t\t\t\tstartVars.onUpdateParams = v.onUpdateParams;\n\t\t\t\tstartVars.onUpdateScope = v.onUpdateScope || v.callbackScope || this;\n\t\t\t\tthis._startAt = TweenLite.to(this.target || {}, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true);\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = duration;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\tif (!self._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && self.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted || (self._startAt && self._startAt.progress())) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. Also, we check progress() because if startAt has already rendered at its end, we should force a render at its beginning. Otherwise, if you put the playhead directly on top of where a fromTo({immediateRender:false}) starts, and then move it backwards, the from() won't revert its values.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\n\t\t\t\tif (self._easeType) {\n\t\t\t\t\tvar r = time / duration, type = self._easeType, pow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t\t} else {\n\t\t\t\t\tself.ratio = self._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) {\n\t\t\t\t\tself._time = self._totalTime = prevTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && self._ease._calcEnd) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._time !== prevTime || isComplete || force) {\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\tfirstPT = this._firstPT,\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted && firstPT) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tvar t = this._time;\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(t, false, this.vars.lazy !== false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (target._gsTweenID) {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a || [];\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n\t\treturn TweenLite;\n\n})(_gsScope, \"TweenLite\");\n\nexport var globals = _gsScope.GreenSockGlobals;\nvar nonGlobals = globals.com.greensock;\nexport { TweenLite as default };\nexport var SimpleTimeline = nonGlobals.core.SimpleTimeline;\nexport var Animation = nonGlobals.core.Animation;\nexport var Ease = globals.Ease;\nexport var Linear = globals.Linear;\nexport var Power0 = Linear;\nexport var Power1 = globals.Power1;\nexport var Power2 = globals.Power2;\nexport var Power3 = globals.Power3;\nexport var Power4 = globals.Power4;\nexport var TweenPlugin = globals.TweenPlugin;\nexport var EventDispatcher = nonGlobals.events.EventDispatcher;\n","/**\n * Swiper 6.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: August 17, 2020\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.Swiper = factory());\n}(this, (function () { 'use strict';\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _extends() {\n    _extends = Object.assign || function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n\n    return _extends.apply(this, arguments);\n  }\n\n  /**\n   * SSR Window 3.0.0-alpha.4\n   * Better handling for window object in SSR environment\n   * https://github.com/nolimits4web/ssr-window\n   *\n   * Copyright 2020, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: May 20, 2020\n   */\n\n  /* eslint-disable no-param-reassign */\n  function isObject(obj) {\n    return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n  }\n\n  function extend(target, src) {\n    if (target === void 0) {\n      target = {};\n    }\n\n    if (src === void 0) {\n      src = {};\n    }\n\n    Object.keys(src).forEach(function (key) {\n      if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n        extend(target[key], src[key]);\n      }\n    });\n  }\n\n  var ssrDocument = {\n    body: {},\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    activeElement: {\n      blur: function blur() {},\n      nodeName: ''\n    },\n    querySelector: function querySelector() {\n      return null;\n    },\n    querySelectorAll: function querySelectorAll() {\n      return [];\n    },\n    getElementById: function getElementById() {\n      return null;\n    },\n    createEvent: function createEvent() {\n      return {\n        initEvent: function initEvent() {}\n      };\n    },\n    createElement: function createElement() {\n      return {\n        children: [],\n        childNodes: [],\n        style: {},\n        setAttribute: function setAttribute() {},\n        getElementsByTagName: function getElementsByTagName() {\n          return [];\n        }\n      };\n    },\n    createElementNS: function createElementNS() {\n      return {};\n    },\n    importNode: function importNode() {\n      return null;\n    },\n    location: {\n      hash: '',\n      host: '',\n      hostname: '',\n      href: '',\n      origin: '',\n      pathname: '',\n      protocol: '',\n      search: ''\n    }\n  };\n\n  function getDocument() {\n    var doc = typeof document !== 'undefined' ? document : {};\n    extend(doc, ssrDocument);\n    return doc;\n  }\n\n  var ssrWindow = {\n    document: ssrDocument,\n    navigator: {\n      userAgent: ''\n    },\n    location: {\n      hash: '',\n      host: '',\n      hostname: '',\n      href: '',\n      origin: '',\n      pathname: '',\n      protocol: '',\n      search: ''\n    },\n    history: {\n      replaceState: function replaceState() {},\n      pushState: function pushState() {},\n      go: function go() {},\n      back: function back() {}\n    },\n    CustomEvent: function CustomEvent() {\n      return this;\n    },\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    getComputedStyle: function getComputedStyle() {\n      return {\n        getPropertyValue: function getPropertyValue() {\n          return '';\n        }\n      };\n    },\n    Image: function Image() {},\n    Date: function Date() {},\n    screen: {},\n    setTimeout: function setTimeout() {},\n    clearTimeout: function clearTimeout() {},\n    matchMedia: function matchMedia() {\n      return {};\n    },\n    requestAnimationFrame: function requestAnimationFrame(callback) {\n      if (typeof setTimeout === 'undefined') {\n        callback();\n        return null;\n      }\n\n      return setTimeout(callback, 0);\n    },\n    cancelAnimationFrame: function cancelAnimationFrame(id) {\n      if (typeof setTimeout === 'undefined') {\n        return;\n      }\n\n      clearTimeout(id);\n    }\n  };\n\n  function getWindow() {\n    var win = typeof window !== 'undefined' ? window : {};\n    extend(win, ssrWindow);\n    return win;\n  }\n\n  /**\n   * Dom7 3.0.0-alpha.7\n   * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n   * https://framework7.io/docs/dom7.html\n   *\n   * Copyright 2020, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: July 14, 2020\n   */\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n  }\n\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n    _wrapNativeSuper = function _wrapNativeSuper(Class) {\n      if (Class === null || !_isNativeFunction(Class)) return Class;\n\n      if (typeof Class !== \"function\") {\n        throw new TypeError(\"Super expression must either be null or a function\");\n      }\n\n      if (typeof _cache !== \"undefined\") {\n        if (_cache.has(Class)) return _cache.get(Class);\n\n        _cache.set(Class, Wrapper);\n      }\n\n      function Wrapper() {\n        return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n      }\n\n      Wrapper.prototype = Object.create(Class.prototype, {\n        constructor: {\n          value: Wrapper,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n      return _setPrototypeOf(Wrapper, Class);\n    };\n\n    return _wrapNativeSuper(Class);\n  }\n\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return self;\n  }\n  /* eslint-disable no-proto */\n\n\n  function makeReactive(obj) {\n    var proto = obj.__proto__;\n    Object.defineProperty(obj, '__proto__', {\n      get: function get() {\n        return proto;\n      },\n      set: function set(value) {\n        proto.__proto__ = value;\n      }\n    });\n  }\n\n  var Dom7 = /*#__PURE__*/function (_Array) {\n    _inheritsLoose(Dom7, _Array);\n\n    function Dom7(items) {\n      var _this;\n\n      _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n      makeReactive(_assertThisInitialized(_this));\n      return _this;\n    }\n\n    return Dom7;\n  }( /*#__PURE__*/_wrapNativeSuper(Array));\n\n  function arrayFlat(arr) {\n    if (arr === void 0) {\n      arr = [];\n    }\n\n    var res = [];\n    arr.forEach(function (el) {\n      if (Array.isArray(el)) {\n        res.push.apply(res, arrayFlat(el));\n      } else {\n        res.push(el);\n      }\n    });\n    return res;\n  }\n\n  function arrayFilter(arr, callback) {\n    return Array.prototype.filter.call(arr, callback);\n  }\n\n  function arrayUnique(arr) {\n    var uniqueArray = [];\n\n    for (var i = 0; i < arr.length; i += 1) {\n      if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n    }\n\n    return uniqueArray;\n  }\n\n  function qsa(selector, context) {\n    if (typeof selector !== 'string') {\n      return [selector];\n    }\n\n    var a = [];\n    var res = context.querySelectorAll(selector);\n\n    for (var i = 0; i < res.length; i += 1) {\n      a.push(res[i]);\n    }\n\n    return a;\n  }\n\n  function $(selector, context) {\n    var window = getWindow();\n    var document = getDocument();\n    var arr = [];\n\n    if (!context && selector instanceof Dom7) {\n      return selector;\n    }\n\n    if (!selector) {\n      return new Dom7(arr);\n    }\n\n    if (typeof selector === 'string') {\n      var html = selector.trim();\n\n      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n        var toCreate = 'div';\n        if (html.indexOf('<li') === 0) toCreate = 'ul';\n        if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n        if (html.indexOf('<tbody') === 0) toCreate = 'table';\n        if (html.indexOf('<option') === 0) toCreate = 'select';\n        var tempParent = document.createElement(toCreate);\n        tempParent.innerHTML = html;\n\n        for (var i = 0; i < tempParent.childNodes.length; i += 1) {\n          arr.push(tempParent.childNodes[i]);\n        }\n      } else {\n        arr = qsa(selector.trim(), context || document);\n      } // arr = qsa(selector, document);\n\n    } else if (selector.nodeType || selector === window || selector === document) {\n      arr.push(selector);\n    } else if (Array.isArray(selector)) {\n      if (selector instanceof Dom7) return selector;\n      arr = selector;\n    }\n\n    return new Dom7(arrayUnique(arr));\n  }\n\n  $.fn = Dom7.prototype;\n\n  function addClass() {\n    for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n      classes[_key] = arguments[_key];\n    }\n\n    var classNames = arrayFlat(classes.map(function (c) {\n      return c.split(' ');\n    }));\n    this.forEach(function (el) {\n      var _el$classList;\n\n      (_el$classList = el.classList).add.apply(_el$classList, classNames);\n    });\n    return this;\n  }\n\n  function removeClass() {\n    for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      classes[_key2] = arguments[_key2];\n    }\n\n    var classNames = arrayFlat(classes.map(function (c) {\n      return c.split(' ');\n    }));\n    this.forEach(function (el) {\n      var _el$classList2;\n\n      (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);\n    });\n    return this;\n  }\n\n  function toggleClass() {\n    for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      classes[_key3] = arguments[_key3];\n    }\n\n    var classNames = arrayFlat(classes.map(function (c) {\n      return c.split(' ');\n    }));\n    this.forEach(function (el) {\n      classNames.forEach(function (className) {\n        el.classList.toggle(className);\n      });\n    });\n  }\n\n  function hasClass() {\n    for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      classes[_key4] = arguments[_key4];\n    }\n\n    var classNames = arrayFlat(classes.map(function (c) {\n      return c.split(' ');\n    }));\n    return arrayFilter(this, function (el) {\n      return classNames.filter(function (className) {\n        return el.classList.contains(className);\n      }).length > 0;\n    }).length > 0;\n  }\n\n  function attr(attrs, value) {\n    if (arguments.length === 1 && typeof attrs === 'string') {\n      // Get attr\n      if (this[0]) return this[0].getAttribute(attrs);\n      return undefined;\n    } // Set attrs\n\n\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i].setAttribute(attrs, value);\n      } else {\n        // Object\n        for (var attrName in attrs) {\n          this[i][attrName] = attrs[attrName];\n          this[i].setAttribute(attrName, attrs[attrName]);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function removeAttr(attr) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].removeAttribute(attr);\n    }\n\n    return this;\n  }\n\n  function transform(transform) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].style.transform = transform;\n    }\n\n    return this;\n  }\n\n  function transition(duration) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].style.transition = typeof duration !== 'string' ? duration + \"ms\" : duration;\n    }\n\n    return this;\n  }\n\n  function on() {\n    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    var eventType = args[0],\n        targetSelector = args[1],\n        listener = args[2],\n        capture = args[3];\n\n    if (typeof args[1] === 'function') {\n      eventType = args[0];\n      listener = args[1];\n      capture = args[2];\n      targetSelector = undefined;\n    }\n\n    if (!capture) capture = false;\n\n    function handleLiveEvent(e) {\n      var target = e.target;\n      if (!target) return;\n      var eventData = e.target.dom7EventData || [];\n\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n\n      if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n        var _parents = $(target).parents(); // eslint-disable-line\n\n\n        for (var k = 0; k < _parents.length; k += 1) {\n          if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n        }\n      }\n    }\n\n    function handleEvent(e) {\n      var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n\n      listener.apply(this, eventData);\n    }\n\n    var events = eventType.split(' ');\n    var j;\n\n    for (var i = 0; i < this.length; i += 1) {\n      var el = this[i];\n\n      if (!targetSelector) {\n        for (j = 0; j < events.length; j += 1) {\n          var event = events[j];\n          if (!el.dom7Listeners) el.dom7Listeners = {};\n          if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n          el.dom7Listeners[event].push({\n            listener: listener,\n            proxyListener: handleEvent\n          });\n          el.addEventListener(event, handleEvent, capture);\n        }\n      } else {\n        // Live events\n        for (j = 0; j < events.length; j += 1) {\n          var _event = events[j];\n          if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n          if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n          el.dom7LiveListeners[_event].push({\n            listener: listener,\n            proxyListener: handleLiveEvent\n          });\n\n          el.addEventListener(_event, handleLiveEvent, capture);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function off() {\n    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n\n    var eventType = args[0],\n        targetSelector = args[1],\n        listener = args[2],\n        capture = args[3];\n\n    if (typeof args[1] === 'function') {\n      eventType = args[0];\n      listener = args[1];\n      capture = args[2];\n      targetSelector = undefined;\n    }\n\n    if (!capture) capture = false;\n    var events = eventType.split(' ');\n\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var handlers = void 0;\n\n        if (!targetSelector && el.dom7Listeners) {\n          handlers = el.dom7Listeners[event];\n        } else if (targetSelector && el.dom7LiveListeners) {\n          handlers = el.dom7LiveListeners[event];\n        }\n\n        if (handlers && handlers.length) {\n          for (var k = handlers.length - 1; k >= 0; k -= 1) {\n            var handler = handlers[k];\n\n            if (listener && handler.listener === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (!listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            }\n          }\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function trigger() {\n    var window = getWindow();\n\n    for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n      args[_key9] = arguments[_key9];\n    }\n\n    var events = args[0].split(' ');\n    var eventData = args[1];\n\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n\n        if (window.CustomEvent) {\n          var evt = new window.CustomEvent(event, {\n            detail: eventData,\n            bubbles: true,\n            cancelable: true\n          });\n          el.dom7EventData = args.filter(function (data, dataIndex) {\n            return dataIndex > 0;\n          });\n          el.dispatchEvent(evt);\n          el.dom7EventData = [];\n          delete el.dom7EventData;\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function transitionEnd(callback) {\n    var dom = this;\n\n    function fireCallBack(e) {\n      if (e.target !== this) return;\n      callback.call(this, e);\n      dom.off('transitionend', fireCallBack);\n    }\n\n    if (callback) {\n      dom.on('transitionend', fireCallBack);\n    }\n\n    return this;\n  }\n\n  function outerWidth(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        var _styles = this.styles();\n\n        return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n      }\n\n      return this[0].offsetWidth;\n    }\n\n    return null;\n  }\n\n  function outerHeight(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        var _styles2 = this.styles();\n\n        return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n      }\n\n      return this[0].offsetHeight;\n    }\n\n    return null;\n  }\n\n  function offset() {\n    if (this.length > 0) {\n      var window = getWindow();\n      var document = getDocument();\n      var el = this[0];\n      var box = el.getBoundingClientRect();\n      var body = document.body;\n      var clientTop = el.clientTop || body.clientTop || 0;\n      var clientLeft = el.clientLeft || body.clientLeft || 0;\n      var scrollTop = el === window ? window.scrollY : el.scrollTop;\n      var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n      return {\n        top: box.top + scrollTop - clientTop,\n        left: box.left + scrollLeft - clientLeft\n      };\n    }\n\n    return null;\n  }\n\n  function styles() {\n    var window = getWindow();\n    if (this[0]) return window.getComputedStyle(this[0], null);\n    return {};\n  }\n\n  function css(props, value) {\n    var window = getWindow();\n    var i;\n\n    if (arguments.length === 1) {\n      if (typeof props === 'string') {\n        // .css('width')\n        if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n      } else {\n        // .css({ width: '100px' })\n        for (i = 0; i < this.length; i += 1) {\n          for (var _prop in props) {\n            this[i].style[_prop] = props[_prop];\n          }\n        }\n\n        return this;\n      }\n    }\n\n    if (arguments.length === 2 && typeof props === 'string') {\n      // .css('width', '100px')\n      for (i = 0; i < this.length; i += 1) {\n        this[i].style[props] = value;\n      }\n\n      return this;\n    }\n\n    return this;\n  }\n\n  function each(callback) {\n    if (!callback) return this;\n    this.forEach(function (el, index) {\n      callback.apply(el, [el, index]);\n    });\n    return this;\n  }\n\n  function filter(callback) {\n    var result = arrayFilter(this, callback);\n    return $(result);\n  }\n\n  function html(html) {\n    if (typeof html === 'undefined') {\n      return this[0] ? this[0].innerHTML : null;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].innerHTML = html;\n    }\n\n    return this;\n  }\n\n  function text(text) {\n    if (typeof text === 'undefined') {\n      return this[0] ? this[0].textContent.trim() : null;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].textContent = text;\n    }\n\n    return this;\n  }\n\n  function is(selector) {\n    var window = getWindow();\n    var document = getDocument();\n    var el = this[0];\n    var compareWith;\n    var i;\n    if (!el || typeof selector === 'undefined') return false;\n\n    if (typeof selector === 'string') {\n      if (el.matches) return el.matches(selector);\n      if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n      if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n      compareWith = $(selector);\n\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) return true;\n      }\n\n      return false;\n    }\n\n    if (selector === document) {\n      return el === document;\n    }\n\n    if (selector === window) {\n      return el === window;\n    }\n\n    if (selector.nodeType || selector instanceof Dom7) {\n      compareWith = selector.nodeType ? [selector] : selector;\n\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) return true;\n      }\n\n      return false;\n    }\n\n    return false;\n  }\n\n  function index() {\n    var child = this[0];\n    var i;\n\n    if (child) {\n      i = 0; // eslint-disable-next-line\n\n      while ((child = child.previousSibling) !== null) {\n        if (child.nodeType === 1) i += 1;\n      }\n\n      return i;\n    }\n\n    return undefined;\n  }\n\n  function eq(index) {\n    if (typeof index === 'undefined') return this;\n    var length = this.length;\n\n    if (index > length - 1) {\n      return $([]);\n    }\n\n    if (index < 0) {\n      var returnIndex = length + index;\n      if (returnIndex < 0) return $([]);\n      return $([this[returnIndex]]);\n    }\n\n    return $([this[index]]);\n  }\n\n  function append() {\n    var newChild;\n    var document = getDocument();\n\n    for (var k = 0; k < arguments.length; k += 1) {\n      newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n      for (var i = 0; i < this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          var tempDiv = document.createElement('div');\n          tempDiv.innerHTML = newChild;\n\n          while (tempDiv.firstChild) {\n            this[i].appendChild(tempDiv.firstChild);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (var j = 0; j < newChild.length; j += 1) {\n            this[i].appendChild(newChild[j]);\n          }\n        } else {\n          this[i].appendChild(newChild);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function prepend(newChild) {\n    var document = getDocument();\n    var i;\n    var j;\n\n    for (i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = document.createElement('div');\n        tempDiv.innerHTML = newChild;\n\n        for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n          this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (j = 0; j < newChild.length; j += 1) {\n          this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n        }\n      } else {\n        this[i].insertBefore(newChild, this[i].childNodes[0]);\n      }\n    }\n\n    return this;\n  }\n\n  function next(selector) {\n    if (this.length > 0) {\n      if (selector) {\n        if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n          return $([this[0].nextElementSibling]);\n        }\n\n        return $([]);\n      }\n\n      if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n      return $([]);\n    }\n\n    return $([]);\n  }\n\n  function nextAll(selector) {\n    var nextEls = [];\n    var el = this[0];\n    if (!el) return $([]);\n\n    while (el.nextElementSibling) {\n      var _next = el.nextElementSibling; // eslint-disable-line\n\n      if (selector) {\n        if ($(_next).is(selector)) nextEls.push(_next);\n      } else nextEls.push(_next);\n\n      el = _next;\n    }\n\n    return $(nextEls);\n  }\n\n  function prev(selector) {\n    if (this.length > 0) {\n      var el = this[0];\n\n      if (selector) {\n        if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n          return $([el.previousElementSibling]);\n        }\n\n        return $([]);\n      }\n\n      if (el.previousElementSibling) return $([el.previousElementSibling]);\n      return $([]);\n    }\n\n    return $([]);\n  }\n\n  function prevAll(selector) {\n    var prevEls = [];\n    var el = this[0];\n    if (!el) return $([]);\n\n    while (el.previousElementSibling) {\n      var _prev = el.previousElementSibling; // eslint-disable-line\n\n      if (selector) {\n        if ($(_prev).is(selector)) prevEls.push(_prev);\n      } else prevEls.push(_prev);\n\n      el = _prev;\n    }\n\n    return $(prevEls);\n  }\n\n  function parent(selector) {\n    var parents = []; // eslint-disable-line\n\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode !== null) {\n        if (selector) {\n          if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n        } else {\n          parents.push(this[i].parentNode);\n        }\n      }\n    }\n\n    return $(parents);\n  }\n\n  function parents(selector) {\n    var parents = []; // eslint-disable-line\n\n    for (var i = 0; i < this.length; i += 1) {\n      var _parent = this[i].parentNode; // eslint-disable-line\n\n      while (_parent) {\n        if (selector) {\n          if ($(_parent).is(selector)) parents.push(_parent);\n        } else {\n          parents.push(_parent);\n        }\n\n        _parent = _parent.parentNode;\n      }\n    }\n\n    return $(parents);\n  }\n\n  function closest(selector) {\n    var closest = this; // eslint-disable-line\n\n    if (typeof selector === 'undefined') {\n      return $([]);\n    }\n\n    if (!closest.is(selector)) {\n      closest = closest.parents(selector).eq(0);\n    }\n\n    return closest;\n  }\n\n  function find(selector) {\n    var foundElements = [];\n\n    for (var i = 0; i < this.length; i += 1) {\n      var found = this[i].querySelectorAll(selector);\n\n      for (var j = 0; j < found.length; j += 1) {\n        foundElements.push(found[j]);\n      }\n    }\n\n    return $(foundElements);\n  }\n\n  function children(selector) {\n    var children = []; // eslint-disable-line\n\n    for (var i = 0; i < this.length; i += 1) {\n      var childNodes = this[i].children;\n\n      for (var j = 0; j < childNodes.length; j += 1) {\n        if (!selector || $(childNodes[j]).is(selector)) {\n          children.push(childNodes[j]);\n        }\n      }\n    }\n\n    return $(children);\n  }\n\n  function remove() {\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n    }\n\n    return this;\n  }\n\n  var Methods = {\n    addClass: addClass,\n    removeClass: removeClass,\n    hasClass: hasClass,\n    toggleClass: toggleClass,\n    attr: attr,\n    removeAttr: removeAttr,\n    transform: transform,\n    transition: transition,\n    on: on,\n    off: off,\n    trigger: trigger,\n    transitionEnd: transitionEnd,\n    outerWidth: outerWidth,\n    outerHeight: outerHeight,\n    styles: styles,\n    offset: offset,\n    css: css,\n    each: each,\n    html: html,\n    text: text,\n    is: is,\n    index: index,\n    eq: eq,\n    append: append,\n    prepend: prepend,\n    next: next,\n    nextAll: nextAll,\n    prev: prev,\n    prevAll: prevAll,\n    parent: parent,\n    parents: parents,\n    closest: closest,\n    find: find,\n    children: children,\n    filter: filter,\n    remove: remove\n  };\n  Object.keys(Methods).forEach(function (methodName) {\n    $.fn[methodName] = Methods[methodName];\n  });\n\n  function deleteProps(obj) {\n    var object = obj;\n    Object.keys(object).forEach(function (key) {\n      try {\n        object[key] = null;\n      } catch (e) {// no getter for object\n      }\n\n      try {\n        delete object[key];\n      } catch (e) {// something got wrong\n      }\n    });\n  }\n\n  function nextTick(callback, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n\n    return setTimeout(callback, delay);\n  }\n\n  function now() {\n    return Date.now();\n  }\n\n  function getTranslate(el, axis) {\n    if (axis === void 0) {\n      axis = 'x';\n    }\n\n    var window = getWindow();\n    var matrix;\n    var curTransform;\n    var transformMatrix;\n    var curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map(function (a) {\n          return a.replace(',', '.');\n        }).join(', ');\n      } // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n\n\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n      matrix = transformMatrix.toString().split(',');\n    }\n\n    if (axis === 'x') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n        else curTransform = parseFloat(matrix[4]);\n    }\n\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n        else curTransform = parseFloat(matrix[5]);\n    }\n\n    return curTransform || 0;\n  }\n\n  function isObject$1(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  }\n\n  function extend$1() {\n    var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n\n    for (var i = 1; i < arguments.length; i += 1) {\n      var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n      if (nextSource !== undefined && nextSource !== null) {\n        var keysArray = Object.keys(Object(nextSource));\n\n        for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          var nextKey = keysArray[nextIndex];\n          var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n          if (desc !== undefined && desc.enumerable) {\n            if (isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {\n              extend$1(to[nextKey], nextSource[nextKey]);\n            } else if (!isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {\n              to[nextKey] = {};\n              extend$1(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n\n    return to;\n  }\n\n  function bindModuleMethods(instance, obj) {\n    Object.keys(obj).forEach(function (key) {\n      if (isObject$1(obj[key])) {\n        Object.keys(obj[key]).forEach(function (subKey) {\n          if (typeof obj[key][subKey] === 'function') {\n            obj[key][subKey] = obj[key][subKey].bind(instance);\n          }\n        });\n      }\n\n      instance[key] = obj[key];\n    });\n  }\n\n  var support;\n\n  function calcSupport() {\n    var window = getWindow();\n    var document = getDocument();\n    return {\n      touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n      pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,\n      observer: function checkObserver() {\n        return 'MutationObserver' in window || 'WebkitMutationObserver' in window;\n      }(),\n      passiveListener: function checkPassiveListener() {\n        var supportsPassive = false;\n\n        try {\n          var opts = Object.defineProperty({}, 'passive', {\n            // eslint-disable-next-line\n            get: function get() {\n              supportsPassive = true;\n            }\n          });\n          window.addEventListener('testPassiveListener', null, opts);\n        } catch (e) {// No support\n        }\n\n        return supportsPassive;\n      }(),\n      gestures: function checkGestures() {\n        return 'ongesturestart' in window;\n      }()\n    };\n  }\n\n  function getSupport() {\n    if (!support) {\n      support = calcSupport();\n    }\n\n    return support;\n  }\n\n  var device;\n\n  function calcDevice(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        userAgent = _ref.userAgent;\n\n    var support = getSupport();\n    var window = getWindow();\n    var platform = window.navigator.platform;\n    var ua = userAgent || window.navigator.userAgent;\n    var device = {\n      ios: false,\n      android: false\n    };\n    var screenWidth = window.screen.width;\n    var screenHeight = window.screen.height;\n    var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n    var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n    var windows = platform === 'Win32';\n    var macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n    var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768'];\n\n    if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + \"x\" + screenHeight) >= 0) {\n      ipad = ua.match(/(Version)\\/([\\d.]+)/);\n      if (!ipad) ipad = [0, 1, '13_0_0'];\n      macos = false;\n    } // Android\n\n\n    if (android && !windows) {\n      device.os = 'android';\n      device.android = true;\n    }\n\n    if (ipad || iphone || ipod) {\n      device.os = 'ios';\n      device.ios = true;\n    } // Export object\n\n\n    return device;\n  }\n\n  function getDevice(overrides) {\n    if (overrides === void 0) {\n      overrides = {};\n    }\n\n    if (!device) {\n      device = calcDevice(overrides);\n    }\n\n    return device;\n  }\n\n  var browser;\n\n  function calcBrowser() {\n    var window = getWindow();\n\n    function isSafari() {\n      var ua = window.navigator.userAgent.toLowerCase();\n      return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n    }\n\n    return {\n      isEdge: !!window.navigator.userAgent.match(/Edge/g),\n      isSafari: isSafari(),\n      isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n    };\n  }\n\n  function getBrowser() {\n    if (!browser) {\n      browser = calcBrowser();\n    }\n\n    return browser;\n  }\n\n  var Resize = {\n    name: 'resize',\n    create: function create() {\n      var swiper = this;\n      extend$1(swiper, {\n        resize: {\n          resizeHandler: function resizeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) return;\n            swiper.emit('beforeResize');\n            swiper.emit('resize');\n          },\n          orientationChangeHandler: function orientationChangeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) return;\n            swiper.emit('orientationchange');\n          }\n        }\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        var window = getWindow(); // Emit resize\n\n        window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange\n\n        window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n      destroy: function destroy(swiper) {\n        var window = getWindow();\n        window.removeEventListener('resize', swiper.resize.resizeHandler);\n        window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      }\n    }\n  };\n\n  var Observer = {\n    attach: function attach(target, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      var window = getWindow();\n      var swiper = this;\n      var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n      var observer = new ObserverFunc(function (mutations) {\n        // The observerUpdate event should only be triggered\n        // once despite the number of mutations.  Additional\n        // triggers are redundant and are very costly\n        if (mutations.length === 1) {\n          swiper.emit('observerUpdate', mutations[0]);\n          return;\n        }\n\n        var observerUpdate = function observerUpdate() {\n          swiper.emit('observerUpdate', mutations[0]);\n        };\n\n        if (window.requestAnimationFrame) {\n          window.requestAnimationFrame(observerUpdate);\n        } else {\n          window.setTimeout(observerUpdate, 0);\n        }\n      });\n      observer.observe(target, {\n        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n        childList: typeof options.childList === 'undefined' ? true : options.childList,\n        characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n      });\n      swiper.observer.observers.push(observer);\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.support.observer || !swiper.params.observer) return;\n\n      if (swiper.params.observeParents) {\n        var containerParents = swiper.$el.parents();\n\n        for (var i = 0; i < containerParents.length; i += 1) {\n          swiper.observer.attach(containerParents[i]);\n        }\n      } // Observe container\n\n\n      swiper.observer.attach(swiper.$el[0], {\n        childList: swiper.params.observeSlideChildren\n      }); // Observe wrapper\n\n      swiper.observer.attach(swiper.$wrapperEl[0], {\n        attributes: false\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.observer.observers.forEach(function (observer) {\n        observer.disconnect();\n      });\n      swiper.observer.observers = [];\n    }\n  };\n  var Observer$1 = {\n    name: 'observer',\n    params: {\n      observer: false,\n      observeParents: false,\n      observeSlideChildren: false\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        observer: _extends(_extends({}, Observer), {}, {\n          observers: []\n        })\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        swiper.observer.init();\n      },\n      destroy: function destroy(swiper) {\n        swiper.observer.destroy();\n      }\n    }\n  };\n\n  var modular = {\n    useParams: function useParams(instanceParams) {\n      var instance = this;\n      if (!instance.modules) return;\n      Object.keys(instance.modules).forEach(function (moduleName) {\n        var module = instance.modules[moduleName]; // Extend params\n\n        if (module.params) {\n          extend$1(instanceParams, module.params);\n        }\n      });\n    },\n    useModules: function useModules(modulesParams) {\n      if (modulesParams === void 0) {\n        modulesParams = {};\n      }\n\n      var instance = this;\n      if (!instance.modules) return;\n      Object.keys(instance.modules).forEach(function (moduleName) {\n        var module = instance.modules[moduleName];\n        var moduleParams = modulesParams[moduleName] || {}; // Add event listeners\n\n        if (module.on && instance.on) {\n          Object.keys(module.on).forEach(function (moduleEventName) {\n            instance.on(moduleEventName, module.on[moduleEventName]);\n          });\n        } // Module create callback\n\n\n        if (module.create) {\n          module.create.bind(instance)(moduleParams);\n        }\n      });\n    }\n  };\n\n  /* eslint-disable no-underscore-dangle */\n  var eventsEmitter = {\n    on: function on(events, handler, priority) {\n      var self = this;\n      if (typeof handler !== 'function') return self;\n      var method = priority ? 'unshift' : 'push';\n      events.split(' ').forEach(function (event) {\n        if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n        self.eventsListeners[event][method](handler);\n      });\n      return self;\n    },\n    once: function once(events, handler, priority) {\n      var self = this;\n      if (typeof handler !== 'function') return self;\n\n      function onceHandler() {\n        self.off(events, onceHandler);\n\n        if (onceHandler.__emitterProxy) {\n          delete onceHandler.__emitterProxy;\n        }\n\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        handler.apply(self, args);\n      }\n\n      onceHandler.__emitterProxy = handler;\n      return self.on(events, onceHandler, priority);\n    },\n    onAny: function onAny(handler, priority) {\n      var self = this;\n      if (typeof handler !== 'function') return self;\n      var method = priority ? 'unshift' : 'push';\n\n      if (self.eventsAnyListeners.indexOf(handler) < 0) {\n        self.eventsAnyListeners[method](handler);\n      }\n\n      return self;\n    },\n    offAny: function offAny(handler) {\n      var self = this;\n      if (!self.eventsAnyListeners) return self;\n      var index = self.eventsAnyListeners.indexOf(handler);\n\n      if (index >= 0) {\n        self.eventsAnyListeners.splice(index, 1);\n      }\n\n      return self;\n    },\n    off: function off(events, handler) {\n      var self = this;\n      if (!self.eventsListeners) return self;\n      events.split(' ').forEach(function (event) {\n        if (typeof handler === 'undefined') {\n          self.eventsListeners[event] = [];\n        } else if (self.eventsListeners[event]) {\n          self.eventsListeners[event].forEach(function (eventHandler, index) {\n            if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n              self.eventsListeners[event].splice(index, 1);\n            }\n          });\n        }\n      });\n      return self;\n    },\n    emit: function emit() {\n      var self = this;\n      if (!self.eventsListeners) return self;\n      var events;\n      var data;\n      var context;\n\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n        events = args[0];\n        data = args.slice(1, args.length);\n        context = self;\n      } else {\n        events = args[0].events;\n        data = args[0].data;\n        context = args[0].context || self;\n      }\n\n      data.unshift(context);\n      var eventsArray = Array.isArray(events) ? events : events.split(' ');\n      eventsArray.forEach(function (event) {\n        if (self.eventsListeners && self.eventsListeners[event]) {\n          var handlers = [];\n          self.eventsListeners[event].forEach(function (eventHandler) {\n            handlers.push(eventHandler);\n          });\n          handlers.forEach(function (eventHandler) {\n            eventHandler.apply(context, data);\n          });\n        }\n      });\n      return self;\n    }\n  };\n\n  function updateSize() {\n    var swiper = this;\n    var width;\n    var height;\n    var $el = swiper.$el;\n\n    if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n      width = swiper.params.width;\n    } else {\n      width = $el[0].clientWidth;\n    }\n\n    if (typeof swiper.params.height !== 'undefined' && swiper.params.width !== null) {\n      height = swiper.params.height;\n    } else {\n      height = $el[0].clientHeight;\n    }\n\n    if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n      return;\n    } // Subtract paddings\n\n\n    width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n    height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n    if (Number.isNaN(width)) width = 0;\n    if (Number.isNaN(height)) height = 0;\n    extend$1(swiper, {\n      width: width,\n      height: height,\n      size: swiper.isHorizontal() ? width : height\n    });\n  }\n\n  function updateSlides() {\n    var swiper = this;\n    var window = getWindow();\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl,\n        swiperSize = swiper.size,\n        rtl = swiper.rtlTranslate,\n        wrongRTL = swiper.wrongRTL;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n    var slides = $wrapperEl.children(\".\" + swiper.params.slideClass);\n    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n    var snapGrid = [];\n    var slidesGrid = [];\n    var slidesSizesGrid = [];\n\n    function slidesForMargin(slideEl, slideIndex) {\n      if (!params.cssMode) return true;\n\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n\n      return true;\n    }\n\n    var offsetBefore = params.slidesOffsetBefore;\n\n    if (typeof offsetBefore === 'function') {\n      offsetBefore = params.slidesOffsetBefore.call(swiper);\n    }\n\n    var offsetAfter = params.slidesOffsetAfter;\n\n    if (typeof offsetAfter === 'function') {\n      offsetAfter = params.slidesOffsetAfter.call(swiper);\n    }\n\n    var previousSnapGridLength = swiper.snapGrid.length;\n    var previousSlidesGridLength = swiper.snapGrid.length;\n    var spaceBetween = params.spaceBetween;\n    var slidePosition = -offsetBefore;\n    var prevSlideSize = 0;\n    var index = 0;\n\n    if (typeof swiperSize === 'undefined') {\n      return;\n    }\n\n    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n    }\n\n    swiper.virtualSize = -spaceBetween; // reset margins\n\n    if (rtl) slides.css({\n      marginLeft: '',\n      marginTop: ''\n    });else slides.css({\n      marginRight: '',\n      marginBottom: ''\n    });\n    var slidesNumberEvenToRows;\n\n    if (params.slidesPerColumn > 1) {\n      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n        slidesNumberEvenToRows = slidesLength;\n      } else {\n        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n      }\n\n      if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n      }\n    } // Calc slides\n\n\n    var slideSize;\n    var slidesPerColumn = params.slidesPerColumn;\n    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n\n    for (var i = 0; i < slidesLength; i += 1) {\n      slideSize = 0;\n      var slide = slides.eq(i);\n\n      if (params.slidesPerColumn > 1) {\n        // Set slides order\n        var newSlideOrderIndex = void 0;\n        var column = void 0;\n        var row = void 0;\n\n        if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n          var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n          var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n          var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;\n          newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n          slide.css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex\n          });\n        } else if (params.slidesPerColumnFill === 'column') {\n          column = Math.floor(i / slidesPerColumn);\n          row = i - column * slidesPerColumn;\n\n          if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {\n            row += 1;\n\n            if (row >= slidesPerColumn) {\n              row = 0;\n              column += 1;\n            }\n          }\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - row * slidesPerRow;\n        }\n\n        slide.css(\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + \"px\");\n      }\n\n      if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n      if (params.slidesPerView === 'auto') {\n        var slideStyles = window.getComputedStyle(slide[0], null);\n        var currentTransform = slide[0].style.transform;\n        var currentWebKitTransform = slide[0].style.webkitTransform;\n\n        if (currentTransform) {\n          slide[0].style.transform = 'none';\n        }\n\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = 'none';\n        }\n\n        if (params.roundLengths) {\n          slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n        } else {\n          // eslint-disable-next-line\n          if (swiper.isHorizontal()) {\n            var width = parseFloat(slideStyles.getPropertyValue('width') || 0);\n            var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0);\n            var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0);\n            var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0);\n            var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0);\n            var boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n            if (boxSizing && boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n            }\n          } else {\n            var height = parseFloat(slideStyles.getPropertyValue('height') || 0);\n            var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0);\n            var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0);\n            var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0);\n            var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0);\n\n            var _boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n            if (_boxSizing && _boxSizing === 'border-box') {\n              slideSize = height + marginTop + marginBottom;\n            } else {\n              slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n            }\n          }\n        }\n\n        if (currentTransform) {\n          slide[0].style.transform = currentTransform;\n        }\n\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = currentWebKitTransform;\n        }\n\n        if (params.roundLengths) slideSize = Math.floor(slideSize);\n      } else {\n        slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n        if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n        if (slides[i]) {\n          if (swiper.isHorizontal()) {\n            slides[i].style.width = slideSize + \"px\";\n          } else {\n            slides[i].style.height = slideSize + \"px\";\n          }\n        }\n      }\n\n      if (slides[i]) {\n        slides[i].swiperSlideSize = slideSize;\n      }\n\n      slidesSizesGrid.push(slideSize);\n\n      if (params.centeredSlides) {\n        slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n        if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n        if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n        if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n        if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n        if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n        slidesGrid.push(slidePosition);\n      } else {\n        if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n        if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n        slidesGrid.push(slidePosition);\n        slidePosition = slidePosition + slideSize + spaceBetween;\n      }\n\n      swiper.virtualSize += slideSize + spaceBetween;\n      prevSlideSize = slideSize;\n      index += 1;\n    }\n\n    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n    var newSlidesGrid;\n\n    if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n      $wrapperEl.css({\n        width: swiper.virtualSize + params.spaceBetween + \"px\"\n      });\n    }\n\n    if (params.setWrapperSize) {\n      if (swiper.isHorizontal()) $wrapperEl.css({\n        width: swiper.virtualSize + params.spaceBetween + \"px\"\n      });else $wrapperEl.css({\n        height: swiper.virtualSize + params.spaceBetween + \"px\"\n      });\n    }\n\n    if (params.slidesPerColumn > 1) {\n      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n      if (swiper.isHorizontal()) $wrapperEl.css({\n        width: swiper.virtualSize + params.spaceBetween + \"px\"\n      });else $wrapperEl.css({\n        height: swiper.virtualSize + params.spaceBetween + \"px\"\n      });\n\n      if (params.centeredSlides) {\n        newSlidesGrid = [];\n\n        for (var _i = 0; _i < snapGrid.length; _i += 1) {\n          var slidesGridItem = snapGrid[_i];\n          if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n          if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n        }\n\n        snapGrid = newSlidesGrid;\n      }\n    } // Remove last grid elements depending on width\n\n\n    if (!params.centeredSlides) {\n      newSlidesGrid = [];\n\n      for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n        var _slidesGridItem = snapGrid[_i2];\n        if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);\n\n        if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {\n          newSlidesGrid.push(_slidesGridItem);\n        }\n      }\n\n      snapGrid = newSlidesGrid;\n\n      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n        snapGrid.push(swiper.virtualSize - swiperSize);\n      }\n    }\n\n    if (snapGrid.length === 0) snapGrid = [0];\n\n    if (params.spaceBetween !== 0) {\n      if (swiper.isHorizontal()) {\n        if (rtl) slides.filter(slidesForMargin).css({\n          marginLeft: spaceBetween + \"px\"\n        });else slides.filter(slidesForMargin).css({\n          marginRight: spaceBetween + \"px\"\n        });\n      } else slides.filter(slidesForMargin).css({\n        marginBottom: spaceBetween + \"px\"\n      });\n    }\n\n    if (params.centeredSlides && params.centeredSlidesBounds) {\n      var allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize -= params.spaceBetween;\n      var maxSnap = allSlidesSize - swiperSize;\n      snapGrid = snapGrid.map(function (snap) {\n        if (snap < 0) return -offsetBefore;\n        if (snap > maxSnap) return maxSnap + offsetAfter;\n        return snap;\n      });\n    }\n\n    if (params.centerInsufficientSlides) {\n      var _allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      _allSlidesSize -= params.spaceBetween;\n\n      if (_allSlidesSize < swiperSize) {\n        var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;\n        snapGrid.forEach(function (snap, snapIndex) {\n          snapGrid[snapIndex] = snap - allSlidesOffset;\n        });\n        slidesGrid.forEach(function (snap, snapIndex) {\n          slidesGrid[snapIndex] = snap + allSlidesOffset;\n        });\n      }\n    }\n\n    extend$1(swiper, {\n      slides: slides,\n      snapGrid: snapGrid,\n      slidesGrid: slidesGrid,\n      slidesSizesGrid: slidesSizesGrid\n    });\n\n    if (slidesLength !== previousSlidesLength) {\n      swiper.emit('slidesLengthChange');\n    }\n\n    if (snapGrid.length !== previousSnapGridLength) {\n      if (swiper.params.watchOverflow) swiper.checkOverflow();\n      swiper.emit('snapGridLengthChange');\n    }\n\n    if (slidesGrid.length !== previousSlidesGridLength) {\n      swiper.emit('slidesGridLengthChange');\n    }\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateSlidesOffset();\n    }\n  }\n\n  function updateAutoHeight(speed) {\n    var swiper = this;\n    var activeSlides = [];\n    var newHeight = 0;\n    var i;\n\n    if (typeof speed === 'number') {\n      swiper.setTransition(speed);\n    } else if (speed === true) {\n      swiper.setTransition(swiper.params.speed);\n    } // Find slides currently in view\n\n\n    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n      if (swiper.params.centeredSlides) {\n        swiper.visibleSlides.each(function (slide) {\n          activeSlides.push(slide);\n        });\n      } else {\n        for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n          var index = swiper.activeIndex + i;\n          if (index > swiper.slides.length) break;\n          activeSlides.push(swiper.slides.eq(index)[0]);\n        }\n      }\n    } else {\n      activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n    } // Find new height from highest slide in view\n\n\n    for (i = 0; i < activeSlides.length; i += 1) {\n      if (typeof activeSlides[i] !== 'undefined') {\n        var height = activeSlides[i].offsetHeight;\n        newHeight = height > newHeight ? height : newHeight;\n      }\n    } // Update Height\n\n\n    if (newHeight) swiper.$wrapperEl.css('height', newHeight + \"px\");\n  }\n\n  function updateSlidesOffset() {\n    var swiper = this;\n    var slides = swiper.slides;\n\n    for (var i = 0; i < slides.length; i += 1) {\n      slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n    }\n  }\n\n  function updateSlidesProgress(translate) {\n    if (translate === void 0) {\n      translate = this && this.translate || 0;\n    }\n\n    var swiper = this;\n    var params = swiper.params;\n    var slides = swiper.slides,\n        rtl = swiper.rtlTranslate;\n    if (slides.length === 0) return;\n    if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n    var offsetCenter = -translate;\n    if (rtl) offsetCenter = translate; // Visible Slides\n\n    slides.removeClass(params.slideVisibleClass);\n    swiper.visibleSlidesIndexes = [];\n    swiper.visibleSlides = [];\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var slide = slides[i];\n      var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n\n      if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {\n        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n      }\n\n      slide.progress = rtl ? -slideProgress : slideProgress;\n    }\n\n    swiper.visibleSlides = $(swiper.visibleSlides);\n  }\n\n  function updateProgress(translate) {\n    var swiper = this;\n\n    if (typeof translate === 'undefined') {\n      var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n      translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n    }\n\n    var params = swiper.params;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    var progress = swiper.progress,\n        isBeginning = swiper.isBeginning,\n        isEnd = swiper.isEnd;\n    var wasBeginning = isBeginning;\n    var wasEnd = isEnd;\n\n    if (translatesDiff === 0) {\n      progress = 0;\n      isBeginning = true;\n      isEnd = true;\n    } else {\n      progress = (translate - swiper.minTranslate()) / translatesDiff;\n      isBeginning = progress <= 0;\n      isEnd = progress >= 1;\n    }\n\n    extend$1(swiper, {\n      progress: progress,\n      isBeginning: isBeginning,\n      isEnd: isEnd\n    });\n    if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n    if (isBeginning && !wasBeginning) {\n      swiper.emit('reachBeginning toEdge');\n    }\n\n    if (isEnd && !wasEnd) {\n      swiper.emit('reachEnd toEdge');\n    }\n\n    if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n      swiper.emit('fromEdge');\n    }\n\n    swiper.emit('progress', progress);\n  }\n\n  function updateSlidesClasses() {\n    var swiper = this;\n    var slides = swiper.slides,\n        params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl,\n        activeIndex = swiper.activeIndex,\n        realIndex = swiper.realIndex;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n    slides.removeClass(params.slideActiveClass + \" \" + params.slideNextClass + \" \" + params.slidePrevClass + \" \" + params.slideDuplicateActiveClass + \" \" + params.slideDuplicateNextClass + \" \" + params.slideDuplicatePrevClass);\n    var activeSlide;\n\n    if (isVirtual) {\n      activeSlide = swiper.$wrapperEl.find(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\");\n    } else {\n      activeSlide = slides.eq(activeIndex);\n    } // Active classes\n\n\n    activeSlide.addClass(params.slideActiveClass);\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (activeSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n      } else {\n        $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n      }\n    } // Next Slide\n\n\n    var nextSlide = activeSlide.nextAll(\".\" + params.slideClass).eq(0).addClass(params.slideNextClass);\n\n    if (params.loop && nextSlide.length === 0) {\n      nextSlide = slides.eq(0);\n      nextSlide.addClass(params.slideNextClass);\n    } // Prev Slide\n\n\n    var prevSlide = activeSlide.prevAll(\".\" + params.slideClass).eq(0).addClass(params.slidePrevClass);\n\n    if (params.loop && prevSlide.length === 0) {\n      prevSlide = slides.eq(-1);\n      prevSlide.addClass(params.slidePrevClass);\n    }\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (nextSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n      } else {\n        $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n      }\n\n      if (prevSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n      } else {\n        $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n      }\n    }\n\n    swiper.emitSlidesClasses();\n  }\n\n  function updateActiveIndex(newActiveIndex) {\n    var swiper = this;\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n    var slidesGrid = swiper.slidesGrid,\n        snapGrid = swiper.snapGrid,\n        params = swiper.params,\n        previousIndex = swiper.activeIndex,\n        previousRealIndex = swiper.realIndex,\n        previousSnapIndex = swiper.snapIndex;\n    var activeIndex = newActiveIndex;\n    var snapIndex;\n\n    if (typeof activeIndex === 'undefined') {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (typeof slidesGrid[i + 1] !== 'undefined') {\n          if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n            activeIndex = i;\n          } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n            activeIndex = i + 1;\n          }\n        } else if (translate >= slidesGrid[i]) {\n          activeIndex = i;\n        }\n      } // Normalize slideIndex\n\n\n      if (params.normalizeSlideIndex) {\n        if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n      }\n    }\n\n    if (snapGrid.indexOf(translate) >= 0) {\n      snapIndex = snapGrid.indexOf(translate);\n    } else {\n      var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n    }\n\n    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n    if (activeIndex === previousIndex) {\n      if (snapIndex !== previousSnapIndex) {\n        swiper.snapIndex = snapIndex;\n        swiper.emit('snapIndexChange');\n      }\n\n      return;\n    } // Get real index\n\n\n    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n    extend$1(swiper, {\n      snapIndex: snapIndex,\n      realIndex: realIndex,\n      previousIndex: previousIndex,\n      activeIndex: activeIndex\n    });\n    swiper.emit('activeIndexChange');\n    swiper.emit('snapIndexChange');\n\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n\n    if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n      swiper.emit('slideChange');\n    }\n  }\n\n  function updateClickedSlide(e) {\n    var swiper = this;\n    var params = swiper.params;\n    var slide = $(e.target).closest(\".\" + params.slideClass)[0];\n    var slideFound = false;\n\n    if (slide) {\n      for (var i = 0; i < swiper.slides.length; i += 1) {\n        if (swiper.slides[i] === slide) slideFound = true;\n      }\n    }\n\n    if (slide && slideFound) {\n      swiper.clickedSlide = slide;\n\n      if (swiper.virtual && swiper.params.virtual.enabled) {\n        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n      } else {\n        swiper.clickedIndex = $(slide).index();\n      }\n    } else {\n      swiper.clickedSlide = undefined;\n      swiper.clickedIndex = undefined;\n      return;\n    }\n\n    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n      swiper.slideToClickedSlide();\n    }\n  }\n\n  var update = {\n    updateSize: updateSize,\n    updateSlides: updateSlides,\n    updateAutoHeight: updateAutoHeight,\n    updateSlidesOffset: updateSlidesOffset,\n    updateSlidesProgress: updateSlidesProgress,\n    updateProgress: updateProgress,\n    updateSlidesClasses: updateSlidesClasses,\n    updateActiveIndex: updateActiveIndex,\n    updateClickedSlide: updateClickedSlide\n  };\n\n  function getSwiperTranslate(axis) {\n    if (axis === void 0) {\n      axis = this.isHorizontal() ? 'x' : 'y';\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        rtl = swiper.rtlTranslate,\n        translate = swiper.translate,\n        $wrapperEl = swiper.$wrapperEl;\n\n    if (params.virtualTranslate) {\n      return rtl ? -translate : translate;\n    }\n\n    if (params.cssMode) {\n      return translate;\n    }\n\n    var currentTranslate = getTranslate($wrapperEl[0], axis);\n    if (rtl) currentTranslate = -currentTranslate;\n    return currentTranslate || 0;\n  }\n\n  function setTranslate(translate, byController) {\n    var swiper = this;\n    var rtl = swiper.rtlTranslate,\n        params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl,\n        wrapperEl = swiper.wrapperEl,\n        progress = swiper.progress;\n    var x = 0;\n    var y = 0;\n    var z = 0;\n\n    if (swiper.isHorizontal()) {\n      x = rtl ? -translate : translate;\n    } else {\n      y = translate;\n    }\n\n    if (params.roundLengths) {\n      x = Math.floor(x);\n      y = Math.floor(y);\n    }\n\n    if (params.cssMode) {\n      wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n    } else if (!params.virtualTranslate) {\n      $wrapperEl.transform(\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\");\n    }\n\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n    }\n\n    if (newProgress !== progress) {\n      swiper.updateProgress(translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, byController);\n  }\n\n  function minTranslate() {\n    return -this.snapGrid[0];\n  }\n\n  function maxTranslate() {\n    return -this.snapGrid[this.snapGrid.length - 1];\n  }\n\n  function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n    if (translate === void 0) {\n      translate = 0;\n    }\n\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    if (translateBounds === void 0) {\n      translateBounds = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        wrapperEl = swiper.wrapperEl;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var minTranslate = swiper.minTranslate();\n    var maxTranslate = swiper.maxTranslate();\n    var newTranslate;\n    if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n    swiper.updateProgress(newTranslate);\n\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          var _wrapperEl$scrollTo;\n\n          wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        }\n      }\n\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(newTranslate);\n\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionEnd');\n      }\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(newTranslate);\n\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionStart');\n      }\n\n      if (!swiper.animating) {\n        swiper.animating = true;\n\n        if (!swiper.onTranslateToWrapperTransitionEnd) {\n          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) return;\n            if (e.target !== this) return;\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.onTranslateToWrapperTransitionEnd = null;\n            delete swiper.onTranslateToWrapperTransitionEnd;\n\n            if (runCallbacks) {\n              swiper.emit('transitionEnd');\n            }\n          };\n        }\n\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  var translate = {\n    getTranslate: getSwiperTranslate,\n    setTranslate: setTranslate,\n    minTranslate: minTranslate,\n    maxTranslate: maxTranslate,\n    translateTo: translateTo\n  };\n\n  function setTransition(duration, byController) {\n    var swiper = this;\n\n    if (!swiper.params.cssMode) {\n      swiper.$wrapperEl.transition(duration);\n    }\n\n    swiper.emit('setTransition', duration, byController);\n  }\n\n  function transitionStart(runCallbacks, direction) {\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex,\n        params = swiper.params,\n        previousIndex = swiper.previousIndex;\n    if (params.cssMode) return;\n\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    var dir = direction;\n\n    if (!dir) {\n      if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n    }\n\n    swiper.emit('transitionStart');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionStart');\n        return;\n      }\n\n      swiper.emit('slideChangeTransitionStart');\n\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionStart');\n      } else {\n        swiper.emit('slidePrevTransitionStart');\n      }\n    }\n  }\n\n  function transitionEnd$1(runCallbacks, direction) {\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex,\n        previousIndex = swiper.previousIndex,\n        params = swiper.params;\n    swiper.animating = false;\n    if (params.cssMode) return;\n    swiper.setTransition(0);\n    var dir = direction;\n\n    if (!dir) {\n      if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n    }\n\n    swiper.emit('transitionEnd');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionEnd');\n        return;\n      }\n\n      swiper.emit('slideChangeTransitionEnd');\n\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionEnd');\n      } else {\n        swiper.emit('slidePrevTransitionEnd');\n      }\n    }\n  }\n\n  var transition$1 = {\n    setTransition: setTransition,\n    transitionStart: transitionStart,\n    transitionEnd: transitionEnd$1\n  };\n\n  function slideTo(index, speed, runCallbacks, internal) {\n    if (index === void 0) {\n      index = 0;\n    }\n\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var slideIndex = index;\n    if (slideIndex < 0) slideIndex = 0;\n    var params = swiper.params,\n        snapGrid = swiper.snapGrid,\n        slidesGrid = swiper.slidesGrid,\n        previousIndex = swiper.previousIndex,\n        activeIndex = swiper.activeIndex,\n        rtl = swiper.rtlTranslate,\n        wrapperEl = swiper.wrapperEl;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n    var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n      swiper.emit('beforeSlideChangeStart');\n    }\n\n    var translate = -snapGrid[snapIndex]; // Update progress\n\n    swiper.updateProgress(translate); // Normalize slideIndex\n\n    if (params.normalizeSlideIndex) {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n          slideIndex = i;\n        }\n      }\n    } // Directions locks\n\n\n    if (swiper.initialized && slideIndex !== activeIndex) {\n      if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n        return false;\n      }\n\n      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n        if ((activeIndex || 0) !== slideIndex) return false;\n      }\n    }\n\n    var direction;\n    if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n    if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n      swiper.updateActiveIndex(slideIndex); // Update Height\n\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n\n      swiper.updateSlidesClasses();\n\n      if (params.effect !== 'slide') {\n        swiper.setTranslate(translate);\n      }\n\n      if (direction !== 'reset') {\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      }\n\n      return false;\n    }\n\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      var t = -translate;\n\n      if (rtl) {\n        t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n      }\n\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          var _wrapperEl$scrollTo;\n\n          wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        }\n      }\n\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n\n      if (!swiper.animating) {\n        swiper.animating = true;\n\n        if (!swiper.onSlideToWrapperTransitionEnd) {\n          swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) return;\n            if (e.target !== this) return;\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            swiper.onSlideToWrapperTransitionEnd = null;\n            delete swiper.onSlideToWrapperTransitionEnd;\n            swiper.transitionEnd(runCallbacks, direction);\n          };\n        }\n\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  function slideToLoop(index, speed, runCallbacks, internal) {\n    if (index === void 0) {\n      index = 0;\n    }\n\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var newIndex = index;\n\n    if (swiper.params.loop) {\n      newIndex += swiper.loopedSlides;\n    }\n\n    return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideNext(speed, runCallbacks, internal) {\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        animating = swiper.animating;\n    var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n\n    if (params.loop) {\n      if (animating && params.loopPreventsSlide) return false;\n      swiper.loopFix(); // eslint-disable-next-line\n\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n\n    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slidePrev(speed, runCallbacks, internal) {\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        animating = swiper.animating,\n        snapGrid = swiper.snapGrid,\n        slidesGrid = swiper.slidesGrid,\n        rtlTranslate = swiper.rtlTranslate;\n\n    if (params.loop) {\n      if (animating && params.loopPreventsSlide) return false;\n      swiper.loopFix(); // eslint-disable-next-line\n\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n\n    var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n    function normalize(val) {\n      if (val < 0) return -Math.floor(Math.abs(val));\n      return Math.floor(val);\n    }\n\n    var normalizedTranslate = normalize(translate);\n    var normalizedSnapGrid = snapGrid.map(function (val) {\n      return normalize(val);\n    });\n    var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n    if (typeof prevSnap === 'undefined' && params.cssMode) {\n      snapGrid.forEach(function (snap) {\n        if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n      });\n    }\n\n    var prevIndex;\n\n    if (typeof prevSnap !== 'undefined') {\n      prevIndex = slidesGrid.indexOf(prevSnap);\n      if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    }\n\n    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideReset(speed, runCallbacks, internal) {\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    var swiper = this;\n    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideToClosest(speed, runCallbacks, internal, threshold) {\n    if (speed === void 0) {\n      speed = this.params.speed;\n    }\n\n    if (runCallbacks === void 0) {\n      runCallbacks = true;\n    }\n\n    if (threshold === void 0) {\n      threshold = 0.5;\n    }\n\n    var swiper = this;\n    var index = swiper.activeIndex;\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n    var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n    if (translate >= swiper.snapGrid[snapIndex]) {\n      // The current translate is on or after the current snap index, so the choice\n      // is between the current index and the one after it.\n      var currentSnap = swiper.snapGrid[snapIndex];\n      var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n      if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n        index += swiper.params.slidesPerGroup;\n      }\n    } else {\n      // The current translate is before the current snap index, so the choice\n      // is between the current index and the one before it.\n      var prevSnap = swiper.snapGrid[snapIndex - 1];\n      var _currentSnap = swiper.snapGrid[snapIndex];\n\n      if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {\n        index -= swiper.params.slidesPerGroup;\n      }\n    }\n\n    index = Math.max(index, 0);\n    index = Math.min(index, swiper.slidesGrid.length - 1);\n    return swiper.slideTo(index, speed, runCallbacks, internal);\n  }\n\n  function slideToClickedSlide() {\n    var swiper = this;\n    var params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl;\n    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n    var slideToIndex = swiper.clickedIndex;\n    var realIndex;\n\n    if (params.loop) {\n      if (swiper.animating) return;\n      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n      if (params.centeredSlides) {\n        if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n          nextTick(function () {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n        nextTick(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n\n  var slide = {\n    slideTo: slideTo,\n    slideToLoop: slideToLoop,\n    slideNext: slideNext,\n    slidePrev: slidePrev,\n    slideReset: slideReset,\n    slideToClosest: slideToClosest,\n    slideToClickedSlide: slideToClickedSlide\n  };\n\n  function loopCreate() {\n    var swiper = this;\n    var document = getDocument();\n    var params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides\n\n    $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass).remove();\n    var slides = $wrapperEl.children(\".\" + params.slideClass);\n\n    if (params.loopFillGroupWithBlank) {\n      var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n      if (blankSlidesNum !== params.slidesPerGroup) {\n        for (var i = 0; i < blankSlidesNum; i += 1) {\n          var blankNode = $(document.createElement('div')).addClass(params.slideClass + \" \" + params.slideBlankClass);\n          $wrapperEl.append(blankNode);\n        }\n\n        slides = $wrapperEl.children(\".\" + params.slideClass);\n      }\n    }\n\n    if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n    swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n    swiper.loopedSlides += params.loopAdditionalSlides;\n\n    if (swiper.loopedSlides > slides.length) {\n      swiper.loopedSlides = slides.length;\n    }\n\n    var prependSlides = [];\n    var appendSlides = [];\n    slides.each(function (el, index) {\n      var slide = $(el);\n\n      if (index < swiper.loopedSlides) {\n        appendSlides.push(el);\n      }\n\n      if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n        prependSlides.push(el);\n      }\n\n      slide.attr('data-swiper-slide-index', index);\n    });\n\n    for (var _i = 0; _i < appendSlides.length; _i += 1) {\n      $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n\n    for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {\n      $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n  }\n\n  function loopFix() {\n    var swiper = this;\n    swiper.emit('beforeLoopFix');\n    var activeIndex = swiper.activeIndex,\n        slides = swiper.slides,\n        loopedSlides = swiper.loopedSlides,\n        allowSlidePrev = swiper.allowSlidePrev,\n        allowSlideNext = swiper.allowSlideNext,\n        snapGrid = swiper.snapGrid,\n        rtl = swiper.rtlTranslate;\n    var newIndex;\n    swiper.allowSlidePrev = true;\n    swiper.allowSlideNext = true;\n    var snapTranslate = -snapGrid[activeIndex];\n    var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n    if (activeIndex < loopedSlides) {\n      newIndex = slides.length - loopedSlides * 3 + activeIndex;\n      newIndex += loopedSlides;\n      var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n      if (slideChanged && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    } else if (activeIndex >= slides.length - loopedSlides) {\n      // Fix For Positive Oversliding\n      newIndex = -slides.length + activeIndex + loopedSlides;\n      newIndex += loopedSlides;\n\n      var _slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n      if (_slideChanged && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    }\n\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n  }\n\n  function loopDestroy() {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl,\n        params = swiper.params,\n        slides = swiper.slides;\n    $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \",.\" + params.slideClass + \".\" + params.slideBlankClass).remove();\n    slides.removeAttr('data-swiper-slide-index');\n  }\n\n  var loop = {\n    loopCreate: loopCreate,\n    loopFix: loopFix,\n    loopDestroy: loopDestroy\n  };\n\n  function setGrabCursor(moving) {\n    var swiper = this;\n    if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n    var el = swiper.el;\n    el.style.cursor = 'move';\n    el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n    el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n    el.style.cursor = moving ? 'grabbing' : 'grab';\n  }\n\n  function unsetGrabCursor() {\n    var swiper = this;\n\n    if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n      return;\n    }\n\n    swiper.el.style.cursor = '';\n  }\n\n  var grabCursor = {\n    setGrabCursor: setGrabCursor,\n    unsetGrabCursor: unsetGrabCursor\n  };\n\n  function appendSlide(slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl,\n        params = swiper.params;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) $wrapperEl.append(slides[i]);\n      }\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && swiper.support.observer)) {\n      swiper.update();\n    }\n  }\n\n  function prependSlide(slides) {\n    var swiper = this;\n    var params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl,\n        activeIndex = swiper.activeIndex;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    var newActiveIndex = activeIndex + 1;\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) $wrapperEl.prepend(slides[i]);\n      }\n\n      newActiveIndex = activeIndex + slides.length;\n    } else {\n      $wrapperEl.prepend(slides);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && swiper.support.observer)) {\n      swiper.update();\n    }\n\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n\n  function addSlide(index, slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl,\n        params = swiper.params,\n        activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n    }\n\n    var baseLength = swiper.slides.length;\n\n    if (index <= 0) {\n      swiper.prependSlide(slides);\n      return;\n    }\n\n    if (index >= baseLength) {\n      swiper.appendSlide(slides);\n      return;\n    }\n\n    var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n    var slidesBuffer = [];\n\n    for (var i = baseLength - 1; i >= index; i -= 1) {\n      var currentSlide = swiper.slides.eq(i);\n      currentSlide.remove();\n      slidesBuffer.unshift(currentSlide);\n    }\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var _i = 0; _i < slides.length; _i += 1) {\n        if (slides[_i]) $wrapperEl.append(slides[_i]);\n      }\n\n      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {\n      $wrapperEl.append(slidesBuffer[_i2]);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && swiper.support.observer)) {\n      swiper.update();\n    }\n\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeSlide(slidesIndexes) {\n    var swiper = this;\n    var params = swiper.params,\n        $wrapperEl = swiper.$wrapperEl,\n        activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n    }\n\n    var newActiveIndex = activeIndexBuffer;\n    var indexToRemove;\n\n    if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n      for (var i = 0; i < slidesIndexes.length; i += 1) {\n        indexToRemove = slidesIndexes[i];\n        if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n        if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n      }\n\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    } else {\n      indexToRemove = slidesIndexes;\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && swiper.support.observer)) {\n      swiper.update();\n    }\n\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeAllSlides() {\n    var swiper = this;\n    var slidesIndexes = [];\n\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      slidesIndexes.push(i);\n    }\n\n    swiper.removeSlide(slidesIndexes);\n  }\n\n  var manipulation = {\n    appendSlide: appendSlide,\n    prependSlide: prependSlide,\n    addSlide: addSlide,\n    removeSlide: removeSlide,\n    removeAllSlides: removeAllSlides\n  };\n\n  function onTouchStart(event) {\n    var swiper = this;\n    var document = getDocument();\n    var window = getWindow();\n    var data = swiper.touchEventsData;\n    var params = swiper.params,\n        touches = swiper.touches;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return;\n    }\n\n    var e = event;\n    if (e.originalEvent) e = e.originalEvent;\n    var $targetEl = $(e.target);\n\n    if (params.touchEventsTarget === 'wrapper') {\n      if (!$targetEl.closest(swiper.wrapperEl).length) return;\n    }\n\n    data.isTouchEvent = e.type === 'touchstart';\n    if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n    if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n    if (data.isTouched && data.isMoved) return;\n\n    if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : \".\" + params.noSwipingClass)[0]) {\n      swiper.allowClick = true;\n      return;\n    }\n\n    if (params.swipeHandler) {\n      if (!$targetEl.closest(params.swipeHandler)[0]) return;\n    }\n\n    touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    var startX = touches.currentX;\n    var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n    if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.screen.width - edgeSwipeThreshold)) {\n      return;\n    }\n\n    extend$1(data, {\n      isTouched: true,\n      isMoved: false,\n      allowTouchCallbacks: true,\n      isScrolling: undefined,\n      startMoving: undefined\n    });\n    touches.startX = startX;\n    touches.startY = startY;\n    data.touchStartTime = now();\n    swiper.allowClick = true;\n    swiper.updateSize();\n    swiper.swipeDirection = undefined;\n    if (params.threshold > 0) data.allowThresholdMove = false;\n\n    if (e.type !== 'touchstart') {\n      var preventDefault = true;\n      if ($targetEl.is(data.formElements)) preventDefault = false;\n\n      if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {\n        document.activeElement.blur();\n      }\n\n      var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n      if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n        e.preventDefault();\n      }\n    }\n\n    swiper.emit('touchStart', e);\n  }\n\n  function onTouchMove(event) {\n    var document = getDocument();\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params,\n        touches = swiper.touches,\n        rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) e = e.originalEvent;\n\n    if (!data.isTouched) {\n      if (data.startMoving && data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n\n      return;\n    }\n\n    if (data.isTouchEvent && e.type !== 'touchmove') return;\n    var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n    var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n    var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n    if (e.preventedByNestedSwiper) {\n      touches.startX = pageX;\n      touches.startY = pageY;\n      return;\n    }\n\n    if (!swiper.allowTouchMove) {\n      // isMoved = true;\n      swiper.allowClick = false;\n\n      if (data.isTouched) {\n        extend$1(touches, {\n          startX: pageX,\n          startY: pageY,\n          currentX: pageX,\n          currentY: pageY\n        });\n        data.touchStartTime = now();\n      }\n\n      return;\n    }\n\n    if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n      if (swiper.isVertical()) {\n        // Vertical\n        if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n          data.isTouched = false;\n          data.isMoved = false;\n          return;\n        }\n      } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n        return;\n      }\n    }\n\n    if (data.isTouchEvent && document.activeElement) {\n      if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n        data.isMoved = true;\n        swiper.allowClick = false;\n        return;\n      }\n    }\n\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchMove', e);\n    }\n\n    if (e.targetTouches && e.targetTouches.length > 1) return;\n    touches.currentX = pageX;\n    touches.currentY = pageY;\n    var diffX = touches.currentX - touches.startX;\n    var diffY = touches.currentY - touches.startY;\n    if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;\n\n    if (typeof data.isScrolling === 'undefined') {\n      var touchAngle;\n\n      if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n        data.isScrolling = false;\n      } else {\n        // eslint-disable-next-line\n        if (diffX * diffX + diffY * diffY >= 25) {\n          touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n        }\n      }\n    }\n\n    if (data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n\n    if (typeof data.startMoving === 'undefined') {\n      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n        data.startMoving = true;\n      }\n    }\n\n    if (data.isScrolling) {\n      data.isTouched = false;\n      return;\n    }\n\n    if (!data.startMoving) {\n      return;\n    }\n\n    swiper.allowClick = false;\n\n    if (!params.cssMode && e.cancelable) {\n      e.preventDefault();\n    }\n\n    if (params.touchMoveStopPropagation && !params.nested) {\n      e.stopPropagation();\n    }\n\n    if (!data.isMoved) {\n      if (params.loop) {\n        swiper.loopFix();\n      }\n\n      data.startTranslate = swiper.getTranslate();\n      swiper.setTransition(0);\n\n      if (swiper.animating) {\n        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n      }\n\n      data.allowMomentumBounce = false; // Grab Cursor\n\n      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(true);\n      }\n\n      swiper.emit('sliderFirstMove', e);\n    }\n\n    swiper.emit('sliderMove', e);\n    data.isMoved = true;\n    var diff = swiper.isHorizontal() ? diffX : diffY;\n    touches.diff = diff;\n    diff *= params.touchRatio;\n    if (rtl) diff = -diff;\n    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n    data.currentTranslate = diff + data.startTranslate;\n    var disableParentSwiper = true;\n    var resistanceRatio = params.resistanceRatio;\n\n    if (params.touchReleaseOnEdges) {\n      resistanceRatio = 0;\n    }\n\n    if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);\n    } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);\n    }\n\n    if (disableParentSwiper) {\n      e.preventedByNestedSwiper = true;\n    } // Directions locks\n\n\n    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n\n    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    } // Threshold\n\n\n    if (params.threshold > 0) {\n      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n        if (!data.allowThresholdMove) {\n          data.allowThresholdMove = true;\n          touches.startX = touches.currentX;\n          touches.startY = touches.currentY;\n          data.currentTranslate = data.startTranslate;\n          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n          return;\n        }\n      } else {\n        data.currentTranslate = data.startTranslate;\n        return;\n      }\n    }\n\n    if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    if (params.freeMode) {\n      // Velocity\n      if (data.velocities.length === 0) {\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n          time: data.touchStartTime\n        });\n      }\n\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n        time: now()\n      });\n    } // Update progress\n\n\n    swiper.updateProgress(data.currentTranslate); // Update translate\n\n    swiper.setTranslate(data.currentTranslate);\n  }\n\n  function onTouchEnd(event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params,\n        touches = swiper.touches,\n        rtl = swiper.rtlTranslate,\n        $wrapperEl = swiper.$wrapperEl,\n        slidesGrid = swiper.slidesGrid,\n        snapGrid = swiper.snapGrid;\n    var e = event;\n    if (e.originalEvent) e = e.originalEvent;\n\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchEnd', e);\n    }\n\n    data.allowTouchCallbacks = false;\n\n    if (!data.isTouched) {\n      if (data.isMoved && params.grabCursor) {\n        swiper.setGrabCursor(false);\n      }\n\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    } // Return Grab Cursor\n\n\n    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(false);\n    } // Time diff\n\n\n    var touchEndTime = now();\n    var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n    if (swiper.allowClick) {\n      swiper.updateClickedSlide(e);\n      swiper.emit('tap click', e);\n\n      if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n        swiper.emit('doubleTap doubleClick', e);\n      }\n    }\n\n    data.lastClickTime = now();\n    nextTick(function () {\n      if (!swiper.destroyed) swiper.allowClick = true;\n    });\n\n    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    var currentPos;\n\n    if (params.followFinger) {\n      currentPos = rtl ? swiper.translate : -swiper.translate;\n    } else {\n      currentPos = -data.currentTranslate;\n    }\n\n    if (params.cssMode) {\n      return;\n    }\n\n    if (params.freeMode) {\n      if (currentPos < -swiper.minTranslate()) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n\n      if (currentPos > -swiper.maxTranslate()) {\n        if (swiper.slides.length < snapGrid.length) {\n          swiper.slideTo(snapGrid.length - 1);\n        } else {\n          swiper.slideTo(swiper.slides.length - 1);\n        }\n\n        return;\n      }\n\n      if (params.freeModeMomentum) {\n        if (data.velocities.length > 1) {\n          var lastMoveEvent = data.velocities.pop();\n          var velocityEvent = data.velocities.pop();\n          var distance = lastMoveEvent.position - velocityEvent.position;\n          var time = lastMoveEvent.time - velocityEvent.time;\n          swiper.velocity = distance / time;\n          swiper.velocity /= 2;\n\n          if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n            swiper.velocity = 0;\n          } // this implies that the user stopped moving a finger then released.\n          // There would be no events with distance zero, so the last event is stale.\n\n\n          if (time > 150 || now() - lastMoveEvent.time > 300) {\n            swiper.velocity = 0;\n          }\n        } else {\n          swiper.velocity = 0;\n        }\n\n        swiper.velocity *= params.freeModeMomentumVelocityRatio;\n        data.velocities.length = 0;\n        var momentumDuration = 1000 * params.freeModeMomentumRatio;\n        var momentumDistance = swiper.velocity * momentumDuration;\n        var newPosition = swiper.translate + momentumDistance;\n        if (rtl) newPosition = -newPosition;\n        var doBounce = false;\n        var afterBouncePosition;\n        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n        var needsLoopFix;\n\n        if (newPosition < swiper.maxTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n              newPosition = swiper.maxTranslate() - bounceAmount;\n            }\n\n            afterBouncePosition = swiper.maxTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.maxTranslate();\n          }\n\n          if (params.loop && params.centeredSlides) needsLoopFix = true;\n        } else if (newPosition > swiper.minTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition - swiper.minTranslate() > bounceAmount) {\n              newPosition = swiper.minTranslate() + bounceAmount;\n            }\n\n            afterBouncePosition = swiper.minTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.minTranslate();\n          }\n\n          if (params.loop && params.centeredSlides) needsLoopFix = true;\n        } else if (params.freeModeSticky) {\n          var nextSlide;\n\n          for (var j = 0; j < snapGrid.length; j += 1) {\n            if (snapGrid[j] > -newPosition) {\n              nextSlide = j;\n              break;\n            }\n          }\n\n          if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n            newPosition = snapGrid[nextSlide];\n          } else {\n            newPosition = snapGrid[nextSlide - 1];\n          }\n\n          newPosition = -newPosition;\n        }\n\n        if (needsLoopFix) {\n          swiper.once('transitionEnd', function () {\n            swiper.loopFix();\n          });\n        } // Fix duration\n\n\n        if (swiper.velocity !== 0) {\n          if (rtl) {\n            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n          } else {\n            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n          }\n\n          if (params.freeModeSticky) {\n            // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n            // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n            // It's easy to see this when simulating touch with mouse events. To fix this,\n            // limit single-slide swipes to the default slide duration. This also has the\n            // nice side effect of matching slide speed if the user stopped moving before\n            // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n            // For faster swipes, also apply limits (albeit higher ones).\n            var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n            var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n            if (moveDistance < currentSlideSize) {\n              momentumDuration = params.speed;\n            } else if (moveDistance < 2 * currentSlideSize) {\n              momentumDuration = params.speed * 1.5;\n            } else {\n              momentumDuration = params.speed * 2.5;\n            }\n          }\n        } else if (params.freeModeSticky) {\n          swiper.slideToClosest();\n          return;\n        }\n\n        if (params.freeModeMomentumBounce && doBounce) {\n          swiper.updateProgress(afterBouncePosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n            swiper.emit('momentumBounce');\n            swiper.setTransition(params.speed);\n            setTimeout(function () {\n              swiper.setTranslate(afterBouncePosition);\n              $wrapperEl.transitionEnd(function () {\n                if (!swiper || swiper.destroyed) return;\n                swiper.transitionEnd();\n              });\n            }, 0);\n          });\n        } else if (swiper.velocity) {\n          swiper.updateProgress(newPosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n\n          if (!swiper.animating) {\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }\n        } else {\n          swiper.updateProgress(newPosition);\n        }\n\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      return;\n    } // Find current slide\n\n\n    var stopIndex = 0;\n    var groupSize = swiper.slidesSizesGrid[0];\n\n    for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n      var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n      if (typeof slidesGrid[i + _increment] !== 'undefined') {\n        if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {\n          stopIndex = i;\n          groupSize = slidesGrid[i + _increment] - slidesGrid[i];\n        }\n      } else if (currentPos >= slidesGrid[i]) {\n        stopIndex = i;\n        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n      }\n    } // Find current slide size\n\n\n    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n    var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n    if (timeDiff > params.longSwipesMs) {\n      // Long touches\n      if (!params.longSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n\n      if (swiper.swipeDirection === 'next') {\n        if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n      }\n\n      if (swiper.swipeDirection === 'prev') {\n        if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n      }\n    } else {\n      // Short swipes\n      if (!params.shortSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n\n      var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n      if (!isNavButtonTarget) {\n        if (swiper.swipeDirection === 'next') {\n          swiper.slideTo(stopIndex + increment);\n        }\n\n        if (swiper.swipeDirection === 'prev') {\n          swiper.slideTo(stopIndex);\n        }\n      } else if (e.target === swiper.navigation.nextEl) {\n        swiper.slideTo(stopIndex + increment);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  }\n\n  function onResize() {\n    var swiper = this;\n    var params = swiper.params,\n        el = swiper.el;\n    if (el && el.offsetWidth === 0) return; // Breakpoints\n\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    } // Save locks\n\n\n    var allowSlideNext = swiper.allowSlideNext,\n        allowSlidePrev = swiper.allowSlidePrev,\n        snapGrid = swiper.snapGrid; // Disable locks on resize\n\n    swiper.allowSlideNext = true;\n    swiper.allowSlidePrev = true;\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateSlidesClasses();\n\n    if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n      swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n\n    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n      swiper.autoplay.run();\n    } // Return locks after resize\n\n\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n  }\n\n  function onClick(e) {\n    var swiper = this;\n\n    if (!swiper.allowClick) {\n      if (swiper.params.preventClicks) e.preventDefault();\n\n      if (swiper.params.preventClicksPropagation && swiper.animating) {\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  function onScroll() {\n    var swiper = this;\n    var wrapperEl = swiper.wrapperEl,\n        rtlTranslate = swiper.rtlTranslate;\n    swiper.previousTranslate = swiper.translate;\n\n    if (swiper.isHorizontal()) {\n      if (rtlTranslate) {\n        swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;\n      } else {\n        swiper.translate = -wrapperEl.scrollLeft;\n      }\n    } else {\n      swiper.translate = -wrapperEl.scrollTop;\n    } // eslint-disable-next-line\n\n\n    if (swiper.translate === -0) swiper.translate = 0;\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n    }\n\n    if (newProgress !== swiper.progress) {\n      swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, false);\n  }\n\n  var dummyEventAttached = false;\n\n  function dummyEventListener() {}\n\n  function attachEvents() {\n    var swiper = this;\n    var document = getDocument();\n    var params = swiper.params,\n        touchEvents = swiper.touchEvents,\n        el = swiper.el,\n        wrapperEl = swiper.wrapperEl,\n        device = swiper.device,\n        support = swiper.support;\n    swiper.onTouchStart = onTouchStart.bind(swiper);\n    swiper.onTouchMove = onTouchMove.bind(swiper);\n    swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n    if (params.cssMode) {\n      swiper.onScroll = onScroll.bind(swiper);\n    }\n\n    swiper.onClick = onClick.bind(swiper);\n    var capture = !!params.nested; // Touch Events\n\n    if (!support.touch && support.pointerEvents) {\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n      document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (support.touch) {\n        var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n          passive: false,\n          capture: capture\n        } : capture);\n        el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n        if (touchEvents.cancel) {\n          el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n\n        if (!dummyEventAttached) {\n          document.addEventListener('touchstart', dummyEventListener);\n          dummyEventAttached = true;\n        }\n      }\n\n      if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n        el.addEventListener('mousedown', swiper.onTouchStart, false);\n        document.addEventListener('mousemove', swiper.onTouchMove, capture);\n        document.addEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    } // Prevent Links Clicks\n\n\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.addEventListener('click', swiper.onClick, true);\n    }\n\n    if (params.cssMode) {\n      wrapperEl.addEventListener('scroll', swiper.onScroll);\n    } // Resize handler\n\n\n    if (params.updateOnWindowResize) {\n      swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n    } else {\n      swiper.on('observerUpdate', onResize, true);\n    }\n  }\n\n  function detachEvents() {\n    var swiper = this;\n    var document = getDocument();\n    var params = swiper.params,\n        touchEvents = swiper.touchEvents,\n        el = swiper.el,\n        wrapperEl = swiper.wrapperEl,\n        device = swiper.device,\n        support = swiper.support;\n    var capture = !!params.nested; // Touch Events\n\n    if (!support.touch && support.pointerEvents) {\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n      document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (support.touch) {\n        var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n        if (touchEvents.cancel) {\n          el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      }\n\n      if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n        el.removeEventListener('mousedown', swiper.onTouchStart, false);\n        document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n        document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    } // Prevent Links Clicks\n\n\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.removeEventListener('click', swiper.onClick, true);\n    }\n\n    if (params.cssMode) {\n      wrapperEl.removeEventListener('scroll', swiper.onScroll);\n    } // Resize handler\n\n\n    swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);\n  }\n\n  var events = {\n    attachEvents: attachEvents,\n    detachEvents: detachEvents\n  };\n\n  function setBreakpoint() {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex,\n        initialized = swiper.initialized,\n        _swiper$loopedSlides = swiper.loopedSlides,\n        loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,\n        params = swiper.params,\n        $el = swiper.$el;\n    var breakpoints = params.breakpoints;\n    if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n    var breakpoint = swiper.getBreakpoint(breakpoints);\n\n    if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n      var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n\n      if (breakpointOnlyParams) {\n        ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n          var paramValue = breakpointOnlyParams[param];\n          if (typeof paramValue === 'undefined') return;\n\n          if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n            breakpointOnlyParams[param] = 'auto';\n          } else if (param === 'slidesPerView') {\n            breakpointOnlyParams[param] = parseFloat(paramValue);\n          } else {\n            breakpointOnlyParams[param] = parseInt(paramValue, 10);\n          }\n        });\n      }\n\n      var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      var wasMultiRow = params.slidesPerColumn > 1;\n      var isMultiRow = breakpointParams.slidesPerColumn > 1;\n\n      if (wasMultiRow && !isMultiRow) {\n        $el.removeClass(params.containerModifierClass + \"multirow \" + params.containerModifierClass + \"multirow-column\");\n        swiper.emitContainerClasses();\n      } else if (!wasMultiRow && isMultiRow) {\n        $el.addClass(params.containerModifierClass + \"multirow\");\n\n        if (breakpointParams.slidesPerColumnFill === 'column') {\n          $el.addClass(params.containerModifierClass + \"multirow-column\");\n        }\n\n        swiper.emitContainerClasses();\n      }\n\n      var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      extend$1(swiper.params, breakpointParams);\n      extend$1(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev\n      });\n      swiper.currentBreakpoint = breakpoint;\n\n      if (needsReLoop && initialized) {\n        swiper.loopDestroy();\n        swiper.loopCreate();\n        swiper.updateSlides();\n        swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n      }\n\n      swiper.emit('breakpoint', breakpointParams);\n    }\n  }\n\n  function getBreakpoints(breakpoints) {\n    var window = getWindow(); // Get breakpoint for window width\n\n    if (!breakpoints) return undefined;\n    var breakpoint = false;\n    var points = Object.keys(breakpoints).map(function (point) {\n      if (typeof point === 'string' && point.indexOf('@') === 0) {\n        var minRatio = parseFloat(point.substr(1));\n        var value = window.innerHeight * minRatio;\n        return {\n          value: value,\n          point: point\n        };\n      }\n\n      return {\n        value: point,\n        point: point\n      };\n    });\n    points.sort(function (a, b) {\n      return parseInt(a.value, 10) - parseInt(b.value, 10);\n    });\n\n    for (var i = 0; i < points.length; i += 1) {\n      var _points$i = points[i],\n          point = _points$i.point,\n          value = _points$i.value;\n\n      if (value <= window.innerWidth) {\n        breakpoint = point;\n      }\n    }\n\n    return breakpoint || 'max';\n  }\n\n  var breakpoints = {\n    setBreakpoint: setBreakpoint,\n    getBreakpoint: getBreakpoints\n  };\n\n  function addClasses() {\n    var swiper = this;\n    var classNames = swiper.classNames,\n        params = swiper.params,\n        rtl = swiper.rtl,\n        $el = swiper.$el,\n        device = swiper.device;\n    var suffixes = [];\n    suffixes.push('initialized');\n    suffixes.push(params.direction);\n\n    if (params.freeMode) {\n      suffixes.push('free-mode');\n    }\n\n    if (params.autoHeight) {\n      suffixes.push('autoheight');\n    }\n\n    if (rtl) {\n      suffixes.push('rtl');\n    }\n\n    if (params.slidesPerColumn > 1) {\n      suffixes.push('multirow');\n\n      if (params.slidesPerColumnFill === 'column') {\n        suffixes.push('multirow-column');\n      }\n    }\n\n    if (device.android) {\n      suffixes.push('android');\n    }\n\n    if (device.ios) {\n      suffixes.push('ios');\n    }\n\n    if (params.cssMode) {\n      suffixes.push('css-mode');\n    }\n\n    suffixes.forEach(function (suffix) {\n      classNames.push(params.containerModifierClass + suffix);\n    });\n    $el.addClass(classNames.join(' '));\n    swiper.emitContainerClasses();\n  }\n\n  function removeClasses() {\n    var swiper = this;\n    var $el = swiper.$el,\n        classNames = swiper.classNames;\n    $el.removeClass(classNames.join(' '));\n    swiper.emitContainerClasses();\n  }\n\n  var classes = {\n    addClasses: addClasses,\n    removeClasses: removeClasses\n  };\n\n  function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n    var window = getWindow();\n    var image;\n\n    function onReady() {\n      if (callback) callback();\n    }\n\n    var isPicture = $(imageEl).parent('picture')[0];\n\n    if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n      if (src) {\n        image = new window.Image();\n        image.onload = onReady;\n        image.onerror = onReady;\n\n        if (sizes) {\n          image.sizes = sizes;\n        }\n\n        if (srcset) {\n          image.srcset = srcset;\n        }\n\n        if (src) {\n          image.src = src;\n        }\n      } else {\n        onReady();\n      }\n    } else {\n      // image already loaded...\n      onReady();\n    }\n  }\n\n  function preloadImages() {\n    var swiper = this;\n    swiper.imagesToLoad = swiper.$el.find('img');\n\n    function onReady() {\n      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n      if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n        if (swiper.params.updateOnImagesReady) swiper.update();\n        swiper.emit('imagesReady');\n      }\n    }\n\n    for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n      var imageEl = swiper.imagesToLoad[i];\n      swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n    }\n  }\n\n  var images = {\n    loadImage: loadImage,\n    preloadImages: preloadImages\n  };\n\n  function checkOverflow() {\n    var swiper = this;\n    var params = swiper.params;\n    var wasLocked = swiper.isLocked;\n    var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;\n\n    if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n      swiper.isLocked = lastSlidePosition <= swiper.size;\n    } else {\n      swiper.isLocked = swiper.snapGrid.length === 1;\n    }\n\n    swiper.allowSlideNext = !swiper.isLocked;\n    swiper.allowSlidePrev = !swiper.isLocked; // events\n\n    if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n    if (wasLocked && wasLocked !== swiper.isLocked) {\n      swiper.isEnd = false;\n      if (swiper.navigation) swiper.navigation.update();\n    }\n  }\n\n  var checkOverflow$1 = {\n    checkOverflow: checkOverflow\n  };\n\n  var defaults = {\n    init: true,\n    direction: 'horizontal',\n    touchEventsTarget: 'container',\n    initialSlide: 0,\n    speed: 300,\n    cssMode: false,\n    updateOnWindowResize: true,\n    // Overrides\n    width: null,\n    height: null,\n    //\n    preventInteractionOnTransition: false,\n    // ssr\n    userAgent: null,\n    url: null,\n    // To support iOS's swipe-to-go-back gesture (when being used in-app).\n    edgeSwipeDetection: false,\n    edgeSwipeThreshold: 20,\n    // Free mode\n    freeMode: false,\n    freeModeMomentum: true,\n    freeModeMomentumRatio: 1,\n    freeModeMomentumBounce: true,\n    freeModeMomentumBounceRatio: 1,\n    freeModeMomentumVelocityRatio: 1,\n    freeModeSticky: false,\n    freeModeMinimumVelocity: 0.02,\n    // Autoheight\n    autoHeight: false,\n    // Set wrapper width\n    setWrapperSize: false,\n    // Virtual Translate\n    virtualTranslate: false,\n    // Effects\n    effect: 'slide',\n    // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n    // Breakpoints\n    breakpoints: undefined,\n    // Slides grid\n    spaceBetween: 0,\n    slidesPerView: 1,\n    slidesPerColumn: 1,\n    slidesPerColumnFill: 'column',\n    slidesPerGroup: 1,\n    slidesPerGroupSkip: 0,\n    centeredSlides: false,\n    centeredSlidesBounds: false,\n    slidesOffsetBefore: 0,\n    // in px\n    slidesOffsetAfter: 0,\n    // in px\n    normalizeSlideIndex: true,\n    centerInsufficientSlides: false,\n    // Disable swiper and hide navigation when container not overflow\n    watchOverflow: false,\n    // Round length\n    roundLengths: false,\n    // Touches\n    touchRatio: 1,\n    touchAngle: 45,\n    simulateTouch: true,\n    shortSwipes: true,\n    longSwipes: true,\n    longSwipesRatio: 0.5,\n    longSwipesMs: 300,\n    followFinger: true,\n    allowTouchMove: true,\n    threshold: 0,\n    touchMoveStopPropagation: false,\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchReleaseOnEdges: false,\n    // Unique Navigation Elements\n    uniqueNavElements: true,\n    // Resistance\n    resistance: true,\n    resistanceRatio: 0.85,\n    // Progress\n    watchSlidesProgress: false,\n    watchSlidesVisibility: false,\n    // Cursor\n    grabCursor: false,\n    // Clicks\n    preventClicks: true,\n    preventClicksPropagation: true,\n    slideToClickedSlide: false,\n    // Images\n    preloadImages: true,\n    updateOnImagesReady: true,\n    // loop\n    loop: false,\n    loopAdditionalSlides: 0,\n    loopedSlides: null,\n    loopFillGroupWithBlank: false,\n    loopPreventsSlide: true,\n    // Swiping/no swiping\n    allowSlidePrev: true,\n    allowSlideNext: true,\n    swipeHandler: null,\n    // '.swipe-handler',\n    noSwiping: true,\n    noSwipingClass: 'swiper-no-swiping',\n    noSwipingSelector: null,\n    // Passive Listeners\n    passiveListeners: true,\n    // NS\n    containerModifierClass: 'swiper-container-',\n    // NEW\n    slideClass: 'swiper-slide',\n    slideBlankClass: 'swiper-slide-invisible-blank',\n    slideActiveClass: 'swiper-slide-active',\n    slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n    slideVisibleClass: 'swiper-slide-visible',\n    slideDuplicateClass: 'swiper-slide-duplicate',\n    slideNextClass: 'swiper-slide-next',\n    slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n    slidePrevClass: 'swiper-slide-prev',\n    slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n    wrapperClass: 'swiper-wrapper',\n    // Callbacks\n    runCallbacksOnInit: true,\n    // Internals\n    _emitClasses: false\n  };\n\n  var prototypes = {\n    modular: modular,\n    eventsEmitter: eventsEmitter,\n    update: update,\n    translate: translate,\n    transition: transition$1,\n    slide: slide,\n    loop: loop,\n    grabCursor: grabCursor,\n    manipulation: manipulation,\n    events: events,\n    breakpoints: breakpoints,\n    checkOverflow: checkOverflow$1,\n    classes: classes,\n    images: images\n  };\n  var extendedDefaults = {};\n\n  var Swiper = /*#__PURE__*/function () {\n    function Swiper() {\n      var el;\n      var params;\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n        params = args[0];\n      } else {\n        el = args[0];\n        params = args[1];\n      }\n\n      if (!params) params = {};\n      params = extend$1({}, params);\n      if (el && !params.el) params.el = el; // Swiper Instance\n\n      var swiper = this;\n      swiper.support = getSupport();\n      swiper.device = getDevice({\n        userAgent: params.userAgent\n      });\n      swiper.browser = getBrowser();\n      swiper.eventsListeners = {};\n      swiper.eventsAnyListeners = [];\n      Object.keys(prototypes).forEach(function (prototypeGroup) {\n        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n          if (!Swiper.prototype[protoMethod]) {\n            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n          }\n        });\n      });\n\n      if (typeof swiper.modules === 'undefined') {\n        swiper.modules = {};\n      }\n\n      Object.keys(swiper.modules).forEach(function (moduleName) {\n        var module = swiper.modules[moduleName];\n\n        if (module.params) {\n          var moduleParamName = Object.keys(module.params)[0];\n          var moduleParams = module.params[moduleParamName];\n          if (typeof moduleParams !== 'object' || moduleParams === null) return;\n          if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n\n          if (params[moduleParamName] === true) {\n            params[moduleParamName] = {\n              enabled: true\n            };\n          }\n\n          if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n            params[moduleParamName].enabled = true;\n          }\n\n          if (!params[moduleParamName]) params[moduleParamName] = {\n            enabled: false\n          };\n        }\n      }); // Extend defaults with modules params\n\n      var swiperParams = extend$1({}, defaults);\n      swiper.useParams(swiperParams); // Extend defaults with passed params\n\n      swiper.params = extend$1({}, swiperParams, extendedDefaults, params);\n      swiper.originalParams = extend$1({}, swiper.params);\n      swiper.passedParams = extend$1({}, params); // add event listeners\n\n      if (swiper.params && swiper.params.on) {\n        Object.keys(swiper.params.on).forEach(function (eventName) {\n          swiper.on(eventName, swiper.params.on[eventName]);\n        });\n      } // Save Dom lib\n\n\n      swiper.$ = $; // Find el\n\n      var $el = $(swiper.params.el);\n      el = $el[0];\n\n      if (!el) {\n        return undefined;\n      }\n\n      if ($el.length > 1) {\n        var swipers = [];\n        $el.each(function (containerEl) {\n          var newParams = extend$1({}, params, {\n            el: containerEl\n          });\n          swipers.push(new Swiper(newParams));\n        });\n        return swipers;\n      }\n\n      el.swiper = swiper; // Find Wrapper\n\n      var $wrapperEl;\n\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        $wrapperEl = $(el.shadowRoot.querySelector(\".\" + swiper.params.wrapperClass)); // Children needs to return slot items\n\n        $wrapperEl.children = function (options) {\n          return $el.children(options);\n        };\n      } else {\n        $wrapperEl = $el.children(\".\" + swiper.params.wrapperClass);\n      } // Extend Swiper\n\n\n      extend$1(swiper, {\n        $el: $el,\n        el: el,\n        $wrapperEl: $wrapperEl,\n        wrapperEl: $wrapperEl[0],\n        // Classes\n        classNames: [],\n        // Slides\n        slides: $(),\n        slidesGrid: [],\n        snapGrid: [],\n        slidesSizesGrid: [],\n        // isDirection\n        isHorizontal: function isHorizontal() {\n          return swiper.params.direction === 'horizontal';\n        },\n        isVertical: function isVertical() {\n          return swiper.params.direction === 'vertical';\n        },\n        // RTL\n        rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n        rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n        // Indexes\n        activeIndex: 0,\n        realIndex: 0,\n        //\n        isBeginning: true,\n        isEnd: false,\n        // Props\n        translate: 0,\n        previousTranslate: 0,\n        progress: 0,\n        velocity: 0,\n        animating: false,\n        // Locks\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n        // Touch Events\n        touchEvents: function touchEvents() {\n          var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n          var desktop = ['mousedown', 'mousemove', 'mouseup'];\n\n          if (swiper.support.pointerEvents) {\n            desktop = ['pointerdown', 'pointermove', 'pointerup'];\n          }\n\n          swiper.touchEventsTouch = {\n            start: touch[0],\n            move: touch[1],\n            end: touch[2],\n            cancel: touch[3]\n          };\n          swiper.touchEventsDesktop = {\n            start: desktop[0],\n            move: desktop[1],\n            end: desktop[2]\n          };\n          return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n        }(),\n        touchEventsData: {\n          isTouched: undefined,\n          isMoved: undefined,\n          allowTouchCallbacks: undefined,\n          touchStartTime: undefined,\n          isScrolling: undefined,\n          currentTranslate: undefined,\n          startTranslate: undefined,\n          allowThresholdMove: undefined,\n          // Form elements to match\n          formElements: 'input, select, option, textarea, button, video, label',\n          // Last click time\n          lastClickTime: now(),\n          clickTimeout: undefined,\n          // Velocities\n          velocities: [],\n          allowMomentumBounce: undefined,\n          isTouchEvent: undefined,\n          startMoving: undefined\n        },\n        // Clicks\n        allowClick: true,\n        // Touches\n        allowTouchMove: swiper.params.allowTouchMove,\n        touches: {\n          startX: 0,\n          startY: 0,\n          currentX: 0,\n          currentY: 0,\n          diff: 0\n        },\n        // Images\n        imagesToLoad: [],\n        imagesLoaded: 0\n      }); // Install Modules\n\n      swiper.useModules();\n      swiper.emit('_swiper'); // Init\n\n      if (swiper.params.init) {\n        swiper.init();\n      } // Return app instance\n\n\n      return swiper;\n    }\n\n    var _proto = Swiper.prototype;\n\n    _proto.emitContainerClasses = function emitContainerClasses() {\n      var swiper = this;\n      if (!swiper.params._emitClasses || !swiper.el) return;\n      var classes = swiper.el.className.split(' ').filter(function (className) {\n        return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n      });\n      swiper.emit('_containerClasses', classes.join(' '));\n    };\n\n    _proto.emitSlidesClasses = function emitSlidesClasses() {\n      var swiper = this;\n      if (!swiper.params._emitClasses || !swiper.el) return;\n      swiper.slides.each(function (slideEl) {\n        var classes = slideEl.className.split(' ').filter(function (className) {\n          return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n        });\n        swiper.emit('_slideClass', slideEl, classes.join(' '));\n      });\n    };\n\n    _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {\n      var swiper = this;\n      var params = swiper.params,\n          slides = swiper.slides,\n          slidesGrid = swiper.slidesGrid,\n          swiperSize = swiper.size,\n          activeIndex = swiper.activeIndex;\n      var spv = 1;\n\n      if (params.centeredSlides) {\n        var slideSize = slides[activeIndex].swiperSlideSize;\n        var breakLoop;\n\n        for (var i = activeIndex + 1; i < slides.length; i += 1) {\n          if (slides[i] && !breakLoop) {\n            slideSize += slides[i].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) breakLoop = true;\n          }\n        }\n\n        for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {\n          if (slides[_i] && !breakLoop) {\n            slideSize += slides[_i].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) breakLoop = true;\n          }\n        }\n      } else {\n        for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {\n          if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {\n            spv += 1;\n          }\n        }\n      }\n\n      return spv;\n    };\n\n    _proto.update = function update() {\n      var swiper = this;\n      if (!swiper || swiper.destroyed) return;\n      var snapGrid = swiper.snapGrid,\n          params = swiper.params; // Breakpoints\n\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      function setTranslate() {\n        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n        swiper.setTranslate(newTranslate);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      var translated;\n\n      if (swiper.params.freeMode) {\n        setTranslate();\n\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      } else {\n        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n        } else {\n          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n        }\n\n        if (!translated) {\n          setTranslate();\n        }\n      }\n\n      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n\n      swiper.emit('update');\n    };\n\n    _proto.changeDirection = function changeDirection(newDirection, needUpdate) {\n      if (needUpdate === void 0) {\n        needUpdate = true;\n      }\n\n      var swiper = this;\n      var currentDirection = swiper.params.direction;\n\n      if (!newDirection) {\n        // eslint-disable-next-line\n        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n      }\n\n      if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n        return swiper;\n      }\n\n      swiper.$el.removeClass(\"\" + swiper.params.containerModifierClass + currentDirection).addClass(\"\" + swiper.params.containerModifierClass + newDirection);\n      swiper.emitContainerClasses();\n      swiper.params.direction = newDirection;\n      swiper.slides.each(function (slideEl) {\n        if (newDirection === 'vertical') {\n          slideEl.style.width = '';\n        } else {\n          slideEl.style.height = '';\n        }\n      });\n      swiper.emit('changeDirection');\n      if (needUpdate) swiper.update();\n      return swiper;\n    };\n\n    _proto.init = function init() {\n      var swiper = this;\n      if (swiper.initialized) return;\n      swiper.emit('beforeInit'); // Set breakpoint\n\n      if (swiper.params.breakpoints) {\n        swiper.setBreakpoint();\n      } // Add Classes\n\n\n      swiper.addClasses(); // Create loop\n\n      if (swiper.params.loop) {\n        swiper.loopCreate();\n      } // Update size\n\n\n      swiper.updateSize(); // Update slides\n\n      swiper.updateSlides();\n\n      if (swiper.params.watchOverflow) {\n        swiper.checkOverflow();\n      } // Set Grab Cursor\n\n\n      if (swiper.params.grabCursor) {\n        swiper.setGrabCursor();\n      }\n\n      if (swiper.params.preloadImages) {\n        swiper.preloadImages();\n      } // Slide To Initial Slide\n\n\n      if (swiper.params.loop) {\n        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n      } else {\n        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n      } // Attach events\n\n\n      swiper.attachEvents(); // Init Flag\n\n      swiper.initialized = true; // Emit\n\n      swiper.emit('init');\n    };\n\n    _proto.destroy = function destroy(deleteInstance, cleanStyles) {\n      if (deleteInstance === void 0) {\n        deleteInstance = true;\n      }\n\n      if (cleanStyles === void 0) {\n        cleanStyles = true;\n      }\n\n      var swiper = this;\n      var params = swiper.params,\n          $el = swiper.$el,\n          $wrapperEl = swiper.$wrapperEl,\n          slides = swiper.slides;\n\n      if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n        return null;\n      }\n\n      swiper.emit('beforeDestroy'); // Init Flag\n\n      swiper.initialized = false; // Detach events\n\n      swiper.detachEvents(); // Destroy loop\n\n      if (params.loop) {\n        swiper.loopDestroy();\n      } // Cleanup styles\n\n\n      if (cleanStyles) {\n        swiper.removeClasses();\n        $el.removeAttr('style');\n        $wrapperEl.removeAttr('style');\n\n        if (slides && slides.length) {\n          slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n        }\n      }\n\n      swiper.emit('destroy'); // Detach emitter events\n\n      Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n        swiper.off(eventName);\n      });\n\n      if (deleteInstance !== false) {\n        swiper.$el[0].swiper = null;\n        deleteProps(swiper);\n      }\n\n      swiper.destroyed = true;\n      return null;\n    };\n\n    Swiper.extendDefaults = function extendDefaults(newDefaults) {\n      extend$1(extendedDefaults, newDefaults);\n    };\n\n    Swiper.installModule = function installModule(module) {\n      if (!Swiper.prototype.modules) Swiper.prototype.modules = {};\n      var name = module.name || Object.keys(Swiper.prototype.modules).length + \"_\" + now();\n      Swiper.prototype.modules[name] = module;\n    };\n\n    Swiper.use = function use(module) {\n      if (Array.isArray(module)) {\n        module.forEach(function (m) {\n          return Swiper.installModule(m);\n        });\n        return Swiper;\n      }\n\n      Swiper.installModule(module);\n      return Swiper;\n    };\n\n    _createClass(Swiper, null, [{\n      key: \"extendedDefaults\",\n      get: function get() {\n        return extendedDefaults;\n      }\n    }, {\n      key: \"defaults\",\n      get: function get() {\n        return defaults;\n      }\n    }]);\n\n    return Swiper;\n  }();\n\n  Swiper.use([Resize, Observer$1]);\n\n  var Virtual = {\n    update: function update(force) {\n      var swiper = this;\n      var _swiper$params = swiper.params,\n          slidesPerView = _swiper$params.slidesPerView,\n          slidesPerGroup = _swiper$params.slidesPerGroup,\n          centeredSlides = _swiper$params.centeredSlides;\n      var _swiper$params$virtua = swiper.params.virtual,\n          addSlidesBefore = _swiper$params$virtua.addSlidesBefore,\n          addSlidesAfter = _swiper$params$virtua.addSlidesAfter;\n      var _swiper$virtual = swiper.virtual,\n          previousFrom = _swiper$virtual.from,\n          previousTo = _swiper$virtual.to,\n          slides = _swiper$virtual.slides,\n          previousSlidesGrid = _swiper$virtual.slidesGrid,\n          renderSlide = _swiper$virtual.renderSlide,\n          previousOffset = _swiper$virtual.offset;\n      swiper.updateActiveIndex();\n      var activeIndex = swiper.activeIndex || 0;\n      var offsetProp;\n      if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n      var slidesAfter;\n      var slidesBefore;\n\n      if (centeredSlides) {\n        slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n        slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      } else {\n        slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n        slidesBefore = slidesPerGroup + addSlidesBefore;\n      }\n\n      var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n      var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n      var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n      extend$1(swiper.virtual, {\n        from: from,\n        to: to,\n        offset: offset,\n        slidesGrid: swiper.slidesGrid\n      });\n\n      function onRendered() {\n        swiper.updateSlides();\n        swiper.updateProgress();\n        swiper.updateSlidesClasses();\n\n        if (swiper.lazy && swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      }\n\n      if (previousFrom === from && previousTo === to && !force) {\n        if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n          swiper.slides.css(offsetProp, offset + \"px\");\n        }\n\n        swiper.updateProgress();\n        return;\n      }\n\n      if (swiper.params.virtual.renderExternal) {\n        swiper.params.virtual.renderExternal.call(swiper, {\n          offset: offset,\n          from: from,\n          to: to,\n          slides: function getSlides() {\n            var slidesToRender = [];\n\n            for (var i = from; i <= to; i += 1) {\n              slidesToRender.push(slides[i]);\n            }\n\n            return slidesToRender;\n          }()\n        });\n\n        if (swiper.params.virtual.renderExternalUpdate) {\n          onRendered();\n        }\n\n        return;\n      }\n\n      var prependIndexes = [];\n      var appendIndexes = [];\n\n      if (force) {\n        swiper.$wrapperEl.find(\".\" + swiper.params.slideClass).remove();\n      } else {\n        for (var i = previousFrom; i <= previousTo; i += 1) {\n          if (i < from || i > to) {\n            swiper.$wrapperEl.find(\".\" + swiper.params.slideClass + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\").remove();\n          }\n        }\n      }\n\n      for (var _i = 0; _i < slides.length; _i += 1) {\n        if (_i >= from && _i <= to) {\n          if (typeof previousTo === 'undefined' || force) {\n            appendIndexes.push(_i);\n          } else {\n            if (_i > previousTo) appendIndexes.push(_i);\n            if (_i < previousFrom) prependIndexes.push(_i);\n          }\n        }\n      }\n\n      appendIndexes.forEach(function (index) {\n        swiper.$wrapperEl.append(renderSlide(slides[index], index));\n      });\n      prependIndexes.sort(function (a, b) {\n        return b - a;\n      }).forEach(function (index) {\n        swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n      });\n      swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + \"px\");\n      onRendered();\n    },\n    renderSlide: function renderSlide(slide, index) {\n      var swiper = this;\n      var params = swiper.params.virtual;\n\n      if (params.cache && swiper.virtual.cache[index]) {\n        return swiper.virtual.cache[index];\n      }\n\n      var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(\"<div class=\\\"\" + swiper.params.slideClass + \"\\\" data-swiper-slide-index=\\\"\" + index + \"\\\">\" + slide + \"</div>\");\n      if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n      if (params.cache) swiper.virtual.cache[index] = $slideEl;\n      return $slideEl;\n    },\n    appendSlide: function appendSlide(slides) {\n      var swiper = this;\n\n      if (typeof slides === 'object' && 'length' in slides) {\n        for (var i = 0; i < slides.length; i += 1) {\n          if (slides[i]) swiper.virtual.slides.push(slides[i]);\n        }\n      } else {\n        swiper.virtual.slides.push(slides);\n      }\n\n      swiper.virtual.update(true);\n    },\n    prependSlide: function prependSlide(slides) {\n      var swiper = this;\n      var activeIndex = swiper.activeIndex;\n      var newActiveIndex = activeIndex + 1;\n      var numberOfNewSlides = 1;\n\n      if (Array.isArray(slides)) {\n        for (var i = 0; i < slides.length; i += 1) {\n          if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n        }\n\n        newActiveIndex = activeIndex + slides.length;\n        numberOfNewSlides = slides.length;\n      } else {\n        swiper.virtual.slides.unshift(slides);\n      }\n\n      if (swiper.params.virtual.cache) {\n        var cache = swiper.virtual.cache;\n        var newCache = {};\n        Object.keys(cache).forEach(function (cachedIndex) {\n          var $cachedEl = cache[cachedIndex];\n          var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n          if (cachedElIndex) {\n            $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n          }\n\n          newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n        });\n        swiper.virtual.cache = newCache;\n      }\n\n      swiper.virtual.update(true);\n      swiper.slideTo(newActiveIndex, 0);\n    },\n    removeSlide: function removeSlide(slidesIndexes) {\n      var swiper = this;\n      if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n      var activeIndex = swiper.activeIndex;\n\n      if (Array.isArray(slidesIndexes)) {\n        for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n          swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n          if (swiper.params.virtual.cache) {\n            delete swiper.virtual.cache[slidesIndexes[i]];\n          }\n\n          if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n          activeIndex = Math.max(activeIndex, 0);\n        }\n      } else {\n        swiper.virtual.slides.splice(slidesIndexes, 1);\n\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes];\n        }\n\n        if (slidesIndexes < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n\n      swiper.virtual.update(true);\n      swiper.slideTo(activeIndex, 0);\n    },\n    removeAllSlides: function removeAllSlides() {\n      var swiper = this;\n      swiper.virtual.slides = [];\n\n      if (swiper.params.virtual.cache) {\n        swiper.virtual.cache = {};\n      }\n\n      swiper.virtual.update(true);\n      swiper.slideTo(0, 0);\n    }\n  };\n  var Virtual$1 = {\n    name: 'virtual',\n    params: {\n      virtual: {\n        enabled: false,\n        slides: [],\n        cache: true,\n        renderSlide: null,\n        renderExternal: null,\n        renderExternalUpdate: true,\n        addSlidesBefore: 0,\n        addSlidesAfter: 0\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        virtual: _extends(_extends({}, Virtual), {}, {\n          slides: swiper.params.virtual.slides,\n          cache: {}\n        })\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (!swiper.params.virtual.enabled) return;\n        swiper.classNames.push(swiper.params.containerModifierClass + \"virtual\");\n        var overwriteParams = {\n          watchSlidesProgress: true\n        };\n        extend$1(swiper.params, overwriteParams);\n        extend$1(swiper.originalParams, overwriteParams);\n\n        if (!swiper.params.initialSlide) {\n          swiper.virtual.update();\n        }\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (!swiper.params.virtual.enabled) return;\n        swiper.virtual.update();\n      }\n    }\n  };\n\n  var Keyboard = {\n    handle: function handle(event) {\n      var swiper = this;\n      var window = getWindow();\n      var document = getDocument();\n      var rtl = swiper.rtlTranslate;\n      var e = event;\n      if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n      var kc = e.keyCode || e.charCode;\n      var pageUpDown = swiper.params.keyboard.pageUpDown;\n      var isPageUp = pageUpDown && kc === 33;\n      var isPageDown = pageUpDown && kc === 34;\n      var isArrowLeft = kc === 37;\n      var isArrowRight = kc === 39;\n      var isArrowUp = kc === 38;\n      var isArrowDown = kc === 40; // Directions locks\n\n      if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n        return false;\n      }\n\n      if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n        return false;\n      }\n\n      if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n        return undefined;\n      }\n\n      if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n        return undefined;\n      }\n\n      if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n        var inView = false; // Check that swiper should be inside of visible area of window\n\n        if (swiper.$el.parents(\".\" + swiper.params.slideClass).length > 0 && swiper.$el.parents(\".\" + swiper.params.slideActiveClass).length === 0) {\n          return undefined;\n        }\n\n        var windowWidth = window.innerWidth;\n        var windowHeight = window.innerHeight;\n        var swiperOffset = swiper.$el.offset();\n        if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n        var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n        for (var i = 0; i < swiperCoord.length; i += 1) {\n          var point = swiperCoord[i];\n\n          if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n            inView = true;\n          }\n        }\n\n        if (!inView) return undefined;\n      }\n\n      if (swiper.isHorizontal()) {\n        if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n          if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n        }\n\n        if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n        if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n      } else {\n        if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n          if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n        }\n\n        if (isPageDown || isArrowDown) swiper.slideNext();\n        if (isPageUp || isArrowUp) swiper.slidePrev();\n      }\n\n      swiper.emit('keyPress', kc);\n      return undefined;\n    },\n    enable: function enable() {\n      var swiper = this;\n      var document = getDocument();\n      if (swiper.keyboard.enabled) return;\n      $(document).on('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      var document = getDocument();\n      if (!swiper.keyboard.enabled) return;\n      $(document).off('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = false;\n    }\n  };\n  var Keyboard$1 = {\n    name: 'keyboard',\n    params: {\n      keyboard: {\n        enabled: false,\n        onlyInViewport: true,\n        pageUpDown: true\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        keyboard: _extends({\n          enabled: false\n        }, Keyboard)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (swiper.params.keyboard.enabled) {\n          swiper.keyboard.enable();\n        }\n      },\n      destroy: function destroy(swiper) {\n        if (swiper.keyboard.enabled) {\n          swiper.keyboard.disable();\n        }\n      }\n    }\n  };\n\n  function isEventSupported() {\n    var document = getDocument();\n    var eventName = 'onwheel';\n    var isSupported = (eventName in document);\n\n    if (!isSupported) {\n      var element = document.createElement('div');\n      element.setAttribute(eventName, 'return;');\n      isSupported = typeof element[eventName] === 'function';\n    }\n\n    if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    document.implementation.hasFeature('', '') !== true) {\n      // This is the only way to test support for the `wheel` event in IE9+.\n      isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n    }\n\n    return isSupported;\n  }\n\n  var Mousewheel = {\n    lastScrollTime: now(),\n    lastEventBeforeSnap: undefined,\n    recentWheelEvents: [],\n    event: function event() {\n      var window = getWindow();\n      if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n      return isEventSupported() ? 'wheel' : 'mousewheel';\n    },\n    normalize: function normalize(e) {\n      // Reasonable defaults\n      var PIXEL_STEP = 10;\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n      var sX = 0;\n      var sY = 0; // spinX, spinY\n\n      var pX = 0;\n      var pY = 0; // pixelX, pixelY\n      // Legacy\n\n      if ('detail' in e) {\n        sY = e.detail;\n      }\n\n      if ('wheelDelta' in e) {\n        sY = -e.wheelDelta / 120;\n      }\n\n      if ('wheelDeltaY' in e) {\n        sY = -e.wheelDeltaY / 120;\n      }\n\n      if ('wheelDeltaX' in e) {\n        sX = -e.wheelDeltaX / 120;\n      } // side scrolling on FF with DOMMouseScroll\n\n\n      if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n        sX = sY;\n        sY = 0;\n      }\n\n      pX = sX * PIXEL_STEP;\n      pY = sY * PIXEL_STEP;\n\n      if ('deltaY' in e) {\n        pY = e.deltaY;\n      }\n\n      if ('deltaX' in e) {\n        pX = e.deltaX;\n      }\n\n      if (e.shiftKey && !pX) {\n        // if user scrolls with shift he wants horizontal scroll\n        pX = pY;\n        pY = 0;\n      }\n\n      if ((pX || pY) && e.deltaMode) {\n        if (e.deltaMode === 1) {\n          // delta in LINE units\n          pX *= LINE_HEIGHT;\n          pY *= LINE_HEIGHT;\n        } else {\n          // delta in PAGE units\n          pX *= PAGE_HEIGHT;\n          pY *= PAGE_HEIGHT;\n        }\n      } // Fall-back if spin cannot be determined\n\n\n      if (pX && !sX) {\n        sX = pX < 1 ? -1 : 1;\n      }\n\n      if (pY && !sY) {\n        sY = pY < 1 ? -1 : 1;\n      }\n\n      return {\n        spinX: sX,\n        spinY: sY,\n        pixelX: pX,\n        pixelY: pY\n      };\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var swiper = this;\n      swiper.mouseEntered = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var swiper = this;\n      swiper.mouseEntered = false;\n    },\n    handle: function handle(event) {\n      var e = event;\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (swiper.params.cssMode) {\n        e.preventDefault();\n      }\n\n      var target = swiper.$el;\n\n      if (swiper.params.mousewheel.eventsTarget !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarget);\n      }\n\n      if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n      if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n      var delta = 0;\n      var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n      var data = Mousewheel.normalize(e);\n\n      if (params.forceToAxis) {\n        if (swiper.isHorizontal()) {\n          if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n      } else {\n        delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n      }\n\n      if (delta === 0) return true;\n      if (params.invert) delta = -delta;\n\n      if (!swiper.params.freeMode) {\n        // Register the new event in a variable which stores the relevant data\n        var newEvent = {\n          time: now(),\n          delta: Math.abs(delta),\n          direction: Math.sign(delta),\n          raw: event\n        }; // Keep the most recent events\n\n        var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n        if (recentWheelEvents.length >= 2) {\n          recentWheelEvents.shift(); // only store the last N events\n        }\n\n        var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n        recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n        //   If direction has changed or\n        //   if the scroll is quicker than the previous one:\n        //     Animate the slider.\n        // Else (this is the first time the wheel is moved):\n        //     Animate the slider.\n\n        if (prevEvent) {\n          if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n            swiper.mousewheel.animateSlider(newEvent);\n          }\n        } else {\n          swiper.mousewheel.animateSlider(newEvent);\n        } // If it's time to release the scroll:\n        //   Return now so you don't hit the preventDefault.\n\n\n        if (swiper.mousewheel.releaseScroll(newEvent)) {\n          return true;\n        }\n      } else {\n        // Freemode or scrollContainer:\n        // If we recently snapped after a momentum scroll, then ignore wheel events\n        // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n        // or if it's a new scroll (larger delta or inverse sign as last event before\n        // an end-of-momentum snap).\n        var _newEvent = {\n          time: now(),\n          delta: Math.abs(delta),\n          direction: Math.sign(delta)\n        };\n        var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;\n        var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;\n\n        if (!ignoreWheelEvents) {\n          swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n          if (swiper.params.loop) {\n            swiper.loopFix();\n          }\n\n          var position = swiper.getTranslate() + delta * params.sensitivity;\n          var wasBeginning = swiper.isBeginning;\n          var wasEnd = swiper.isEnd;\n          if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n          if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n          swiper.setTransition(0);\n          swiper.setTranslate(position);\n          swiper.updateProgress();\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n\n          if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n            swiper.updateSlidesClasses();\n          }\n\n          if (swiper.params.freeModeSticky) {\n            // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n            // the end of a momentum scroll by storing recent (N=15?) wheel events.\n            // 1. do all N events have decreasing or same (absolute value) delta?\n            // 2. did all N events arrive in the last M (M=500?) msecs?\n            // 3. does the earliest event have an (absolute value) delta that's\n            //    at least P (P=1?) larger than the most recent event's delta?\n            // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n            // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n            // Snap immediately and ignore remaining wheel events in this scroll.\n            // See comment above for \"remaining wheel events in this scroll\" determination.\n            // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n            clearTimeout(swiper.mousewheel.timeout);\n            swiper.mousewheel.timeout = undefined;\n            var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n            if (_recentWheelEvents.length >= 15) {\n              _recentWheelEvents.shift(); // only store the last N events\n\n            }\n\n            var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;\n\n            var firstEvent = _recentWheelEvents[0];\n\n            _recentWheelEvents.push(_newEvent);\n\n            if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {\n              // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n              _recentWheelEvents.splice(0);\n            } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {\n              // We're at the end of the deceleration of a momentum scroll, so there's no need\n              // to wait for more events. Snap ASAP on the next tick.\n              // Also, because there's some remaining momentum we'll bias the snap in the\n              // direction of the ongoing scroll because it's better UX for the scroll to snap\n              // in the same direction as the scroll instead of reversing to snap.  Therefore,\n              // if it's already scrolled more than 20% in the current direction, keep going.\n              var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n              swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n              _recentWheelEvents.splice(0);\n\n              swiper.mousewheel.timeout = nextTick(function () {\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 0); // no delay; move on next tick\n            }\n\n            if (!swiper.mousewheel.timeout) {\n              // if we get here, then we haven't detected the end of a momentum scroll, so\n              // we'll consider a scroll \"complete\" when there haven't been any wheel events\n              // for 500ms.\n              swiper.mousewheel.timeout = nextTick(function () {\n                var snapToThreshold = 0.5;\n                swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n                _recentWheelEvents.splice(0);\n\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 500);\n            }\n          } // Emit event\n\n\n          if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay\n\n          if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n          if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n        }\n      }\n\n      if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      return false;\n    },\n    animateSlider: function animateSlider(newEvent) {\n      var swiper = this;\n      var window = getWindow();\n\n      if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {\n        // Prevent if delta of wheel scroll delta is below configured threshold\n        return false;\n      }\n\n      if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {\n        // Prevent if time between scrolls is below configured threshold\n        return false;\n      } // If the movement is NOT big enough and\n      // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n      //   Don't go any further (avoid insignificant scroll movement).\n\n\n      if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {\n        // Return false as a default\n        return true;\n      } // If user is scrolling towards the end:\n      //   If the slider hasn't hit the latest slide or\n      //   if the slider is a loop and\n      //   if the slider isn't moving right now:\n      //     Go to next slide and\n      //     emit a scroll event.\n      // Else (the user is scrolling towards the beginning) and\n      // if the slider hasn't hit the first slide or\n      // if the slider is a loop and\n      // if the slider isn't moving right now:\n      //   Go to prev slide and\n      //   emit a scroll event.\n\n\n      if (newEvent.direction < 0) {\n        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n          swiper.slideNext();\n          swiper.emit('scroll', newEvent.raw);\n        }\n      } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n        swiper.slidePrev();\n        swiper.emit('scroll', newEvent.raw);\n      } // If you got here is because an animation has been triggered so store the current time\n\n\n      swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n      return false;\n    },\n    releaseScroll: function releaseScroll(newEvent) {\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (newEvent.direction < 0) {\n        if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n          // Return true to animate scroll on edges\n          return true;\n        }\n      } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n\n      return false;\n    },\n    enable: function enable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n\n      if (!event) return false;\n      if (swiper.mousewheel.enabled) return false;\n      var target = swiper.$el;\n\n      if (swiper.params.mousewheel.eventsTarget !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarget);\n      }\n\n      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n      target.on(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = true;\n      return true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n\n      if (!event) return false;\n      if (!swiper.mousewheel.enabled) return false;\n      var target = swiper.$el;\n\n      if (swiper.params.mousewheel.eventsTarget !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarget);\n      }\n\n      target.off(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = false;\n      return true;\n    }\n  };\n  var Mousewheel$1 = {\n    name: 'mousewheel',\n    params: {\n      mousewheel: {\n        enabled: false,\n        releaseOnEdges: false,\n        invert: false,\n        forceToAxis: false,\n        sensitivity: 1,\n        eventsTarget: 'container',\n        thresholdDelta: null,\n        thresholdTime: null\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        mousewheel: {\n          enabled: false,\n          lastScrollTime: now(),\n          lastEventBeforeSnap: undefined,\n          recentWheelEvents: [],\n          enable: Mousewheel.enable,\n          disable: Mousewheel.disable,\n          handle: Mousewheel.handle,\n          handleMouseEnter: Mousewheel.handleMouseEnter,\n          handleMouseLeave: Mousewheel.handleMouseLeave,\n          animateSlider: Mousewheel.animateSlider,\n          releaseScroll: Mousewheel.releaseScroll\n        }\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n          swiper.mousewheel.disable();\n        }\n\n        if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n      },\n      destroy: function destroy(swiper) {\n        if (swiper.params.cssMode) {\n          swiper.mousewheel.enable();\n        }\n\n        if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n      }\n    }\n  };\n\n  var Navigation = {\n    update: function update() {\n      // Update Navigation Buttons\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (swiper.params.loop) return;\n      var _swiper$navigation = swiper.navigation,\n          $nextEl = _swiper$navigation.$nextEl,\n          $prevEl = _swiper$navigation.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          $prevEl.addClass(params.disabledClass);\n        } else {\n          $prevEl.removeClass(params.disabledClass);\n        }\n\n        $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          $nextEl.addClass(params.disabledClass);\n        } else {\n          $nextEl.removeClass(params.disabledClass);\n        }\n\n        $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    },\n    onPrevClick: function onPrevClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isBeginning && !swiper.params.loop) return;\n      swiper.slidePrev();\n    },\n    onNextClick: function onNextClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isEnd && !swiper.params.loop) return;\n      swiper.slideNext();\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (!(params.nextEl || params.prevEl)) return;\n      var $nextEl;\n      var $prevEl;\n\n      if (params.nextEl) {\n        $nextEl = $(params.nextEl);\n\n        if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {\n          $nextEl = swiper.$el.find(params.nextEl);\n        }\n      }\n\n      if (params.prevEl) {\n        $prevEl = $(params.prevEl);\n\n        if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {\n          $prevEl = swiper.$el.find(params.prevEl);\n        }\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        $nextEl.on('click', swiper.navigation.onNextClick);\n      }\n\n      if ($prevEl && $prevEl.length > 0) {\n        $prevEl.on('click', swiper.navigation.onPrevClick);\n      }\n\n      extend$1(swiper.navigation, {\n        $nextEl: $nextEl,\n        nextEl: $nextEl && $nextEl[0],\n        $prevEl: $prevEl,\n        prevEl: $prevEl && $prevEl[0]\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var _swiper$navigation2 = swiper.navigation,\n          $nextEl = _swiper$navigation2.$nextEl,\n          $prevEl = _swiper$navigation2.$prevEl;\n\n      if ($nextEl && $nextEl.length) {\n        $nextEl.off('click', swiper.navigation.onNextClick);\n        $nextEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n\n      if ($prevEl && $prevEl.length) {\n        $prevEl.off('click', swiper.navigation.onPrevClick);\n        $prevEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n    }\n  };\n  var Navigation$1 = {\n    name: 'navigation',\n    params: {\n      navigation: {\n        nextEl: null,\n        prevEl: null,\n        hideOnClick: false,\n        disabledClass: 'swiper-button-disabled',\n        hiddenClass: 'swiper-button-hidden',\n        lockClass: 'swiper-button-lock'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        navigation: _extends({}, Navigation)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        swiper.navigation.init();\n        swiper.navigation.update();\n      },\n      toEdge: function toEdge(swiper) {\n        swiper.navigation.update();\n      },\n      fromEdge: function fromEdge(swiper) {\n        swiper.navigation.update();\n      },\n      destroy: function destroy(swiper) {\n        swiper.navigation.destroy();\n      },\n      click: function click(swiper, e) {\n        var _swiper$navigation3 = swiper.navigation,\n            $nextEl = _swiper$navigation3.$nextEl,\n            $prevEl = _swiper$navigation3.$prevEl;\n\n        if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {\n          var isHidden;\n\n          if ($nextEl) {\n            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n          } else if ($prevEl) {\n            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n          }\n\n          if (isHidden === true) {\n            swiper.emit('navigationShow');\n          } else {\n            swiper.emit('navigationHide');\n          }\n\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      }\n    }\n  };\n\n  var Pagination = {\n    update: function update() {\n      // Render || Update Pagination bullets/items\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el; // Current/Total\n\n      var current;\n      var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n      if (swiper.params.loop) {\n        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n        if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n          current -= slidesLength - swiper.loopedSlides * 2;\n        }\n\n        if (current > total - 1) current -= total;\n        if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n      } else if (typeof swiper.snapIndex !== 'undefined') {\n        current = swiper.snapIndex;\n      } else {\n        current = swiper.activeIndex || 0;\n      } // Types\n\n\n      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n        var bullets = swiper.pagination.bullets;\n        var firstIndex;\n        var lastIndex;\n        var midIndex;\n\n        if (params.dynamicBullets) {\n          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n          $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + \"px\");\n\n          if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n            swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;\n\n            if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {\n              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n            } else if (swiper.pagination.dynamicBulletIndex < 0) {\n              swiper.pagination.dynamicBulletIndex = 0;\n            }\n          }\n\n          firstIndex = current - swiper.pagination.dynamicBulletIndex;\n          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n          midIndex = (lastIndex + firstIndex) / 2;\n        }\n\n        bullets.removeClass(params.bulletActiveClass + \" \" + params.bulletActiveClass + \"-next \" + params.bulletActiveClass + \"-next-next \" + params.bulletActiveClass + \"-prev \" + params.bulletActiveClass + \"-prev-prev \" + params.bulletActiveClass + \"-main\");\n\n        if ($el.length > 1) {\n          bullets.each(function (bullet) {\n            var $bullet = $(bullet);\n            var bulletIndex = $bullet.index();\n\n            if (bulletIndex === current) {\n              $bullet.addClass(params.bulletActiveClass);\n            }\n\n            if (params.dynamicBullets) {\n              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                $bullet.addClass(params.bulletActiveClass + \"-main\");\n              }\n\n              if (bulletIndex === firstIndex) {\n                $bullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n              }\n\n              if (bulletIndex === lastIndex) {\n                $bullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n              }\n            }\n          });\n        } else {\n          var $bullet = bullets.eq(current);\n          var bulletIndex = $bullet.index();\n          $bullet.addClass(params.bulletActiveClass);\n\n          if (params.dynamicBullets) {\n            var $firstDisplayedBullet = bullets.eq(firstIndex);\n            var $lastDisplayedBullet = bullets.eq(lastIndex);\n\n            for (var i = firstIndex; i <= lastIndex; i += 1) {\n              bullets.eq(i).addClass(params.bulletActiveClass + \"-main\");\n            }\n\n            if (swiper.params.loop) {\n              if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n                for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) {\n                  bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + \"-main\");\n                }\n\n                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + \"-prev\");\n              } else {\n                $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n                $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n              }\n            } else {\n              $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n              $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n            }\n          }\n        }\n\n        if (params.dynamicBullets) {\n          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n          var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;\n          var offsetProp = rtl ? 'right' : 'left';\n          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + \"px\");\n        }\n      }\n\n      if (params.type === 'fraction') {\n        $el.find(\".\" + params.currentClass).text(params.formatFractionCurrent(current + 1));\n        $el.find(\".\" + params.totalClass).text(params.formatFractionTotal(total));\n      }\n\n      if (params.type === 'progressbar') {\n        var progressbarDirection;\n\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n\n        var scale = (current + 1) / total;\n        var scaleX = 1;\n        var scaleY = 1;\n\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n\n        $el.find(\".\" + params.progressbarFillClass).transform(\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\").transition(swiper.params.speed);\n      }\n\n      if (params.type === 'custom' && params.renderCustom) {\n        $el.html(params.renderCustom(swiper, current + 1, total));\n        swiper.emit('paginationRender', $el[0]);\n      } else {\n        swiper.emit('paginationUpdate', $el[0]);\n      }\n\n      $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    },\n    render: function render() {\n      // Render Container\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el;\n      var paginationHTML = '';\n\n      if (params.type === 'bullets') {\n        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n        for (var i = 0; i < numberOfBullets; i += 1) {\n          if (params.renderBullet) {\n            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n          } else {\n            paginationHTML += \"<\" + params.bulletElement + \" class=\\\"\" + params.bulletClass + \"\\\"></\" + params.bulletElement + \">\";\n          }\n        }\n\n        $el.html(paginationHTML);\n        swiper.pagination.bullets = $el.find(\".\" + params.bulletClass);\n      }\n\n      if (params.type === 'fraction') {\n        if (params.renderFraction) {\n          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + params.currentClass + \"\\\"></span>\" + ' / ' + (\"<span class=\\\"\" + params.totalClass + \"\\\"></span>\");\n        }\n\n        $el.html(paginationHTML);\n      }\n\n      if (params.type === 'progressbar') {\n        if (params.renderProgressbar) {\n          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + params.progressbarFillClass + \"\\\"></span>\";\n        }\n\n        $el.html(paginationHTML);\n      }\n\n      if (params.type !== 'custom') {\n        swiper.emit('paginationRender', swiper.pagination.$el[0]);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el) return;\n      var $el = $(params.el);\n      if ($el.length === 0) return;\n\n      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n        $el = swiper.$el.find(params.el);\n      }\n\n      if (params.type === 'bullets' && params.clickable) {\n        $el.addClass(params.clickableClass);\n      }\n\n      $el.addClass(params.modifierClass + params.type);\n\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        $el.addClass(\"\" + params.modifierClass + params.type + \"-dynamic\");\n        swiper.pagination.dynamicBulletIndex = 0;\n\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        $el.addClass(params.progressbarOppositeClass);\n      }\n\n      if (params.clickable) {\n        $el.on('click', \".\" + params.bulletClass, function onClick(e) {\n          e.preventDefault();\n          var index = $(this).index() * swiper.params.slidesPerGroup;\n          if (swiper.params.loop) index += swiper.loopedSlides;\n          swiper.slideTo(index);\n        });\n      }\n\n      extend$1(swiper.pagination, {\n        $el: $el,\n        el: $el[0]\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n      var $el = swiper.pagination.$el;\n      $el.removeClass(params.hiddenClass);\n      $el.removeClass(params.modifierClass + params.type);\n      if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n      if (params.clickable) {\n        $el.off('click', \".\" + params.bulletClass);\n      }\n    }\n  };\n  var Pagination$1 = {\n    name: 'pagination',\n    params: {\n      pagination: {\n        el: null,\n        bulletElement: 'span',\n        clickable: false,\n        hideOnClick: false,\n        renderBullet: null,\n        renderProgressbar: null,\n        renderFraction: null,\n        renderCustom: null,\n        progressbarOpposite: false,\n        type: 'bullets',\n        // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n        dynamicBullets: false,\n        dynamicMainBullets: 1,\n        formatFractionCurrent: function formatFractionCurrent(number) {\n          return number;\n        },\n        formatFractionTotal: function formatFractionTotal(number) {\n          return number;\n        },\n        bulletClass: 'swiper-pagination-bullet',\n        bulletActiveClass: 'swiper-pagination-bullet-active',\n        modifierClass: 'swiper-pagination-',\n        // NEW\n        currentClass: 'swiper-pagination-current',\n        totalClass: 'swiper-pagination-total',\n        hiddenClass: 'swiper-pagination-hidden',\n        progressbarFillClass: 'swiper-pagination-progressbar-fill',\n        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n        clickableClass: 'swiper-pagination-clickable',\n        // NEW\n        lockClass: 'swiper-pagination-lock'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        pagination: _extends({\n          dynamicBulletIndex: 0\n        }, Pagination)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        swiper.pagination.init();\n        swiper.pagination.render();\n        swiper.pagination.update();\n      },\n      activeIndexChange: function activeIndexChange(swiper) {\n        if (swiper.params.loop) {\n          swiper.pagination.update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          swiper.pagination.update();\n        }\n      },\n      snapIndexChange: function snapIndexChange(swiper) {\n        if (!swiper.params.loop) {\n          swiper.pagination.update();\n        }\n      },\n      slidesLengthChange: function slidesLengthChange(swiper) {\n        if (swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      snapGridLengthChange: function snapGridLengthChange(swiper) {\n        if (!swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      destroy: function destroy(swiper) {\n        swiper.pagination.destroy();\n      },\n      click: function click(swiper, e) {\n        if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {\n          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n\n          if (isHidden === true) {\n            swiper.emit('paginationShow');\n          } else {\n            swiper.emit('paginationHide');\n          }\n\n          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      }\n    }\n  };\n\n  var Scrollbar = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n      var scrollbar = swiper.scrollbar,\n          rtl = swiper.rtlTranslate,\n          progress = swiper.progress;\n      var dragSize = scrollbar.dragSize,\n          trackSize = scrollbar.trackSize,\n          $dragEl = scrollbar.$dragEl,\n          $el = scrollbar.$el;\n      var params = swiper.params.scrollbar;\n      var newSize = dragSize;\n      var newPos = (trackSize - dragSize) * progress;\n\n      if (rtl) {\n        newPos = -newPos;\n\n        if (newPos > 0) {\n          newSize = dragSize - newPos;\n          newPos = 0;\n        } else if (-newPos + dragSize > trackSize) {\n          newSize = trackSize + newPos;\n        }\n      } else if (newPos < 0) {\n        newSize = dragSize + newPos;\n        newPos = 0;\n      } else if (newPos + dragSize > trackSize) {\n        newSize = trackSize - newPos;\n      }\n\n      if (swiper.isHorizontal()) {\n        $dragEl.transform(\"translate3d(\" + newPos + \"px, 0, 0)\");\n        $dragEl[0].style.width = newSize + \"px\";\n      } else {\n        $dragEl.transform(\"translate3d(0px, \" + newPos + \"px, 0)\");\n        $dragEl[0].style.height = newSize + \"px\";\n      }\n\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.timeout);\n        $el[0].style.opacity = 1;\n        swiper.scrollbar.timeout = setTimeout(function () {\n          $el[0].style.opacity = 0;\n          $el.transition(400);\n        }, 1000);\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n      swiper.scrollbar.$dragEl.transition(duration);\n    },\n    updateSize: function updateSize() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n      var scrollbar = swiper.scrollbar;\n      var $dragEl = scrollbar.$dragEl,\n          $el = scrollbar.$el;\n      $dragEl[0].style.width = '';\n      $dragEl[0].style.height = '';\n      var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n      var divider = swiper.size / swiper.virtualSize;\n      var moveDivider = divider * (trackSize / swiper.size);\n      var dragSize;\n\n      if (swiper.params.scrollbar.dragSize === 'auto') {\n        dragSize = trackSize * divider;\n      } else {\n        dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n      }\n\n      if (swiper.isHorizontal()) {\n        $dragEl[0].style.width = dragSize + \"px\";\n      } else {\n        $dragEl[0].style.height = dragSize + \"px\";\n      }\n\n      if (divider >= 1) {\n        $el[0].style.display = 'none';\n      } else {\n        $el[0].style.display = '';\n      }\n\n      if (swiper.params.scrollbar.hide) {\n        $el[0].style.opacity = 0;\n      }\n\n      extend$1(scrollbar, {\n        trackSize: trackSize,\n        divider: divider,\n        moveDivider: moveDivider,\n        dragSize: dragSize\n      });\n      scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n    },\n    getPointerPosition: function getPointerPosition(e) {\n      var swiper = this;\n\n      if (swiper.isHorizontal()) {\n        return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n      }\n\n      return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n    },\n    setDragPosition: function setDragPosition(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar,\n          rtl = swiper.rtlTranslate;\n      var $el = scrollbar.$el,\n          dragSize = scrollbar.dragSize,\n          trackSize = scrollbar.trackSize,\n          dragStartPos = scrollbar.dragStartPos;\n      var positionRatio;\n      positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n      positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n      if (rtl) {\n        positionRatio = 1 - positionRatio;\n      }\n\n      var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n      swiper.updateProgress(position);\n      swiper.setTranslate(position);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    },\n    onDragStart: function onDragStart(e) {\n      var swiper = this;\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar,\n          $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el,\n          $dragEl = scrollbar.$dragEl;\n      swiper.scrollbar.isTouched = true;\n      swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n      e.preventDefault();\n      e.stopPropagation();\n      $wrapperEl.transition(100);\n      $dragEl.transition(100);\n      scrollbar.setDragPosition(e);\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      $el.transition(0);\n\n      if (params.hide) {\n        $el.css('opacity', 1);\n      }\n\n      if (swiper.params.cssMode) {\n        swiper.$wrapperEl.css('scroll-snap-type', 'none');\n      }\n\n      swiper.emit('scrollbarDragStart', e);\n    },\n    onDragMove: function onDragMove(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar,\n          $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el,\n          $dragEl = scrollbar.$dragEl;\n      if (!swiper.scrollbar.isTouched) return;\n      if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      scrollbar.setDragPosition(e);\n      $wrapperEl.transition(0);\n      $el.transition(0);\n      $dragEl.transition(0);\n      swiper.emit('scrollbarDragMove', e);\n    },\n    onDragEnd: function onDragEnd(e) {\n      var swiper = this;\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar,\n          $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n      if (!swiper.scrollbar.isTouched) return;\n      swiper.scrollbar.isTouched = false;\n\n      if (swiper.params.cssMode) {\n        swiper.$wrapperEl.css('scroll-snap-type', '');\n        $wrapperEl.transition('');\n      }\n\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.dragTimeout);\n        swiper.scrollbar.dragTimeout = nextTick(function () {\n          $el.css('opacity', 0);\n          $el.transition(400);\n        }, 1000);\n      }\n\n      swiper.emit('scrollbarDragEnd', e);\n\n      if (params.snapOnRelease) {\n        swiper.slideToClosest();\n      }\n    },\n    enableDraggable: function enableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) return;\n      var document = getDocument();\n      var scrollbar = swiper.scrollbar,\n          touchEventsTouch = swiper.touchEventsTouch,\n          touchEventsDesktop = swiper.touchEventsDesktop,\n          params = swiper.params,\n          support = swiper.support;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = support.passiveListener && params.passiveListeners ? {\n        passive: false,\n        capture: false\n      } : false;\n      var passiveListener = support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n\n      if (!support.touch) {\n        target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    disableDraggable: function disableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) return;\n      var document = getDocument();\n      var scrollbar = swiper.scrollbar,\n          touchEventsTouch = swiper.touchEventsTouch,\n          touchEventsDesktop = swiper.touchEventsDesktop,\n          params = swiper.params,\n          support = swiper.support;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = support.passiveListener && params.passiveListeners ? {\n        passive: false,\n        capture: false\n      } : false;\n      var passiveListener = support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n\n      if (!support.touch) {\n        target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) return;\n      var scrollbar = swiper.scrollbar,\n          $swiperEl = swiper.$el;\n      var params = swiper.params.scrollbar;\n      var $el = $(params.el);\n\n      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n        $el = $swiperEl.find(params.el);\n      }\n\n      var $dragEl = $el.find(\".\" + swiper.params.scrollbar.dragClass);\n\n      if ($dragEl.length === 0) {\n        $dragEl = $(\"<div class=\\\"\" + swiper.params.scrollbar.dragClass + \"\\\"></div>\");\n        $el.append($dragEl);\n      }\n\n      extend$1(scrollbar, {\n        $el: $el,\n        el: $el[0],\n        $dragEl: $dragEl,\n        dragEl: $dragEl[0]\n      });\n\n      if (params.draggable) {\n        scrollbar.enableDraggable();\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.scrollbar.disableDraggable();\n    }\n  };\n  var Scrollbar$1 = {\n    name: 'scrollbar',\n    params: {\n      scrollbar: {\n        el: null,\n        dragSize: 'auto',\n        hide: false,\n        draggable: false,\n        snapOnRelease: true,\n        lockClass: 'swiper-scrollbar-lock',\n        dragClass: 'swiper-scrollbar-drag'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        scrollbar: _extends({\n          isTouched: false,\n          timeout: null,\n          dragTimeout: null\n        }, Scrollbar)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        swiper.scrollbar.init();\n        swiper.scrollbar.updateSize();\n        swiper.scrollbar.setTranslate();\n      },\n      update: function update(swiper) {\n        swiper.scrollbar.updateSize();\n      },\n      resize: function resize(swiper) {\n        swiper.scrollbar.updateSize();\n      },\n      observerUpdate: function observerUpdate(swiper) {\n        swiper.scrollbar.updateSize();\n      },\n      setTranslate: function setTranslate(swiper) {\n        swiper.scrollbar.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        swiper.scrollbar.setTransition(duration);\n      },\n      destroy: function destroy(swiper) {\n        swiper.scrollbar.destroy();\n      }\n    }\n  };\n\n  var Parallax = {\n    setTransform: function setTransform(el, progress) {\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var $el = $(el);\n      var rtlFactor = rtl ? -1 : 1;\n      var p = $el.attr('data-swiper-parallax') || '0';\n      var x = $el.attr('data-swiper-parallax-x');\n      var y = $el.attr('data-swiper-parallax-y');\n      var scale = $el.attr('data-swiper-parallax-scale');\n      var opacity = $el.attr('data-swiper-parallax-opacity');\n\n      if (x || y) {\n        x = x || '0';\n        y = y || '0';\n      } else if (swiper.isHorizontal()) {\n        x = p;\n        y = '0';\n      } else {\n        y = p;\n        x = '0';\n      }\n\n      if (x.indexOf('%') >= 0) {\n        x = parseInt(x, 10) * progress * rtlFactor + \"%\";\n      } else {\n        x = x * progress * rtlFactor + \"px\";\n      }\n\n      if (y.indexOf('%') >= 0) {\n        y = parseInt(y, 10) * progress + \"%\";\n      } else {\n        y = y * progress + \"px\";\n      }\n\n      if (typeof opacity !== 'undefined' && opacity !== null) {\n        var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n        $el[0].style.opacity = currentOpacity;\n      }\n\n      if (typeof scale === 'undefined' || scale === null) {\n        $el.transform(\"translate3d(\" + x + \", \" + y + \", 0px)\");\n      } else {\n        var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n        $el.transform(\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\");\n      }\n    },\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el,\n          slides = swiper.slides,\n          progress = swiper.progress,\n          snapGrid = swiper.snapGrid;\n      $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {\n        swiper.parallax.setTransform(el, progress);\n      });\n      slides.each(function (slideEl, slideIndex) {\n        var slideProgress = slideEl.progress;\n\n        if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n          slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n        }\n\n        slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n        $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n      });\n    },\n    setTransition: function setTransition(duration) {\n      if (duration === void 0) {\n        duration = this.params.speed;\n      }\n\n      var swiper = this;\n      var $el = swiper.$el;\n      $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) {\n        var $parallaxEl = $(parallaxEl);\n        var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n        if (duration === 0) parallaxDuration = 0;\n        $parallaxEl.transition(parallaxDuration);\n      });\n    }\n  };\n  var Parallax$1 = {\n    name: 'parallax',\n    params: {\n      parallax: {\n        enabled: false\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        parallax: _extends({}, Parallax)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (!swiper.params.parallax.enabled) return;\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      init: function init(swiper) {\n        if (!swiper.params.parallax.enabled) return;\n        swiper.parallax.setTranslate();\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (!swiper.params.parallax.enabled) return;\n        swiper.parallax.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        if (!swiper.params.parallax.enabled) return;\n        swiper.parallax.setTransition(duration);\n      }\n    }\n  };\n\n  var Zoom = {\n    // Calc Scale From Multi-touches\n    getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n      if (e.targetTouches.length < 2) return 1;\n      var x1 = e.targetTouches[0].pageX;\n      var y1 = e.targetTouches[0].pageY;\n      var x2 = e.targetTouches[1].pageX;\n      var y2 = e.targetTouches[1].pageY;\n      var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n      return distance;\n    },\n    // Events\n    onGestureStart: function onGestureStart(e) {\n      var swiper = this;\n      var support = swiper.support;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n\n      if (!support.gestures) {\n        if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n          return;\n        }\n\n        zoom.fakeGestureTouched = true;\n        gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n      }\n\n      if (!gesture.$slideEl || !gesture.$slideEl.length) {\n        gesture.$slideEl = $(e.target).closest(\".\" + swiper.params.slideClass);\n        if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n        gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n        gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n        if (gesture.$imageWrapEl.length === 0) {\n          gesture.$imageEl = undefined;\n          return;\n        }\n      }\n\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transition(0);\n      }\n\n      swiper.zoom.isScaling = true;\n    },\n    onGestureChange: function onGestureChange(e) {\n      var swiper = this;\n      var support = swiper.support;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n\n      if (!support.gestures) {\n        if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n          return;\n        }\n\n        zoom.fakeGestureMoved = true;\n        gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n      }\n\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n        if (e.type === 'gesturechange') zoom.onGestureStart(e);\n        return;\n      }\n\n      if (support.gestures) {\n        zoom.scale = e.scale * zoom.currentScale;\n      } else {\n        zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;\n      }\n\n      if (zoom.scale > gesture.maxRatio) {\n        zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);\n      }\n\n      if (zoom.scale < params.minRatio) {\n        zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);\n      }\n\n      gesture.$imageEl.transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n    },\n    onGestureEnd: function onGestureEnd(e) {\n      var swiper = this;\n      var device = swiper.device;\n      var support = swiper.support;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n\n      if (!support.gestures) {\n        if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n          return;\n        }\n\n        if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n          return;\n        }\n\n        zoom.fakeGestureTouched = false;\n        zoom.fakeGestureMoved = false;\n      }\n\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n      zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n      gesture.$imageEl.transition(swiper.params.speed).transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n      zoom.currentScale = zoom.scale;\n      zoom.isScaling = false;\n      if (zoom.scale === 1) gesture.$slideEl = undefined;\n    },\n    onTouchStart: function onTouchStart(e) {\n      var swiper = this;\n      var device = swiper.device;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture,\n          image = zoom.image;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n      if (image.isTouched) return;\n      if (device.android && e.cancelable) e.preventDefault();\n      image.isTouched = true;\n      image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    },\n    onTouchMove: function onTouchMove(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture,\n          image = zoom.image,\n          velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n      swiper.allowClick = false;\n      if (!image.isTouched || !gesture.$slideEl) return;\n\n      if (!image.isMoved) {\n        image.width = gesture.$imageEl[0].offsetWidth;\n        image.height = gesture.$imageEl[0].offsetHeight;\n        image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n        image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n        gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n        gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n        gesture.$imageWrapEl.transition(0);\n\n        if (swiper.rtl) {\n          image.startX = -image.startX;\n          image.startY = -image.startY;\n        }\n      } // Define if we need image drag\n\n\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n      if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n      image.maxY = -image.minY;\n      image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n      if (!image.isMoved && !zoom.isScaling) {\n        if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n          image.isTouched = false;\n          return;\n        }\n\n        if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n          image.isTouched = false;\n          return;\n        }\n      }\n\n      if (e.cancelable) {\n        e.preventDefault();\n      }\n\n      e.stopPropagation();\n      image.isMoved = true;\n      image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n      image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n      if (image.currentX < image.minX) {\n        image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);\n      }\n\n      if (image.currentX > image.maxX) {\n        image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);\n      }\n\n      if (image.currentY < image.minY) {\n        image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);\n      }\n\n      if (image.currentY > image.maxY) {\n        image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);\n      } // Velocity\n\n\n      if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n      if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n      if (!velocity.prevTime) velocity.prevTime = Date.now();\n      velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n      velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n      if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n      if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n      velocity.prevPositionX = image.touchesCurrent.x;\n      velocity.prevPositionY = image.touchesCurrent.y;\n      velocity.prevTime = Date.now();\n      gesture.$imageWrapEl.transform(\"translate3d(\" + image.currentX + \"px, \" + image.currentY + \"px,0)\");\n    },\n    onTouchEnd: function onTouchEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture,\n          image = zoom.image,\n          velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n      if (!image.isTouched || !image.isMoved) {\n        image.isTouched = false;\n        image.isMoved = false;\n        return;\n      }\n\n      image.isTouched = false;\n      image.isMoved = false;\n      var momentumDurationX = 300;\n      var momentumDurationY = 300;\n      var momentumDistanceX = velocity.x * momentumDurationX;\n      var newPositionX = image.currentX + momentumDistanceX;\n      var momentumDistanceY = velocity.y * momentumDurationY;\n      var newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n      if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n      if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n      var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n      image.currentX = newPositionX;\n      image.currentY = newPositionY; // Define if we need image drag\n\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n      image.maxY = -image.minY;\n      image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n      image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n      gesture.$imageWrapEl.transition(momentumDuration).transform(\"translate3d(\" + image.currentX + \"px, \" + image.currentY + \"px,0)\");\n    },\n    onTransitionEnd: function onTransitionEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n\n      if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n        if (gesture.$imageEl) {\n          gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n        }\n\n        if (gesture.$imageWrapEl) {\n          gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n        }\n\n        zoom.scale = 1;\n        zoom.currentScale = 1;\n        gesture.$slideEl = undefined;\n        gesture.$imageEl = undefined;\n        gesture.$imageWrapEl = undefined;\n      }\n    },\n    // Toggle Zoom\n    toggle: function toggle(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n\n      if (zoom.scale && zoom.scale !== 1) {\n        // Zoom Out\n        zoom.out();\n      } else {\n        // Zoom In\n        zoom.in(e);\n      }\n    },\n    in: function _in(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture,\n          image = zoom.image;\n\n      if (!gesture.$slideEl) {\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n          gesture.$slideEl = swiper.$wrapperEl.children(\".\" + swiper.params.slideActiveClass);\n        } else {\n          gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n        }\n\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n        gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n      }\n\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n      gesture.$slideEl.addClass(\"\" + params.zoomedSlideClass);\n      var touchX;\n      var touchY;\n      var offsetX;\n      var offsetY;\n      var diffX;\n      var diffY;\n      var translateX;\n      var translateY;\n      var imageWidth;\n      var imageHeight;\n      var scaledWidth;\n      var scaledHeight;\n      var translateMinX;\n      var translateMinY;\n      var translateMaxX;\n      var translateMaxY;\n      var slideWidth;\n      var slideHeight;\n\n      if (typeof image.touchesStart.x === 'undefined' && e) {\n        touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n        touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n      } else {\n        touchX = image.touchesStart.x;\n        touchY = image.touchesStart.y;\n      }\n\n      zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n      if (e) {\n        slideWidth = gesture.$slideEl[0].offsetWidth;\n        slideHeight = gesture.$slideEl[0].offsetHeight;\n        offsetX = gesture.$slideEl.offset().left;\n        offsetY = gesture.$slideEl.offset().top;\n        diffX = offsetX + slideWidth / 2 - touchX;\n        diffY = offsetY + slideHeight / 2 - touchY;\n        imageWidth = gesture.$imageEl[0].offsetWidth;\n        imageHeight = gesture.$imageEl[0].offsetHeight;\n        scaledWidth = imageWidth * zoom.scale;\n        scaledHeight = imageHeight * zoom.scale;\n        translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n        translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n        translateMaxX = -translateMinX;\n        translateMaxY = -translateMinY;\n        translateX = diffX * zoom.scale;\n        translateY = diffY * zoom.scale;\n\n        if (translateX < translateMinX) {\n          translateX = translateMinX;\n        }\n\n        if (translateX > translateMaxX) {\n          translateX = translateMaxX;\n        }\n\n        if (translateY < translateMinY) {\n          translateY = translateMinY;\n        }\n\n        if (translateY > translateMaxY) {\n          translateY = translateMaxY;\n        }\n      } else {\n        translateX = 0;\n        translateY = 0;\n      }\n\n      gesture.$imageWrapEl.transition(300).transform(\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\");\n      gesture.$imageEl.transition(300).transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n    },\n    out: function out() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture;\n\n      if (!gesture.$slideEl) {\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n          gesture.$slideEl = swiper.$wrapperEl.children(\".\" + swiper.params.slideActiveClass);\n        } else {\n          gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n        }\n\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n        gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n      }\n\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n      gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n      gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n      gesture.$slideEl.removeClass(\"\" + params.zoomedSlideClass);\n      gesture.$slideEl = undefined;\n    },\n    toggleGestures: function toggleGestures(method) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var selector = zoom.slideSelector,\n          passive = zoom.passiveListener;\n      swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);\n      swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);\n      swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);\n    },\n    enableGestures: function enableGestures() {\n      if (this.zoom.gesturesEnabled) return;\n      this.zoom.gesturesEnabled = true;\n      this.zoom.toggleGestures('on');\n    },\n    disableGestures: function disableGestures() {\n      if (!this.zoom.gesturesEnabled) return;\n      this.zoom.gesturesEnabled = false;\n      this.zoom.toggleGestures('off');\n    },\n    // Attach/Detach Events\n    enable: function enable() {\n      var swiper = this;\n      var support = swiper.support;\n      var zoom = swiper.zoom;\n      if (zoom.enabled) return;\n      zoom.enabled = true;\n      var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      var activeListenerWithCapture = support.passiveListener ? {\n        passive: false,\n        capture: true\n      } : true;\n      var slideSelector = \".\" + swiper.params.slideClass;\n      swiper.zoom.passiveListener = passiveListener;\n      swiper.zoom.slideSelector = slideSelector; // Scale image\n\n      if (support.gestures) {\n        swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n        swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n        swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n        if (swiper.touchEvents.cancel) {\n          swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n        }\n      } // Move image\n\n\n      swiper.$wrapperEl.on(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n    },\n    disable: function disable() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      if (!zoom.enabled) return;\n      var support = swiper.support;\n      swiper.zoom.enabled = false;\n      var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      var activeListenerWithCapture = support.passiveListener ? {\n        passive: false,\n        capture: true\n      } : true;\n      var slideSelector = \".\" + swiper.params.slideClass; // Scale image\n\n      if (support.gestures) {\n        swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n        swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n        swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n        if (swiper.touchEvents.cancel) {\n          swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n        }\n      } // Move image\n\n\n      swiper.$wrapperEl.off(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n    }\n  };\n  var Zoom$1 = {\n    name: 'zoom',\n    params: {\n      zoom: {\n        enabled: false,\n        maxRatio: 3,\n        minRatio: 1,\n        toggle: true,\n        containerClass: 'swiper-zoom-container',\n        zoomedSlideClass: 'swiper-slide-zoomed'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        zoom: _extends({\n          enabled: false,\n          scale: 1,\n          currentScale: 1,\n          isScaling: false,\n          gesture: {\n            $slideEl: undefined,\n            slideWidth: undefined,\n            slideHeight: undefined,\n            $imageEl: undefined,\n            $imageWrapEl: undefined,\n            maxRatio: 3\n          },\n          image: {\n            isTouched: undefined,\n            isMoved: undefined,\n            currentX: undefined,\n            currentY: undefined,\n            minX: undefined,\n            minY: undefined,\n            maxX: undefined,\n            maxY: undefined,\n            width: undefined,\n            height: undefined,\n            startX: undefined,\n            startY: undefined,\n            touchesStart: {},\n            touchesCurrent: {}\n          },\n          velocity: {\n            x: undefined,\n            y: undefined,\n            prevPositionX: undefined,\n            prevPositionY: undefined,\n            prevTime: undefined\n          }\n        }, Zoom)\n      });\n      var scale = 1;\n      Object.defineProperty(swiper.zoom, 'scale', {\n        get: function get() {\n          return scale;\n        },\n        set: function set(value) {\n          if (scale !== value) {\n            var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n            var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n            swiper.emit('zoomChange', value, imageEl, slideEl);\n          }\n\n          scale = value;\n        }\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (swiper.params.zoom.enabled) {\n          swiper.zoom.enable();\n        }\n      },\n      destroy: function destroy(swiper) {\n        swiper.zoom.disable();\n      },\n      touchStart: function touchStart(swiper, e) {\n        if (!swiper.zoom.enabled) return;\n        swiper.zoom.onTouchStart(e);\n      },\n      touchEnd: function touchEnd(swiper, e) {\n        if (!swiper.zoom.enabled) return;\n        swiper.zoom.onTouchEnd(e);\n      },\n      doubleTap: function doubleTap(swiper, e) {\n        if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n          swiper.zoom.toggle(e);\n        }\n      },\n      transitionEnd: function transitionEnd(swiper) {\n        if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n          swiper.zoom.onTransitionEnd();\n        }\n      },\n      slideChange: function slideChange(swiper) {\n        if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n          swiper.zoom.onTransitionEnd();\n        }\n      }\n    }\n  };\n\n  var Lazy = {\n    loadInSlide: function loadInSlide(index, loadInDuplicate) {\n      if (loadInDuplicate === void 0) {\n        loadInDuplicate = true;\n      }\n\n      var swiper = this;\n      var params = swiper.params.lazy;\n      if (typeof index === 'undefined') return;\n      if (swiper.slides.length === 0) return;\n      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      var $slideEl = isVirtual ? swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\") : swiper.slides.eq(index);\n      var $images = $slideEl.find(\".\" + params.elementClass + \":not(.\" + params.loadedClass + \"):not(.\" + params.loadingClass + \")\");\n\n      if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n        $images.push($slideEl[0]);\n      }\n\n      if ($images.length === 0) return;\n      $images.each(function (imageEl) {\n        var $imageEl = $(imageEl);\n        $imageEl.addClass(params.loadingClass);\n        var background = $imageEl.attr('data-background');\n        var src = $imageEl.attr('data-src');\n        var srcset = $imageEl.attr('data-srcset');\n        var sizes = $imageEl.attr('data-sizes');\n        var $pictureEl = $imageEl.parent('picture');\n        swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {\n          if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n          if (background) {\n            $imageEl.css('background-image', \"url(\\\"\" + background + \"\\\")\");\n            $imageEl.removeAttr('data-background');\n          } else {\n            if (srcset) {\n              $imageEl.attr('srcset', srcset);\n              $imageEl.removeAttr('data-srcset');\n            }\n\n            if (sizes) {\n              $imageEl.attr('sizes', sizes);\n              $imageEl.removeAttr('data-sizes');\n            }\n\n            if ($pictureEl.length) {\n              $pictureEl.children('source').each(function (sourceEl) {\n                var $source = $(sourceEl);\n\n                if ($source.attr('data-srcset')) {\n                  $source.attr('srcset', $source.attr('data-srcset'));\n                  $source.removeAttr('data-srcset');\n                }\n              });\n            }\n\n            if (src) {\n              $imageEl.attr('src', src);\n              $imageEl.removeAttr('data-src');\n            }\n          }\n\n          $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n          $slideEl.find(\".\" + params.preloaderClass).remove();\n\n          if (swiper.params.loop && loadInDuplicate) {\n            var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n            if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n              var originalSlide = swiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + swiper.params.slideDuplicateClass + \")\");\n              swiper.lazy.loadInSlide(originalSlide.index(), false);\n            } else {\n              var duplicatedSlide = swiper.$wrapperEl.children(\".\" + swiper.params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\");\n              swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n            }\n          }\n\n          swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n          if (swiper.params.autoHeight) {\n            swiper.updateAutoHeight();\n          }\n        });\n        swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n      });\n    },\n    load: function load() {\n      var swiper = this;\n      var $wrapperEl = swiper.$wrapperEl,\n          swiperParams = swiper.params,\n          slides = swiper.slides,\n          activeIndex = swiper.activeIndex;\n      var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n      var params = swiperParams.lazy;\n      var slidesPerView = swiperParams.slidesPerView;\n\n      if (slidesPerView === 'auto') {\n        slidesPerView = 0;\n      }\n\n      function slideExist(index) {\n        if (isVirtual) {\n          if ($wrapperEl.children(\".\" + swiperParams.slideClass + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\").length) {\n            return true;\n          }\n        } else if (slides[index]) return true;\n\n        return false;\n      }\n\n      function slideIndex(slideEl) {\n        if (isVirtual) {\n          return $(slideEl).attr('data-swiper-slide-index');\n        }\n\n        return $(slideEl).index();\n      }\n\n      if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n\n      if (swiper.params.watchSlidesVisibility) {\n        $wrapperEl.children(\".\" + swiperParams.slideVisibleClass).each(function (slideEl) {\n          var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n          swiper.lazy.loadInSlide(index);\n        });\n      } else if (slidesPerView > 1) {\n        for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        swiper.lazy.loadInSlide(activeIndex);\n      }\n\n      if (params.loadPrevNext) {\n        if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n          var amount = params.loadPrevNextAmount;\n          var spv = slidesPerView;\n          var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n          var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n          for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) {\n            if (slideExist(_i)) swiper.lazy.loadInSlide(_i);\n          } // Prev Slides\n\n\n          for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) {\n            if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2);\n          }\n        } else {\n          var nextSlide = $wrapperEl.children(\".\" + swiperParams.slideNextClass);\n          if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n          var prevSlide = $wrapperEl.children(\".\" + swiperParams.slidePrevClass);\n          if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n        }\n      }\n    }\n  };\n  var Lazy$1 = {\n    name: 'lazy',\n    params: {\n      lazy: {\n        enabled: false,\n        loadPrevNext: false,\n        loadPrevNextAmount: 1,\n        loadOnTransitionStart: false,\n        elementClass: 'swiper-lazy',\n        loadingClass: 'swiper-lazy-loading',\n        loadedClass: 'swiper-lazy-loaded',\n        preloaderClass: 'swiper-lazy-preloader'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        lazy: _extends({\n          initialImageLoaded: false\n        }, Lazy)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n          swiper.params.preloadImages = false;\n        }\n      },\n      init: function init(swiper) {\n        if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n          swiper.lazy.load();\n        }\n      },\n      scroll: function scroll(swiper) {\n        if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n          swiper.lazy.load();\n        }\n      },\n      resize: function resize(swiper) {\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      scrollbarDragMove: function scrollbarDragMove(swiper) {\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      transitionStart: function transitionStart(swiper) {\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {\n            swiper.lazy.load();\n          }\n        }\n      },\n      transitionEnd: function transitionEnd(swiper) {\n        if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n          swiper.lazy.load();\n        }\n      },\n      slideChange: function slideChange(swiper) {\n        if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n          swiper.lazy.load();\n        }\n      }\n    }\n  };\n\n  var Controller = {\n    LinearSpline: function LinearSpline(x, y) {\n      var binarySearch = function search() {\n        var maxIndex;\n        var minIndex;\n        var guess;\n        return function (array, val) {\n          minIndex = -1;\n          maxIndex = array.length;\n\n          while (maxIndex - minIndex > 1) {\n            guess = maxIndex + minIndex >> 1;\n\n            if (array[guess] <= val) {\n              minIndex = guess;\n            } else {\n              maxIndex = guess;\n            }\n          }\n\n          return maxIndex;\n        };\n      }();\n\n      this.x = x;\n      this.y = y;\n      this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n      // (x1,y1) is the known point before given value,\n      // (x3,y3) is the known point after given value.\n\n      var i1;\n      var i3;\n\n      this.interpolate = function interpolate(x2) {\n        if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n        i3 = binarySearch(this.x, x2);\n        i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n        return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n      };\n\n      return this;\n    },\n    // xxx: for now i will just save one spline function to to\n    getInterpolateFunction: function getInterpolateFunction(c) {\n      var swiper = this;\n\n      if (!swiper.controller.spline) {\n        swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n      }\n    },\n    setTranslate: function setTranslate(_setTranslate, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var multiplier;\n      var controlledTranslate;\n      var Swiper = swiper.constructor;\n\n      function setControlledTranslate(c) {\n        // this will create an Interpolate function based on the snapGrids\n        // x is the Grid of the scrolled scroller and y will be the controlled scroller\n        // it makes sense to create this only once and recall it for the interpolation\n        // the function does a lot of value caching for performance\n        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n        if (swiper.params.controller.by === 'slide') {\n          swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n          // but it did not work out\n\n          controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n        }\n\n        if (!controlledTranslate || swiper.params.controller.by === 'container') {\n          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n          controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n        }\n\n        if (swiper.params.controller.inverse) {\n          controlledTranslate = c.maxTranslate() - controlledTranslate;\n        }\n\n        c.updateProgress(controlledTranslate);\n        c.setTranslate(controlledTranslate, swiper);\n        c.updateActiveIndex();\n        c.updateSlidesClasses();\n      }\n\n      if (Array.isArray(controlled)) {\n        for (var i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTranslate(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTranslate(controlled);\n      }\n    },\n    setTransition: function setTransition(duration, byController) {\n      var swiper = this;\n      var Swiper = swiper.constructor;\n      var controlled = swiper.controller.control;\n      var i;\n\n      function setControlledTransition(c) {\n        c.setTransition(duration, swiper);\n\n        if (duration !== 0) {\n          c.transitionStart();\n\n          if (c.params.autoHeight) {\n            nextTick(function () {\n              c.updateAutoHeight();\n            });\n          }\n\n          c.$wrapperEl.transitionEnd(function () {\n            if (!controlled) return;\n\n            if (c.params.loop && swiper.params.controller.by === 'slide') {\n              c.loopFix();\n            }\n\n            c.transitionEnd();\n          });\n        }\n      }\n\n      if (Array.isArray(controlled)) {\n        for (i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTransition(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTransition(controlled);\n      }\n    }\n  };\n  var Controller$1 = {\n    name: 'controller',\n    params: {\n      controller: {\n        control: undefined,\n        inverse: false,\n        by: 'slide' // or 'container'\n\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        controller: _extends({\n          control: swiper.params.controller.control\n        }, Controller)\n      });\n    },\n    on: {\n      update: function update(swiper) {\n        if (!swiper.controller.control) return;\n\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      resize: function resize(swiper) {\n        if (!swiper.controller.control) return;\n\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      observerUpdate: function observerUpdate(swiper) {\n        if (!swiper.controller.control) return;\n\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      setTranslate: function setTranslate(swiper, translate, byController) {\n        if (!swiper.controller.control) return;\n        swiper.controller.setTranslate(translate, byController);\n      },\n      setTransition: function setTransition(swiper, duration, byController) {\n        if (!swiper.controller.control) return;\n        swiper.controller.setTransition(duration, byController);\n      }\n    }\n  };\n\n  var A11y = {\n    makeElFocusable: function makeElFocusable($el) {\n      $el.attr('tabIndex', '0');\n      return $el;\n    },\n    makeElNotFocusable: function makeElNotFocusable($el) {\n      $el.attr('tabIndex', '-1');\n      return $el;\n    },\n    addElRole: function addElRole($el, role) {\n      $el.attr('role', role);\n      return $el;\n    },\n    addElLabel: function addElLabel($el, label) {\n      $el.attr('aria-label', label);\n      return $el;\n    },\n    disableEl: function disableEl($el) {\n      $el.attr('aria-disabled', true);\n      return $el;\n    },\n    enableEl: function enableEl($el) {\n      $el.attr('aria-disabled', false);\n      return $el;\n    },\n    onEnterKey: function onEnterKey(e) {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (e.keyCode !== 13) return;\n      var $targetEl = $(e.target);\n\n      if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n\n        if (swiper.isEnd) {\n          swiper.a11y.notify(params.lastSlideMessage);\n        } else {\n          swiper.a11y.notify(params.nextSlideMessage);\n        }\n      }\n\n      if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n        if (!(swiper.isBeginning && !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n\n        if (swiper.isBeginning) {\n          swiper.a11y.notify(params.firstSlideMessage);\n        } else {\n          swiper.a11y.notify(params.prevSlideMessage);\n        }\n      }\n\n      if (swiper.pagination && $targetEl.is(\".\" + swiper.params.pagination.bulletClass)) {\n        $targetEl[0].click();\n      }\n    },\n    notify: function notify(message) {\n      var swiper = this;\n      var notification = swiper.a11y.liveRegion;\n      if (notification.length === 0) return;\n      notification.html('');\n      notification.html(message);\n    },\n    updateNavigation: function updateNavigation() {\n      var swiper = this;\n      if (swiper.params.loop || !swiper.navigation) return;\n      var _swiper$navigation = swiper.navigation,\n          $nextEl = _swiper$navigation.$nextEl,\n          $prevEl = _swiper$navigation.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          swiper.a11y.disableEl($prevEl);\n          swiper.a11y.makeElNotFocusable($prevEl);\n        } else {\n          swiper.a11y.enableEl($prevEl);\n          swiper.a11y.makeElFocusable($prevEl);\n        }\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          swiper.a11y.disableEl($nextEl);\n          swiper.a11y.makeElNotFocusable($nextEl);\n        } else {\n          swiper.a11y.enableEl($nextEl);\n          swiper.a11y.makeElFocusable($nextEl);\n        }\n      }\n    },\n    updatePagination: function updatePagination() {\n      var swiper = this;\n      var params = swiper.params.a11y;\n\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.bullets.each(function (bulletEl) {\n          var $bulletEl = $(bulletEl);\n          swiper.a11y.makeElFocusable($bulletEl);\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n        });\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      swiper.$el.append(swiper.a11y.liveRegion); // Navigation\n\n      var params = swiper.params.a11y;\n      var $nextEl;\n      var $prevEl;\n\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n\n      if ($nextEl) {\n        swiper.a11y.makeElFocusable($nextEl);\n        swiper.a11y.addElRole($nextEl, 'button');\n        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n        $nextEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n\n      if ($prevEl) {\n        swiper.a11y.makeElFocusable($prevEl);\n        swiper.a11y.addElRole($prevEl, 'button');\n        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n        $prevEl.on('keydown', swiper.a11y.onEnterKey);\n      } // Pagination\n\n\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.on('keydown', \".\" + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n      var $nextEl;\n      var $prevEl;\n\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n\n      if ($nextEl) {\n        $nextEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n\n      if ($prevEl) {\n        $prevEl.off('keydown', swiper.a11y.onEnterKey);\n      } // Pagination\n\n\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.off('keydown', \".\" + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n      }\n    }\n  };\n  var A11y$1 = {\n    name: 'a11y',\n    params: {\n      a11y: {\n        enabled: true,\n        notificationClass: 'swiper-notification',\n        prevSlideMessage: 'Previous slide',\n        nextSlideMessage: 'Next slide',\n        firstSlideMessage: 'This is the first slide',\n        lastSlideMessage: 'This is the last slide',\n        paginationBulletMessage: 'Go to slide {{index}}'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        a11y: _extends(_extends({}, A11y), {}, {\n          liveRegion: $(\"<span class=\\\"\" + swiper.params.a11y.notificationClass + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")\n        })\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (!swiper.params.a11y.enabled) return;\n        swiper.a11y.init();\n        swiper.a11y.updateNavigation();\n      },\n      toEdge: function toEdge(swiper) {\n        if (!swiper.params.a11y.enabled) return;\n        swiper.a11y.updateNavigation();\n      },\n      fromEdge: function fromEdge(swiper) {\n        if (!swiper.params.a11y.enabled) return;\n        swiper.a11y.updateNavigation();\n      },\n      paginationUpdate: function paginationUpdate(swiper) {\n        if (!swiper.params.a11y.enabled) return;\n        swiper.a11y.updatePagination();\n      },\n      destroy: function destroy(swiper) {\n        if (!swiper.params.a11y.enabled) return;\n        swiper.a11y.destroy();\n      }\n    }\n  };\n\n  var History = {\n    init: function init() {\n      var swiper = this;\n      var window = getWindow();\n      if (!swiper.params.history) return;\n\n      if (!window.history || !window.history.pushState) {\n        swiper.params.history.enabled = false;\n        swiper.params.hashNavigation.enabled = true;\n        return;\n      }\n\n      var history = swiper.history;\n      history.initialized = true;\n      history.paths = History.getPathValues(swiper.params.url);\n      if (!history.paths.key && !history.paths.value) return;\n      history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n\n      if (!swiper.params.history.replaceState) {\n        window.addEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var window = getWindow();\n\n      if (!swiper.params.history.replaceState) {\n        window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    setHistoryPopState: function setHistoryPopState() {\n      var swiper = this;\n      swiper.history.paths = History.getPathValues(swiper.params.url);\n      swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n    },\n    getPathValues: function getPathValues(urlOverride) {\n      var window = getWindow();\n      var location;\n\n      if (urlOverride) {\n        location = new URL(urlOverride);\n      } else {\n        location = window.location;\n      }\n\n      var pathArray = location.pathname.slice(1).split('/').filter(function (part) {\n        return part !== '';\n      });\n      var total = pathArray.length;\n      var key = pathArray[total - 2];\n      var value = pathArray[total - 1];\n      return {\n        key: key,\n        value: value\n      };\n    },\n    setHistory: function setHistory(key, index) {\n      var swiper = this;\n      var window = getWindow();\n      if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n      var location;\n\n      if (swiper.params.url) {\n        location = new URL(swiper.params.url);\n      } else {\n        location = window.location;\n      }\n\n      var slide = swiper.slides.eq(index);\n      var value = History.slugify(slide.attr('data-history'));\n\n      if (!location.pathname.includes(key)) {\n        value = key + \"/\" + value;\n      }\n\n      var currentState = window.history.state;\n\n      if (currentState && currentState.value === value) {\n        return;\n      }\n\n      if (swiper.params.history.replaceState) {\n        window.history.replaceState({\n          value: value\n        }, null, value);\n      } else {\n        window.history.pushState({\n          value: value\n        }, null, value);\n      }\n    },\n    slugify: function slugify(text) {\n      return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n    },\n    scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n      var swiper = this;\n\n      if (value) {\n        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHistory = History.slugify(slide.attr('data-history'));\n\n          if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, runCallbacks);\n          }\n        }\n      } else {\n        swiper.slideTo(0, speed, runCallbacks);\n      }\n    }\n  };\n  var History$1 = {\n    name: 'history',\n    params: {\n      history: {\n        enabled: false,\n        replaceState: false,\n        key: 'slides'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        history: _extends({}, History)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (swiper.params.history.enabled) {\n          swiper.history.init();\n        }\n      },\n      destroy: function destroy(swiper) {\n        if (swiper.params.history.enabled) {\n          swiper.history.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd(swiper) {\n        if (swiper.history.initialized) {\n          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      },\n      slideChange: function slideChange(swiper) {\n        if (swiper.history.initialized && swiper.params.cssMode) {\n          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      }\n    }\n  };\n\n  var HashNavigation = {\n    onHashCange: function onHashCange() {\n      var swiper = this;\n      var document = getDocument();\n      swiper.emit('hashChange');\n      var newHash = document.location.hash.replace('#', '');\n      var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n      if (newHash !== activeSlideHash) {\n        var newIndex = swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-hash=\\\"\" + newHash + \"\\\"]\").index();\n        if (typeof newIndex === 'undefined') return;\n        swiper.slideTo(newIndex);\n      }\n    },\n    setHash: function setHash() {\n      var swiper = this;\n      var window = getWindow();\n      var document = getDocument();\n      if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n\n      if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n        window.history.replaceState(null, null, \"#\" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');\n        swiper.emit('hashSet');\n      } else {\n        var slide = swiper.slides.eq(swiper.activeIndex);\n        var hash = slide.attr('data-hash') || slide.attr('data-history');\n        document.location.hash = hash || '';\n        swiper.emit('hashSet');\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var document = getDocument();\n      var window = getWindow();\n      if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n      swiper.hashNavigation.initialized = true;\n      var hash = document.location.hash.replace('#', '');\n\n      if (hash) {\n        var speed = 0;\n\n        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n          if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n          }\n        }\n      }\n\n      if (swiper.params.hashNavigation.watchState) {\n        $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var window = getWindow();\n\n      if (swiper.params.hashNavigation.watchState) {\n        $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    }\n  };\n  var HashNavigation$1 = {\n    name: 'hash-navigation',\n    params: {\n      hashNavigation: {\n        enabled: false,\n        replaceState: false,\n        watchState: false\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        hashNavigation: _extends({\n          initialized: false\n        }, HashNavigation)\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.init();\n        }\n      },\n      destroy: function destroy(swiper) {\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd(swiper) {\n        if (swiper.hashNavigation.initialized) {\n          swiper.hashNavigation.setHash();\n        }\n      },\n      slideChange: function slideChange(swiper) {\n        if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n          swiper.hashNavigation.setHash();\n        }\n      }\n    }\n  };\n\n  var Autoplay = {\n    run: function run() {\n      var swiper = this;\n      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n      var delay = swiper.params.autoplay.delay;\n\n      if ($activeSlideEl.attr('data-swiper-autoplay')) {\n        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n      }\n\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = nextTick(function () {\n        if (swiper.params.autoplay.reverseDirection) {\n          if (swiper.params.loop) {\n            swiper.loopFix();\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.isBeginning) {\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else {\n            swiper.autoplay.stop();\n          }\n        } else if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isEnd) {\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n\n        if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n      }, delay);\n    },\n    start: function start() {\n      var swiper = this;\n      if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n      if (swiper.autoplay.running) return false;\n      swiper.autoplay.running = true;\n      swiper.emit('autoplayStart');\n      swiper.autoplay.run();\n      return true;\n    },\n    stop: function stop() {\n      var swiper = this;\n      if (!swiper.autoplay.running) return false;\n      if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n      if (swiper.autoplay.timeout) {\n        clearTimeout(swiper.autoplay.timeout);\n        swiper.autoplay.timeout = undefined;\n      }\n\n      swiper.autoplay.running = false;\n      swiper.emit('autoplayStop');\n      return true;\n    },\n    pause: function pause(speed) {\n      var swiper = this;\n      if (!swiper.autoplay.running) return;\n      if (swiper.autoplay.paused) return;\n      if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.paused = true;\n\n      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n        swiper.autoplay.paused = false;\n        swiper.autoplay.run();\n      } else {\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      }\n    },\n    onVisibilityChange: function onVisibilityChange() {\n      var swiper = this;\n      var document = getDocument();\n\n      if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n        swiper.autoplay.pause();\n      }\n\n      if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n        swiper.autoplay.run();\n        swiper.autoplay.paused = false;\n      }\n    },\n    onTransitionEnd: function onTransitionEnd(e) {\n      var swiper = this;\n      if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n      if (e.target !== swiper.$wrapperEl[0]) return;\n      swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      swiper.autoplay.paused = false;\n\n      if (!swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      } else {\n        swiper.autoplay.run();\n      }\n    }\n  };\n  var Autoplay$1 = {\n    name: 'autoplay',\n    params: {\n      autoplay: {\n        enabled: false,\n        delay: 3000,\n        waitForTransition: true,\n        disableOnInteraction: true,\n        stopOnLastSlide: false,\n        reverseDirection: false\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        autoplay: _extends(_extends({}, Autoplay), {}, {\n          running: false,\n          paused: false\n        })\n      });\n    },\n    on: {\n      init: function init(swiper) {\n        if (swiper.params.autoplay.enabled) {\n          swiper.autoplay.start();\n          var document = getDocument();\n          document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n        }\n      },\n      beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) {\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            swiper.autoplay.stop();\n          }\n        }\n      },\n      sliderFirstMove: function sliderFirstMove(swiper) {\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.pause();\n          }\n        }\n      },\n      touchEnd: function touchEnd(swiper) {\n        if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.run();\n        }\n      },\n      destroy: function destroy(swiper) {\n        if (swiper.autoplay.running) {\n          swiper.autoplay.stop();\n        }\n\n        var document = getDocument();\n        document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    }\n  };\n\n  var Fade = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = swiper.slides.eq(i);\n        var offset = $slideEl[0].swiperSlideOffset;\n        var tx = -offset;\n        if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n        var ty = 0;\n\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n        }\n\n        var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n        $slideEl.css({\n          opacity: slideOpacity\n        }).transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\");\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides,\n          $wrapperEl = swiper.$wrapperEl;\n      slides.transition(duration);\n\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        var eventTriggered = false;\n        slides.transitionEnd(function () {\n          if (eventTriggered) return;\n          if (!swiper || swiper.destroyed) return;\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n          for (var i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    }\n  };\n  var EffectFade = {\n    name: 'effect-fade',\n    params: {\n      fadeEffect: {\n        crossFade: false\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        fadeEffect: _extends({}, Fade)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (swiper.params.effect !== 'fade') return;\n        swiper.classNames.push(swiper.params.containerModifierClass + \"fade\");\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true\n        };\n        extend$1(swiper.params, overwriteParams);\n        extend$1(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (swiper.params.effect !== 'fade') return;\n        swiper.fadeEffect.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        if (swiper.params.effect !== 'fade') return;\n        swiper.fadeEffect.setTransition(duration);\n      }\n    }\n  };\n\n  var Cube = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el,\n          $wrapperEl = swiper.$wrapperEl,\n          slides = swiper.slides,\n          swiperWidth = swiper.width,\n          swiperHeight = swiper.height,\n          rtl = swiper.rtlTranslate,\n          swiperSize = swiper.size,\n          browser = swiper.browser;\n      var params = swiper.params.cubeEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      var wrapperRotate = 0;\n      var $cubeShadowEl;\n\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n            $wrapperEl.append($cubeShadowEl);\n          }\n\n          $cubeShadowEl.css({\n            height: swiperWidth + \"px\"\n          });\n        } else {\n          $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n            $el.append($cubeShadowEl);\n          }\n        }\n      }\n\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideIndex = i;\n\n        if (isVirtual) {\n          slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n        }\n\n        var slideAngle = slideIndex * 90;\n        var round = Math.floor(slideAngle / 360);\n\n        if (rtl) {\n          slideAngle = -slideAngle;\n          round = Math.floor(-slideAngle / 360);\n        }\n\n        var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        var tx = 0;\n        var ty = 0;\n        var tz = 0;\n\n        if (slideIndex % 4 === 0) {\n          tx = -round * 4 * swiperSize;\n          tz = 0;\n        } else if ((slideIndex - 1) % 4 === 0) {\n          tx = 0;\n          tz = -round * 4 * swiperSize;\n        } else if ((slideIndex - 2) % 4 === 0) {\n          tx = swiperSize + round * 4 * swiperSize;\n          tz = swiperSize;\n        } else if ((slideIndex - 3) % 4 === 0) {\n          tx = -swiperSize;\n          tz = 3 * swiperSize + swiperSize * 4 * round;\n        }\n\n        if (rtl) {\n          tx = -tx;\n        }\n\n        if (!isHorizontal) {\n          ty = tx;\n          tx = 0;\n        }\n\n        var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n\n        if (progress <= 1 && progress > -1) {\n          wrapperRotate = slideIndex * 90 + progress * 90;\n          if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n        }\n\n        $slideEl.transform(transform);\n\n        if (params.slideShadows) {\n          // Set shadows\n          var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n          if (shadowBefore.length === 0) {\n            shadowBefore = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\");\n            $slideEl.append(shadowBefore);\n          }\n\n          if (shadowAfter.length === 0) {\n            shadowAfter = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\");\n            $slideEl.append(shadowAfter);\n          }\n\n          if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n          if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n        }\n      }\n\n      $wrapperEl.css({\n        '-webkit-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n        '-moz-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n        '-ms-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n        'transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\"\n      });\n\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl.transform(\"translate3d(0px, \" + (swiperWidth / 2 + params.shadowOffset) + \"px, \" + -swiperWidth / 2 + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + params.shadowScale + \")\");\n        } else {\n          var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n          var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n          var scale1 = params.shadowScale;\n          var scale2 = params.shadowScale / multiplier;\n          var offset = params.shadowOffset;\n          $cubeShadowEl.transform(\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + (swiperHeight / 2 + offset) + \"px, \" + -swiperHeight / 2 / scale2 + \"px) rotateX(-90deg)\");\n        }\n      }\n\n      var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n      $wrapperEl.transform(\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\");\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var $el = swiper.$el,\n          slides = swiper.slides;\n      slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n      if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n        $el.find('.swiper-cube-shadow').transition(duration);\n      }\n    }\n  };\n  var EffectCube = {\n    name: 'effect-cube',\n    params: {\n      cubeEffect: {\n        slideShadows: true,\n        shadow: true,\n        shadowOffset: 20,\n        shadowScale: 0.94\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        cubeEffect: _extends({}, Cube)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (swiper.params.effect !== 'cube') return;\n        swiper.classNames.push(swiper.params.containerModifierClass + \"cube\");\n        swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          resistanceRatio: 0,\n          spaceBetween: 0,\n          centeredSlides: false,\n          virtualTranslate: true\n        };\n        extend$1(swiper.params, overwriteParams);\n        extend$1(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (swiper.params.effect !== 'cube') return;\n        swiper.cubeEffect.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        if (swiper.params.effect !== 'cube') return;\n        swiper.cubeEffect.setTransition(duration);\n      }\n    }\n  };\n\n  var Flip = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides,\n          rtl = swiper.rtlTranslate;\n\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var progress = $slideEl[0].progress;\n\n        if (swiper.params.flipEffect.limitRotation) {\n          progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        }\n\n        var offset = $slideEl[0].swiperSlideOffset;\n        var rotate = -180 * progress;\n        var rotateY = rotate;\n        var rotateX = 0;\n        var tx = -offset;\n        var ty = 0;\n\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n          rotateX = -rotateY;\n          rotateY = 0;\n        } else if (rtl) {\n          rotateY = -rotateY;\n        }\n\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n        if (swiper.params.flipEffect.slideShadows) {\n          // Set shadows\n          var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n          if (shadowBefore.length === 0) {\n            shadowBefore = $(\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"></div>\");\n            $slideEl.append(shadowBefore);\n          }\n\n          if (shadowAfter.length === 0) {\n            shadowAfter = $(\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'right' : 'bottom') + \"\\\"></div>\");\n            $slideEl.append(shadowAfter);\n          }\n\n          if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n          if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n        }\n\n        $slideEl.transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\");\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides,\n          activeIndex = swiper.activeIndex,\n          $wrapperEl = swiper.$wrapperEl;\n      slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        var eventTriggered = false; // eslint-disable-next-line\n\n        slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n          if (eventTriggered) return;\n          if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n          for (var i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    }\n  };\n  var EffectFlip = {\n    name: 'effect-flip',\n    params: {\n      flipEffect: {\n        slideShadows: true,\n        limitRotation: true\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        flipEffect: _extends({}, Flip)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (swiper.params.effect !== 'flip') return;\n        swiper.classNames.push(swiper.params.containerModifierClass + \"flip\");\n        swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true\n        };\n        extend$1(swiper.params, overwriteParams);\n        extend$1(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (swiper.params.effect !== 'flip') return;\n        swiper.flipEffect.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        if (swiper.params.effect !== 'flip') return;\n        swiper.flipEffect.setTransition(duration);\n      }\n    }\n  };\n\n  var Coverflow = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var swiperWidth = swiper.width,\n          swiperHeight = swiper.height,\n          slides = swiper.slides,\n          slidesSizesGrid = swiper.slidesSizesGrid;\n      var params = swiper.params.coverflowEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var transform = swiper.translate;\n      var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n      var rotate = isHorizontal ? params.rotate : -params.rotate;\n      var translate = params.depth; // Each slide offset from center\n\n      for (var i = 0, length = slides.length; i < length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideSize = slidesSizesGrid[i];\n        var slideOffset = $slideEl[0].swiperSlideOffset;\n        var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n        var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n        var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n        var translateZ = -translate * Math.abs(offsetMultiplier);\n        var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n        if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n          stretch = parseFloat(params.stretch) / 100 * slideSize;\n        }\n\n        var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n        var translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n        var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n        if (Math.abs(translateX) < 0.001) translateX = 0;\n        if (Math.abs(translateY) < 0.001) translateY = 0;\n        if (Math.abs(translateZ) < 0.001) translateZ = 0;\n        if (Math.abs(rotateY) < 0.001) rotateY = 0;\n        if (Math.abs(rotateX) < 0.001) rotateX = 0;\n        if (Math.abs(scale) < 0.001) scale = 0;\n        var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px)  rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg) scale(\" + scale + \")\";\n        $slideEl.transform(slideTransform);\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n        if (params.slideShadows) {\n          // Set shadows\n          var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n          if ($shadowBeforeEl.length === 0) {\n            $shadowBeforeEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\");\n            $slideEl.append($shadowBeforeEl);\n          }\n\n          if ($shadowAfterEl.length === 0) {\n            $shadowAfterEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\");\n            $slideEl.append($shadowAfterEl);\n          }\n\n          if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n          if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n        }\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n    }\n  };\n  var EffectCoverflow = {\n    name: 'effect-coverflow',\n    params: {\n      coverflowEffect: {\n        rotate: 50,\n        stretch: 0,\n        depth: 100,\n        scale: 1,\n        modifier: 1,\n        slideShadows: true\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        coverflowEffect: _extends({}, Coverflow)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        if (swiper.params.effect !== 'coverflow') return;\n        swiper.classNames.push(swiper.params.containerModifierClass + \"coverflow\");\n        swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      setTranslate: function setTranslate(swiper) {\n        if (swiper.params.effect !== 'coverflow') return;\n        swiper.coverflowEffect.setTranslate();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        if (swiper.params.effect !== 'coverflow') return;\n        swiper.coverflowEffect.setTransition(duration);\n      }\n    }\n  };\n\n  var Thumbs = {\n    init: function init() {\n      var swiper = this;\n      var thumbsParams = swiper.params.thumbs;\n      if (swiper.thumbs.initialized) return false;\n      swiper.thumbs.initialized = true;\n      var SwiperClass = swiper.constructor;\n\n      if (thumbsParams.swiper instanceof SwiperClass) {\n        swiper.thumbs.swiper = thumbsParams.swiper;\n        extend$1(swiper.thumbs.swiper.originalParams, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false\n        });\n        extend$1(swiper.thumbs.swiper.params, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false\n        });\n      } else if (isObject$1(thumbsParams.swiper)) {\n        swiper.thumbs.swiper = new SwiperClass(extend$1({}, thumbsParams.swiper, {\n          watchSlidesVisibility: true,\n          watchSlidesProgress: true,\n          slideToClickedSlide: false\n        }));\n        swiper.thumbs.swiperCreated = true;\n      }\n\n      swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n      swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n      return true;\n    },\n    onThumbClick: function onThumbClick() {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      var clickedIndex = thumbsSwiper.clickedIndex;\n      var clickedSlide = thumbsSwiper.clickedSlide;\n      if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n      if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n      var slideToIndex;\n\n      if (thumbsSwiper.params.loop) {\n        slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      } else {\n        slideToIndex = clickedIndex;\n      }\n\n      if (swiper.params.loop) {\n        var currentIndex = swiper.activeIndex;\n\n        if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n          swiper.loopFix(); // eslint-disable-next-line\n\n          swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n          currentIndex = swiper.activeIndex;\n        }\n\n        var prevIndex = swiper.slides.eq(currentIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\").eq(0).index();\n        var nextIndex = swiper.slides.eq(currentIndex).nextAll(\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\").eq(0).index();\n        if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n      }\n\n      swiper.slideTo(slideToIndex);\n    },\n    update: function update(initial) {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n      var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n      var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n      if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n        var currentThumbsIndex = thumbsSwiper.activeIndex;\n        var newThumbsIndex;\n        var direction;\n\n        if (thumbsSwiper.params.loop) {\n          if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n            thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n            thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n            currentThumbsIndex = thumbsSwiper.activeIndex;\n          } // Find actual thumbs index to slide to\n\n\n          var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n          var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n          if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex;\n          direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n        } else {\n          newThumbsIndex = swiper.realIndex;\n          direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n        }\n\n        if (useOffset) {\n          newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n        }\n\n        if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n          if (thumbsSwiper.params.centeredSlides) {\n            if (newThumbsIndex > currentThumbsIndex) {\n              newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n            } else {\n              newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n            }\n          } else if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n          }\n\n          thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n        }\n      } // Activate thumbs\n\n\n      var thumbsToActivate = 1;\n      var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n      if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n        thumbsToActivate = swiper.params.slidesPerView;\n      }\n\n      if (!swiper.params.thumbs.multipleActiveThumbs) {\n        thumbsToActivate = 1;\n      }\n\n      thumbsToActivate = Math.floor(thumbsToActivate);\n      thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n      if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n        for (var i = 0; i < thumbsToActivate; i += 1) {\n          thumbsSwiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\").addClass(thumbActiveClass);\n        }\n      } else {\n        for (var _i = 0; _i < thumbsToActivate; _i += 1) {\n          thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass);\n        }\n      }\n    }\n  };\n  var Thumbs$1 = {\n    name: 'thumbs',\n    params: {\n      thumbs: {\n        swiper: null,\n        multipleActiveThumbs: true,\n        autoScrollOffset: 0,\n        slideThumbActiveClass: 'swiper-slide-thumb-active',\n        thumbsContainerClass: 'swiper-container-thumbs'\n      }\n    },\n    create: function create() {\n      var swiper = this;\n      bindModuleMethods(swiper, {\n        thumbs: _extends({\n          swiper: null,\n          initialized: false\n        }, Thumbs)\n      });\n    },\n    on: {\n      beforeInit: function beforeInit(swiper) {\n        var thumbs = swiper.params.thumbs;\n        if (!thumbs || !thumbs.swiper) return;\n        swiper.thumbs.init();\n        swiper.thumbs.update(true);\n      },\n      slideChange: function slideChange(swiper) {\n        if (!swiper.thumbs.swiper) return;\n        swiper.thumbs.update();\n      },\n      update: function update(swiper) {\n        if (!swiper.thumbs.swiper) return;\n        swiper.thumbs.update();\n      },\n      resize: function resize(swiper) {\n        if (!swiper.thumbs.swiper) return;\n        swiper.thumbs.update();\n      },\n      observerUpdate: function observerUpdate(swiper) {\n        if (!swiper.thumbs.swiper) return;\n        swiper.thumbs.update();\n      },\n      setTransition: function setTransition(swiper, duration) {\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n        thumbsSwiper.setTransition(duration);\n      },\n      beforeDestroy: function beforeDestroy(swiper) {\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n\n        if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n          thumbsSwiper.destroy();\n        }\n      }\n    }\n  };\n\n  // Swiper Class\n  var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];\n  Swiper.use(components);\n\n  return Swiper;\n\n})));\n//# sourceMappingURL=swiper-bundle.js.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","\n/* \n *************************************\n * Scroll Lock\n * @https://gist.github.com/barneycarroll/6550066\n * @return {Void}\n *************************************\n */\n/*\n\t // Locks the page\n\t$.scrollLock( true );\n\t\n\t// Unlocks the page\n\t$.scrollLock( false );\n*/\n\n( function ( $ ) {\n    'use strict';\n\t$.scrollLock = ( function scrollLockClosure() {\n\t   \n\t\tvar $html      = $( 'html' ),\n\t\t\t// State: unlocked by default\n\t\t\tlocked     = false,\n\t\t\t// State: scroll to revert to\n\t\t\tprevScroll = {\n\t\t\t\tscrollLeft : $( window ).scrollLeft(),\n\t\t\t\tscrollTop  : $( window ).scrollTop()\n\t\t\t},\n\t\t\t// State: styles to revert to\n\t\t\tprevStyles = {},\n\t\t\tlockStyles = {\n\t\t\t\t'overflow-y' : 'scroll',\n\t\t\t\t'position'   : 'fixed',\n\t\t\t\t'width'      : '100%'\n\t\t\t};\n\t\n\t\t// Instantiate cache in case someone tries to unlock before locking\n\t\tsaveStyles();\n\t\n\t\t// Save context's inline styles in cache\n\t\tfunction saveStyles() {\n\t\t\tvar styleAttr = $html.attr( 'style' ),\n\t\t\t\tstyleStrs = [],\n\t\t\t\tstyleHash = {};\n\t\n\t\t\tif( !styleAttr ){\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tstyleStrs = styleAttr.split( /;\\s/ );\n\t\n\t\t\t$.each( styleStrs, function serializeStyleProp( styleString ){\n\t\t\t\tif( !styleString ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar keyValue = styleString.split( /\\s:\\s/ );\n\t\n\t\t\t\tif( keyValue.length < 2 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tstyleHash[ keyValue[ 0 ] ] = keyValue[ 1 ];\n\t\t\t} );\n\t\n\t\t\t$.extend( prevStyles, styleHash );\n\t\t}\n\t\n\t\tfunction lock() {\n\t\t\tvar appliedLock = {};\n\t\n\t\t\t// Duplicate execution will break DOM statefulness\n\t\t\tif( locked ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Save scroll state...\n\t\t\tprevScroll = {\n\t\t\t\tscrollLeft : $( window ).scrollLeft(),\n\t\t\t\tscrollTop  : $( window ).scrollTop()\n\t\t\t};\n\t\n\t\t\t// ...and styles\n\t\t\tsaveStyles();\n\t\n\t\t\t// Compose our applied CSS\n\t\t\t$.extend( appliedLock, lockStyles, {\n\t\t\t\t// And apply scroll state as styles\n\t\t\t\t'left' : - prevScroll.scrollLeft + 'px',\n\t\t\t\t'top'  : - prevScroll.scrollTop  + 'px'\n\t\t\t} );\n\t\n\t\t\t// Then lock styles...\n\t\t\t$html.css( appliedLock );\n\t\n\t\t\t// ...and scroll state\n\t\t\t$( window )\n\t\t\t\t.scrollLeft( 0 )\n\t\t\t\t.scrollTop( 0 );\n\t\n\t\t\tlocked = true;\n\t\t}\n\t\n\t\tfunction unlock() {\n\t\t\t// Duplicate execution will break DOM statefulness\n\t\t\tif( !locked ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Revert styles\n\t\t\t$html.attr( 'style', $( '<x>' ).css( prevStyles ).attr( 'style' ) || '' );\n\t\n\t\t\t// Revert scroll values\n\t\t\t$( window )\n\t\t\t\t.scrollLeft( prevScroll.scrollLeft )\n\t\t\t\t.scrollTop(  prevScroll.scrollTop );\n\t\n\t\t\tlocked = false;\n\t\t}\n\t\n\t\treturn function scrollLock( on ) {\n\t\t\t// If an argument is passed, lock or unlock depending on truthiness\n\t\t\tif( arguments.length ) {\n\t\t\t\tif( on ) {\n\t\t\t\t\tlock();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tunlock();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Otherwise, toggle\n\t\t\telse {\n\t\t\t\tif( locked ){\n\t\t\t\t\tunlock();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlock();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}() );\n\n}( jQuery ));\n","\n/* \n *************************************\n * Get all attributes of an element using jQuery\n *\n * @return {array}                        - Returns a new array.\n * @usage:\n \n\t$( '#demo' ).attr();  // { \"data-a\": \"1\", \"id\": \"b\" }\n\n *************************************\n */\n( function( old ) {\n\t$.fn.attr = function() {\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\tif ( this.length === 0 ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar obj = {};\n\t\t\t$.each( this[0].attributes, function() {\n\t\t\t\tif( this.specified ) {\n\t\t\t\t\tobj[this.name] = this.value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn obj;\n\n\t\t}\n\n\t\treturn old.apply(this, arguments);\n\t};\n} )( $.fn.attr );\n","\n/* \n *************************************\n * Parallax Effect\n *\n * @param  {Number} speed       - The speed of movement between elements.\n * @param  {String} transition  - Transition time can simulate easing effect.\n * @param  {Object} bg            - Specify the background display. Default value: { enable: true, xPos: '50%' }\n * @return {Void}\n *\n *************************************\n */\n\n( function ( $ ) {\n\t'use strict';\n    $.fn.UixParallax = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tspeed      : 0.25,\n\t\t\toffsetTop  : 0,\n            transition : 'all 0.4s cubic-bezier(0, 0, 0.34, 0.96) 0s',\n\t\t\tbg         : { enable: true, xPos: '50%' }\n        }, options );\n        \n        this.each( function() {\n\t\t\t\n\t\t\tlet bgEff      = settings.bg,\n\t\t\t\t$this      = $( this ),\n\t\t\t\tbgXpos     = '50%',\n\t\t\t\toffsetTop  = parseFloat( settings.offsetTop ),\n\t\t\t\tspeed      = -parseFloat( settings.speed );\n\t\t\t\n\t\t\n\t\t\tif ( bgEff ) {\n\t\t\t\tbgEff      = settings.bg.enable;\n\t\t\t\tbgXpos     = settings.bg.xPos;\n\t\t\t}\n\t\t\t\n\t\n\t\t\t//Prohibit transition delay\n\t\t\t$this.css( {\n\t\t\t\t'transition': 'none'\n\t\t\t} );\n\n            // Please do not use scroll's off method in each\n\t\t    $( window ).on( 'scroll.UixParallax touchmove.UixParallax', function( e ){\n\t\t\t\tscrollUpdate();\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t//Initialize the position of the background\n\t\t\tif ( bgEff ) {\n\t\t\t\t//background parallax\n\t\t\t\tTweenMax.set( $this, {\n\t\t\t\t\tbackgroundPosition: bgXpos + ' ' + (-$this[0].getBoundingClientRect().top*speed + (-offsetTop)) + 'px'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//element parallax\n\t\t\t\tTweenMax.set( $this, {\n\t\t\t\t\ty: 0\n\t\t\t\t});\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tfunction scrollUpdate() {\n\t\t\t\tconst spyTop = $this[0].getBoundingClientRect().top;\n         \n\t\t\t\tif ( bgEff ) {\n\t\t\t\t\t//background parallax\n\t\t\t\t\tTweenMax.set( $this, {\n                        css:{ \n                            'background-position': bgXpos + ' ' + ( 0 - ( spyTop * speed + offsetTop ) ) + 'px',\n                            'transition': settings.transition\n                        }\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t//element parallax\n\t\t\t\t\tTweenMax.set( $this, {\n                        css:{ \n                            'transform': 'matrix(1, 0, 0, 1, 0, '+( 0 - ( spyTop * speed + offsetTop ) )+')',\n                            'transition': settings.transition\n                        }\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n\n\n","\n/*\n * Render Custom Select\n *\n * @param  {String} selector             - The current selector.\n * @param  {String} targetWrapper        - Wrapper of the selector.\n * @param  {String} trigger              - Trigger of the selector.\n * @param  {String} itemsWrapper         - Selector's options container.\n * @param  {Element} item                 - Each option of the selector.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomSelect = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tselector         : '.uix-controls__select',\n\t\t\ttargetWrapper    : '.uix-controls__select-wrapper',\n\t\t\ttrigger          : '.uix-controls__select-trigger',\t\n\t\t\titemsWrapper     : '.uix-controls__select__option-container',\n\t\t\titem             : '.uix-controls__select__option'\n        }, options );\n \n        this.each( function() {\n\t\t\t\n\t\t\n\t\t\t$( settings.selector ).not( '.js-uix-new' ).each( function() {\n\n\t\t\t\tconst $this     = $( this );\n                \n\t\t\t\tconst classes   = $this.attr( 'class' ),\n\t\t\t\t\t  id        = $this.attr( 'id' ),\n\t\t\t\t\t  name      = $this.attr( 'name' ),\n                      labelText = $this.find( '> span' ).html(),\n\t\t\t\t\t  dataExist = $this.data( 'exist' );\n                \n\t\t\t\tlet\ttemplate  = '';\n\t\t\t\n\t\t\t\t\n\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\n\t\t\t\t\ttemplate  = '<div class=\"' + classes + ' js-uix-new\">';\n\t\t\t\t\ttemplate += '<span class=\"uix-controls__select-trigger\">' + $this.find( 'select' ).attr( 'placeholder' ) + '</span><ins class=\"uix-controls__bar\"></ins><ins class=\"uix-controls__basic-bar\"></ins>';\n\t\t\t\t\ttemplate += '<div role=\"presentation\" class=\"uix-controls__select__option-container\">';\n\n\t\t\t\t\t$this.find( 'select option' ).each( function( index ) {\n\n\t\t\t\t\t\tlet selected = '';\n\n\t\t\t\t\t\tif ( $( this ).is( ':selected' ) ) {\n\t\t\t\t\t\t\tselected = 'is-active';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttemplate += '<span role=\"option\" class=\"uix-controls__select__option '+selected+'\" data-value=\"' + $( this ).attr( 'value' ) + '\">' + $( this ).html() + '</span>';\n\t\t\t\t\t});\n\t\t\t\t\ttemplate += '</div></div>';\n\n\t\t\t\t\tif ( typeof labelText != typeof undefined && labelText != '' ) {\n\t\t\t\t\t\ttemplate += '<span class=\"uix-controls__select-label\">' + labelText + '</span>';\n\t\t\t\t\t}\n\n\n\t\t\t\t\t$this.wrap('<div class=\"'+ settings.targetWrapper.replace( '.', '' )+' '+( $this.hasClass( 'uix-controls--line' ) ? 'uix-controls--line' : '' )+' '+( $this.hasClass( 'is-fullwidth' ) ? 'is-fullwidth' : '' )+' '+( $this.hasClass( 'is-disabled' ) ? 'is-disabled' : '' )+'\"></div>');\n\t\t\t\t\t$this.hide();\n\t\t\t\t\t$this.after( template );\t\n\n\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$( this ).data( 'exist', 1 );\n\t\t\t\t}\n\n\n\t\t\t});\n\n\t\t\t//Show/Hide Selector\n\t\t\t$( document ).off( 'click.FORM_CUSTOM_SELECT' ).on( 'click.FORM_CUSTOM_SELECT', settings.trigger, function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst $selectWrapper    = $( this ).closest( settings.targetWrapper ),\n\t\t\t\t\t$selectCurWrapper = $selectWrapper.find( settings.selector + '.js-uix-new' );\n\n\t\t\t\t$selectCurWrapper.addClass( 'is-opened' );\n\n\t\t\t});\n\n\t\t\t//Do not add off() to this\n\t\t\t$( document.body ).on( 'click', function( e ) {\n\t\t\t\t\n\t\t\t\tif ( \n\t\t\t\t\te.target.className != '' && \n\t\t\t\t\ttypeof e.target.className != typeof undefined && \n\t\t\t\t\tObject.prototype.toString.call( e.target.className ) != '[object SVGAnimatedString]' \n\t\t\t\t) {\n\t\n\t\t\t\t\tif ( e.target.className.indexOf( 'uix-controls__select__option' ) < 0 ) {\n\t\t\t\t\t\t$( settings.selector + '.js-uix-new' ).removeClass( 'is-opened' );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t});\t\t\n\n\n\n\t\t\t//Set the default selector text\n\t\t\t$( settings.selector + '.js-uix-new' ).each( function( index ) {\n\t\t\t\t$( this ).find( settings.trigger ).text( $( this ).find( settings.item + '.is-active' ).html() );\n\t\t\t});\n\n\n\t\t\t//Change Event Here\n\t\t\t//Prevents the triggering of multiple change events\n\t\t\t$( document ).off( 'click.FORM_CUSTOM_SELECT_ITEM' ).on( 'click.FORM_CUSTOM_SELECT_ITEM', settings.item, function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst $selectWrapper    = $( this ).closest( settings.targetWrapper ),\n\t\t\t\t\t$selectCurWrapper = $selectWrapper.find( settings.selector + '.js-uix-new' ),\n\t\t\t\t\tcurVal            = $( this ).data( 'value' );\n\n\t\t\t\t//Close the selector\n\t\t\t\t$selectCurWrapper.removeClass( 'is-opened' );\n\n\t\t\t\t//Set the selector text\n\t\t\t\t$selectCurWrapper.find( settings.trigger ).text( $( this ).html() ).addClass( 'is-active' );\n\n\t\t\t\t//Activate this option\n\t\t\t\t$selectCurWrapper.find( settings.item ).removeClass( 'is-active' );\n\t\t\t\t$( this ).addClass( 'is-active' );\n\n\t\t\t\t//Set select option 'selected', by value\n\t\t\t\t$selectWrapper.find( 'select' ).val( curVal );\n\t\t\t\t$selectWrapper.find( 'select option' ).removeAttr( 'selected' );\n\t\t\t\t$selectWrapper.find( 'select option[value=\"'+curVal+'\"]' ).attr( 'selected', 'selected' ).change();\n\n\t\t\t});\n\n\n\n\t\t\t//Synchronize to the original select change event\n\t\t\t$( settings.selector ).not( '.js-uix-new' ).each( function() {\n\n\t\t\t\tconst $this       = $( this ).find( 'select' ),\n\t\t\t\t\t  $cusSelect  = $this.closest( settings.targetWrapper ).find( settings.selector + '.js-uix-new' );\n                \n\t\t\t\tlet\tnewOptions  = '';\n\n\n\t\t\t\t$this.closest( settings.targetWrapper ).find( 'select option' ).each( function( index ) {\n\n\t\t\t\t\tlet selected = '';\n\n\t\t\t\t\tif ( $( this ).is( ':selected' ) ) {\n\t\t\t\t\t\tselected = 'is-active';\n\t\t\t\t\t}\n\n\t\t\t\t\tnewOptions += '<span role=\"option\" class=\"uix-controls__select__option '+selected+'\" data-value=\"' + $( this ).attr( 'value' ) + '\">' + $( this ).html() + '</span>';\n\t\t\t\t});\n\n\n\t\t\t\t$cusSelect.find( settings.itemsWrapper ).html( '<div>' + newOptions + '</div>' );\n\n\n\t\t\t\t//Set the default selector text\n\t\t\t\t$cusSelect.each( function( index ) {\n\t\t\t\t\t$( this ).find( settings.trigger ).text( $( this ).find( settings.item + '.is-active' ).html() );\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/* \n *************************************\n * jQuery hashchange event - v1.3 - 7/21/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n * \n *************************************\n */\n\n(function($, window, undefined) {\n    '$:nomunge';\n\t\n\t\n  if ( typeof $.browser === typeof undefined ) {\n\tjQuery.browser = {};\n\t(function () {\n\t\tjQuery.browser.msie = false;\n\t\tjQuery.browser.version = 0;\n\t\tif (navigator.userAgent.match(/MSIE ([0-9]+)\\./)) {\n\t\t\tjQuery.browser.msie = true;\n\t\t\tjQuery.browser.version = RegExp.$1;\n\t\t}\n\t})();  \n  }\n\t\n\t\n\t\n    var str_hashchange = 'hashchange',\n    doc = document,\n    fake_onhashchange, special = $.event.special,\n    doc_mode = doc.documentMode,\n    supports_onhashchange = 'on' + str_hashchange in window && (doc_mode === undefined || doc_mode > 7);\n    function get_fragment(url) {\n        url = url || location.href;\n        return '#' + url.replace(/^[^#]*#?(.*)$/, '$1');\n    };\n    $.fn[str_hashchange] = function(fn) {\n        return fn ? this.bind(str_hashchange, fn) : this.trigger(str_hashchange);\n    };\n    $.fn[str_hashchange].delay = 50;\n    special[str_hashchange] = $.extend(special[str_hashchange], {\n        setup: function() {\n            if (supports_onhashchange) {\n                return false;\n            }\n            $(fake_onhashchange.start);\n        },\n        teardown: function() {\n            if (supports_onhashchange) {\n                return false;\n            }\n            $(fake_onhashchange.stop);\n        }\n    });\n    fake_onhashchange = (function() {\n        var self = {},\n        timeout_id, last_hash = get_fragment(),\n        fn_retval = function(val) {\n            return val;\n        },\n        history_set = fn_retval,\n        history_get = fn_retval;\n        self.start = function() {\n            timeout_id || poll();\n        };\n        self.stop = function() {\n            timeout_id && clearTimeout(timeout_id);\n            timeout_id = undefined;\n        };\n        function poll() {\n            var hash = get_fragment(),\n            history_hash = history_get(last_hash);\n            if (hash !== last_hash) {\n                history_set(last_hash = hash, history_hash);\n                $(window).trigger(str_hashchange);\n            } else if (history_hash !== last_hash) {\n                location.href = location.href.replace(/#.*/, '') + history_hash;\n            }\n            timeout_id = setTimeout(poll, $.fn[str_hashchange].delay);\n        };\n        $.browser.msie && !supports_onhashchange && (function() {\n            var iframe, iframe_src;\n            self.start = function() {\n                if (!iframe) {\n                    iframe_src = $.fn[str_hashchange].src;\n                    iframe_src = iframe_src && iframe_src + get_fragment();\n                    iframe = $('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one('load',\n                    function() {\n                        iframe_src || history_set(get_fragment());\n                        poll();\n                    }).attr('src', iframe_src || 'javascript:0').insertAfter('body')[0].contentWindow;\n                    doc.onpropertychange = function() {\n                        try {\n                            if (event.propertyName === 'title') {\n                                iframe.document.title = doc.title;\n                            }\n                        } catch(e) {}\n                    };\n                }\n            };\n            self.stop = fn_retval;\n            history_get = function() {\n                return get_fragment(iframe.location.href);\n            };\n            history_set = function(hash, history_hash) {\n                var iframe_doc = iframe.document,\n                domain = $.fn[str_hashchange].domain;\n                if (hash !== history_hash) {\n                    iframe_doc.title = doc.title;\n                    iframe_doc.open();\n                    domain && iframe_doc.write('<script>document.domain=\"' + domain + '\"</script>');\n                    iframe_doc.close();\n                    iframe.location.hash = hash;\n                }\n            };\n        })();\n        return self;\n    })();\n})(jQuery, this);\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\n/* \n *************************************\n * Count To\n *\n * @param  {Number} fixed              - formats a number using fixed-point notation.\n * @param  {Number} from                 - the number the element should start at\n * @param  {Number} number               - the number the element should end at\n * @param  {Number} duration             - how long it should take to count between the target numbers\n * @param  {Number} refreshInterval      - how often the element should be updated\n * @param  {Boolean} dilimiter           - the number of decimal places to show\n * @param  {Function} onUpdate           - callback method for every time the element is updated\n * @param  {Function} onComplete         - callback method for when the element finishes updating,\n * @param  {Boolean} doubleDigits        - two digits are used by default\n * @return {Void}\n *\n *************************************\n */\n(function ($) {\n\t$.fn.UixCountTo = function (options) {\n\t\toptions = options || {};\n\t\t\n\t\treturn $(this).each(function () {\n\t\t\t// set options for current element\n\t\t\tconst settings = $.extend({}, $.fn.UixCountTo.defaults, {\n\t\t\t\tfrom            : $( this ).data( 'counter-start' ),\n\t\t\t\tto              : $( this ).data( 'counter-number' ),\n                fixed           : $( this ).data( 'counter-fixed' ),\n\t\t\t\tspeed           : $( this ).data( 'counter-duration' ),\n\t\t\t\trefreshInterval : $( this ).data( 'counter-refresh-interval' ),\n\t\t\t\tdilimiter       : $( this ).data( 'counter-dilimiter' ),\n\t\t\t\tdoubleDigits    : $( this ).data( 'counter-double-digits' )\n\t\t\t}, options);\n            \n            \n\t\t\t\n\t\t\t// how many times to update the value, and how much to increment the value on each update\n\t\t\tlet loops = Math.ceil(settings.speed / settings.refreshInterval),\n\t\t\t\tincrement = (settings.to - settings.from) / loops;\n            \n       \n\t\t\t\n\t\t\t// references & variables that will change with each update\n\t\t\tlet self      = this,\n\t\t\t\t$self     = $( this ),\n\t\t\t\tloopCount = 0,\n\t\t\t\tvalue     = settings.from,\n\t\t\t\tdata      = $self.data('count-to') || {};\n\t\t\t\n\t\t\t$self.data('count-to', data);\n\t\t\t\n\t\t\t// if an existing interval can be found, clear it first\n\t\t\tif (data.interval) {\n\t\t\t\tclearInterval(data.interval);\n\t\t\t}\n\t\t\tdata.interval = setInterval(updateTimer, settings.refreshInterval);\n\t\t\t\n\t\t\t// initialize the element with the starting value\n\t\t\trender(value);\n\t\t\t\n\t\t\tfunction updateTimer() {\n\t\t\t\tvalue += increment;\n\t\t\t\tloopCount++;\n\t\t\t\t\n\t\t\t\trender(value);\n\t\t\t\t\n\t\t\t\tif (typeof(settings.onUpdate) == 'function') {\n\t\t\t\t\tsettings.onUpdate.call(self, value);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (loopCount >= loops) {\n\t\t\t\t\t// remove the interval\n\t\t\t\t\t$self.removeData('count-to');\n\t\t\t\t\tclearInterval(data.interval);\n\t\t\t\t\tvalue = settings.to;\n\t\t\t\t\t\n\t\t\t\t\tif (typeof(settings.onComplete) == 'function') {\n\t\t\t\t\t\tsettings.onComplete.call(self, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfunction render( value ) {\n\t\t\t\tlet formattedValue = Number( value ).toFixed( settings.fixed );\n                \n\t\t\t\t\n\t\t\t\tif ( settings.dilimiter && formattedValue > 0 ) {\n\t\t\t\t\tformattedValue = formattedValue.toString().replace(/\\B(?=(?:\\d{3})+\\b)/g, ',');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (settings.doubleDigits) {\n\t\t\t\t\tif ( formattedValue < 10 ) {\n\t\t\t\t\t\tformattedValue = '0' + formattedValue;\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t$self.html( formattedValue );\n\t\t\t}\n\t\t});\n\t};\n\t\n\t$.fn.UixCountTo.defaults = {\n        fixed          : 0,           // formats a number using fixed-point notation.\n\t\tfrom           : 0,            // the number the element should start at\n\t\tnumber         : 0,            // the number the element should end at\n\t\tduration       : 500,         // how long it should take to count between the target numbers\n\t\trefreshInterval: 1,           // how often the element should be updated\n\t\tdilimiter      : true,        // the number of decimal places to show\n\t\tonUpdate       : null,        // callback method for every time the element is updated\n\t\tonComplete     : null,       // callback method for when the element finishes updating,\n\t\tdoubleDigits   : false       // two digits are used by default\n\t};\n\t\n\t\n}(jQuery));","/*\n * jQuery FlexSlider v2.7.0\n * Copyright 2012 WooThemes\n * Contributing Author: Tyler Smith\n */\n(function ($) {\n\n  var focused = true;\n\n  //FlexSlider: Object Instance\n  $.flexslider = function(el, options) {\n    var slider = $(el);\n\n    // making variables public\n\n    //if rtl value was not passed and html is in rtl..enable it by default.\n  \tif(typeof options.rtl=='undefined' && $('html').attr('dir')=='rtl'){\n  \t\toptions.rtl=true;\n    }\n    slider.vars = $.extend({}, $.flexslider.defaults, options);\n\n    var namespace = slider.vars.namespace,\n        msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,\n        touch = (( \"ontouchstart\" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,\n        // deprecating this idea, as devices are being released with both of these events\n        eventType = \"click touchend MSPointerUp keyup\",\n        watchedEvent = \"\",\n        watchedEventClearTimer,\n        vertical = slider.vars.direction === \"vertical\",\n        reverse = slider.vars.reverse,\n        carousel = (slider.vars.itemWidth > 0),\n        fade = slider.vars.animation === \"fade\",\n        asNav = slider.vars.asNavFor !== \"\",\n        methods = {};\n\n    // Store a reference to the slider object\n    $.data(el, \"flexslider\", slider);\n\n    // Private slider methods\n    methods = {\n      init: function() {\n        slider.animating = false;\n        // Get current slide and make sure it is a number\n        slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );\n        if ( isNaN( slider.currentSlide ) ) { slider.currentSlide = 0; }\n        slider.animatingTo = slider.currentSlide;\n        slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);\n        slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));\n        slider.slides = $(slider.vars.selector, slider);\n        slider.container = $(slider.containerSelector, slider);\n        slider.count = slider.slides.length;\n        // SYNC:\n        slider.syncExists = $(slider.vars.sync).length > 0;\n        // SLIDE:\n        if (slider.vars.animation === \"slide\") { slider.vars.animation = \"swing\"; }\n        slider.prop = (vertical) ? \"top\" : ( slider.vars.rtl ? \"marginRight\" : \"marginLeft\" );\n        slider.args = {};\n        // SLIDESHOW:\n        slider.manualPause = false;\n        slider.stopped = false;\n        //PAUSE WHEN INVISIBLE\n        slider.started = false;\n        slider.startTimeout = null;\n        // TOUCH/USECSS:\n        slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {\n          var obj = document.createElement('div'),\n              props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];\n          for (var i in props) {\n            if ( obj.style[ props[i] ] !== undefined ) {\n              slider.pfx = props[i].replace('Perspective','').toLowerCase();\n              slider.prop = \"-\" + slider.pfx + \"-transform\";\n              return true;\n            }\n          }\n          return false;\n        }());\n        slider.ensureAnimationEnd = '';\n        // CONTROLSCONTAINER:\n        if (slider.vars.controlsContainer !== \"\") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);\n        // MANUAL:\n        if (slider.vars.manualControls !== \"\") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);\n\n        // CUSTOM DIRECTION NAV:\n        if (slider.vars.customDirectionNav !== \"\") slider.customDirectionNav = $(slider.vars.customDirectionNav).length === 2 && $(slider.vars.customDirectionNav);\n\n        // RANDOMIZE:\n        if (slider.vars.randomize) {\n          slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });\n          slider.container.empty().append(slider.slides);\n        }\n\n        slider.doMath();\n\n        // INIT\n        slider.setup(\"init\");\n\n        // CONTROLNAV:\n        if (slider.vars.controlNav) { methods.controlNav.setup(); }\n\n        // DIRECTIONNAV:\n        if (slider.vars.directionNav) { methods.directionNav.setup(); }\n\n        // KEYBOARD:\n        if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {\n          $(document).bind('keyup', function(event) {\n            var keycode = event.keyCode;\n            if (!slider.animating && (keycode === 39 || keycode === 37)) {\n              var target = (slider.vars.rtl?\n                                ((keycode === 37) ? slider.getTarget('next') :\n                                (keycode === 39) ? slider.getTarget('prev') : false)\n                                :\n                                ((keycode === 39) ? slider.getTarget('next') :\n                                (keycode === 37) ? slider.getTarget('prev') : false)\n                                )\n                                ;\n              slider.flexAnimate(target, slider.vars.pauseOnAction);\n            }\n          });\n        }\n        // MOUSEWHEEL:\n        if (slider.vars.mousewheel) {\n          slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {\n            event.preventDefault();\n            var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');\n            slider.flexAnimate(target, slider.vars.pauseOnAction);\n          });\n        }\n\n        // PAUSEPLAY\n        if (slider.vars.pausePlay) { methods.pausePlay.setup(); }\n\n        //PAUSE WHEN INVISIBLE\n        if (slider.vars.slideshow && slider.vars.pauseInvisible) { methods.pauseInvisible.init(); }\n\n        // SLIDSESHOW\n        if (slider.vars.slideshow) {\n          if (slider.vars.pauseOnHover) {\n            slider.hover(function() {\n              if (!slider.manualPlay && !slider.manualPause) { slider.pause(); }\n            }, function() {\n              if (!slider.manualPause && !slider.manualPlay && !slider.stopped) { slider.play(); }\n            });\n          }\n          // initialize animation\n          //If we're visible, or we don't use PageVisibility API\n          if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {\n            (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();\n          }\n        }\n\n        // ASNAV:\n        if (asNav) { methods.asNav.setup(); }\n\n        // TOUCH\n        if (touch && slider.vars.touch) { methods.touch(); }\n\n        // FADE&&SMOOTHHEIGHT || SLIDE:\n        if (!fade || (fade && slider.vars.smoothHeight)) { $(window).bind(\"resize orientationchange focus\", methods.resize); }\n\n        slider.find(\"img\").attr(\"draggable\", \"false\");\n\n        // API: start() Callback\n        setTimeout(function(){\n          slider.vars.start(slider);\n        }, 200);\n      },\n      asNav: {\n        setup: function() {\n          slider.asNav = true;\n          slider.animatingTo = Math.floor(slider.currentSlide/slider.move);\n          slider.currentItem = slider.currentSlide;\n          slider.slides.removeClass(namespace + \"active-slide\").eq(slider.currentItem).addClass(namespace + \"active-slide\");\n          if(!msGesture){\n              slider.slides.on(eventType, function(e){\n                e.preventDefault();\n                var $slide = $(this),\n                    target = $slide.index();\n        \t\t\t\tvar posFromX;\n                if(slider.vars.rtl){\n        \t\t\t\t\tposFromX = -1*($slide.offset().right - $(slider).scrollLeft()); // Find position of slide relative to right of slider container\n        \t\t\t\t}\n        \t\t\t\telse\n        \t\t\t\t{\n        \t\t\t\t\tposFromX = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container\n        \t\t\t\t}\n                if( posFromX <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {\n                  slider.flexAnimate(slider.getTarget(\"prev\"), true);\n                } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + \"active-slide\")) {\n                  slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\n                  slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);\n                }\n              });\n          }else{\n              el._slider = slider;\n              slider.slides.each(function (){\n                  var that = this;\n                  that._gesture = new MSGesture();\n                  that._gesture.target = that;\n                  that.addEventListener(\"MSPointerDown\", function (e){\n                      e.preventDefault();\n                      if(e.currentTarget._gesture) {\n                        e.currentTarget._gesture.addPointer(e.pointerId);\n                      }\n                  }, false);\n                  that.addEventListener(\"MSGestureTap\", function (e){\n                      e.preventDefault();\n                      var $slide = $(this),\n                          target = $slide.index();\n                      if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {\n                          slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\n                          slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);\n                      }\n                  });\n              });\n          }\n        }\n      },\n      controlNav: {\n        setup: function() {\n          if (!slider.manualControls) {\n            methods.controlNav.setupPaging();\n          } else { // MANUALCONTROLS:\n            methods.controlNav.setupManual();\n          }\n        },\n        setupPaging: function() {\n          var type = (slider.vars.controlNav === \"thumbnails\") ? 'control-thumbs' : 'control-paging',\n              j = 1,\n              item,\n              slide;\n\n          slider.controlNavScaffold = $('<ol class=\"'+ namespace + 'control-nav ' + namespace + type + '\"></ol>');\n\n          if (slider.pagingCount > 1) {\n            for (var i = 0; i < slider.pagingCount; i++) {\n              slide = slider.slides.eq(i);\n              if ( undefined === slide.attr( 'data-thumb-alt' ) ) { slide.attr( 'data-thumb-alt', '' ); }\n              var altText = ( '' !== slide.attr( 'data-thumb-alt' ) ) ? altText = ' alt=\"' + slide.attr( 'data-thumb-alt' ) + '\"' : '';\n              item = (slider.vars.controlNav === \"thumbnails\") ? '<img src=\"' + slide.attr( 'data-thumb' ) + '\"' + altText + '/>' : '<a href=\"#\">' + j + '</a>';\n              if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {\n                var captn = slide.attr( 'data-thumbcaption' );\n                if ( '' !== captn && undefined !== captn ) { item += '<span class=\"' + namespace + 'caption\">' + captn + '</span>'; }\n              }\n              slider.controlNavScaffold.append('<li>' + item + '</li>');\n              j++;\n            }\n          }\n\n          // CONTROLSCONTAINER:\n          (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);\n          methods.controlNav.set();\n\n          methods.controlNav.active();\n\n          slider.controlNavScaffold.delegate('a, img', eventType, function(event) {\n            event.preventDefault();\n\n            if (watchedEvent === \"\" || watchedEvent === event.type) {\n              var $this = $(this),\n                  target = slider.controlNav.index($this);\n\n              if (!$this.hasClass(namespace + 'active')) {\n                slider.direction = (target > slider.currentSlide) ? \"next\" : \"prev\";\n                slider.flexAnimate(target, slider.vars.pauseOnAction);\n              }\n            }\n\n            // setup flags to prevent event duplication\n            if (watchedEvent === \"\") {\n              watchedEvent = event.type;\n            }\n            methods.setToClearWatchedEvent();\n\n          });\n        },\n        setupManual: function() {\n          slider.controlNav = slider.manualControls;\n          methods.controlNav.active();\n\n          slider.controlNav.bind(eventType, function(event) {\n            event.preventDefault();\n\n            if (watchedEvent === \"\" || watchedEvent === event.type) {\n              var $this = $(this),\n                  target = slider.controlNav.index($this);\n\n              if (!$this.hasClass(namespace + 'active')) {\n                (target > slider.currentSlide) ? slider.direction = \"next\" : slider.direction = \"prev\";\n                slider.flexAnimate(target, slider.vars.pauseOnAction);\n              }\n            }\n\n            // setup flags to prevent event duplication\n            if (watchedEvent === \"\") {\n              watchedEvent = event.type;\n            }\n            methods.setToClearWatchedEvent();\n          });\n        },\n        set: function() {\n          var selector = (slider.vars.controlNav === \"thumbnails\") ? 'img' : 'a';\n          slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);\n        },\n        active: function() {\n          slider.controlNav.removeClass(namespace + \"active\").eq(slider.animatingTo).addClass(namespace + \"active\");\n        },\n        update: function(action, pos) {\n          if (slider.pagingCount > 1 && action === \"add\") {\n            slider.controlNavScaffold.append($('<li><a href=\"#\">' + slider.count + '</a></li>'));\n          } else if (slider.pagingCount === 1) {\n            slider.controlNavScaffold.find('li').remove();\n          } else {\n            slider.controlNav.eq(pos).closest('li').remove();\n          }\n          methods.controlNav.set();\n          (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();\n        }\n      },\n      directionNav: {\n        setup: function() {\n          var directionNavScaffold = $('<ul class=\"' + namespace + 'direction-nav\"><li class=\"' + namespace + 'nav-prev\"><a class=\"' + namespace + 'prev\" href=\"#\">' + slider.vars.prevText + '</a></li><li class=\"' + namespace + 'nav-next\"><a class=\"' + namespace + 'next\" href=\"#\">' + slider.vars.nextText + '</a></li></ul>');\n\n          // CUSTOM DIRECTION NAV:\n          if (slider.customDirectionNav) {\n            slider.directionNav = slider.customDirectionNav;\n          // CONTROLSCONTAINER:\n          } else if (slider.controlsContainer) {\n            $(slider.controlsContainer).append(directionNavScaffold);\n            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);\n          } else {\n            slider.append(directionNavScaffold);\n            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);\n          }\n\n          methods.directionNav.update();\n\n          slider.directionNav.bind(eventType, function(event) {\n            event.preventDefault();\n            var target;\n\n            if (watchedEvent === \"\" || watchedEvent === event.type) {\n              target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');\n              slider.flexAnimate(target, slider.vars.pauseOnAction);\n            }\n\n            // setup flags to prevent event duplication\n            if (watchedEvent === \"\") {\n              watchedEvent = event.type;\n            }\n            methods.setToClearWatchedEvent();\n          });\n        },\n        update: function() {\n          var disabledClass = namespace + 'disabled';\n          if (slider.pagingCount === 1) {\n            slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');\n          } else if (!slider.vars.animationLoop) {\n            if (slider.animatingTo === 0) {\n              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + \"prev\").addClass(disabledClass).attr('tabindex', '-1');\n            } else if (slider.animatingTo === slider.last) {\n              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + \"next\").addClass(disabledClass).attr('tabindex', '-1');\n            } else {\n              slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');\n            }\n          } else {\n            slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');\n          }\n        }\n      },\n      pausePlay: {\n        setup: function() {\n          var pausePlayScaffold = $('<div class=\"' + namespace + 'pauseplay\"><a href=\"#\"></a></div>');\n\n          // CONTROLSCONTAINER:\n          if (slider.controlsContainer) {\n            slider.controlsContainer.append(pausePlayScaffold);\n            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);\n          } else {\n            slider.append(pausePlayScaffold);\n            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);\n          }\n\n          methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');\n\n          slider.pausePlay.bind(eventType, function(event) {\n            event.preventDefault();\n\n            if (watchedEvent === \"\" || watchedEvent === event.type) {\n              if ($(this).hasClass(namespace + 'pause')) {\n                slider.manualPause = true;\n                slider.manualPlay = false;\n                slider.pause();\n              } else {\n                slider.manualPause = false;\n                slider.manualPlay = true;\n                slider.play();\n              }\n            }\n\n            // setup flags to prevent event duplication\n            if (watchedEvent === \"\") {\n              watchedEvent = event.type;\n            }\n            methods.setToClearWatchedEvent();\n          });\n        },\n        update: function(state) {\n          (state === \"play\") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText);\n        }\n      },\n      touch: function() {\n        var startX,\n          startY,\n          offset,\n          cwidth,\n          dx,\n          startT,\n          onTouchStart,\n          onTouchMove,\n          onTouchEnd,\n          scrolling = false,\n          localX = 0,\n          localY = 0,\n          accDx = 0;\n\n        if(!msGesture){\n            onTouchStart = function(e) {\n              if (slider.animating) {\n                e.preventDefault();\n              } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {\n                slider.pause();\n                // CAROUSEL:\n                cwidth = (vertical) ? slider.h : slider. w;\n                startT = Number(new Date());\n                // CAROUSEL:\n\n                // Local vars for X and Y points.\n                localX = e.touches[0].pageX;\n                localY = e.touches[0].pageY;\n\n                offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :\n                         (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\n                         (carousel && slider.currentSlide === slider.last) ? slider.limit :\n                         (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :\n                         (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;\n                startX = (vertical) ? localY : localX;\n                startY = (vertical) ? localX : localY;\n                el.addEventListener('touchmove', onTouchMove, false);\n                el.addEventListener('touchend', onTouchEnd, false);\n              }\n            };\n\n            onTouchMove = function(e) {\n              // Local vars for X and Y points.\n\n              localX = e.touches[0].pageX;\n              localY = e.touches[0].pageY;\n\n              dx = (vertical) ? startX - localY : (slider.vars.rtl?-1:1)*(startX - localX);\n              scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));\n              var fxms = 500;\n\n              if ( ! scrolling || Number( new Date() ) - startT > fxms ) {\n                e.preventDefault();\n                if (!fade && slider.transitions) {\n                  if (!slider.vars.animationLoop) {\n                    dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);\n                  }\n                  slider.setProps(offset + dx, \"setTouch\");\n                }\n              }\n            };\n\n            onTouchEnd = function(e) {\n              // finish the touch by undoing the touch session\n              el.removeEventListener('touchmove', onTouchMove, false);\n\n              if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {\n                var updateDx = (reverse) ? -dx : dx,\n                    target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');\n\n                if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {\n                  slider.flexAnimate(target, slider.vars.pauseOnAction);\n                } else {\n                  if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }\n                }\n              }\n              el.removeEventListener('touchend', onTouchEnd, false);\n\n              startX = null;\n              startY = null;\n              dx = null;\n              offset = null;\n            };\n\n            el.addEventListener('touchstart', onTouchStart, false);\n        }else{\n            el.style.msTouchAction = \"none\";\n            el._gesture = new MSGesture();\n            el._gesture.target = el;\n            el.addEventListener(\"MSPointerDown\", onMSPointerDown, false);\n            el._slider = slider;\n            el.addEventListener(\"MSGestureChange\", onMSGestureChange, false);\n            el.addEventListener(\"MSGestureEnd\", onMSGestureEnd, false);\n\n            function onMSPointerDown(e){\n                e.stopPropagation();\n                if (slider.animating) {\n                    e.preventDefault();\n                }else{\n                    slider.pause();\n                    el._gesture.addPointer(e.pointerId);\n                    accDx = 0;\n                    cwidth = (vertical) ? slider.h : slider. w;\n                    startT = Number(new Date());\n                    // CAROUSEL:\n\n                    offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :\n                        (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\n                            (carousel && slider.currentSlide === slider.last) ? slider.limit :\n                                (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :\n                                    (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;\n                }\n            }\n\n            function onMSGestureChange(e) {\n                e.stopPropagation();\n                var slider = e.target._slider;\n                if(!slider){\n                    return;\n                }\n                var transX = -e.translationX,\n                    transY = -e.translationY;\n\n                //Accumulate translations.\n                accDx = accDx + ((vertical) ? transY : transX);\n                dx = (slider.vars.rtl?-1:1)*accDx;\n                scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));\n\n                if(e.detail === e.MSGESTURE_FLAG_INERTIA){\n                    setImmediate(function (){\n                        el._gesture.stop();\n                    });\n\n                    return;\n                }\n\n                if (!scrolling || Number(new Date()) - startT > 500) {\n                    e.preventDefault();\n                    if (!fade && slider.transitions) {\n                        if (!slider.vars.animationLoop) {\n                            dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);\n                        }\n                        slider.setProps(offset + dx, \"setTouch\");\n                    }\n                }\n            }\n\n            function onMSGestureEnd(e) {\n                e.stopPropagation();\n                var slider = e.target._slider;\n                if(!slider){\n                    return;\n                }\n                if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {\n                    var updateDx = (reverse) ? -dx : dx,\n                        target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');\n\n                    if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {\n                        slider.flexAnimate(target, slider.vars.pauseOnAction);\n                    } else {\n                        if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }\n                    }\n                }\n\n                startX = null;\n                startY = null;\n                dx = null;\n                offset = null;\n                accDx = 0;\n            }\n        }\n      },\n      resize: function() {\n        if (!slider.animating && slider.is(':visible')) {\n          if (!carousel) { slider.doMath(); }\n\n          if (fade) {\n            // SMOOTH HEIGHT:\n            methods.smoothHeight();\n          } else if (carousel) { //CAROUSEL:\n            slider.slides.width(slider.computedW);\n            slider.update(slider.pagingCount);\n            slider.setProps();\n          }\n          else if (vertical) { //VERTICAL:\n            slider.viewport.height(slider.h);\n            slider.setProps(slider.h, \"setTotal\");\n          } else {\n            // SMOOTH HEIGHT:\n            if (slider.vars.smoothHeight) { methods.smoothHeight(); }\n            slider.newSlides.width(slider.computedW);\n            slider.setProps(slider.computedW, \"setTotal\");\n          }\n        }\n      },\n      smoothHeight: function(dur) {\n        if (!vertical || fade) {\n          var $obj = (fade) ? slider : slider.viewport;\n          (dur) ? $obj.animate({\"height\": slider.slides.eq(slider.animatingTo).innerHeight()}, dur) : $obj.innerHeight(slider.slides.eq(slider.animatingTo).innerHeight());\n        }\n      },\n      sync: function(action) {\n        var $obj = $(slider.vars.sync).data(\"flexslider\"),\n            target = slider.animatingTo;\n\n        switch (action) {\n          case \"animate\": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;\n          case \"play\": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;\n          case \"pause\": $obj.pause(); break;\n        }\n      },\n      uniqueID: function($clone) {\n        // Append _clone to current level and children elements with id attributes\n        $clone.filter( '[id]' ).add($clone.find( '[id]' )).each( function() {\n          var $this = $(this);\n          $this.attr( 'id', $this.attr( 'id' ) + '_clone' );\n        });\n        return $clone;\n      },\n      pauseInvisible: {\n        visProp: null,\n        init: function() {\n          var visProp = methods.pauseInvisible.getHiddenProp();\n          if (visProp) {\n            var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';\n            document.addEventListener(evtname, function() {\n              if (methods.pauseInvisible.isHidden()) {\n                if(slider.startTimeout) {\n                  clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible\n                } else {\n                  slider.pause(); //Or just pause\n                }\n              }\n              else {\n                if(slider.started) {\n                  slider.play(); //Initiated before, just play\n                } else {\n                  if (slider.vars.initDelay > 0) {\n                    setTimeout(slider.play, slider.vars.initDelay);\n                  } else {\n                    slider.play(); //Didn't init before: simply init or wait for it\n                  }\n                }\n              }\n            });\n          }\n        },\n        isHidden: function() {\n          var prop = methods.pauseInvisible.getHiddenProp();\n          if (!prop) {\n            return false;\n          }\n          return document[prop];\n        },\n        getHiddenProp: function() {\n          var prefixes = ['webkit','moz','ms','o'];\n          // if 'hidden' is natively supported just return it\n          if ('hidden' in document) {\n            return 'hidden';\n          }\n          // otherwise loop over all the known prefixes until we find one\n          for ( var i = 0; i < prefixes.length; i++ ) {\n              if ((prefixes[i] + 'Hidden') in document) {\n                return prefixes[i] + 'Hidden';\n              }\n          }\n          // otherwise it's not supported\n          return null;\n        }\n      },\n      setToClearWatchedEvent: function() {\n        clearTimeout(watchedEventClearTimer);\n        watchedEventClearTimer = setTimeout(function() {\n          watchedEvent = \"\";\n        }, 3000);\n      }\n    };\n\n    // public methods\n    slider.flexAnimate = function(target, pause, override, withSync, fromNav) {\n      if (!slider.vars.animationLoop && target !== slider.currentSlide) {\n        slider.direction = (target > slider.currentSlide) ? \"next\" : \"prev\";\n      }\n\n      if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\n\n      if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(\":visible\")) {\n        if (asNav && withSync) {\n          var master = $(slider.vars.asNavFor).data('flexslider');\n          slider.atEnd = target === 0 || target === slider.count - 1;\n          master.flexAnimate(target, true, false, true, fromNav);\n          slider.direction = (slider.currentItem < target) ? \"next\" : \"prev\";\n          master.direction = slider.direction;\n\n          if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {\n            slider.currentItem = target;\n            slider.slides.removeClass(namespace + \"active-slide\").eq(target).addClass(namespace + \"active-slide\");\n            target = Math.floor(target/slider.visible);\n          } else {\n            slider.currentItem = target;\n            slider.slides.removeClass(namespace + \"active-slide\").eq(target).addClass(namespace + \"active-slide\");\n            return false;\n          }\n        }\n\n        slider.animating = true;\n        slider.animatingTo = target;\n\n        // SLIDESHOW:\n        if (pause) { slider.pause(); }\n\n        // API: before() animation Callback\n        slider.vars.before(slider);\n\n        // SYNC:\n        if (slider.syncExists && !fromNav) { methods.sync(\"animate\"); }\n\n        // CONTROLNAV\n        if (slider.vars.controlNav) { methods.controlNav.active(); }\n\n        // !CAROUSEL:\n        // CANDIDATE: slide active class (for add/remove slide)\n        if (!carousel) { slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); }\n\n        // INFINITE LOOP:\n        // CANDIDATE: atEnd\n        slider.atEnd = target === 0 || target === slider.last;\n\n        // DIRECTIONNAV:\n        if (slider.vars.directionNav) { methods.directionNav.update(); }\n\n        if (target === slider.last) {\n          // API: end() of cycle Callback\n          slider.vars.end(slider);\n          // SLIDESHOW && !INFINITE LOOP:\n          if (!slider.vars.animationLoop) { slider.pause(); }\n        }\n\n        // SLIDE:\n        if (!fade) {\n          var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,\n              margin, slideString, calcNext;\n\n          // INFINITE LOOP / REVERSE:\n          if (carousel) {\n            margin = slider.vars.itemMargin;\n            calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;\n            slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;\n          } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== \"next\") {\n            slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;\n          } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== \"prev\") {\n            slideString = (reverse) ? 0 : (slider.count + 1) * dimension;\n          } else {\n            slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;\n          }\n          slider.setProps(slideString, \"\", slider.vars.animationSpeed);\n          if (slider.transitions) {\n            if (!slider.vars.animationLoop || !slider.atEnd) {\n              slider.animating = false;\n              slider.currentSlide = slider.animatingTo;\n            }\n\n            // Unbind previous transitionEnd events and re-bind new transitionEnd event\n            slider.container.unbind(\"webkitTransitionEnd transitionend\");\n            slider.container.bind(\"webkitTransitionEnd transitionend\", function() {\n              clearTimeout(slider.ensureAnimationEnd);\n              slider.wrapup(dimension);\n            });\n\n            // Insurance for the ever-so-fickle transitionEnd event\n            clearTimeout(slider.ensureAnimationEnd);\n            slider.ensureAnimationEnd = setTimeout(function() {\n              slider.wrapup(dimension);\n            }, slider.vars.animationSpeed + 100);\n\n          } else {\n            slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){\n              slider.wrapup(dimension);\n            });\n          }\n        } else { // FADE:\n          if (!touch) {\n            slider.slides.eq(slider.currentSlide).css({\"zIndex\": 1}).animate({\"opacity\": 0}, slider.vars.animationSpeed, slider.vars.easing);\n            slider.slides.eq(target).css({\"zIndex\": 2}).animate({\"opacity\": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);\n          } else {\n            slider.slides.eq(slider.currentSlide).css({ \"opacity\": 0, \"zIndex\": 1 });\n            slider.slides.eq(target).css({ \"opacity\": 1, \"zIndex\": 2 });\n            slider.wrapup(dimension);\n          }\n        }\n        // SMOOTH HEIGHT:\n        if (slider.vars.smoothHeight) { methods.smoothHeight(slider.vars.animationSpeed); }\n      }\n    };\n    slider.wrapup = function(dimension) {\n      // SLIDE:\n      if (!fade && !carousel) {\n        if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {\n          slider.setProps(dimension, \"jumpEnd\");\n        } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {\n          slider.setProps(dimension, \"jumpStart\");\n        }\n      }\n      slider.animating = false;\n      slider.currentSlide = slider.animatingTo;\n      // API: after() animation Callback\n      slider.vars.after(slider);\n    };\n\n    // SLIDESHOW:\n    slider.animateSlides = function() {\n      if (!slider.animating && focused ) { slider.flexAnimate(slider.getTarget(\"next\")); }\n    };\n    // SLIDESHOW:\n    slider.pause = function() {\n      clearInterval(slider.animatedSlides);\n      slider.animatedSlides = null;\n      slider.playing = false;\n      // PAUSEPLAY:\n      if (slider.vars.pausePlay) { methods.pausePlay.update(\"play\"); }\n      // SYNC:\n      if (slider.syncExists) { methods.sync(\"pause\"); }\n    };\n    // SLIDESHOW:\n    slider.play = function() {\n      if (slider.playing) { clearInterval(slider.animatedSlides); }\n      slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);\n      slider.started = slider.playing = true;\n      // PAUSEPLAY:\n      if (slider.vars.pausePlay) { methods.pausePlay.update(\"pause\"); }\n      // SYNC:\n      if (slider.syncExists) { methods.sync(\"play\"); }\n    };\n    // STOP:\n    slider.stop = function () {\n      slider.pause();\n      slider.stopped = true;\n    };\n    slider.canAdvance = function(target, fromNav) {\n      // ASNAV:\n      var last = (asNav) ? slider.pagingCount - 1 : slider.last;\n      return (fromNav) ? true :\n             (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === \"prev\") ? true :\n             (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== \"next\") ? false :\n             (target === slider.currentSlide && !asNav) ? false :\n             (slider.vars.animationLoop) ? true :\n             (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== \"next\") ? false :\n             (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === \"next\") ? false :\n             true;\n    };\n    slider.getTarget = function(dir) {\n      slider.direction = dir;\n      if (dir === \"next\") {\n        return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;\n      } else {\n        return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;\n      }\n    };\n\n    // SLIDE:\n    slider.setProps = function(pos, special, dur) {\n      var target = (function() {\n        var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,\n            posCalc = (function() {\n              if (carousel) {\n                return (special === \"setTouch\") ? pos :\n                       (reverse && slider.animatingTo === slider.last) ? 0 :\n                       (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :\n                       (slider.animatingTo === slider.last) ? slider.limit : posCheck;\n              } else {\n                switch (special) {\n                  case \"setTotal\": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;\n                  case \"setTouch\": return (reverse) ? pos : pos;\n                  case \"jumpEnd\": return (reverse) ? pos : slider.count * pos;\n                  case \"jumpStart\": return (reverse) ? slider.count * pos : pos;\n                  default: return pos;\n                }\n              }\n            }());\n\n            return (posCalc * ((slider.vars.rtl)?1:-1)) + \"px\";\n          }());\n\n      if (slider.transitions) {\n        target = (vertical) ? \"translate3d(0,\" + target + \",0)\" : \"translate3d(\" + ((slider.vars.rtl?-1:1)*parseInt(target)+'px') + \",0,0)\";\n        dur = (dur !== undefined) ? (dur/1000) + \"s\" : \"0s\";\n        slider.container.css(\"-\" + slider.pfx + \"-transition-duration\", dur);\n         slider.container.css(\"transition-duration\", dur);\n      }\n\n      slider.args[slider.prop] = target;\n      if (slider.transitions || dur === undefined) { slider.container.css(slider.args); }\n\n      slider.container.css('transform',target);\n    };\n\n    slider.setup = function(type) {\n      // SLIDE:\n      if (!fade) {\n        var sliderOffset, arr;\n\n        if (type === \"init\") {\n          slider.viewport = $('<div class=\"' + namespace + 'viewport\"></div>').css({\"overflow\": \"hidden\", \"position\": \"relative\"}).appendTo(slider).append(slider.container);\n          // INFINITE LOOP:\n          slider.cloneCount = 0;\n          slider.cloneOffset = 0;\n          // REVERSE:\n          if (reverse) {\n            arr = $.makeArray(slider.slides).reverse();\n            slider.slides = $(arr);\n            slider.container.empty().append(slider.slides);\n          }\n        }\n        // INFINITE LOOP && !CAROUSEL:\n        if (slider.vars.animationLoop && !carousel) {\n          slider.cloneCount = 2;\n          slider.cloneOffset = 1;\n          // clear out old clones\n          if (type !== \"init\") { slider.container.find('.clone').remove(); }\n          slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true'))\n                          .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true'));\n        }\n        slider.newSlides = $(slider.vars.selector, slider);\n\n        sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;\n        // VERTICAL:\n        if (vertical && !carousel) {\n          slider.container.height((slider.count + slider.cloneCount) * 200 + \"%\").css(\"position\", \"absolute\").width(\"100%\");\n          setTimeout(function(){\n            slider.newSlides.css({\"display\": \"block\"});\n            slider.doMath();\n            slider.viewport.height(slider.h);\n            slider.setProps(sliderOffset * slider.h, \"init\");\n          }, (type === \"init\") ? 100 : 0);\n        } else {\n          slider.container.width((slider.count + slider.cloneCount) * 200 + \"%\");\n          slider.setProps(sliderOffset * slider.computedW, \"init\");\n          setTimeout(function(){\n            slider.doMath();\n          if(slider.vars.rtl){\n              slider.newSlides.css({\"width\": slider.computedW, \"marginRight\" : slider.computedM, \"float\": \"left\", \"display\": \"block\"});\n           }\n            else{\n              slider.newSlides.css({\"width\": slider.computedW, \"marginRight\" : slider.computedM, \"float\": \"left\", \"display\": \"block\"});\n            }\n            // SMOOTH HEIGHT:\n            if (slider.vars.smoothHeight) { methods.smoothHeight(); }\n          }, (type === \"init\") ? 100 : 0);\n        }\n      } else { // FADE:\n        if(slider.vars.rtl){\n          slider.slides.css({\"width\": \"100%\", \"float\": 'right', \"marginLeft\": \"-100%\", \"position\": \"relative\"});\n        }\n        else{\n          slider.slides.css({\"width\": \"100%\", \"float\": 'left', \"marginRight\": \"-100%\", \"position\": \"relative\"});\n        }\n        if (type === \"init\") {\n          if (!touch) {\n            //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);\n            if (slider.vars.fadeFirstSlide == false) {\n              slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"zIndex\": 1 }).eq(slider.currentSlide).css({\"zIndex\": 2}).css({\"opacity\": 1});\n            } else {\n              slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"zIndex\": 1 }).eq(slider.currentSlide).css({\"zIndex\": 2}).animate({\"opacity\": 1},slider.vars.animationSpeed,slider.vars.easing);\n            }\n          } else {\n            slider.slides.css({ \"opacity\": 0, \"display\": \"block\", \"webkitTransition\": \"opacity \" + slider.vars.animationSpeed / 1000 + \"s ease\", \"zIndex\": 1 }).eq(slider.currentSlide).css({ \"opacity\": 1, \"zIndex\": 2});\n          }\n        }\n        // SMOOTH HEIGHT:\n        if (slider.vars.smoothHeight) { methods.smoothHeight(); }\n      }\n      // !CAROUSEL:\n      // CANDIDATE: active slide\n      if (!carousel) { slider.slides.removeClass(namespace + \"active-slide\").eq(slider.currentSlide).addClass(namespace + \"active-slide\"); }\n\n      //FlexSlider: init() Callback\n      slider.vars.init(slider);\n    };\n\n    slider.doMath = function() {\n      var slide = slider.slides.first(),\n          slideMargin = slider.vars.itemMargin,\n          minItems = slider.vars.minItems,\n          maxItems = slider.vars.maxItems;\n\n      slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();\n      slider.h = slide.height();\n      slider.boxPadding = slide.outerWidth() - slide.width();\n\n      // CAROUSEL:\n      if (carousel) {\n        slider.itemT = slider.vars.itemWidth + slideMargin;\n        slider.itemM = slideMargin;\n        slider.minW = (minItems) ? minItems * slider.itemT : slider.w;\n        slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;\n        slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :\n                       (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :\n                       (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;\n\n        slider.visible = Math.floor(slider.w/(slider.itemW));\n        slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;\n        slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);\n        slider.last =  slider.pagingCount - 1;\n        slider.limit = (slider.pagingCount === 1) ? 0 :\n                       (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;\n      } else {\n        slider.itemW = slider.w;\n        slider.itemM = slideMargin;\n        slider.pagingCount = slider.count;\n        slider.last = slider.count - 1;\n      }\n      slider.computedW = slider.itemW - slider.boxPadding;\n      slider.computedM = slider.itemM;\n    };\n\n    slider.update = function(pos, action) {\n      slider.doMath();\n\n      // update currentSlide and slider.animatingTo if necessary\n      if (!carousel) {\n        if (pos < slider.currentSlide) {\n          slider.currentSlide += 1;\n        } else if (pos <= slider.currentSlide && pos !== 0) {\n          slider.currentSlide -= 1;\n        }\n        slider.animatingTo = slider.currentSlide;\n      }\n\n      // update controlNav\n      if (slider.vars.controlNav && !slider.manualControls) {\n        if ((action === \"add\" && !carousel) || slider.pagingCount > slider.controlNav.length) {\n          methods.controlNav.update(\"add\");\n        } else if ((action === \"remove\" && !carousel) || slider.pagingCount < slider.controlNav.length) {\n          if (carousel && slider.currentSlide > slider.last) {\n            slider.currentSlide -= 1;\n            slider.animatingTo -= 1;\n          }\n          methods.controlNav.update(\"remove\", slider.last);\n        }\n      }\n      // update directionNav\n      if (slider.vars.directionNav) { methods.directionNav.update(); }\n\n    };\n\n    slider.addSlide = function(obj, pos) {\n      var $obj = $(obj);\n\n      slider.count += 1;\n      slider.last = slider.count - 1;\n\n      // append new slide\n      if (vertical && reverse) {\n        (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);\n      } else {\n        (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);\n      }\n\n      // update currentSlide, animatingTo, controlNav, and directionNav\n      slider.update(pos, \"add\");\n\n      // update slider.slides\n      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);\n      // re-setup the slider to accomdate new slide\n      slider.setup();\n\n      //FlexSlider: added() Callback\n      slider.vars.added(slider);\n    };\n    slider.removeSlide = function(obj) {\n      var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;\n\n      // update count\n      slider.count -= 1;\n      slider.last = slider.count - 1;\n\n      // remove slide\n      if (isNaN(obj)) {\n        $(obj, slider.slides).remove();\n      } else {\n        (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();\n      }\n\n      // update currentSlide, animatingTo, controlNav, and directionNav\n      slider.doMath();\n      slider.update(pos, \"remove\");\n\n      // update slider.slides\n      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);\n      // re-setup the slider to accomdate new slide\n      slider.setup();\n\n      // FlexSlider: removed() Callback\n      slider.vars.removed(slider);\n    };\n\n    //FlexSlider: Initialize\n    methods.init();\n  };\n\n  // Ensure the slider isn't focussed if the window loses focus.\n  $( window ).blur( function ( e ) {\n    focused = false;\n  }).focus( function ( e ) {\n    focused = true;\n  });\n\n  //FlexSlider: Default Settings\n  $.flexslider.defaults = {\n    namespace: \"flex-\",             //{NEW} String: Prefix string attached to the class of every element generated by the plugin\n    selector: \".slides > li\",       //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril\n    animation: \"fade\",              //String: Select your animation type, \"fade\" or \"slide\"\n    easing: \"swing\",                //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!\n    direction: \"horizontal\",        //String: Select the sliding direction, \"horizontal\" or \"vertical\"\n    reverse: false,                 //{NEW} Boolean: Reverse the animation direction\n    animationLoop: true,            //Boolean: Should the animation loop? If false, directionNav will received \"disable\" classes at either end\n    smoothHeight: false,            //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode\n    startAt: 0,                     //Integer: The slide that the slider should start on. Array notation (0 = first slide)\n    slideshow: true,                //Boolean: Animate slider automatically\n    slideshowSpeed: 7000,           //Integer: Set the speed of the slideshow cycling, in milliseconds\n    animationSpeed: 600,            //Integer: Set the speed of animations, in milliseconds\n    initDelay: 0,                   //{NEW} Integer: Set an initialization delay, in milliseconds\n    randomize: false,               //Boolean: Randomize slide order\n    fadeFirstSlide: true,           //Boolean: Fade in the first slide when animation type is \"fade\"\n    thumbCaptions: false,           //Boolean: Whether or not to put captions on thumbnails when using the \"thumbnails\" controlNav.\n\n    // Usability features\n    pauseOnAction: true,            //Boolean: Pause the slideshow when interacting with control elements, highly recommended.\n    pauseOnHover: false,            //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering\n    pauseInvisible: true,   \t\t//{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.\n    useCSS: true,                   //{NEW} Boolean: Slider will use CSS3 transitions if available\n    touch: true,                    //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices\n    video: false,                   //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches\n\n    // Primary Controls\n    controlNav: true,               //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage\n    directionNav: true,             //Boolean: Create navigation for previous/next navigation? (true/false)\n    prevText: \"Previous\",           //String: Set the text for the \"previous\" directionNav item\n    nextText: \"Next\",               //String: Set the text for the \"next\" directionNav item\n\n    // Secondary Navigation\n    keyboard: true,                 //Boolean: Allow slider navigating via keyboard left/right keys\n    multipleKeyboard: false,        //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.\n    mousewheel: false,              //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel\n    pausePlay: false,               //Boolean: Create pause/play dynamic element\n    pauseText: \"Pause\",             //String: Set the text for the \"pause\" pausePlay item\n    playText: \"Play\",               //String: Set the text for the \"play\" pausePlay item\n\n    // Special properties\n    controlsContainer: \"\",          //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(\".flexslider-container\"). Property is ignored if given element is not found.\n    manualControls: \"\",             //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(\".flex-control-nav li\") or \"#tabs-nav li img\", etc. The number of elements in your controlNav should match the number of slides/tabs.\n    customDirectionNav: \"\",         //{NEW} jQuery Object/Selector: Custom prev / next button. Must be two jQuery elements. In order to make the events work they have to have the classes \"prev\" and \"next\" (plus namespace)\n    sync: \"\",                       //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.\n    asNavFor: \"\",                   //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider\n\n    // Carousel Options\n    itemWidth: 0,                   //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.\n    itemMargin: 0,                  //{NEW} Integer: Margin between carousel items.\n    minItems: 1,                    //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.\n    maxItems: 0,                    //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.\n    move: 0,                        //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.\n    allowOneSlide: true,           //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide\n\n    // Callback API\n    start: function(){},            //Callback: function(slider) - Fires when the slider loads the first slide\n    before: function(){},           //Callback: function(slider) - Fires asynchronously with each slider animation\n    after: function(){},            //Callback: function(slider) - Fires after each slider animation completes\n    end: function(){},              //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)\n    added: function(){},            //{NEW} Callback: function(slider) - Fires after a slide is added\n    removed: function(){},           //{NEW} Callback: function(slider) - Fires after a slide is removed\n    init: function() {},             //{NEW} Callback: function(slider) - Fires after the slider is initially setup\n\trtl: false             //{NEW} Boolean: Whether or not to enable RTL mode\n  };\n\n  //FlexSlider: Plugin Function\n  $.fn.flexslider = function(options) {\n    if (options === undefined) { options = {}; }\n\n    if (typeof options === \"object\") {\n      return this.each( function() {\n        var $this = $(this),\n            selector = (options.selector) ? options.selector : \".slides > li\",\n            $slides = $this.find(selector);\n\n      if ( ( $slides.length === 1 && options.allowOneSlide === false ) || $slides.length === 0 ) {\n          $slides.fadeIn(400);\n          if (options.start) { options.start($this); }\n        } else if ($this.data('flexslider') === undefined) {\n          new $.flexslider(this, options);\n        }\n      });\n    } else {\n      // Helper strings to quickly perform functions on the slider\n      var $slider = $(this).data('flexslider');\n      switch (options) {\n        case \"play\": $slider.play(); break;\n        case \"pause\": $slider.pause(); break;\n        case \"stop\": $slider.stop(); break;\n        case \"next\": $slider.flexAnimate($slider.getTarget(\"next\"), true); break;\n        case \"prev\":\n        case \"previous\": $slider.flexAnimate($slider.getTarget(\"prev\"), true); break;\n        default: if (typeof options === \"number\") { $slider.flexAnimate(options, true); }\n      }\n    }\n  };\n})(jQuery);","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\n/*\n * Shows the next form.\n *\n * @param  {Element} selector        - Each target forms selector.\n * @param  {Element} formTarget      - Wrapper of target forms selector.\n * @param  {String} indicator       - Indicator of timeline.\n * @param  {Number} index           - Default index for initialization.\n * \t\t\t\t\t\t\t\t\t  0 => step one, \n * \t\t\t\t\t\t\t\t\t  1 => step two\n * \t\t\t\t\t\t\t\t\t  2 => step three\n * \t\t\t\t\t\t\t\t\t  3 => step four\n * \t\t\t\t\t\t\t\t\t  4 => step five\n * \t\t\t\t\t\t\t\t\t  ...\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixFormProgressToNext = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tselector         : $( '.uix-form-progress__target .uix-form-progress__target__step' ),\n\t\t\tformTarget       : $( '.uix-form-progress__target' ),\n\t\t\tindicator        : '.uix-form-progress .uix-form-progress__indicator',\n\t\t\tindex            : 0\n        }, options );\n \n        this.each( function() {\n\t\t\t\n\t\t\tconst $this          = $( this );\n\t\t\tconst  transitionEnd    = 'webkitTransitionEnd transitionend',\n\t\t\t\t   $sections        = settings.selector,\n\t\t\t\t   $formTarget      = settings.formTarget,\t\n\t\t\t\t   $indicator       = $( settings.indicator ),\n\t\t\t\t   allStep          = $indicator.length,\n\t\t\t\t   stepPerValue     = 100/( allStep - 1 );\n            \n            \n\t\t\tlet value = 0, tarIndex, curIndex;\n\t\t\t\n\t\t\t\n\t\t\tif ( $indicator.length == 0 ) return false;\n\n\n\t\t\t//Returns current index\n\t\t\tif ( settings.index > allStep - 1 ) {\n\t\t\t\tcurIndex = allStep - 1;\n\t\t\t} else {\n\t\t\t\tcurIndex = settings.index;\n\t\t\t}\n\n\n\t\t\ttarIndex = curIndex - 1;\n\n\n\t\t\t// Returns current index\n\t\t\tif ( tarIndex > ( allStep - 2 ) ) {\n\t\t\t\tvalue = stepPerValue * (allStep - 2);\n\t\t\t\tcurIndex = allStep - 2;\n\t\t\t} else {\n\t\t\t\tcurIndex = tarIndex;\n\n\t\t\t}\n\n\n\t\t\t// Increment value (based on 4 steps 0 - 100)\n\t\t\tvalue = stepPerValue * curIndex;\n\n\t\t\t//Get form transition speed\n\t\t\tlet dur = $formTarget.data( 'anime-speed' );\n\t\t\tif ( typeof dur === typeof undefined ) { \n\t\t\t\tdur = '0.5s';\n\t\t\t}\n\n\t\t\tconst durString  = dur.toString().toLowerCase(),\n\t\t\t\t  isMS       = durString.indexOf( 'ms' ) >= 0,\n\t\t\t\t  numberNum  = durString.replace( 'ms', '' ).replace( 's', '' ),\n\t\t\t\t  animeSpeed = isMS ? numberNum : numberNum * 1000;\n\n\n\n\t\t\tconst currentFormStep  = parseInt($sections.eq( tarIndex ).attr( 'data-step' ) ) || false,\n\t\t\t\t  $nextForm        = $formTarget.find( '.uix-form-progress__target__step[data-step=\"' + (currentFormStep + 1) + '\"]');\n            \n            let currentFormIndex = $nextForm.attr( 'data-step' ) - 1;\n\n\n\t\t\tif ( isNaN( currentFormIndex ) ) currentFormIndex = 0;\n\n\t\t\t// Activate other unused modules\n\t\t\tif ( currentFormIndex > 0 ) {\n\t\t\t\tfor ( let i = 0; i < curIndex; i++ ) {\n\t\t\t\t\t$sections.eq( i ).addClass( 'leaving' );\n\t\t\t\t\t$indicator.eq( i ).addClass( 'is-active' );\n\t\t\t\t}\n\t\t\t\t$indicator.eq( curIndex ).addClass( 'is-active' );\n\t\t\t\t\n\t\t\t}\n\n\n\n\t\t\t// Hide current form fields\n\t\t\t$sections.eq( tarIndex ).addClass( 'leaving' );\n\t\t\tsetTimeout(function() {\n\t\t\t\t$indicator.eq( currentFormIndex ).addClass( 'is-active' );\n\t\t\t}, animeSpeed );\n\n\n\t\t\t// Show next form fields\n\t\t\t$nextForm.addClass( 'coming' ).one( transitionEnd, function() {\n\t\t\t\t$nextForm.removeClass( 'coming waiting' );\n\t\t\t});\n\t\t\t\n\t\t\t// Active next form fields\n\t\t\t$sections.removeClass( 'is-active' );\n\t\t\t$sections.eq( currentFormIndex ).addClass( 'is-active' );\n\n\t\t\t// Increment value (based on 4 steps 0 - 100)\n\t\t\tvalue += stepPerValue;\n\n\t\t\t//console.log( currentFormIndex );\n\n\n\n\t\t\t//Initialize pointer and form location data\n\t\t\tif ( currentFormIndex == 0 ) {\n\n\t\t\t\t//Avoid initialization to always cover other same events\n\t\t\t\t$( 'body' ).addClass( 'form-progress-initok' );\n\n\n\t\t\t\t//so something\n\t\t\t\t$indicator.removeClass( 'is-active' );\n\t\t\t\t$indicator.each( function( index )  {\n\t\t\t\t\t$( this ).css( 'left', index*stepPerValue + '%' );\n\t\t\t\t\t$formTarget.find( '.uix-form-progress__target__step:eq('+index+')' ).attr( 'data-step', index+1 );\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$formTarget.addClass( 'js-uix-show' );\n\t\t\t\t}, animeSpeed );\n\n\n\t\t\t\t$formTarget.find( '.uix-form-progress__target__step' )\n\t\t\t\t\t\t\t\t\t\t\t\t.removeClass( 'left leaving' )\n\t\t\t\t\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t'position'   : 'absolute'\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t\t.not( ':eq(0)' )\n\t\t\t\t\t\t\t\t\t\t\t\t.addClass( 'waiting' );\n\n\n\t\t\t}\n\n\n\t\t\t//Set wrapper height\n\t\t\tconst currentContentH  = $formTarget.find( '.uix-form-progress__target__step:eq('+currentFormIndex+') > .uix-form-progress__content' ).height() + 100;\n\t\t\t$formTarget.css( 'height', currentContentH + 'px' );\n\n\t\t\tconst curText = $( '.uix-form-progress .uix-form-progress__indicator:eq('+currentFormIndex+') > span' ).html();\n\t\t\t$( '#app-form-progress-text' ).text( curText );\n\n\t\t\t//The current indicator class\n\t\t\t$indicator.removeClass( 'current' );\n\t\t\t$indicator.eq( currentFormIndex ).addClass( 'current' );\n\n\t\t\t// Reset if we've reached the end\n\t\t\tif (value >= 100) {\n\t\t\t\t$formTarget.find( '.uix-form-progress__target__step' )\n\t\t\t\t\t\t\t\t\t\t\t   .addClass( 'leaving' )\n\t\t\t\t\t\t\t\t\t\t\t   .last()\n\t\t\t\t\t\t\t\t\t\t\t   .removeClass( 'coming waiting leaving' );\n\t\t\t} else {\n\t\t\t\t$( '.uix-form-progress' ).find( '.uix-form-progress__indicator.is-active' ).next( '.uix-form-progress__indicator' ).addClass( 'is-active' );\n\t\t\t}\n\n\t\t\t// Set progress bar value\n\t\t\t$( '.uix-form-progress .uix-form-progress__line span' ).css( 'width', value + '%' );\n\n\n\t\t\treturn false;\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Render Normal Radio Status\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderNormalRadio = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls__radio'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\t$( settings.controls ).each( function()  {\n\t\t\t\t$( this ).find( '> label' ).each( function()  {\n\n\t\t\t\t\tconst targetID  = '#' + $( this ).parent().attr( \"data-targetid\" );\n\t\t\t\t\tlet\tswitchIDs = '';\n\n\t\t\t\t\t//add switch IDs\n\t\t\t\t\t$( this ).parent().find( '> label' ).each( function()  {\n\t\t\t\t\t\tif ( typeof $( this ).data( \"switchid\" ) != typeof undefined ) {\n\t\t\t\t\t\t\tswitchIDs += $( this ).data( \"switchid\" ) + ',';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\n\t\t\t\t\t$( this ).parent().attr( \"data-switchids\", switchIDs.replace(/,\\s*$/, '' ) );\n\n\n\t\t\t\t\t//Set actived style from their values\n\t\t\t\t\tif ( typeof $( this ).data( 'value' ) != typeof undefined ) {\n\t\t\t\t\t\tif ( $( targetID ).val() == $( this ).data( 'value' ) ) {\n\t\t\t\t\t\t\t$( this )\n\t\t\t\t\t\t\t\t.addClass( 'is-active' )\n\t\t\t\t\t\t\t\t.find( '[type=\"radio\"]' ).prop( 'checked', true );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$( this )\n\t\t\t\t\t\t\t\t.removeClass( 'is-active' )\n\t\t\t\t\t\t\t\t.find( '[type=\"radio\"]' ).prop( 'checked', false );\n\t\t\t\t\t\t}\t\t\n\t\t\t\t\t} \n\n\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function( $ ) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}( jQuery ));\n","\n/*\n * Hover Effect\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderControlsHover = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.js-uix-float-label'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\t$( settings.controls ).each( function(){\n\n\t\t\t\tconst $this = $( this );\n\n\n\t\t\t\t// on focus add cladd active to label\n\t\t\t\t$this.on( 'focus', function() {\n\t\t\t\t\t$( this ).closest( 'div' ).find( 'label, .uix-controls__bar' ).addClass( 'is-active' );\n\t\t\t\t});\n\n\n\t\t\t\t//on blur check field and remove class if needed\n\t\t\t\t$this.on( 'blur change', function( e ) {\n\t\t\t\t\tif( $this.val() === '' || $this.val() === 'blank' ) {\n\t\t\t\t\t\t$( this ).closest( 'div' ).find( 'label' ).removeClass( 'is-active' );\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t\t//----\n\t\t\t\t\tif( \n\t\t\t\t\t\t$this.val() === '' || \n\t\t\t\t\t\t$this.val() === 'blank' || \n\t\t\t\t\t\t( $this.val() != '' && $this.val() != 'blank' ) \n\t\t\t\t\t) {\n\t\t\t\t\t\t$( this ).closest( 'div' ).find( '.uix-controls__bar' ).removeClass( 'is-active' );\n\t\t\t\t\t}\t\t\n\n\t\t\t\t});\n\n\t\t\t\t// if exist cookie value\n\t\t\t\tif( $this.val() != '' && $this.val() != 'blank') { \n\t\t\t\t    $( this ).closest( 'div' ).find( 'label' ).addClass( 'is-active' );\n\t\t\t\t}\n\n\t\t\t\t\n\n\t\t\t});\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Render Single Selector Status\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomSingleSel = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls__single-sel'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\t$( settings.controls ).each( function()  {\n\t\t\t\t$( this ).find( '> span' ).each( function()  {\n\n\t\t\t\t\tconst targetID  = '#' + $( this ).parent().attr( 'data-targetid' );\n\t\t\t\t\tlet\tswitchIDs = '';\n\n\t\t\t\t\t//add switch IDs\n\t\t\t\t\t$( this ).parent().find( '> span' ).each( function()  {\n\t\t\t\t\t\tif ( typeof $( this ).data( \"switchid\" ) != typeof undefined ) {\n\t\t\t\t\t\t\tswitchIDs += $( this ).data( \"switchid\" ) + ',';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\n\t\t\t\t\t$( this ).parent().attr( \"data-switchids\", switchIDs.replace(/,\\s*$/, '' ) );\n\n\n\t\t\t\t\t//Set actived style from their values\n\t\t\t\t\tif ( $( targetID ).val() == $( this ).data( 'value' ) ) {\n\t\t\t\t\t\t$( this ).addClass( 'is-active' ).attr( 'aria-checked', true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( this ).removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t\t\t}\t\n\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Render Multiple Selector Status\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomMultiSel = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls__multi-sel'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\t$( settings.controls ).each( function()  {\n\t\t\t\t$( this ).find( '> span' ).each( function()  {\n\n\t\t\t\t\tconst targetID = '#' + $( this ).parent().attr( 'data-targetid' );\n\n\t\t\t\t\tif ( $( targetID ).val().indexOf( $( this ).data( 'value' ) ) >= 0 ) {\n\t\t\t\t\t\t$( this ).addClass( 'is-active' ).attr( 'aria-checked', true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( this ).removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t\t\t}\t\n\n\n\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Render Custom File Dropzone\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomFileDropzone = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls__file-field-container'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\t$( settings.controls ).each( function()  {\n\t\t\t\tconst $dropZone  = $( this ).find( 'input[type=\"file\"]' );\n\n\t\t\t\t$( document ).on( 'dragover', function(e) {\n\t\t\t\t\tconst timeout = window.dropZoneTimeout;\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\t$dropZone.addClass( 'in' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t}\n\t\t\t\t\tlet found = false,\n\t\t\t\t\tnode = e.target;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (node === $dropZone[0]) {\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t\t} while ( node != null );\n\t\t\t\t\tif (found) {\n\t\t\t\t\t\t$dropZone.addClass( 'hover' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$dropZone.removeClass( 'hover' );\n\t\t\t\t\t}\n\t\t\t\t\twindow.dropZoneTimeout = setTimeout(function() {\n\t\t\t\t\t\twindow.dropZoneTimeout = null;\n\t\t\t\t\t\t$dropZone.removeClass( 'in hover' );\n\t\t\t\t\t}, 100 );\n\t\t\t\t});\n\n\t\t\t\t$dropZone.on( 'change', function( e ) {\n\t\t\t\t\tconst input = $( this )[0];\n\t\t\t\t\tif ( input.files && input.files[0] ) {\n\t\t\t\t\t\tconst reader = new FileReader();\n\t\t\t\t\t\treader.onload = function( e ) {\n\t\t\t\t\t\t\tconst imgData = e.target.result;\n\t\t\t\t\t\t\tconst imgName = input.files[0].name;\n\t\t\t\t\t\t\tinput.setAttribute( 'data-title', imgName );\n\t\t\t\t\t\t\t//console.log(e.target.result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treader.readAsDataURL( input.files[0] );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\n\t\t\t});\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Render Custom File Type\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomFile = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls__file-container'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\t$( settings.controls ).each( function()  {\n\t\t\t\tconst $fileInput  = $( this ).find( 'input[type=\"file\"]' ),\n\t\t\t\t\t$fileBtn    = $( this ).find( '.uix-controls__file-trigger' ),\n\t\t\t\t\t$filePath   = $( this ).next( '.uix-controls__file-return' );\n\n\t\t\t\t$fileBtn.off( 'click' ).on( 'click', function() {\n\t\t\t\t\t$fileInput.focusin();\n\n\t\t\t\t});\t\n\n\t\t\t\t$fileInput.on( 'change', function() {\n\t\t\t\t\t$filePath.text( $( this ).val() );\n\t\t\t\t});\t\n\n\t\t\t});\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Disabled Controls Status\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderControlsDisable = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : 'input.is-disabled'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\t$( settings.controls ).prop( 'disabled', true );\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Create Line Effect on Click\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderControlsLineEff = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '.uix-controls.uix-controls--line'\n        }, options );\n \n        this.each( function() {\n\t\t\t\n\t\t\tconst $this              = $( this );\n\t\t\tconst customControls     = settings.controls;\n\n\n\t\t\t$( customControls ).each( function() {\n\t\t\t\tconst dataExist = $( this ).data( 'exist' );\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\t\t\t\t\t$( '<ins class=\"uix-controls__bar\"></ins><ins class=\"uix-controls__basic-bar\"></ins>' ).insertAfter( $( this ).find( 'label' ) );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Multiple Selector or Single Selector\n\t\t\t\t\tif ( $( this ).hasClass( 'uix-controls__multi-sel' ) || $( this ).hasClass( 'uix-controls__single-sel' ) ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t$( this ).find( '> span' ).each( function()  {\n\t\t\t\t\t\t\t$( this ).prepend( '<ins class=\"uix-controls__bar\"></ins><ins class=\"uix-controls__basic-bar\"></ins>' );\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//Custom Input Number\n\t\t\t\t\tif ( $( this ).hasClass( 'uix-controls__number' ) ) {\n\t\t\t\t\t\t$( this ).prepend( '<ins class=\"uix-controls__bar\"></ins><ins class=\"uix-controls__basic-bar\"></ins>' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$( this ).data( 'exist', 1 );\t\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));","\n/*\n * Render Custom Radio, Checkbox and Toggle \n *\n * @param  {String} radioWrapper             - Wrapper of the radio.\n * @param  {String} toggle                   - Toggle of the checkbox.\n * @param  {String} checkboxWrapper          - Wrapper of the checkbox.\n * @return {Void}\n */\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderCustomRadioCheckbox = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tradioWrapper    : '.uix-controls__radio',\n\t\t\ttoggle          : '.uix-controls__toggle',\n\t\t\tcheckboxWrapper : '.uix-controls__checkbox'\n        }, options );\n \n        this.each( function() {\n\t\t\t\n\t\t\tconst $this              = $( this );\n            \n\t\t\tconst customRadio        = settings.radioWrapper,\n\t\t\t\t  customToggle       = settings.toggle,\n\t\t\t\t  customCheckbox     = settings.checkboxWrapper;\n\n\n\t\t\t$( customRadio ).find( 'input[type=\"radio\"]' ).each( function() {\n\t\t\t\tconst dataExist = $( this ).data( 'exist' );\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\t\t\t\t\t$( '<span class=\"uix-controls__radio-trigger\"></span>' ).insertAfter( $( this ) );\n\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$( this ).data( 'exist', 1 );\t\n\t\t\t\t}\n\n\t\t\t});\n\n\n\t\t\t$( customToggle ).find( 'input[type=\"checkbox\"]' ).each( function() {\n\t\t\t\tlet dataExist = $( this ).data( 'exist' ),\n\t\t\t\t\t$obj      = $( this ).closest( '.uix-controls' ),\n\t\t\t\t\toffText   = $obj.data( 'off-text' ),\n\t\t\t\t\tonText    = $obj.data( 'on-text' );\n\t\t\t\t\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\t\t\t\t\t$( '<span class=\"uix-controls__toggle-trigger\" data-off-text=\"'+offText+'\" data-on-text=\"'+onText+'\"></span>' ).insertAfter( $( this ) );\n\t\t\t\t\t//hide or display a associated div\n\t\t\t\t\tconst targetID = '#' + $obj.attr( 'data-targetid' );\n\t\t\t\t\tif ( $( this ).is( ':checked' ) ) {\n\t\t\t\t\t\t$obj.addClass( 'is-active' ).attr( 'aria-checked', true );\n\t\t\t\t\t\t$( targetID ).show();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$obj.removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t\t\t\t$( targetID ).hide();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$( this ).data( 'exist', 1 );\t\n\t\t\t\t}\n\n\n\t\t\t});\n\n\t\t\t$( customCheckbox ).find( 'input[type=\"checkbox\"]' ).each( function() {\n\t\t\t\tconst dataExist = $( this ).data( 'exist' ),\n\t\t\t\t\t$obj      = $( this ).closest( '.uix-controls' );\n\t\t\t\t\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\t\t\t\t\t$( '<span class=\"uix-controls__checkbox-trigger\"></span>' ).insertAfter( $( this ) );\n\n\t\t\t\t\t//hide or display a associated div\n\t\t\t\t\tconst targetID = '#' + $obj.attr( 'data-targetid' );\n\t\t\t\t\tif ( $( this ).is( ':checked' ) ) {\n\t\t\t\t\t\t$obj.addClass( 'is-active' ).attr( 'aria-checked', true );\n\t\t\t\t\t\t$( targetID ).show();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$obj.removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t\t\t\t$( targetID ).hide();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$( this ).data( 'exist', 1 );\t\n\t\t\t\t}\n\n\n\t\t\t});\n\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));","\n\n/**\n * jQuery.fn.sortElements\n * --------------\n * @author James Padolsey (http://james.padolsey.com)\n * @version 0.11\n * @updated 18-MAR-2010\n * --------------\n * @param Function comparator:\n *   Exactly the same behaviour as [1,2,3].sort(comparator)\n *   \n * @param Function getSortable\n *   A function that should return the element that is\n *   to be sorted. The comparator will run on the\n *   current collection, but you may want the actual\n *   resulting sort to occur on a parent or another\n *   associated element.\n *   \n *   E.g. $('td').sortElements(comparator, function(){\n *      return this.parentNode; \n *   })\n *   \n *   The <td>'s parent (<tr>) will be sorted instead\n *   of the <td> itself.\n */\njQuery.fn.sortElements = (function(){\n    \n    const sort = [].sort;\n    \n    return function(comparator, getSortable) {\n        \n        getSortable = getSortable || function(){return this;};\n        \n        const placements = this.map(function(){\n            \n            const sortElement = getSortable.call(this),\n                  parentNode = sortElement.parentNode,\n                \n                // Since the element itself will change position, we have\n                // to have some way of storing it's original position in\n                // the DOM. The easiest way is to have a 'flag' node:\n                nextSibling = parentNode.insertBefore(\n                    document.createTextNode(''),\n                    sortElement.nextSibling\n                );\n            \n            return function() {\n                \n                if (parentNode === this) {\n                    throw new Error(\n                        \"You can't sort elements if any one is a descendant of another.\"\n                    );\n                }\n                \n\t\t\t\t\n                // Insert before flag:\n                parentNode.insertBefore(this, nextSibling);\n                // Remove flag:\n                parentNode.removeChild(nextSibling);\n                \n            };\n            \n        });\n       \n        return sort.call(this, comparator).each(function(i){\n            placements[i].call(getSortable.call(this));\n        });\n        \n    };\n    \n})();","\n/*\n * Text Animation\n *\n * @param  {String} selectors                - Text wrapper ID or class name.\n * @return {Void}\n */\n( function ( $ ) {\n    $.fn.UixTextEff = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tselectors    : '.letters-eff-fadeInRight',\n            scrollSpy    : false\n        }, options );\n \n        this.each( function() {\n\t\t\t\n\t\t\t\n            \n\t\t\tconst customControls       = settings.selectors;\n            const scrollSpy            = settings.scrollSpy;\n            const $this                = $( customControls );\n            \n\t\t\tlet\tspeed                = $this.data( 'text-eff-speed' ),\n\t\t\t\ttxtEff;\n\n\t\t\t\n\t\t\t\n            if ( typeof speed === typeof undefined ) {\n                speed = 1200;\n            }\t\n\n            //The data-text-eff attribute must be unique, otherwise it will not execute correctly.\n            if ( $this.length > 1 ) return false;\n\n\n            $this.html( $this.text().replace(/([^\\x00-\\x80]|\\w|((?=[\\x21-\\x7e]+)[^A-Za-z0-9]))/g, \"<span class='uix-letter'>$&</span>\") );\n\n            //--------------\n            if (customControls.indexOf('fadeInRight') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    translateX: [40, 0],\n                    translateZ: 0,\n                    opacity: [0, 1],\n                    easing: \"easeOutExpo\",\n                    duration: speed,\n                    delay: function(el, i) {\n                        return 500 + 30 * i;\n                    }\n                });\n\n            }\n\n            //--------------\n            if (customControls.indexOf('zoomInDown') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    scale: [0, 1],\n                    duration: speed,\n                    elasticity: 600,\n                    delay: function(el, i) {\n                        return 45 * (i + 1);\n                    }\n                });\n\n            }\n\n            //--------------\n            if (customControls.indexOf('flyInOut') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    translateX: [40, 0],\n                    translateZ: 0,\n                    opacity: [0, 1],\n                    easing: \"easeOutExpo\",\n                    duration: speed,\n                    delay: function(el, i) {\n                        return 500 + 30 * i;\n                    }\n                });\n\n\n            }\n\n\n            //--------------\n            if (customControls.indexOf('fading') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    opacity: [0, 1],\n                    easing: \"easeInOutQuad\",\n                    duration: speed,\n                    delay: function(el, i) {\n                        return 150 * (i + 1)\n                    }\n                });\n\n            }\n\n            //--------------\n            if (customControls.indexOf('floatingUp') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    translateY: [\"1.1em\", 0],\n                    translateZ: 0,\n                    duration: speed,\n                    delay: function(el, i) {\n                        return 50 * i;\n                    }\n                });\n\n            }\n\n            //--------------\n            if (customControls.indexOf('scaleIn') >= 0) {\n                txtEff = anime.timeline({\n                    loop: false\n                }).add({\n                    targets: customControls + ' .uix-letter',\n                    opacity: [0,1],\n                    scale: [3.5, 1],\n                    duration: speed\n                });\n\n            }\n\n            txtEff.pause();\n\n\n            if ( ! scrollSpy ) {\n                txtEff.play();\n            } else {\n\n                const viewport = 1;\n         \n                //\n                const scrollUpdate = function() {\n\n                    const spyTop = $this[0].getBoundingClientRect().top;\n                    \n\n                    //Prevent asynchronous loading of repeated calls\n                    const actived = $this.data( 'activated' );\n\n\n                    if ( spyTop < ( window.innerHeight * viewport ) ) {\n\n                        if( typeof actived === typeof undefined ) {\n\n\n                            txtEff.play();\n\n                            //Prevents front-end javascripts that are activated in the background to repeat loading.\n                            $this.data( 'activated', 1 );\n\n\n                        }//endif actived\n\n\n                    }\n                };\n\n\n                scrollUpdate();\n                \n                // Please do not use scroll's off method in each\n                $( window ).on( 'scroll.UixTextEff touchmove.UixTextEff', function( event ) {\n                     scrollUpdate();\n                });  \n            }\n\n                  \n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));","\n/**\n\n\tTABLE OF CONTENTS\n\t---------------------------\n\n\n\t${{TOC}}\n\n*/\n\n/*\n *************************************\n * <!-- Base -->\n *************************************\n */\n/* !!! To build a table of contents (TOC), you need to import this scss file into JS */\nimport '../scss/_style.scss';\n\n\n/*\n * Global variables from front pages\n *\n * @private\n */\nexport let\n\t//If the file is in the root directory, you can leave it empty.\n\t//If in another directory, you can write: \"/blog\"\n    templateUrl,\n\n\t//Eg. https://uiux.cc\n\thomeUrl,\n\n\t//Eg. https://uiux.cc/wp-admin/admin-ajax.php\n\tajaxUrl;\n\n\nif ( typeof APP_ROOTPATH === 'undefined' ) {\n\ttemplateUrl = '';\n\thomeUrl     = '';\n\tajaxUrl     = '';\n} else {\n\ttemplateUrl = APP_ROOTPATH.templateUrl.replace(/\\/\\s*$/, '' );\n\thomeUrl     = APP_ROOTPATH.homeUrl.replace(/\\/\\s*$/, '' );\n\tajaxUrl     = APP_ROOTPATH.ajaxUrl.replace(/\\/\\s*$/, '' );\n}\n\n\n\n/*\n * Determine whether it is a special browser\n *\n * @private\n */\n// Add feature test for passive event listener support\nlet supportsPassive = false;\ntry {\n  document.addEventListener(\"test\", null, { get passive() { supportsPassive = true }});\n} catch(e) {}\n\n\nexport const browser = {\n    isMobile        : /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n\tisAndroid       : /(android)/i.test(navigator.userAgent),\n\tisPC            : !navigator.userAgent.match(/(iPhone|iPod|Android|ios|Mobile)/i),\n\tisSafari        : !!navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/), /*Test to 9, 10. */\n\tisIE            : !!window.ActiveXObject || \"ActiveXObject\" in window,     /*Test to 6 ~ 11 (not edge) */\n    supportsPassive : supportsPassive\n};\n\n\n\n\n/*\n * Core scripts for current site\n *\n * @private\n * @description Used for all modules from ./src/components/[__]/js\n * @requires ./examples/assets/js/min/jquery.waitforimages.min.js\n * @requires ./examples/assets/js/min/video.min.js\n * @requires ./examples/assets/js/min/TweenMax.min.js\n */\nexport const UixModuleInstance = ( ( $, window, document ) => {\n\n    let _APP           = {},\n        components     = { documentReady: [], pageLoaded: [] };\n\n\tif ( $( 'img' ).length == 0 ) {\n\t\t$( 'body' ).prepend( '<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" style=\"display:none\">' );\n\t}\n\n\tif ( $.isFunction( $.fn.waitForImages ) ) {\n\t\t$( 'body' ).waitForImages( pageLoaded );\n\t} else {\n\t\t$( window ).on( 'load', pageLoaded );\n\t}\n\n    $( document ).ready( documentReady );\n\n    function documentReady( context ) {\n\n        context = ( typeof context == typeof undefined ) ? $ : context;\n        components.documentReady.forEach( function( component ) {\n            component( context );\n        });\n    }\n\t\n\n    function pageLoaded( context ){\n\n        context = ( typeof context == \"object\" ) ? $ : context;\n        components.pageLoaded.forEach( function( component ) {\n           component( context );\n        });\n    }\n\n    _APP.setContext = function ( contextSelector ) {\n        let context = $;\n        if ( typeof contextSelector !== typeof undefined ) {\n            return function( selector ) {\n                return $( contextSelector ).find( selector );\n            };\n        }\n        return context;\n    };\n\n    _APP.components         = components;\n    _APP.documentReady      = documentReady;\n\t_APP.pageLoaded         = pageLoaded;\n\n\n\treturn _APP;\n\n})( $, window, document );\n\n\n\n\n/*\n * Create GUID / UUID\n *\n * @private\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @return {String}                        - The globally-unique identifiers.\n */\nexport const UixGUID = UixGUID || ( () => {\n    function t() { }\n\n    return t.version = \"0.0.1\",\n\n    t.create = function() {\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n            const r = Math.random() * 16 | 0,\n                  v = c == 'x' ? r : (r & 0x3 | 0x8);\n            return v.toString(16);\n        });\n    },\n\n    //\n\tt\n})();\n\n\n\n/*\n * Evaluating a string as a mathematical expression in JavaScript\n *\n * @private\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @return {String}            - New calculation result.\n */\nexport const UixMath = UixMath || ( () => {\n    function t() { }\n\n    return t.version = \"0.0.1\",\n\n    t.evaluate = function(s) {\n\n\t\tconst chars = s.replace(/\\s/g, '').split(\"\");\n\t\tlet n = [], op = [], index = 0, oplast = true;\n\n\t\tn[index] = \"\";\n\n\t\t// Parse the expression\n\t\tfor (let c = 0; c < chars.length; c++) {\n\n\t\t\tif (isNaN(parseInt(chars[c])) && chars[c] !== \".\" && !oplast) {\n\t\t\t\top[index] = chars[c];\n\t\t\t\tindex++;\n\t\t\t\tn[index] = \"\";\n\t\t\t\toplast = true;\n\t\t\t} else {\n\t\t\t\tn[index] += chars[c];\n\t\t\t\toplast = false;\n\t\t\t}\n\t\t}\n\n\t\t// Calculate the expression\n\t\ts = parseFloat(n[0]);\n\t\tfor (let o = 0; o < op.length; o++) {\n\t\t\tconst num = parseFloat(n[o + 1]);\n\t\t\tswitch (op[o]) {\n\t\t\t\tcase \"+\":\n\t\t\t\t\ts = s + num;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"-\":\n\t\t\t\t\ts = s - num;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"*\":\n\t\t\t\t\ts = s * num;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\":\n\t\t\t\t\ts = s / num;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn s;\n    },\n        \n    //\n\tt\n})();\n\n\n\n/*\n * Get the CSS property\n *\n * @private\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @param  {!Element} el     - The Element for which to get the computed style. Using class name or ID to locate.\n * @return {String|Object}   - The value of property.\n */\nexport const UixCssProperty = UixCssProperty || ( () => {\n    function t() { }\n\n    return t.version = \"0.0.1\",\n\n    t.getTransitionDuration = function( el ) {\n\n\t\tif ( typeof el === typeof undefined ) {\n\t\t\treturn 0;\n\t\t}\n\n\n\t\tlet style    = window.getComputedStyle(el),\n\t\t\tduration = style.webkitTransitionDuration,\n\t\t\tdelay    = style.webkitTransitionDelay;\n\n\t\tif ( typeof duration != typeof undefined ) {\n\t\t\t// fix miliseconds vs seconds\n\t\t\tduration = (duration.indexOf(\"ms\")>-1) ? parseFloat(duration) : parseFloat(duration)*1000;\n\t\t\tdelay = (delay.indexOf(\"ms\")>-1) ? parseFloat(delay) : parseFloat(delay)*1000;\n\n\t\t\treturn duration;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\n    },\n\n    //\n    t.getAbsoluteCoordinates = function( el ) {\n\n\t\tlet windowWidth     = window.innerWidth,\n\t\t\tleftPos         = null,\n\t\t\ttopPos          = null;\n\n\t\tif ( ! document.getElementsByTagName( 'body' )[0].className.match(/rtl/) ) {\n\t\t\tleftPos = ( el.offsetLeft == 0 ) ? el.parentElement.offsetLeft : el.offsetLeft;\n\t\t\ttopPos = ( el.offsetTop == 0 ) ? el.parentElement.offsetTop : el.offsetTop;\n\t\t} else {\n\n\t\t\t// width and height in pixels, including padding and border\n\t\t\t// Corresponds to jQuery outerWidth(), outerHeight()\n\t\t\tleftPos = ( el.offsetLeft == 0 ) ? ( windowWidth - ( el.parentElement.offsetLeft + el.parentElement.offsetWidth ) ) : ( windowWidth - ( el.offsetLeft + el.offsetWidth ) );\n\t\t\ttopPos = ( el.offsetTop == 0 ) ? ( windowWidth - ( el.parentElement.offsetTop + el.parentElement.offsetHeight ) ) : ( windowWidth - ( el.offsetTop + el.offsetHeight ) );\n\t\t}\n\n\n\t\treturn {\n\t\t\t'left': leftPos,\n\t\t\t'top': topPos\n\t\t};\n\n    },\n\n\n     //\n\tt\n})();\n\n","\n/*\n * Method of deleting or adding a module\n *\n * @global\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @param  {Boolean|String} destroy       - If it is a string, it means destroying this module from UixModuleInstance\n * @param  {Object} add                     - New module data via JSON.\n * @param  {String} add.moduleName        - The name of the module (the default is all uppercase).\n * @param  {Boolean} add.pageLoaded       - Window loading module method. If true or 1, the module will execute after the page is loaded.\n * @param  {Number} add.version           - The new module version number.\n * @param  {Function} add.callback        - The new module script of function.\n * @return {Void}      \n *\n * @Usage:\n * !!! The code is to be inserted in front of the uix-kit core script.\n\t\n\t\n<script>\nwindow.MAIN = null;\n( function( $ ) {\n\"use strict\";\n    $( document ).ready( function() {\n\t\t$( document ).UixModuleFilter( { \n\t\t   'destroy' : 'MAIN',\n\t\t   'add'     : {\n\t\t\t\t\t\t\tmoduleName    : 'YOUR_MODULE_NAME',\n\t\t\t\t\t\t\tpageLoaded    : true,\n\t\t\t\t\t\t\tversion       : '0.0.1',\n\t\t\t\t\t\t\tcallback      : function() {\n\t\t\t\t\t\t\t\t//the module will execute after the page is loaded.\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t} );\n    } );\n} ) ( jQuery );\n</script>\n\n *\n * \n */\n\nimport { UixModuleInstance } from '@uixkit/core/_global/js';\n\n( function ( $ ) {\n\t'use strict';\n\t\n    $.fn.UixModuleFilter = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tdestroy       : false,\n\t\t\tadd           : {\n\t\t\t\tmoduleName    : 'OLD_MODULE_NAME',\n\t\t\t\tpageLoaded    : false,\n\t\t\t\tversion       : '0.0.1',\n\t\t\t\tcallback      : function() {}\n\t\t\t}\n\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\t\n\t\t\t//remove a module\n\t\t\t//-------------------------------------\t\n\t\t\tif ( settings.destroy && Object.prototype.toString.call( settings.destroy )=='[object String]' ) {\n\t\t\t\tconst moduleName = settings.destroy;\n\t\t\t\tif ( typeof UixModuleInstance[ moduleName ] != typeof undefined ) {\n\t\t\t\t\tdelete UixModuleInstance[ moduleName ];\t\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//add or replace a module\n\t\t\t//-------------------------------------\t\n\t\t\tif ( settings.add && Object.prototype.toString.call( settings.add )=='[object Object]' && settings.add.hasOwnProperty( 'pageLoaded' ) ) {\n\n\t\t\t\tconst moduleName = settings.add.moduleName;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//delete the old module if exist\n\t\t\t\tif ( typeof UixModuleInstance[ moduleName ] != typeof undefined ) {\n\t\t\t\t\tconsole.log( 'The module already exists, please destroy the old module or change the new module name.' );\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\t//loading mode \"documentReady\"\n\t\t\t\t\tif ( ! settings.add.pageLoaded || settings.add.pageLoaded == 0 ) {\n\n\t\t\t\t\t\tconst _moduleName = ( function ( module, $, window, document ) {\n\n\t\t\t\t\t\t\tmodule[ moduleName ]               = module[ moduleName ] || {};\n\t\t\t\t\t\t\tmodule[ moduleName ].version       = settings.add.version;\n\t\t\t\t\t\t\tmodule[ moduleName ].documentReady = function( $ ) {\n\n\t\t\t\t\t\t\t\tsettings.add.callback();\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tmodule.components.documentReady.push( module[ moduleName ].documentReady );\n\t\t\t\t\t\t\treturn _moduleName;\n\n\t\t\t\t\t\t})( UixModuleInstance, jQuery, window, document );\n\t\t\t\t\t\tUixModuleInstance[ moduleName ].documentReady($);\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//loading mode \"pageLoaded\"\n\t\t\t\t\tif ( settings.add.pageLoaded || settings.add.pageLoaded == 1  ) {\n\n\t\t\t\t\t\tconst _moduleName = ( function ( module, $, window, document ) {\n\n\t\t\t\t\t\t\tmodule[ moduleName ]               = module[ moduleName ] || {};\n\t\t\t\t\t\t\tmodule[ moduleName ].version       = settings.add.version;\n\t\t\t\t\t\t\tmodule[ moduleName ].pageLoaded = function() {\n\n\t\t\t\t\t\t\t\tsettings.add.callback();\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tmodule.components.pageLoaded.push( module[ moduleName ].pageLoaded );\n\t\t\t\t\t\t\treturn _moduleName;\n\n\t\t\t\t\t\t})( UixModuleInstance, jQuery, window, document );\n\t\t\t\t\t\tUixModuleInstance[ moduleName ].pageLoaded();\n\t\t\t\t\t\t\n\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\t\n\n\n\n\t\t\t}\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n\n\n\n\n\n","\n/*\n * Apply some asynchronism scripts\n *\n * @global\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @param  {Boolean} scrollReveal          - Run script of module \"Scroll Reveal\". a page commonly used to\n *                                           load asynchronous information\n * @param  {Boolean} ajaxPostList          - Run script of module \"Posts List With Ajax\". a page commonly used to\n *                                           load asynchronous information\n * @param  {Boolean} ajaxDDList            - Run script of module \"Dynamic Drop Down List from JSON\".\n * @param  {Boolean} counterAnim           - Run script of module \"Counter\".\n * @return {Void}\n *\n * @Usage:\n    \n\t\n<script>\n( function( $ ) {\n\"use strict\";\n    $( document ).ready( function() {\n\t\t$( document ).UixApplyAsyncScripts({\n\t\t\tscrollReveal    : true,\n\t\t\tajaxPostList    : true,\n\t\t\tajaxDDList      : true,\n\t\t\tcounterAnim     : true,\n\t\t\tlightBox        : true \n\t\t});\n    } );\n} ) ( jQuery );\n</script>\n\n \n\n *\n * \n */\nimport { UixModuleInstance } from '@uixkit/core/_global/js';\n\n( function ( $ ) {\n    'use strict';\n    $.fn.UixApplyAsyncScripts = function( options ) {\n \n\t\t// This is the easiest way to have default options.\n\t\tconst settings = $.extend({\n\t\t\tscrollReveal    : true, // @from ./src/components/scroll-reveal\n\t\t\tajaxPostList    : true, // @from ./src/components/list-posts\n\t\t\tajaxDDList      : true, // @from ./src/components/dynamic-dropdown-list-json\n\t\t\tcounterAnim     : true, // @from ./src/components/counter\n\t\t\tlightBox        : true  // @from ./src/components/lightbox\n\t\t}, options );\n\n\t\t\n        this.each( function() {\n\t\t\n\t\t\n\t\t\t//----\n\t\t\tif ( UixModuleInstance.MAIN )                         UixModuleInstance.MAIN.pageLoaded(); //Theme Scripts\n\t\t\tif ( UixModuleInstance.COMMON_HEIGHT )                UixModuleInstance.COMMON_HEIGHT.pageLoaded(); //Common Height\n\t\t\tif ( UixModuleInstance.ADVANCED_SLIDER )              UixModuleInstance.ADVANCED_SLIDER.pageLoaded(); //Advanced Slider (Basic)\n\t\t\tif ( UixModuleInstance.ADVANCED_SLIDER_FILTER )       UixModuleInstance.ADVANCED_SLIDER_FILTER.pageLoaded(); //Advanced Slider\n\t\t\tif ( UixModuleInstance.FULL_WIDTH_COLUMN_TO_EDGE )    UixModuleInstance.FULL_WIDTH_COLUMN_TO_EDGE.pageLoaded(); //Full Width Column to Edge\n\t\t\tif ( UixModuleInstance.STICKY_EL )                    UixModuleInstance.STICKY_EL.pageLoaded(); //Sticky Elements\n\t\t\tif ( UixModuleInstance.TEXT_EFFECT )                  UixModuleInstance.TEXT_EFFECT.pageLoaded(); //Text effect\n\t\t\tif ( UixModuleInstance.TIMELINE )                     UixModuleInstance.TIMELINE.pageLoaded(); //Timeline\n            if ( UixModuleInstance.HYBRID_CONTENT_SLIDER )        UixModuleInstance.HYBRID_CONTENT_SLIDER.pageLoaded(); //Hybrid Content Slider\n\n\n\n\t\t\t//----\n\t\t\tif ( UixModuleInstance.MAIN )                         UixModuleInstance.MAIN.documentReady($); //Theme Scripts\n\t\t\tif ( UixModuleInstance.TABLE )                        UixModuleInstance.TABLE.documentReady($); //Responsive Table\n\t\t\tif ( UixModuleInstance.TABLE_SORTER )                 UixModuleInstance.TABLE_SORTER.documentReady($); //Table Sorter\n\t\t\tif ( UixModuleInstance.MODAL_DIALOG )                 UixModuleInstance.MODAL_DIALOG.documentReady($); //Modal Dialog\n\t\t\tif ( UixModuleInstance.PARALLAX )                     UixModuleInstance.PARALLAX.documentReady($); //Parallax\n\t\t\tif ( UixModuleInstance.VIDEOS )                       UixModuleInstance.VIDEOS.documentReady($); //Videos\n\t\t\tif ( UixModuleInstance.BODY_AND_HEADER )              UixModuleInstance.BODY_AND_HEADER.documentReady($); //Header Area\n\t\t\tif ( UixModuleInstance.SET_BG )                       UixModuleInstance.SET_BG.documentReady($); //Specify a background image\n\t\t\tif ( UixModuleInstance.GET_CUSTOM_ATTRS )             UixModuleInstance.GET_CUSTOM_ATTRS.documentReady($); //Get all custom attributes of an element like \"data-*\"\n\t\t\tif ( UixModuleInstance.PAGINATION )                   UixModuleInstance.PAGINATION.documentReady($); //Pagination\n\t\t\tif ( UixModuleInstance.FORM )                         UixModuleInstance.FORM.documentReady($); //Form\n\t\t\tif ( UixModuleInstance.FLEXSLIDER )                   UixModuleInstance.FLEXSLIDER.documentReady($); //Flexslider (Third-party plugin)\n\t\t\tif ( UixModuleInstance.RETINA )                       UixModuleInstance.RETINA.documentReady($); //Retina Graphics for Website\n\t\t\tif ( UixModuleInstance.SHOW_MORELESS )                UixModuleInstance.SHOW_MORELESS.documentReady($); //Show More Less\n\t\t\tif ( UixModuleInstance.DROPDOWN_MENU )                UixModuleInstance.DROPDOWN_MENU.documentReady($); //Dropdown Menu\n\t\t\tif ( UixModuleInstance.DROPDOWN_MENU2 )               UixModuleInstance.DROPDOWN_MENU2.documentReady($); //Dropdown Menu2\n\t\t\tif ( UixModuleInstance.ACCORDION )                    UixModuleInstance.ACCORDION.documentReady($); //Accordion\n\t\t\tif ( UixModuleInstance.GALLERY )                      UixModuleInstance.GALLERY.documentReady($); //Gallery\n\t\t\tif ( UixModuleInstance.IMAGE_SHAPES )                 UixModuleInstance.IMAGE_SHAPES.documentReady($); //Image Shapes\n\t\t\tif ( UixModuleInstance.PERIODICAL_SCROLL )            UixModuleInstance.PERIODICAL_SCROLL.documentReady($); //Periodical Scroll\n\t\t\tif ( UixModuleInstance.PRICING )                      UixModuleInstance.PRICING.documentReady($); //Pricing\n\t\t\tif ( UixModuleInstance.PROGRESS_BAR )                  UixModuleInstance.PROGRESS_BAR.documentReady($); //Progress Bar\n\t\t\tif ( UixModuleInstance.PROGRESS_LINE )                 UixModuleInstance.PROGRESS_LINE.documentReady($); //Progress Line\n\t\t\tif ( UixModuleInstance.ROTATING_EL )                  UixModuleInstance.ROTATING_EL.documentReady($); //Rotating Elements\n\t\t\tif ( UixModuleInstance.SMOOTH_SCROLLING_ANCHORLINK )  UixModuleInstance.SMOOTH_SCROLLING_ANCHORLINK.documentReady($); //Smooth Scrolling When Clicking An Anchor Link\n\t\t\tif ( UixModuleInstance.SWIPER )                       UixModuleInstance.SWIPER.documentReady($); //SWIPER (Third-party plugin)\n\t\t\tif ( UixModuleInstance.TABS )                         UixModuleInstance.TABS.documentReady($); //Tabs\n\t\t\tif ( UixModuleInstance.TEAM_FOCUS )                   UixModuleInstance.TEAM_FOCUS.documentReady($); //Team Focus\n\t\t\tif ( UixModuleInstance.LAVA_LAMP_STYLE_MENU )         UixModuleInstance.LAVA_LAMP_STYLE_MENU.documentReady($); //Lava-Lamp Style Menu\n\t\t\tif ( UixModuleInstance.CIRCLE_LAYOUT )                UixModuleInstance.CIRCLE_LAYOUT.documentReady($); //Circle Layout\n\t\t\tif ( UixModuleInstance.MULTI_ITEMS_CAROUSEL )         UixModuleInstance.MULTI_ITEMS_CAROUSEL.documentReady($); //Multiple Items Carousel\n\t\t\tif ( UixModuleInstance.THREE_BACKGROUND )             UixModuleInstance.THREE_BACKGROUND.documentReady($); //3D Background\n\t\t\tif ( UixModuleInstance.THREE_CAROUSEL )               UixModuleInstance.THREE_CAROUSEL.documentReady($); //3D Carousel\n            if ( UixModuleInstance.THREE_LIQUID_SCROLLSPY_SLIDER ) UixModuleInstance.THREE_LIQUID_SCROLLSPY_SLIDER.documentReady($); //3D Liquid Scrollspy Slider\n\n\n\t\t\t//---- Prevent overlay clicks on asynchronous requests\n\t\t\t//---- Commonly used for AJAX modules that are clicked by button\n\t\t\t//Scroll Reveal\n\t\t\tif ( settings.scrollReveal ) {\n\t\t\t\tif ( UixModuleInstance.SCROLL_REVEAL ) UixModuleInstance.SCROLL_REVEAL.documentReady($);\n\t\t\t}\n\n\t\t\t//Posts List With Ajax\n\t\t\tif ( settings.ajaxPostList ) {\n\t\t\t\tif ( UixModuleInstance.POST_LIST_AJAX ) UixModuleInstance.POST_LIST_AJAX.documentReady($);\n\t\t\t}\n\n\t\t\t//Dynamic Drop Down List from JSON\n\t\t\tif ( settings.ajaxDDList ) {\n\t\t\t\tif ( UixModuleInstance.DYNAMIC_DD_LIST ) UixModuleInstance.DYNAMIC_DD_LIST.documentReady($);\n\t\t\t}\n\n\n\t\t\t//Counter\n\t\t\tif ( settings.counterAnim ) {\n\t\t\t\tif ( UixModuleInstance.COUNTER ) UixModuleInstance.COUNTER.documentReady($);\n\t\t\t}\n\n\t\t\t//Custom Lightbox\n\t\t\tif ( settings.lightBox ) {\n\t\t\t\tif ( UixModuleInstance.LIGHTBOX ) UixModuleInstance.LIGHTBOX.pageLoaded();\n\t\t\t}\n\n\n\n\n\n\t\t\t//----Uix Shortcodes (WordPress Plugin)\n\t\t\tif ( $.isFunction( $.uix_sc_init ) ) {\n\t\t\t\t$.uix_sc_init();\n\t\t\t}\n\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Apply all the asynchronism scripts\n *\n * @global\n * @description This function can be used separately in HTML pages or custom JavaScript.\n * @param  {Boolean} runAll          - Run all module scripts.\n * @return {Void}\n *\n * @Usage:\n    \n<script>\n( function( $ ) {\n\"use strict\";\n    $( document ).ready( function() {\n\t\t$( document ).UixApplyAsyncAllScripts();\n    } );\n} ) ( jQuery );\n</script>\n\t\n\n *\n * \n */\nimport { UixModuleInstance } from '@uixkit/core/_global/js';\n\n( function ( $ ) {\n\t'use strict';\n\t\n    $.fn.UixApplyAsyncAllScripts = function( options ) {\n \n\t\t// This is the easiest way to have default options.\n\t\tconst settings = $.extend({\n\t\t\trunAll    : true\n\t\t}, options );\n\t\t\n\t\t\n        this.each( function() {\n\t\t\n\t\t\tlet scipts_pageLoaded    = UixModuleInstance.components.pageLoaded,\n\t\t\t\tscipts_documentReady = UixModuleInstance.components.documentReady;\n\n\t\t\tif ( settings.runAll ) {\n\n\t\t\t\tfor ( let i = 0; i < scipts_pageLoaded.length; i++ ) {\n\t\t\t\t\t scipts_pageLoaded[i]();\n\t\t\t\t}\n\t\t\t\tfor ( let j = 0; j < scipts_documentReady.length; j++ ) {\n\t\t\t\t\t scipts_documentReady[j]( $ );\n\t\t\t\t}\n\t\t\t}\n\n\n\n\t\t\t//Uix Shortcodes\n\t\t\tif ( $.isFunction( $.uix_sc_init ) ) {\n\t\t\t\t$.uix_sc_init();\n\t\t\t}\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/* \n *************************************\n * <!-- Body And Header -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const BODY_AND_HEADER = ( ( module, $, window, document ) => {\n\tif ( window.BODY_AND_HEADER === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.BODY_AND_HEADER               = module.BODY_AND_HEADER || {};\n    module.BODY_AND_HEADER.version       = '0.0.7';\n\tmodule.BODY_AND_HEADER.documentReady = function( $ ) {\n\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( 'body' ).hasClass( 'onepage' ) ) return false;\n\t\t\n\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n        \n\n\t\t//-------- Header initialize\n\t\theaderInit( windowWidth );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n\t\t\t\theaderInit( windowWidth );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\tfunction headerInit( w ) {\n\t\t\t\n\t\t\tconst $headerPlaceholder = $( '.uix-header__placeholder.js-uix-header__placeholder-autoheight' );\n\t\t\t\n\t\t\tif ( w > 768 ) {\n\t\t\t\t$headerPlaceholder.css( 'height', $( '.uix-header__container' ).outerHeight( true ) + 'px' ); \n\t\t\t\t$( 'body' ).removeClass( 'is-mobile' );\n\t\t\t} else {\n\t\t\t\t$headerPlaceholder.css( 'height', 0 ); \n\t\t\t\t$( 'body' ).addClass( 'is-mobile' );\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t//-------- Sticky header area\n\t\t//Note: Don't use Waypoint, because the Offset is wrong on calculating height of fixed element\n\t\tconst $el = $( '.uix-header__container, .uix-header__placeholder' );\n\t\t$window.off( 'scroll.BODY_AND_HEADER touchmove.BODY_AND_HEADER' ).on( 'scroll.BODY_AND_HEADER touchmove.BODY_AND_HEADER', function() {\n\n\t\t\tconst scrolled = $( this ).scrollTop(),\n\t\t\t\t  spyTop   = 220;\n\t\t\t\n\t\t\tif ( scrolled >= spyTop ) {\n\t\t\t\t$el.addClass( 'is-fixed' );\n\t\t\t} else {\n\t\t\t\t$el.removeClass( 'is-fixed' );\t\n\t\t\t}\n\t\t\t\n\t\t});\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.BODY_AND_HEADER.documentReady );\n\n\treturn class BODY_AND_HEADER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Common Height -->\n \n *\n * Note: \n *\n * Automatically sets the div height of the grid system to the height of the \n * outer container when \".js-uix-common-height\" class on \".row\" or \".uix-core-grid__row\" div.\n *\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const COMMON_HEIGHT = ( ( module, $, window, document ) => {\n\tif ( window.COMMON_HEIGHT === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.COMMON_HEIGHT               = module.COMMON_HEIGHT || {};\n    module.COMMON_HEIGHT.version       = '0.0.3';\n\tmodule.COMMON_HEIGHT.pageLoaded = function() {\n\n        \n        \n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\t\n\t\tcommonHeightInit( windowWidth );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n                commonHeightInit( windowWidth );\n\n\t\t\t}\n\t\t});\n        \n        function commonHeightInit( w ) {\n            \n            $( '.js-uix-common-height' ).each( function()  {\n                const $this        = $( this );\n                const element = $this;\n                const selectors = '[class*=col-], [class*=uix-core-grid__col-]'; //Bootstrap grid system and Custom uix grid system\n                let maxHeight = 0;\n\n\n                // Select and loop the elements you want to equalise\n                element.children( selectors ).each( function() {\n                    const element = $( this );\n                    \n                    //Solve the problem that the image cannot be read accurately\n                    element.find( 'img' ).each( function()  {\n                        const imgOuter = $( this ).parent( 'a' ).css( 'display' );\n                        if ( imgOuter == 'inline' ) {\n                            $( this ).parent( 'a' ).css( 'display', 'inline-block' );\n                        }\n                    });\n\n                    \n                   \n                    if( element.hasClass( 'max-height' ) ) {\n                        \n                        // if has max-height\n                        maxHeight = element.outerHeight();\n                    } else {\n                        // if this box is higher than the cached highest then store it\n                        if( element.height() > maxHeight ) {\n                            maxHeight = element.outerHeight(); \n                        }  \n                    }\n                    \n                    \n                });\n                \n                \n           \n                // Set the height of all those children to whichever was highest \n                if ( w > 768 ) {\n                    element.children( selectors ).each( function() {\n                        $( this ).css( 'height', maxHeight );\n                    });\t\n                } else {\n                    element.children( selectors ).each( function() {\n                        $( this ).css( 'height', 'auto' );\n                    });\t\t\n                }\n\n            });\t   \n        }\n        \n        \n\n\n\t};\n\n\tmodule.components.pageLoaded.push( module.COMMON_HEIGHT.pageLoaded );\n\n\treturn class COMMON_HEIGHT {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Get all custom attributes of an element like \"data-*\" -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport '@uixkit/plugins/Miscellaneous/attrExt';\n\nexport const GET_CUSTOM_ATTRS = ( ( module, $, window, document ) => {\n\tif ( window.GET_CUSTOM_ATTRS === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.GET_CUSTOM_ATTRS               = module.GET_CUSTOM_ATTRS || {};\n    module.GET_CUSTOM_ATTRS.version       = '0.0.1';\n\tmodule.GET_CUSTOM_ATTRS.documentReady = function( $ ) {\n\n\n\t\t$( '[data-my-custom-datas]' ).each( function() {\n\t\t\tconst $this         = $( this );\n\n\t\t\t\n\t\t\t//Get all attributes of an element and push the new attributes like \"data-*\"\n\t\t\tlet curAttrs        = $this.attr(),\n\t\t\t\tcustomPostData  = '';\n\t\t\t\n\t\t\t$.each( curAttrs, function( i, val ) {\n\t\t\t\tif ( i.indexOf( 'data-custom-field-' ) >= 0 ) {\n\t\t\t\t\tcustomPostData += '\"' + i.replace( 'data-custom-field-', '' ) + '\": ' + '\"' + val + '\", ';\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\tcustomPostData  = customPostData.replace(/,\\s*$/, '' );\n\t\t\t\n\n\t\t});\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.GET_CUSTOM_ATTRS.documentReady );\n\n\treturn class GET_CUSTOM_ATTRS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Loader -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const LOADER = ( ( module, $, window, document ) => {\n\tif ( window.LOADER === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.LOADER               = module.LOADER || {};\n    module.LOADER.version       = '0.0.5';\n\tmodule.LOADER.documentReady = function( $ ) {\n\n\n\t\t// Disable devices scaling\n\t\t//-------------------------------------\t\n\t\tdocument.addEventListener( 'touchstart', function (event) {\n\t\t\tif(event.touches.length>1){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\t\t\n\t\tlet lastTouchEnd = 0;\n\t\tdocument.addEventListener( 'touchend', function (event) {\n\t\t\tlet now = (new Date()).getTime();\n\t\t\tif( now-lastTouchEnd <= 300 ){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\tlastTouchEnd=now;\n\t\t},false);\n\t\t\n\t\t\n        \n\t\t// Loader Process\n\t\t//-------------------------------------\t\n\n        // Detect if video.load is successful or not \n        let videos = [];\n        let videosTotal = 0;\n        let videosLoaded = 0;\n        $( '.uix-video__slider > video' ).each( function()  {\n            videos.push( $( this ) );\n        });\n        \n        videosTotal = videos.length;\n        console.log( 'videosTotal: ' + videosTotal + ', videosLoaded: ' + videosLoaded );\n\n\n        \n        // Loading progress event\n        let loadedPercent = 0;\n        let imgTotal = 0;\n        const loadingAnim = function( per ) {\n\t\t\t$( '.uix-loader-progress > span' ).text( $( '.uix-loader-progress' ).data( 'txt' ).replace(/\\{progress\\}/g, per) );\n            TweenMax.to( '.uix-loader-progress__line', 0.3, {\n                width: per/100.0 * window.innerWidth\n            });   \n        };\n        \n\t\t$( 'body' ).waitForImages().progress( function( loaded, count, success ) {\n\t\t\t\n            imgTotal = count;\n            \n\t\t\tlet per = parseInt( loaded/(count - (1-videosTotal) ) * 100 );\n\t\t\t\n            //\n\t\t\tif ( $( 'img' ).length <= 1 ) {\n\t\t\t\tper = 100;\n\t\t\t}\n\t\t\t\n            //\n\t\t\tif ( isNaN( per ) ) per = 100;\n            \n            //\n            loadedPercent = per;\n\n\n            //animation classes for loader\n            for (let i = 1; i < 10; i++ ) {\n                if ( per < i*10 ) $( 'body' ).addClass( 'loaded' + i );\n            } \n\n\n            \n            \n            \n            //loading animation\n            loadingAnim( per );\n\n\t\t\t\n\t\t}).done( function() {\n            \n            \n            //Event after loading is complete\n            // Main scene\n            console.log( 'loadedPercent: ' + loadedPercent + ', imageTotal: ' + imgTotal );\n            mainObjLoader( loadedPercent, imgTotal );\n\n            \n            \n\t\t});    \n        \n        /*\n         * Main Object Loader\n         *\n         * @param  {Number} loadedPercent  - The percentage value after the page loads the image.\n         * @param  {Number} imgTotal       - The total number of imags.\n         * @return {Void}\n         */ \n        function mainObjLoader( loadedPercent, imgTotal ) {\n            \n            let remainedPercentComplete = 0;\n            \n            const loadedFun = function() {\n                \n                //loading animation\n                loadingAnim( 100 );\n                \n                \n                //animation classes for loader\n                $( 'body' ).addClass( 'loaded10' );\n                \n                // Remove loader\n                TweenMax.to( '.uix-loader, .uix-loader-progress, .uix-loader-progress__line', 0.5, {\n                    css: {\n                        opacity : 0,\n                        display : 'none'\n                    }\n                });\n                \n                \n                \n                //page animation when elements loaded\n                //...\n               \n                \n            };\n            \n            \n            \n            //\n            if ( loadedPercent < 100 ) {\n                \n                videos.forEach( function( element ) {\n\n                    let _src = element.find( 'source:first' ).attr( 'src' );\n                    if ( typeof _src === typeof undefined ) _src = element.attr( 'src' );\n\n                    const video    = document.getElementById( element.attr( 'id' ) ),\n                          videoURL = _src;\n\n                    video.addEventListener( 'loadedmetadata', function( e ) {\n\n                        //Video has started loading successfully\n                        videosLoaded++;\n                        \n                        //get remained percent\n                        remainedPercentComplete = (1 - videosLoaded / videosTotal) * (100 - loadedPercent);\n                        \n                        //current percent\n                        let currentPercent = loadedPercent + ( (100 - loadedPercent) - remainedPercentComplete );\n                        \n                        //loading animation\n                        loadingAnim( currentPercent );\n                        \n                        // All videos loaded\n                        if ( currentPercent == 100 ) {\n                            loadedFun();\n                        }   \n                        \n                        //debug\n                        console.log( 'remainedPercentComplete: ' + remainedPercentComplete + ', currentPercent: ' + currentPercent );\n                        console.log( 'videosTotal: ' + videosTotal + ', videosLoaded: ' + videosLoaded );\n\n                    }, false);\t\n\n                    video.src = videoURL;\n\n                });\n    \n            } else {\n                // All videos loaded\n                if ( remainedPercentComplete == 0 ) {\n                    loadedFun();\n                }  \n            }\n            \n            \n        }\n                \n        \n\n\n\t};\n\n\tmodule.components.documentReady.push( module.LOADER.documentReady );\n\n\treturn class LOADER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Mega Menu -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const MEGA_MENU = ( ( module, $, window, document ) => {\n\tif ( window.MEGA_MENU === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.MEGA_MENU               = module.MEGA_MENU || {};\n    module.MEGA_MENU.version       = '0.0.3';\n\tmodule.MEGA_MENU.pageLoaded = function() {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\n\t\t// Using delay is for more accurate calculation\n\t\tsetTimeout( function() {\n\t\t\tmegaMenuInit( windowWidth );\n\t\t}, 500 );\n\t\t\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tmegaMenuInit( windowWidth );\n\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\n\t\t\n\t\t// Initialize mega menu\n\t\tfunction megaMenuInit( w ) {\n\t\t\tlet $menuWrap  = $( '.uix-menu__container:not(.is-mobile)' ),\n\t\t\t\tmaxWidth     = 1140, //The maximum width of the mega menu wrapper\n\t\t\t\t\n\t\t\t\t//This value is equal to the $nav-mega-li-w variable in the SCSS\n\t\t\t    perDefaultW  = 270; //Default width of each column\n\n\t\t\t\n\t\t\t//New XL container for Bootstrap 4.x\n\t\t\tif ( w > 1430 ) maxWidth = 1278;\n\t\t\t\n\t\t\t//Full width container\n\t\t\tmaxWidth = windowWidth - 15;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t// Remove the html tag for mega menu item\n\t\t\t$menuWrap.find( 'li.multi-column  > ul .multi-column-title' ).each( function()  {\n\t\t\t\tconst mega_old_item = $( this ).html();\n\t\t\t\tif ( mega_old_item != '' ) {\n\t\t\t\t\t$( this ).html( mega_old_item.replace(/<[^>]+>/g, '' ) );\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tif ( w > 768 ){\n\n\t\t\t\t$menuWrap.find( 'li.multi-column' ).each( function( index ) {\n\t\t\t\t\tlet root_li          = $( this ),\n\t\t\t\t\t\tcol_total        = root_li.find( '> ul > li' ).length,\n\t\t\t\t\t\tmega_div         = root_li.find( ' > ul.sub-menu' ),\n\t\t\t\t\t\tmega_div_w       = mega_div.width(),\n\t\t\t\t\t\tmega_single_w    = null,\n\t\t\t\t\t\troot_li_left     = null;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t// Add mega arrow\n\t\t\t\t\tif ( root_li.find( '.uix-menu__arrow-mega' ).length < 1 ) root_li.prepend( '<span class=\"uix-menu__arrow-mega\"></span>' );\n\t\t\t\t\t\n\n\t\t\t\t\t// Detecting if the right or left of the div is touching the browser window edge.\n\t\t\t\t\tif ( col_total > 0 ) {\n\n\t\t\t\t\t\troot_li_left = UixCssProperty.getAbsoluteCoordinates( mega_div[0] ).left;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Determine the mega menu wrapper within document width, in order to limit the width of each column for mega menu\n\t\t\t\t\t\tif ( maxWidth > w ) maxWidth = w;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( parseFloat(mega_div_w + 20) > maxWidth ) {\n\n\t\t\t\t\t\t\tmega_div_w       = maxWidth;\n\t\t\t\t\t\t\tmega_single_w    = maxWidth/col_total - 2.888;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Resetting the width of each column\n\t\t\t\t\t\t\tmega_div.find( '> li' ).css( {\n\t\t\t\t\t\t\t\t'width' : mega_single_w + 'px'\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Resetting the width of each <li> tag\n\t\t\t\t\t\t\tmega_div.find( '> li ul li' ).css( {\n\t\t\t\t\t\t\t\t'width' : mega_single_w + 'px'\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif ( ! $( 'body' ).hasClass( 'rtl' ) ) {\n\t\t\t\t\t\t\t\tmega_div.css( {\n\t\t\t\t\t\t\t\t\t'margin-left' : ( - root_li_left ) + ( ( w - mega_div_w )/2 ) + 'px'\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmega_div.css( {\n\t\t\t\t\t\t\t\t\t'margin-right' : ( - root_li_left ) + ( ( w - mega_div_w )/2 ) + 'px'\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Resetting the width of each column\n\t\t\t\t\t\t\tmega_div.find( '> li' ).css( {\n\t\t\t\t\t\t\t\t'width' : perDefaultW + 'px'\n\t\t\t\t\t\t\t} );\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Resetting the width of each <li> tag\n\t\t\t\t\t\t\tmega_div.find( '> li ul li' ).css( {\n\t\t\t\t\t\t\t\t'width' : perDefaultW + 'px'\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconst chkWidth = parseFloat( root_li_left  + mega_div_w );\n\n\n\t\t\t\t\t\t\tif ( chkWidth > w ) {\n\t\t\t\t\t\t\t\tif ( ! $( 'body' ).hasClass( 'rtl' ) ) {\n\t\t\t\t\t\t\t\t\tmega_div.css( {\n\t\t\t\t\t\t\t\t\t\t'margin-left' : - ( chkWidth - w ) + 'px'\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmega_div.css( {\n\t\t\t\t\t\t\t\t\t\t'margin-right' : - ( chkWidth - w ) + 'px'\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//If the CSS sets the offset of ul::before\n//\t\t\t\t\t\t\t\tconst mega_div_offset = mega_div_w/2 - 0;\n//\t\t\t\t\t\t\t\t\n//\t\t\t\t\t\t\t\tif ( ! $( 'body' ).hasClass( 'rtl' ) ) {\n//\t\t\t\t\t\t\t\t\tmega_div.css( {\n//\t\t\t\t\t\t\t\t\t\t'margin-left' : - ( chkWidth - w ) + mega_div_offset + 'px'\n//\t\t\t\t\t\t\t\t\t} );\n//\t\t\t\t\t\t\t\t} else {\n//\t\t\t\t\t\t\t\t\tmega_div.css( {\n//\t\t\t\t\t\t\t\t\t\t'margin-right' : - ( chkWidth - w ) + mega_div_offset + 'px'\n//\t\t\t\t\t\t\t\t\t} );\n//\t\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\t\t\t}\n\n\n\t\t\t\t} );\t\n\n\t\t\t}\n\t\t}\t\t\n\n\t};\n\n\tmodule.components.pageLoaded.push( module.MEGA_MENU.pageLoaded );\n\n\treturn class MEGA_MENU {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Mobile Menu -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const MOBILE_MENU = ( ( module, $, window, document ) => {\n\tif ( window.MOBILE_MENU === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.MOBILE_MENU               = module.MOBILE_MENU || {};\n    module.MOBILE_MENU.version       = '0.0.8';\n\tmodule.MOBILE_MENU.documentReady = function( $ ) {\n\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\n\n\n\n\t\t//-------- Show Toolbar when viewing site for WordPress\n\t\t//Note: Don't use Waypoint, because the Offset is wrong on calculating height of fixed element\n\t\tconst $el = $( '.admin-bar .uix-menu-mobile__toggle' );\n\t\t$window.off( 'scroll.MOBILE_MENU touchmove.MOBILE_MENU' ).on( 'scroll.MOBILE_MENU touchmove.MOBILE_MENU', function() {\n\n\t\t\tconst scrolled = $( this ).scrollTop(),\n\t\t\t\t  spyTop    = 46;\n\t\t\t\n\t\t\tif ( scrolled >= spyTop ) {\n\t\t\t\t$el.addClass( 'is-fixed' );\n\t\t\t} else {\n\t\t\t\t$el.removeClass( 'is-fixed' );\t\n\t\t\t}\n\t\t\t\n\t\t});\n\n\n\n\t\t//-------- Mobile Menu\n\t\tconst $toggle     = $( '.uix-menu-mobile__toggle' ),\n\t\t\t  $toggleBody = $( 'body' );\n\n\n\n\t\t//-------- Add mobile menu to your website\n\t\t$( 'nav.uix-menu__container' ).clone().addClass( 'is-mobile' ).appendTo( 'body' );\n\t\t//Wait until previous .appendTo() is complete\n\t\t$.when( $( '.uix-menu__container.is-mobile' ).length > 0 ).then( function(){\n\n\n\t\t\t$toggle.on( 'touchstart click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t//Prevents further propagation of the current event in the capturing and bubbling phases.\n\t\t\t\te.stopPropagation(); \n\n\t\t\t\t$( this ).toggleClass( 'is-opened' );\n\t\t\t\tif ( $( this ).hasClass( 'is-opened' ) ) {\n\n\t\t\t\t\t//Add mobile brand\n\t\t\t\t\tconst logoURL = $( '.uix-brand--mobile img' ).attr( 'src' );\n\t\t\t\t\tif ( typeof logoURL !== typeof undefined && logoURL != '' ) {\n\t\t\t\t\t\tif ( logoURL.indexOf( 'blank.gif' ) >= 0 ) $( '.mobile-inner' ).css( 'margin-top', '-70px' );\n\t\t\t\t\t}\t\n\n\t\t\t\t\t//Toggle effect\n\t\t\t\t\t$toggleBody.addClass( 'js-uix-menu-opened' );\n\t\t\t\t} else {\n\t\t\t\t\t$toggleBody.removeClass( 'js-uix-menu-opened' );\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t//Mobile menu mask event\n\t\t\t$( '.uix-menu-mobile__mask' ).on( 'click', function() {\n\t\t\t\t$toggle.removeClass( 'is-opened' );\n\t\t\t\t$toggleBody.removeClass( 'js-uix-menu-opened' );\n\t\t\t});\n\n\n\n\t\t\t// Fires drop-menu event \n\t\t\tconst $drMenuLi = $( '.uix-menu__container.is-mobile ul li' );\n\n\t\t\t$drMenuLi.find( '> a' ).on( 'click', function( e ) {\n\t\t\t\t\n\t\t\t\tconst arrowText = $( this ).find( '.uix-menu__arrow-mobile' ).text().replace( /(.).*\\1/g, \"$1\" ),\n\t\t\t\t\t$sub      = $( this ).next( 'ul' );\n\n\t\t\t\tif ( $sub.length > 0 ) {\n\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\n\t\t\t\t\t//Its value is not a boolean but a string\n\t\t\t\t\tconst expanded = ( $( this ).attr( 'aria-expanded' ) == 'true' ) ? false : true;\n\n\t\t\t\t\tif ( expanded ) {\n\t\t\t\t\t\t//Hide other all sibling <ul> of the selected element\n\t\t\t\t\t\tconst $e = $( this ).parent( 'li' ).siblings().find( '> a' );\n\n\t\t\t\t\t\t$e.removeClass( 'is-opened' ).attr( 'aria-expanded', false );\n\t\t\t\t\t\t$e.parent( 'li' ).find( '.uix-menu__arrow-mobile' ).removeClass( 'is-opened' );\n\t\t\t\t\t\t$e.parent( 'li' ).removeClass( 'is-opened' );\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t$( this ).addClass( 'is-opened' ).attr( 'aria-expanded', true );\n\t\t\t\t\t\t$( this ).parent( 'li' ).find( '.uix-menu__arrow-mobile' ).addClass( 'is-opened' );\n\t\t\t\t\t\t$( this ).parent( 'li' ).addClass( 'is-opened' );\n\n\n\t\t\t\t\t\tTweenMax.to( $e.next( 'ul' ), 0.5, { height: 0 } );\n\n\t\t\t\t\t\t//to open\n\t\t\t\t\t\t// - temporarilty set height:auto\n\t\t\t\t\t\t// - tween from height:0\n\t\t\t\t\t\tTweenMax.set( $sub, { height: 'auto' } );\n\t\t\t\t\t\tTweenMax.from( $sub, 0.5, { height:0 } );\t\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t$( this ).removeClass( 'is-opened' ).attr( 'aria-expanded', false );\n\t\t\t\t\t\t$( this ).parent( 'li' ).find( '.uix-menu__arrow-mobile' ).removeClass( 'is-opened' );\n\t\t\t\t\t\t$( this ).parent( 'li' ).removeClass( 'is-opened' );\n\n\t\t\t\t\t\t//to close\n\t\t\t\t\t\tTweenMax.to( $sub, 0.5, { height: 0 } );\n\n\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tmobileMenuInit( windowWidth ); \n\n\t\t\t// Close the menu on window change\n\t\t\t$window.on( 'resize', function() {\n\t\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t\t// Update the window width for next time\n\t\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t\t// Do stuff here\n\t\t\t\t\t$toggleBody.removeClass( 'js-uix-menu-opened' );\n\t\t\t\t\t$toggle.removeClass( 'is-opened' );\n\t\t\t\t\tmobileMenuInit( windowWidth );\n\n\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t});\n\n\n\n\t\t/*\n\t\t * Initialize mobile menu\n\t\t *\n\t\t * @param  {Number} w                  - Returns width of browser viewport.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction mobileMenuInit( w ) {\n\n\t\t\tif ( w <= 768 ) {\n\t\t\t\t$( '.uix-menu__container.is-mobile .uix-menu > li' ).each( function() {\n\t\t\t\t\tif ( $( this ).find( 'ul' ).length > 0 ) {\n\t\t\t\t\t\tif ( $( this ).find( '.uix-menu__arrow-mobile' ).length < 1 ) $( this ).prepend( '<em class=\"uix-menu__arrow-mobile\"></em>' );\n\t\t\t\t\t\t$( this ).find( 'ul ul' ).addClass( 'sub-sub' );\n\t\t\t\t\t\t$( this ).find( ' > a' ).attr( 'href', 'javascript:void(0);' );\n\t\t\t\t\t}\n\t\t\t\t} );\t\t\n\t\t\t}\n\n\n\t\t}\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.MOBILE_MENU.documentReady );\n\n\treturn class MOBILE_MENU {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Navigation -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const NAVIGATION = ( ( module, $, window, document ) => {\n\tif ( window.NAVIGATION === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.NAVIGATION               = module.NAVIGATION || {};\n    module.NAVIGATION.version       = '0.0.9';\n\tmodule.NAVIGATION.documentReady = function( $ ) {\n\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\tconst ulForDesktop = '.uix-menu__container:not(.is-mobile) ul.uix-menu';\n\n\n\t\t//-------- Menu selected (if it exists \"data-current\" property in <ul>)\n\t\tconst curMenuIndex = $( ulForDesktop ).data( 'current' );\n\t\tif ( typeof curMenuIndex !== typeof undefined ) {\n\t\t\t$( ulForDesktop + ' > li:eq('+curMenuIndex+')' ).addClass( 'is-active' );\n\t\t}\n\n\n\n\t\t//-------- Menu Hover\n\t\tconst mTop = 15;\n\t\t$( ulForDesktop + ' > li.multi-column > ul li ul' ).addClass( 'multi' );\n\t\t$( ulForDesktop + ' > li:not(.multi-column) ul, .uix-menu__container:not(.is-mobile) li.multi-column > ul.sub-menu > li > ul, '+ulForDesktop+' li.multi-column > ul' ).css( 'margin-top', mTop + 'px' );\n\n\t\t$( ulForDesktop + ' li' ).on( 'mouseenter', function(){\n\n\n\t\t\tTweenMax.set( $( this ).find( ' > ul.sub-menu:not(.multi), .uix-menu__arrow-mega' ), {\n\t\t\t\tcss: {\n\t\t\t\t\topacity    : 0,\n\t\t\t\t\tdisplay    : 'block',\n\t\t\t\t\tmarginTop  : mTop + 'px'\n\t\t\t\t},\n\t\t\t\tonComplete : function() {\n\n\t\t\t\t\tTweenMax.to( this.target, 0.3, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\topacity    : 1,\n\t\t\t\t\t\t\tmarginTop  : 0\n\t\t\t\t\t\t},\n\t\t\t\t\t\tease   : Power2.easeOut\n\t\t\t\t\t});\t\t\n\n\n\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\n\n\n\t\t}).on( 'mouseleave' , function(){\n\n\n\t\t\tTweenMax.to( $( this ).find( ' > ul.sub-menu:not(.multi), .uix-menu__arrow-mega' ), 0.3, {\n\t\t\t\tcss: {\n\t\t\t\t\topacity    : 0,\n\t\t\t\t\tmarginTop  : mTop + 'px'\n\t\t\t\t},\n\t\t\t\tonComplete : function() {\n\n\t\t\t\t\tTweenMax.set( this.target, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\tdisplay    : 'none',\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\t\n\n\n\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\n\t\t});\n\n\n\n\t\t//-------- Add Sub-menu Arrow\n\t\t$( ulForDesktop + ' li' ).each( function() {\n\t\t\tif ( $( this ).find( 'ul' ).length > 0 ) {\n\t\t\t\t$( this ).prepend( '<span class=\"uix-menu__arrow\"></span>' );\n\t\t\t}\n\n\t\t} );\t\n\n\n\n\t\t//-------- Sticky primary navigation\n\t\t//Note: Don't use Waypoint, because the Offset is wrong on calculating height of fixed element\n\t\tconst $el = $( '.uix-menu__container:not(.is-mobile)' );\n\t\t$window.off( 'scroll.NAVIGATION touchmove.NAVIGATION' ).on( 'scroll.NAVIGATION touchmove.NAVIGATION', function() {\n\n\t\t\tconst scrolled = $( this ).scrollTop(),\n\t\t\t\t  spyTop   = 220;\n\t\t\t\n\t\t\tif ( scrolled >= spyTop ) {\n\t\t\t\t$el.addClass( 'is-fixed' );\n\t\t\t} else {\n\t\t\t\t$el.removeClass( 'is-fixed' );\t\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.NAVIGATION.documentReady );\n\n\treturn class NAVIGATION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Specify a background image -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixParallax from '@uixkit/core/_global/js/fn/UixParallax';\n\nexport const SET_BG = ( ( module, $, window, document ) => {\n\tif ( window.SET_BG === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.SET_BG               = module.SET_BG || {};\n    module.SET_BG.version       = '0.0.7';\n\tmodule.SET_BG.documentReady = function( $ ) {\n\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\t//  Initialize\n\t\tsetBGInit( windowWidth, windowHeight );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth  = window.innerWidth;\n\t\t\t\twindowHeight = window.innerHeight;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tsetBGInit( windowWidth, windowHeight );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\n\t\t/*\n\t\t * Initialize background using \"data-bg\" attribute.\n\t\t *\n\t\t * @param  {Number} w         - Returns width of browser viewport\n\t\t * @param  {Number} h         - Returns height of browser viewport\n\t\t * @return {Void}\n\t\t */\n\t\tfunction setBGInit( w, h ) {\n\t\t\t\n\t\t\t$( '[data-bg]' ).each( function() {\n\t\t\t\tconst $this    = $( this );\n                \n\t\t\t\tlet config   = $this.data( 'bg' );\n\n\n\t\t\t\tif ( typeof config === typeof undefined ) {\n\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\"src\"        : \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",\n\t\t\t\t\t\t\"position\"   : \"top left\",\n\t\t\t\t\t\t\"size\"       : \"cover\",\n\t\t\t\t\t\t\"repeat\"     : \"no-repeat\",\n\t\t\t\t\t\t\"offsetTop\"  : 0,\n\t\t\t\t\t\t\"fill\"       : false,\n\t\t\t\t\t\t\"parallax\"   : 0,\n                        \"transition\" : \"none 0s ease 0s\",\n                        \"move\"       : false  // {\"dir\":\"left\",\"duration\":\"10s\",\"easing\":\"linear\",\"loop\":true}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif ( config ) {\n\n\t\t\t\t\tlet dataImg       = config.src,\n\t\t\t\t\t\tdataPos       = config.position,\n\t\t\t\t\t\tdataSize      = config.size,\n\t\t\t\t\t\tdataRepeat    = config.repeat,\n\t\t\t\t\t\tdataEasing    = config.transition,\n                        dataOffsetTop = config.offsetTop,\n\t\t\t\t\t\tdataParallax  = config.parallax,\n                        dataMove      = config.move;\n\n\t\t\t\t\tif ( typeof dataPos === typeof undefined ) dataPos = 'top left';\n\t\t\t\t\tif ( typeof dataSize === typeof undefined ) dataSize = 'cover';\n\t\t\t\t\tif ( typeof dataRepeat === typeof undefined ) dataRepeat = 'no-repeat';\n\t\t\t\t\tif ( typeof dataOffsetTop === typeof undefined ) dataOffsetTop = 0;\n                    if ( typeof dataEasing === typeof undefined ) dataEasing = 'none 0s ease 0s';\n                    if ( typeof dataMove === typeof undefined ) dataMove = false;\n\n\n\t\t\t\t\t//Using parallax\n\t\t\t\t\tif ( dataParallax && typeof dataParallax != typeof undefined && dataParallax != 0 ) {\n\t\t\t\t\t\tdataPos = dataPos.replace( 'top', '50%' );\n\t\t\t\t\t}\n               \n                    \n                    //background animation\n                    let moveAnim             = 'none',\n                        moveAnimLoop         = 'infinite',\n                        moveEasing           = 'linear',\n                        moveKeyframesTop     = '@keyframes js-uix-cssanim--move-t{from{background-position:0 0;}to{background-position:0 -19999px;}',\n                        moveKeyframesBottom  = '@keyframes js-uix-cssanim--move-b{from{background-position:0 0;}to{background-position:0 19999px;}',\n                        moveKeyframesLeft    = '@keyframes js-uix-cssanim--move-l{from{background-position:0 0;}to{background-position:-19999px 0;}',\n                        moveKeyframesRight   = '@keyframes js-uix-cssanim--move-r{from{background-position:0 0;}to{background-position:19999px 0;}';\n\n\n                    if ( dataMove && Object.prototype.toString.call( dataMove )=='[object Object]' ) {\n\n                        if ( ! dataMove.loop ) moveAnimLoop = '1 forwards';\n\n                        dataPos = '0 0';\n\n\n                        switch (dataMove.dir) {\n                            case 'top':\n                                moveAnim = 'js-uix-cssanim--move-t '+parseInt(dataMove.speed)+'s '+moveEasing+' '+ moveAnimLoop;\n                                break;\n                            case 'bottom':\n                                moveAnim = 'js-uix-cssanim--move-b '+parseInt(dataMove.speed)+'s '+moveEasing+' '+ moveAnimLoop;        \n                                break;\n                            case 'left':\n                                moveAnim = 'js-uix-cssanim--move-l '+parseInt(dataMove.speed)+'s '+moveEasing+' '+ moveAnimLoop;    \n                                break;\n                            case 'right':\n                                moveAnim = 'js-uix-cssanim--move-r '+parseInt(dataMove.speed)+'s '+moveEasing+' '+ moveAnimLoop;            \n                                break;\n                        }\n\n\n                        //  CSS3 animation keyframe attributes inline\n                        if ( $( '#js-uix-cssanim--move-t' ).length == 0 ) {\n                            $( '<style id=\"js-uix-cssanim--move-t\">' )\n                                .text( moveKeyframesTop )\n                                .appendTo( 'head' );   \n                        }\n                        if ( $( '#js-uix-cssanim--move-b' ).length == 0 ) {\n                            $( '<style id=\"js-uix-cssanim--move-b\">' )\n                                .text( moveKeyframesBottom )\n                                .appendTo( 'head' );   \n                        }\n                        if ( $( '#js-uix-cssanim--move-l' ).length == 0 ) {\n                            $( '<style id=\"js-uix-cssanim--move-l\">' )\n                                .text( moveKeyframesLeft )\n                                .appendTo( 'head' );   \n                        }\n                        if ( $( '#js-uix-cssanim--move-r' ).length == 0 ) {\n                            $( '<style id=\"js-uix-cssanim--move-r\">' )\n                                .text( moveKeyframesRight )\n                                .appendTo( 'head' );   \n                        }          \n\n\n                    }\n\n\t\t\t\t\t\n                    \n                    //-----\n\t\t\t\t\tif ( typeof dataImg != typeof undefined && dataImg != '' ) {\n\n\t\t\t\t\t\tif ( config.fill ) {\n\t\t\t\t\t\t\t//Show Image Under Text\n\t\t\t\t\t\t\tif ( Modernizr.cssanimations ) {\n\t\t\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t\t\t'background'               : 'url('+dataImg+') '+dataRepeat+'',\n\t\t\t\t\t\t\t\t\t'background-size'          : dataSize,\n\t\t\t\t\t\t\t\t\t'-webkit-background-clip'  : 'text',\n\t\t\t\t\t\t\t\t\t'-webkit-text-fill-color'  : 'transparent',\n                                    'animation'                : moveAnim\n\t\t\t\t\t\t\t\t} );\t\n\n\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t} else {\n                            \n\t\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t\t'background-image'    : 'url('+dataImg+')',\n\t\t\t\t\t\t\t\t'background-position' : dataPos,\n\t\t\t\t\t\t\t\t'background-size'     : dataSize,\n\t\t\t\t\t\t\t\t'background-repeat'   : dataRepeat,\n                                'animation'           : moveAnim\n\t\t\t\t\t\t\t} );\t\n                            \n                            \n                            \n\n                            \n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t//Using parallax\n\t\t\t\t\t\tif ( dataParallax && typeof dataParallax != typeof undefined && dataParallax != 0 ) {\n\n\t\t\t\t\t\t\t$this.UixParallax( { 'speed': dataParallax, 'transition' : dataEasing, 'offsetTop': dataOffsetTop, 'bg': { enable: true, xPos: '50%' } } );\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t}\t\n\n\n\t\t\t\t}\n\n\n\n\n\t\t\t});\n\t\n\t\t\t\n\t\t}\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.SET_BG.documentReady );\n\n\treturn class SET_BG {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Videos -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const VIDEOS = ( ( module, $, window, document ) => {\n\tif ( window.VIDEOS === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.VIDEOS               = module.VIDEOS || {};\n    module.VIDEOS.version       = '0.1.3';\n\tmodule.VIDEOS.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\t\t\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Video Embed\n\t\t ---------------------------\n\t\t */  \n\t\t$( '.uix-video' ).each( function()  {\n\t\t\tconst $this          = $( this );\n            \n\t\t\tconst curVideoID     = $this.find( 'video' ).attr( 'id' ),\n\t\t\t\t  coverPlayBtnID = 'videocover-' + curVideoID,\n\t\t\t\t  videoWrapperW  = $this.closest( '[data-embed-video-wrapper]' ).width();\n                  \n\t\t\tlet\tdataAuto       = $this.data( 'embed-video-autoplay' ),\n\t\t\t\tdataLoop       = $this.data( 'embed-video-loop' ),\n\t\t\t\tdataControls   = $this.data( 'embed-video-controls' ),\n\t\t\t\tdataW          = $this.data( 'embed-video-width' ),\n\t\t\t\tdataH          = $this.data( 'embed-video-height' );\n\n\t\t\t\n\t\t\t//Push a new ID to video\n\t\t\t//Solve the problem that ajax asynchronous loading does not play\n\t\t\t$this.find( '.video-js' ).attr( 'id', curVideoID );\n\t\n\t\t\t\n\t\t\tif ( typeof dataAuto === typeof undefined ) {\n\t\t\t\tdataAuto = true;\n\t\t\t}\n\t\t\tif ( typeof dataLoop === typeof undefined ) {\n\t\t\t\tdataLoop = true;\n\t\t\t}\n\t\t\tif ( typeof dataControls === typeof undefined ) {\n\t\t\t\tdataControls = false;\n\t\t\t}\t\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof dataW === typeof undefined || dataW == 'auto' ) {\n\t\t\t\tdataW = videoWrapperW;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof dataH === typeof undefined || dataH == 'auto' ) {\n\t\t\t\tdataH = videoWrapperW/1.77777777777778;\n\t\t\t}\n\t\t\t\n\t\t\t//Display cover and play buttons when some mobile device browsers cannot automatically play video\n\t\t\tif ( $( '#' + coverPlayBtnID ).length == 0 ) {\n\t\t\t\t\n\t\t\t\t$( '<div id=\"'+coverPlayBtnID+'\" class=\"uix-video__cover\"><span class=\"uix-video__cover__placeholder\" style=\"background-image:url('+$this.find( 'video' ).attr( 'poster' )+')\"></span><span class=\"uix-video__cover__playbtn\"></span></div>' ).insertBefore( $this );\n\t\t\t\t\n\t\t\t\t\n\t\n\t\t\t\tconst btnEv = ( Modernizr.touchevents ) ? 'touchstart' : 'click';\n\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).on( btnEv, function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\n\t\t\t\t\tmyPlayer.play();\n\t\t\t\t\t\n\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t//Prevent some devices from automatically playing video and trigger with buttons\n\t\t\t\tif ( !dataAuto || browser.isAndroid ) {\n\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t \n\n\t\t\t/* ---------  HTML5 video autoplay on mobile revisited  */\n\t\t\tif ( windowWidth <= 768 ) {\n\t\t\t\t$this.find( '.video-js' ).attr({\n\t\t\t\t\t'playsinline' : 'true'\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tconst myPlayer = videojs( curVideoID, \n\t\t\t   {\n\t\t\t\t  width     : dataW,\n\t\t\t\t  height    : dataH,\n\t\t\t\t  loop      : dataLoop,\n\t\t\t\t  autoplay  : dataAuto\n\t\t\t\t}, \n\t\t\t   function onPlayerReady() {\n\t\t\t\t\n\t\t\t\n\t\t\t\t    const initVideo = function( obj ) {\n\t\t\t\t\t\t//Get Video Dimensions\n\t\t\t\t\t\tlet curW    = obj.videoWidth(),\n\t\t\t\t\t\t\tcurH    = obj.videoHeight(),\n\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\tnewW = videoWrapperW;\n\n\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\tnewH = curH*(newW/curW);\n\n\n\t\t\t\t\t\tif ( !isNaN( newW ) && !isNaN( newH ) )  {\n\t\t\t\t\t\t\tobj.height( newH );\t\t\n\t\t\t\t\t\t\tobj.width( newW );\t\t\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t//Show this video wrapper\n\t\t\t\t\t\t$this.css( 'visibility', 'visible' );\n\n\t\t\t\t\t\t//Hide loading effect\n\t\t\t\t\t\t$this.find( '.vjs-loading-spinner, .vjs-big-play-button' ).hide();\t\t\n\t\t\t\t\t}\n\n\n\t\t\t\t\tinitVideo( this );\n\t\t\t\t\n\t\t\t\t\t/* ---------  Video initialize */\n\t\t\t\t\tthis.on( 'loadedmetadata', function() {\n\n\t\t\t\t\t\tinitVideo( this );\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\t\t/* ---------  Set, tell the player it's in fullscreen  */\n\t\t\t\t\tif ( dataAuto ) {\n\n\t\t\t\t\t\tthis.muted( true ); //Fix an error of Video auto play is not working in browser\n\t\t\t\t\t\tthis.play();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t/* ---------  Disable control bar play button click */\n\t\t\t\t\tif ( !dataControls ) {\n\t\t\t\t\t\tthis.controls( false );\n\t\t\t\t\t}\n\n\n\t\t\t\t\t/* ---------  Determine if the video is auto played from mobile devices  */\n\t\t\t\t\tlet autoPlayOK = false;\n\n\t\t\t\t\tthis.on( 'timeupdate', function() {\n\n\t\t\t\t\t\tlet duration = this.duration();\n\t\t\t\t\t\tif ( duration > 0 ) {\n\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\tif ( this.currentTime() > 0 ) {\n\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\tthis.off( 'timeupdate' );\n\n\t\t\t\t\t\t\t\t//Hide cover and play buttons when the video automatically played\n\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\t\t\t\t\t\t\t} \n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t    });\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\n\t\t/* \n\t\t ---------------------------\n\t\t Video Popup Interaction\n\t\t ---------------------------\n\t\t */  \n\t\tconst modalDialogTrigger = '[data-video-win]';\n\t\t\n\t\t//Add video container\n\t\t$( modalDialogTrigger ).each( function()  {\n\t\t\t\n\n\t\t\tconst $this             = $( this );\n            \n\t\t\tlet\tvideoSrcIfm       = '',\n\t\t\t\tvideoSrcMp4       = $this.data( 'video-mp4' ),\n\t\t\t\tvideoSrcWebm      = $this.data( 'video-webm' ),\n\t\t\t\tvideoSrcOgv       = $this.data( 'video-ogv' ),\n\t\t\t\tvideoPoster       = $this.data( 'video-poster' ),\n\t\t\t\tvideoContainerMid = $this.data( 'modal-id' ),\n\t\t\t\tvideoContainerVid = videoContainerMid + '--videopush';\n\t\t\t\t\n\t\t\t\n\t\t\tif ( typeof videoSrcMp4 === typeof undefined ) {\n\t\t\t\tvideoSrcMp4 = '';\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof videoSrcWebm === typeof undefined ) {\n\t\t\t\tvideoSrcWebm = '';\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof videoSrcOgv === typeof undefined ) {\n\t\t\t\tvideoSrcOgv = '';\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif ( $this.find( '[data-video-iframe]' ).length > 0 ) {\n\t\t\t\tvideoSrcIfm = $this.find( '[data-video-iframe]' ).html();\n\t\t\t}\n\t\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t//Add modal dialog\n\t\t\tif ( $( '#' + videoContainerMid ).length == 0 ) {\n\t\t\t\t\n\t\t\t\tlet v      = '',\n\t\t\t\t\tvmp4   = '',\n\t\t\t\t\tvwebm  = '',\n\t\t\t\t\tvogv   = '';\n\t\t\t\t\n\t\t\t\tif ( videoSrcMp4 != '' ) {\n\t\t\t\t\tvmp4 = '<source src=\"'+videoSrcMp4+'\" type=\"video/mp4\">';\n\t\t\t\t}\n\t\t\t\tif ( videoSrcWebm != '' ) {\n\t\t\t\t\tvwebm = '<source src=\"'+videoSrcWebm+'\" type=\"video/webm\">';\n\t\t\t\t}\n\t\t\t\tif ( videoSrcOgv != '' ) {\n\t\t\t\t\tvogv = '<source src=\"'+videoSrcOgv+'\" type=\"video/ogv\">';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tv += '<div class=\"uix-modal-box is-fullscreen is-video\" role=\"dialog\" tabindex=\"-1\" aria-hidden=\"true\" id=\"'+videoContainerMid+'\">';\n\t\t\t\tv += '<button type=\"button\" class=\"uix-modal-box__close\" data-modal-close-trigger=\"true\"></button>';\n\t\t\t\tv += '<div class=\"uix-modal-box__content\" role=\"document\">';\n\t\t\t\tv += '<div class=\"uix-modal-box__video-waiting\"></div><div class=\"uix-modal-box__video-container\" data-video-player-init=\"0\">';\n\t\t\t\t\n\t\t\t\tif ( $this.find( '[data-video-iframe]' ).length > 0 && videoSrcIfm != '' ) {\n\t\t\t\t\t//If iframe\n\t\t\t\t\tv += '<div id=\"'+videoContainerVid+'\" class=\"embed-responsive embed-responsive-16by9\">';\n\t\t\t\t\tv += videoSrcIfm;\n\t\t\t\t\tv += '</div>';\t\t\t\n\n\t\t\t\t} else {\n\t\t\t\t\t//If local video\n\t\t\t\t\tv += '<video id=\"'+videoContainerVid+'\" class=\"video-js vjs-default-skin\" controls poster=\"'+videoPoster+'\">';\n\t\t\t\t\tv += vmp4 + vwebm + vogv;\n\t\t\t\t\tv += '</video>';\n\t\t\t\t}\n\n\t\t\t\tv += '</div>';\n\t\t\t\tv += '</div>';\n\t\t\t\tv += '</div>';\n\n\t\t\t\t\n\t\t\t\t//Wait until previous .append() is complete\n\t\t\t\t$( v ).appendTo( 'body' );\n\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\t//Check out: http://docs.videojs.com/tutorial-player-workflows.html\n\t\t$( document ).off( 'click.VIDEOS' ).on( 'click.VIDEOS', modalDialogTrigger, function() {\n\n\t\t\tconst vid          = $( this ).data( 'modal-id' ) + '--videopush',\n\t\t\t\t  newMaxW      = windowWidth - 80,\n\t\t\t\t  newMaxH      = windowHeight - 80,\n\t\t\t\t  $vContainer  = $( '#' + vid ).closest( '.uix-modal-box__video-container' ),\n\t\t\t\t  $vLoader     = $vContainer.prev( '.uix-modal-box__video-waiting' ),\n\t\t\t\t  myPlayerInit = $vContainer.data( 'video-player-init' );\n\n\t\t\tlet $ifm = false;\n\n\t\t\t//----- Hidden/Display the wrapper of video\n\t\t\tconst displayVC = function() {\n\t\t\t\t\n\t\t\t\tTweenMax.set( $vContainer, {\n\t\t\t\t\talpha: 1\n\t\t\t\t});\n\t\t\t\t$vLoader.removeClass( 'is-active' );\n\t\t\t};\n\t\t\t\n\t\t\tconst hiddenVC = function() {\n\t\t\t\t\n\t\t\t\tTweenMax.set( $vContainer, {\n\t\t\t\t\talpha: 0\n\t\t\t\t});\n\n\t\t\t\t$vLoader.addClass( 'is-active' );\n\t\t\t};\n\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t//----- Embed iframe\n\t\t\tif ( $( '#' + vid ).find( 'iframe' ).length > 0 ) {\n\t\t\t\t$ifm = $( '#' + vid ).find( 'iframe' );\n\t\t\t} else {\n\t\t\t\thiddenVC();\n\t\t\t}\n\n\n\t\t\tif ( $ifm && typeof $ifm === 'object' ) {\n\n\t\t\t\tif ( $ifm.length > 0 ) {\n\n\t\t\t\t\tlet curW    = $ifm.width(),\n\t\t\t\t\t\tcurH    = $ifm.height(),\n\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\tnewH    = curH;\n\n\n\n\t\t\t\t\tif ( curH > newMaxH ) {\n\t\t\t\t\t\tnewH = newMaxH;\n\n\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\tnewW = curW*(newH/curH);\n\n\t\t\t\t\t}\t\n\n\t\t\t\t\tif ( newW > newMaxW ) {\n\t\t\t\t\t\tnewW = newMaxW;\n\n\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\tnewH = curH*(newW/curW);\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\n\t\t\t\t\t$ifm.css({\n\t\t\t\t\t\t'left'   : ( newMaxW - newW )/2 + 'px',\n\t\t\t\t\t\t'top'    : ( newMaxH - newH )/2 + 'px',\n\t\t\t\t\t\t'height' : newH + 'px',\n\t\t\t\t\t\t'width'  : newW + 'px'\n\t\t\t\t\t});\t\n\n\t\t\t\t\tif ( windowWidth <= 768 ) {\n\t\t\t\t\t\t$ifm.css({\n\t\t\t\t\t\t\t'top'    : 0\n\t\t\t\t\t\t}).parent( '.embed-responsive' ).css({\n\t\t\t\t\t\t\t'top'    : ( newMaxH - newH )/2 + 'px'\n\t\t\t\t\t\t});\t\t\n\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\n\t\t\t//----- HTML5 video autoplay on mobile revisited\n\t\t\tif ( windowWidth <= 768 ) {\n\t\t\t\t$( '#' + vid ).attr({\n\t\t\t\t\t'playsinline' : 'true'\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\n\n\t\t\t//----- Embed local video\n\t\t\tconst myPlayer = videojs( vid, \n\t\t\t   {\n\t\t\t\t  width     : 1,\n\t\t\t\t  height    : 1,\n\t\t\t\t  autoplay  : true,\n\t\t\t\t  loop      : true\n\t\t\t\t}, \n\t\t\t   function onPlayerReady() {\n\t\t\t\t\n\t\t\t\n\t\t\t\t    const initVideo = function( obj ) {\n\t\t\t\t\t\t//Get Video Dimensions\n\t\t\t\t\t\tlet curW    = obj.videoWidth(),\n\t\t\t\t\t\t\tcurH    = obj.videoHeight(),\n\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\t//Resise modal\n\t\t\t\t\t\tif ( curH > newMaxH ) {\n\t\t\t\t\t\t\tnewH = newMaxH;\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewW = curW*(newH/curH);\n\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( newW > newMaxW ) {\n\t\t\t\t\t\t\tnewW = newMaxW;\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH = curH*(newW/curW);\n\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t\tobj.height( newH );\t\t\n\t\t\t\t\t\tobj.width( newW );\n\n\n\t\t\t\t\t\t//In order to allow CSS to support video centering\n\t\t\t\t\t\t$vContainer.find( ' > div.video-js' ).css({\n\t\t\t\t\t\t\t'width' : newW + 'px'\n\t\t\t\t\t\t});\t\t\t\n\n\n\t\t\t\t\t\t//Vertically center the video area\n\t\t\t\t\t\tlet mt = parseFloat( windowHeight - newH )/2 - 50;\n\t\t\t\t\t\t$vContainer.css({\n\t\t\t\t\t\t\t'transform' : 'translateY('+ mt +'px)'\n\t\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\t//Display the wrapper of video\n\t\t\t\t\t\tdisplayVC();\t\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\tinitVideo( this );\n\t\t\t\t\n\t\t\t\t\t/* ---------  Video Modal initialize */\n\t\t\t\t\tthis.on( 'loadedmetadata', function() {\n\n\t\t\t\t\t\tinitVideo( this );\n\n\t\t\t\t\t\t//If a player instance has already been created for this variable.\n\t\t\t\t\t\t$vContainer.data( 'video-player-init', 1 );\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\t/* ---------  Set, tell the player it's in fullscreen  */\n\t\t\t\t\t//this.exitFullscreen();\n\t\t\t\t\t//this.requestFullscreen();\n\t\t\t\t\tthis.play();\n\n\t\t\t\t\t/* ---------  Disable control bar play button click */\n\t\t\t\t\t//this.controls( false );\n\n\t\t\t\t\t/* ---------  Display video playback progress  */\n\t\t\t\t\tthis.on( 'timeupdate', function() {\n\n\t\t\t\t\t\tlet duration = this.duration(),\n\t\t\t\t\t\tprogressAmount = '0%';\n\t\t\t\t\t\tif (duration > 0) {\n\t\t\t\t\t\t\tprogressAmount = ((this.currentTime() / duration) * 100) + \"%\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//console.log( progressAmount );\n\t\t\t\t\t});\n\n\t\t\t\t\t/* ---------  Callback for when a video has ended */\n\t\t\t\t\tthis.on( 'ended', function() {\n\t\t\t\t\t\t//console.log( 'video is done!' );\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t    });\n\t\t\t\n\n\t\t\t\n\t\t\t/* ---------  Display the wrapper of video  */\n\t\t\tif ( myPlayerInit === 1 ) {\n\t\t\t\tdisplayVC();\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t/* ---------  Close the modal  */\n\t\t\t$( document ).off( 'click.VIDEOS_CLOSE' ).on( 'click.VIDEOS_CLOSE', '.uix-modal-box [data-modal-close-trigger], .uix-modal-mask:not(.js-uix-disabled)', function() {\n\n\t\t\t\tmyPlayer.ready(function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t\t\n\t\t\t\t});\t\t\t\t\n\n\t\t\t});\n\n\n\t\t});\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.VIDEOS.documentReady );\n\n\treturn class VIDEOS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Theme Scripts  -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const MAIN = ( ( module, $, window, document ) => {\n\tif ( window.MAIN === null ) return false;\n\t\n\t\n\t\n    module.MAIN               = module.MAIN || {};\n    module.MAIN.version       = '0.0.1';\n    module.MAIN.documentReady = function( $ ) {\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Function Here\n\t\t ---------------------------\n\t\t */ \n\t\t//your code here...\n\t\n\t\t\n\t\t\n    };\n\t\n    module.MAIN.pageLoaded    = function() {\n\n\t\t/* \n\t\t ---------------------------\n\t\t Function Here\n\t\t ---------------------------\n\t\t */ \n\t\t//your code here...\n\t\t\n    };\n\t\n\n    module.components.documentReady.push( module.MAIN.documentReady );\n    module.components.pageLoaded.push( module.MAIN.pageLoaded );\t\n\n\treturn class MAIN {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Accordion Background Images -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const ACCORDION_BG = ( ( module, $, window, document ) => {\n\tif ( window.ACCORDION_BG === null ) return false;\n\t\n\t\n\t\n    module.ACCORDION_BG               = module.ACCORDION_BG || {};\n    module.ACCORDION_BG.version       = '0.0.7';\n    module.ACCORDION_BG.documentReady = function( $ ) {\n\t\t\n\t\t\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\t\t\n\t\t\n\t\tif ( windowWidth <= 768 ) return false;\n\t\t\n\t\t\n\t\t$( '.uix-accordion-img' ).each( function() {\n\t\t\tconst $this           = $( this );\n            \n\t\t\tlet\taEvent          = $this.data( 'event' ),\n\t\t\t\toutReset        = $this.data( 'out-reset' ),\n\t\t\t\tactiveIndex     = $this.data( 'actived-item' ),\n\t\t\t\toffsetVal       = $this.data( 'offset' ),\n\t\t\t\tdir             = $this.data( 'direction' ),\n\t\t\t\tcloseBtn        = $this.data( 'close-btn' ),\n\t\t\t\t$li             = $this.find( '> ul' ).children( 'li' ),\n\t\t\t\ttotal           = $li.length;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof activeIndex === typeof undefined ) {\n\t\t\t\tactiveIndex = false;\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tif ( typeof aEvent === typeof undefined ) {\n\t\t\t\taEvent = 'click';\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof outReset === typeof undefined ) {\n\t\t\t\toutReset = true;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof offsetVal === typeof undefined ) {\n\t\t\t\toffsetVal = '60%';\n\t\t\t}\t\t\n\t\t\t\n\t\t\t//Initialize the width or height of each item\n\t\t\titemInit();\n\t\t\t\n\t\t\t\n\n\t\t\t$li.on( aEvent, function( e ) {\n\t\t\t\t//Prevents further propagation of the current event in the capturing and bubbling phases.\n\t\t\t\te.stopPropagation();\n\t\t\t\n\t\t\t\t\n\t\t\t\t//Apply click method to outer div but not inner div\n\t\t\t\tif ( e.target.className == 'uix-accordion-img__content__info' || e.target.className == 'uix-accordion-img__content' ) {\n\t\t\t\t\t\n\t\t\t\t\tif ( $( this ).hasClass( 'is-active' ) ) {\n\t\t\t\t\t\t$( this ).addClass( 'is-active' );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t$li.addClass( 'active-sub' );\n\t\t\t\t\t\t$( this ).addClass( 'is-active' );\n\t\t\t\t\t\t$( this ).siblings().removeClass( 'is-active' );\n\n\t\t\t\t\t\tif ( dir == 'verticle' ) {\n\t\t\t\t\t\t\t$li.css( 'height', ( 100 - parseFloat( offsetVal ) )/(total - 1) + '%' );\n\t\t\t\t\t\t\t$( this ).css( 'height', offsetVal );\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$li.css( 'width', ( 100 - parseFloat( offsetVal ) )/(total - 1) + '%' );\n\t\t\t\t\t\t\t$( this ).css( 'width', offsetVal );\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\n\t\t\t}); \n\t\t\t\n\t\t\tif ( outReset ) {\n\t\t\t\t$this.on( 'mouseleave', function( e ) {\n\t\t\t\t\titemInit();\n\t\t\t\t}); \t\n\t\t\t}\n\t\t\t\n\t\t\tif ( typeof closeBtn != typeof undefined && closeBtn != false && closeBtn != '' ) {\n\t\t\t\t$( closeBtn ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\titemInit();\n\t\t\t\t}); \t\t\n\t\t\t\t\n\t\t\t}\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Active the target item\n\t\t\t *\n\t\t     * @param  {Number} index     - The index value of the item to be activated.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction itemActiveItem( index ) {\n\t\t\t\t\n\t\t\t\tif ( index >= 0 ) {\n\t\t\t\t\t\n\n\t\t\t\t\tif ( dir == 'verticle' ) {\n\t\t\t\t\t\t$li.css( 'height', ( 100 - parseFloat( offsetVal ) )/(total - 1) + '%' );\n\t\t\t\t\t\t$li.eq( index ).css( 'height', offsetVal ).addClass( 'is-active' );\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$li.css( 'width', ( 100 - parseFloat( offsetVal ) )/(total - 1) + '%' );\n\t\t\t\t\t\t$li.eq( index ).css( 'width', offsetVal ).addClass( 'is-active' );\t\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\titemActiveItem( parseFloat( activeIndex ) );\n\t\t\t\n\t\t\t\n\t\n\t\t\t/*\n\t\t\t * Initialize the width or height of each item\n\t\t\t *\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction itemInit() {\n\t\t\t\t\n\n\t\t\t\tif ( dir == 'verticle' ) {\n\t\t\t\t\t$li.removeClass( 'is-active active-sub' ).css( 'height', 100/total + '%' );\n\t\t\t\t} else {\n\t\t\t\t\t$li.removeClass( 'is-active active-sub' ).css( 'width', 100/total + '%' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\n\t\t\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.ACCORDION_BG.documentReady );\n\n\treturn class ACCORDION_BG {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Accordion -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const ACCORDION = ( ( module, $, window, document ) => {\n\tif ( window.ACCORDION === null ) return false;\n\t\n\t\n\t\n    module.ACCORDION               = module.ACCORDION || {};\n    module.ACCORDION.version       = '0.0.3';\n    module.ACCORDION.documentReady = function( $ ) {\n\n\t\t$( '.uix-accordion' ).each( function() {\n\t\t\tconst $this           = $( this );\n            \n\t\t\tconst $li             = $this.children( 'dl' ),\n\t\t\t\t  $titlebox       = $this.find( 'dt' );\n            \n\t\t\tlet\taEvent          = $this.data( 'event' ),\n\t\t\t\tfirstShow       = $this.data( 'first-show' );\n            \n\n\t\t\t\n\t\t\t\n\t\t\tconst openItem = function( obj ) {\n\t\t\t\t//to open\n\t\t\t\t// - temporarilty set height:auto\n\t\t\t\t// - tween from height:0\n\t\t\t\tTweenMax.set( obj, { height: 'auto' } );\n\t\t\t\tTweenMax.from( obj, 0.5, { height:0 } );\t\t\n\t\t\t};\n\t\t\t\n\t\t\tif ( typeof aEvent === typeof undefined ) {\n\t\t\t\taEvent = 'click';\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof firstShow === typeof undefined ) {\n\t\t\t\tfirstShow = false;\n\t\t\t}\t\t\n\t\t\t\n\t\t\n\t\t\tif ( firstShow ) {\n\t\t\t\t$li.first().addClass( 'is-active' ).attr( 'aria-expanded', true );\n\t\t\t\topenItem( $li.first().find( 'dd' ) );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\n\t\t\t$li.off( aEvent ).on( aEvent, function( e ) {\n\t\t\t\t//Prevents further propagation of the current event in the capturing and bubbling phases.\n\t\t\t\te.stopPropagation();\n\t\t\t\t\n\t\t\t\n\t\t\t\t//Its value is not a boolean but a string\n\t\t\t\tconst expanded = ( $( this ).attr( 'aria-expanded' ) == 'true' ) ? false : true,\n\t\t\t\t\t  $content = $( this ).find( 'dd' );\n\t\t\t\t\n\t\t\t\tif ( expanded ) {\n\t\t\t\t\t//Hide other all sibling <dt> of the selected element\n\t\t\t\t\tconst $e = $( this ).siblings();\n\t\t\t\t\t$e.removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\t\t\t\t\t\n\t\t\t\t\t$( this ).addClass( 'is-active' ).attr( 'aria-expanded', true );\n\t\t\t\t\t\n\t\t\t\t\tTweenMax.to( $e.find( 'dd' ), 0.5, { \n\t\t\t\t\t\theight: 0\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\t//to open\n\t\t\t\t\topenItem( $content );\n\n\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\tif ( e.type == 'click' ) {\n\t\t\t\t\t\t$( this ).removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\t\t\t\t\t\t\n\t\t\t\t\t\t//to close\n\t\t\t\t\t\tTweenMax.to( $content, 0.5, { height: 0 } );\n\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t}); \n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n    };\n\n    module.components.documentReady.push( module.ACCORDION.documentReady );\n\t\n\n\treturn class ACCORDION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Advanced Slider (Basic) -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_basic.scss';\n\n\nexport const ADVANCED_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.ADVANCED_SLIDER === null ) return false;\n\t\n    \n    module.ADVANCED_SLIDER               = module.ADVANCED_SLIDER || {};\n    module.ADVANCED_SLIDER.version       = '0.2.3';\n    module.ADVANCED_SLIDER.pageLoaded    = function() {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\tlet\tanimDelay = 0;\n\t\tconst $sliderWrapper = $( '.uix-advanced-slider' );\n\t\t\t\n        \n        \n\t\t\t\n\t\tsliderInit( false );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\tsliderInit( true );\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Initialize slideshow\n\t\t *\n\t\t * @param  {Boolean} resize            - Determine whether the window size changes.\n\t\t * @return {Void}\n\t\t */\n        function sliderInit( resize ) {\n\t\n\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\tconst $this                    = $( this );\n                \n\t\t\t\tconst $items                   = $this.find( '.uix-advanced-slider__item' ),\n\t\t\t\t      $first                   = $items.first(),\n                      activated                = $this.data( 'activated' ); \n                \n\t\t\t\tlet\t  nativeItemW,\n\t\t\t\t\t  nativeItemH;\n                      \n\t\t\t\t\n\t\t\t\t\n                \n                if ( typeof activated === typeof undefined || activated === 0 ) {\n                    \n\n                    //Get parameter configuration from the data-* attribute of HTML\n                    let dataControlsPagination   = $this.data( 'controls-pagination' ),\n                        dataControlsArrows       = $this.data( 'controls-arrows' ),\n                        dataDraggable            = $this.data( 'draggable' ),\n                        dataDraggableCursor      = $this.data( 'draggable-cursor' ),                     \n                        dataCountTotal           = $this.data( 'count-total' ),\n                        dataCountCur             = $this.data( 'count-now' );\n\n\n                    if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-advanced-slider__pagination';\n                    if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-advanced-slider__arrows';\n                    if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                    if ( typeof dataDraggableCursor === typeof undefined || dataDraggableCursor == false ) dataDraggableCursor = 'move';\n                    if ( typeof dataCountTotal === typeof undefined ) dataCountTotal = 'p.count em.count';\n                    if ( typeof dataCountCur === typeof undefined ) dataCountCur = 'p.count em.current';\n\n                    \n                    //Autoplay parameters\n                    let dataAuto                   = $this.data( 'auto' ),\n                        dataTiming                 = $this.data( 'timing' ),\n                        dataLoop                   = $this.data( 'loop' );  \n                    \n                    if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                    if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                    if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n                    \n                    \n                    //Autoplay times\n                    let playTimes;\n                    //A function called \"timer\" once every second (like a digital watch).\n                    $this[0].animatedSlides;\n\n\n\n\t\t\t\t\t//Get the duration of the animation from CSS/SCSS\n\t\t\t\t\t//-------------------------------------\t\n                    animDelay = UixCssProperty.getTransitionDuration( $first[0] );\n\n\n\t\t\t\t\t//Initialize the properties of each Item\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\t$items.each( function( index )  {\n\t\t\t\t\t\tconst _item = $( this );\n\t\t\t\t\t\t_item.delay( animDelay*index ).queue( 'fx', function() { \n\t\t\t\t\t\t\t$( this ).addClass( 'is-loaded' ).dequeue();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\n                    //Initialize the first item container\n                    //-------------------------------------\t\t\n                    $items.addClass( 'next' );\n\n                    setTimeout( function() {\n                        $first.addClass( 'is-active' );\n                    }, animDelay );\n\n\n                    if ( $first.find( 'video' ).length > 0 ) {\n\n                        //Returns the dimensions (intrinsic height and width ) of the video\n                        const video = document.getElementById( $first.find( 'video' ).attr( 'id' ) );\n                        let videoURL = $first.find( 'source:first' ).attr( 'src' );\n                        \n                        if ( typeof videoURL === typeof undefined ) videoURL = $first.attr( 'src' ); \n\n                        video.addEventListener( 'loadedmetadata', function( e ) {\n                            $this.css( 'height', this.videoHeight*($this.width()/this.videoWidth) + 'px' );\t\n\n                            nativeItemW = this.videoWidth;\n                            nativeItemH = this.videoHeight;\t\n\n                            //Initialize all the items to the stage\n                            addItemsToStage( $this, nativeItemW, nativeItemH, dataControlsPagination, dataControlsArrows, dataLoop, dataDraggable, dataDraggableCursor, dataCountTotal, dataCountCur );\n\n                        }, false);\t\n\n                        video.src = videoURL;\n\n\n                    } else {\n\n                        let imgURL   = $first.find( 'img' ).attr( 'src' );\n\n                        if ( typeof imgURL != typeof undefined ) {\n                            const img = new Image();\n\n                            img.onload = function() {\n                                $this.css( 'height', $this.width()*(this.height/this.width) + 'px' );\t\t\n\n                                nativeItemW = this.width;\n                                nativeItemH = this.height;\t\n\n                                //Initialize all the items to the stage\n                                addItemsToStage( $this, nativeItemW, nativeItemH, dataControlsPagination, dataControlsArrows, dataLoop, dataDraggable, dataDraggableCursor, dataCountTotal, dataCountCur );\n\n                            };\n\n                            img.src = imgURL;\n                        }\n\n\n\n                    }\t\n\n\n\n                    //Autoplay Slider\n                    //-------------------------------------\t\t\n                    if ( !resize ) {\n\n\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        }\n\n\n                    }\n\n                    \n                    //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                    $this.data( 'activated', 1 );\n                    \n                }//endif activated\n  \n\t\t\t\t\n\n\t\t\t});\n\n\n\t\t}\n\t\t\n\n\n\n        /*\n\t\t * Trigger slider autoplay\n\t\t *\n\t\t * @param  {Function} playTimes            - Number of times.\n\t\t * @param  {Number} timing                 - Autoplay interval.\n\t\t * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n\t\t * @return {Void}                          - The constructor.\n\t\t */\n\t\tfunction sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n\t\t\tconst items = slider.find( '.uix-advanced-slider__item' ),\n\t\t\t\ttotal = items.length;\n\t\t\t\n\t\t\tslider[0].animatedSlides = setInterval( function() {\n\n\t\t\t\tplayTimes = parseFloat( items.filter( '.is-active' ).index() );\n\t\t\t\tplayTimes++;\n\t\t\t\t\n\t\t\t\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\tif ( playTimes < total && playTimes >= 0 ) sliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t} else {\n\t\t\t\t\tif ( playTimes == total ) playTimes = 0;\n\t\t\t\t\tif ( playTimes < 0 ) playTimes = total-1;\t\t\n\t\t\t\t\tsliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t}, timing );\t\n\t\t}\n\n\t\t\n\n        /*\n\t\t * Initialize all the items to the stage\n\t\t *\n\t\t * @param  {Element} slider                 - Current selector of each slider.\n\t\t * @param  {Number} nativeItemW            - Returns the intrinsic width of the image/video.\n\t\t * @param  {Number} nativeItemH            - Returns the intrinsic height of the image/video.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop. \n         * @param  {Boolean} draggable             - Allow drag and drop on the slider.\n         * @param  {String} draggableCursor        - Drag & Drop Change icon/cursor while dragging.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n\t\t * @return {Void}\n\t\t */\n        function addItemsToStage( slider, nativeItemW, nativeItemH, paginationID, arrowsID, loop, draggable, draggableCursor, countTotalID, countCurID  ) {\n\t\t\t\n\t\t\tconst $this                  = slider,\n\t\t\t\t$items                   = $this.find( '.uix-advanced-slider__item' ),\n\t\t\t\t$first                   = $items.first(),\n\t\t\t\titemTotal                = $items.length;\n\t\n\n\t\t\t//If arrows does not exist on the page, it will be added by default, \n\t\t\t//and the drag and drop function will be activated.\n\t\t\tif ( $( arrowsID ).length == 0 ) {\n\t\t\t\t$( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-advanced-slider__arrows '+arrowsID.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-advanced-slider__arrows--prev\"></a><a href=\"#\" class=\"uix-advanced-slider__arrows--next\"></a></div>' );\n\t\t\t}\n\t\t\t\n\n            //Add identifiers for the first and last items\n            $items.last().addClass( 'last' );\n            $items.first().addClass( 'first' );\n\n\t\t\t\n\t\t    //Prevent bubbling\n\t\t\tif ( itemTotal == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t}\n\n\t\t\t\n\n\t\t\t// Fires local videos asynchronously with slider switch.\n\t\t\t//-------------------------------------\n\t\t\tnormalSliderVideoInit( $items, false );\t\n\n\n\n\n\t\t\t//Pagination dots \n\t\t\t//-------------------------------------\t\n\t\t\tlet _dot       = '',\n\t\t\t\t_dotActive = '';\n\t\t\t_dot += '<ul>';\n\t\t\tfor ( let i = 0; i < itemTotal; i++ ) {\n\n\t\t\t\t_dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n\t\t\t\t_dot += '<li><a '+_dotActive+' data-index=\"'+i+'\" href=\"javascript:\"></a></li>';\n\t\t\t}\n\t\t\t_dot += '</ul>';\n\n\t\t\tif ( $( paginationID ).html() == '' ) $( paginationID ).html( _dot );\n\n\t\t\t$( paginationID ).find( 'li a' ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                const $btn = $( this );\n                if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'true' );\n                \n                $( paginationID ).find( 'li a' )\n                    .delay(animDelay)\n                    .queue(function(next) { $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'false' ); next(); }); \n                \n                \n                //\n\t\t\t\tif ( !$( this ).hasClass( 'is-active' ) ) {\n\t\t\t\t\t\n\n\t\t\t\t\t//Determine the direction\n\t\t\t\t\tlet curDir = 'prev';\n\t\t\t\t\tif ( $( this ).attr( 'data-index' ) > parseFloat( $items.filter( '.is-active' ).index() ) ) {\n\t\t\t\t\t\tcurDir = 'next';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tsliderUpdates( $( this ).attr( 'data-index' ), $this, curDir, countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t\t//Pause the auto play event\n\t\t\t\t\tclearInterval( $this[0].animatedSlides );\t\n\t\t\t\t}\n\n\n\n\t\t\t});\n\n\t\t\t//Next/Prev buttons\n\t\t\t//-------------------------------------\t\t\n\t\t\tconst _prev = $( arrowsID ).find( '.uix-advanced-slider__arrows--prev' ),\n\t\t\t\t_next = $( arrowsID ).find( '.uix-advanced-slider__arrows--next' );\n\n\t\t\t$( arrowsID ).find( 'a' ).attr( 'href', 'javascript:' );\n\n\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\tif ( !loop ) {\n\t\t\t\t_prev.addClass( 'is-disabled' );\n\t\t\t}\n\n\n\t\t\t_prev.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animDelay)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n                //\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) - 1, $this, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\t\t\t});\n\n\t\t\t_next.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animDelay)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n                //\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) + 1, $this, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\n\t\t\t});\n\n\n\n\t\t\t//Added touch method to mobile device and desktop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $items;\n\t\t\t\n\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\tif ( draggable && draggableCursor != '' && draggableCursor != false ) $dragDropTrigger.css( 'cursor', draggableCursor );\n\n\n\t\t\t//Mouse event\n\t\t\t$dragDropTrigger.on( 'mousedown.ADVANCED_SLIDER touchstart.ADVANCED_SLIDER', function( e ) {\n\t\t\t\t\n\t\t\t\t//Do not use \"e.preventDefault()\" to avoid prevention page scroll on drag in IOS and Android\n\n\t\t\t\tconst touches = e.originalEvent.touches;\n\n\t\t\t\t$( this ).addClass( 'is-dragging' );\n\n\n\t\t\t\tif ( touches && touches.length ) {\t\n\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( touches[0].pageX ) );\n\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( touches[0].pageY ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( e.pageX ) );\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( e.pageY ) );\t\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\n\t\t\t\t$dragDropTrigger.on( 'mouseup.ADVANCED_SLIDER touchmove.ADVANCED_SLIDER', function( e ) {\n\t\t\t\t\t\n\n\t\t\t\t\t$( this ).removeClass( 'is-dragging' );\n\t\t\t\t\tlet touches        = e.originalEvent.touches,\n\t\t\t\t\t\torigin_mouse_x = $( this ).data( 'origin_mouse_x' ),\n\t\t\t\t\t\torigin_mouse_y = $( this ).data( 'origin_mouse_y' );\n\n\t\t\t\t\tif ( touches && touches.length ) {\n\n\t\t\t\t\t\tlet deltaX = origin_mouse_x - touches[0].pageX,\n\t\t\t\t\t\t\tdeltaY = origin_mouse_y - touches[0].pageY;\n\n\t\t\t\t\t\t//--- left\n\t\t\t\t\t\tif ( deltaX >= 50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- right\n\t\t\t\t\t\tif ( deltaX <= -50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- up\n\t\t\t\t\t\tif ( deltaY >= 50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- down\n\t\t\t\t\t\tif ( deltaY <= -50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tif ( Math.abs( deltaX ) >= 50 || Math.abs( deltaY ) >= 50 ) {\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'touchmove.ADVANCED_SLIDER' );\n\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t\t//right\n\t\t\t\t\t\t\tif ( e.pageX > origin_mouse_x ) {\t\t\t\t\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//left\n\t\t\t\t\t\t\tif ( e.pageX < origin_mouse_x ) {\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//down\n\t\t\t\t\t\t\tif ( e.pageY > origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//up\n\t\t\t\t\t\t\tif ( e.pageY < origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'mouseup.ADVANCED_SLIDER' );\n\n\t\t\t\t\t\t}\t\n\n\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t} );//end: mouseup.ADVANCED_SLIDER touchmove.ADVANCED_SLIDER\n\n\n\n\n\t\t\t} );// end: mousedown.ADVANCED_SLIDER touchstart.ADVANCED_SLIDER\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\n\t\t\n\t\t/*\n\t\t * Transition Between Slides\n\t\t *\n\t\t * @param  {Number} elementIndex           - Index of current slider.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {String} dir                    - Switching direction indicator.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @return {Void}\n\t\t */\n        function sliderUpdates( elementIndex, slider, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\t\t\t\n\t\t\tconst $items                   = slider.find( '.uix-advanced-slider__item' ),\n                  total                    = $items.length;\n\t\t\t\n\t\t\n\t\t    //Prevent bubbling\n\t\t\tif ( total == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t\n\t\t\t\n\t\t\t//Transition Interception\n\t\t\t//-------------------------------------\n\t\t\tif ( loop ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = 0;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = total-1;\t\n\t\t\t} else {\n\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == total - 1 ) $( arrowsID ).find( '.uix-advanced-slider__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == 0 ) $( arrowsID ).find( '.uix-advanced-slider__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t}\n\n\t\t\t// To determine if it is a touch screen.\n\t\t\tif ( Modernizr.touchevents ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = total-1;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = 0;\t\n\t\t\t\t\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\t//first item\n\t\t\t\t\tif ( elementIndex == 0 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-advanced-slider__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\t\t\t\t\t//last item\n\t\t\t\t\tif ( elementIndex == total - 1 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-advanced-slider__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n            \n            \n            \n            // call the current item\n            //-------------------------------------\n            const $current = $items.eq( elementIndex );\n\t\t\t\n\t\t\t\n\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\tlet dirIndicatorClass = '';\n\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\t\t\t\n\n\t\t\t\n\t\t\t//Add transition class to Controls Pagination\n\t\t\t$( paginationID ).find( 'li a' ).removeClass( 'leave' );\n\t\t\t$( paginationID ).find( 'li a.is-active' ).removeClass( 'is-active' ).addClass( 'leave');\n\t\t\t$( paginationID ).find( 'li a[data-index=\"'+elementIndex+'\"]' ).addClass( 'is-active').removeClass( 'leave' );\n\t\t\t\n\t\t\t//Add transition class to each item\n\t\t\t$items.removeClass( 'leave prev next' );\n\t\t\t$items.addClass( dirIndicatorClass );\n\t\t\tslider.find( '.uix-advanced-slider__item.is-active' ).removeClass( 'is-active' ).addClass( 'leave ' + dirIndicatorClass );\n\t\t\t$current.addClass( 'is-active ' + dirIndicatorClass ).removeClass( 'leave' );\n\n\t\t\t\n\t\t\t\n\n\t\t\t//Display counter\n\t\t\t//-------------------------------------\n\t\t\t$( countTotalID ).text( total );\n\t\t\t$( countCurID ).text( parseFloat( elementIndex ) + 1 );\t\t\n\t\t\t\n\n\t\t\t// Fires local videos asynchronously with slider switch.\n\t\t\t//-------------------------------------\n\t\t\tnormalSliderVideoInit( $items, false );\n\t\t\tnormalSliderVideoInit( $current, true );\t\n\t\t\t\n\t\t\t//Reset the default height of item\n\t\t\t//-------------------------------------\t\n\t\t\titemDefaultInit( slider, $current );\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t}\n\t\t\n        \n\t\t/*\n\t\t * Initialize the default height of item\n\t\t *\n         * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {Element} currentLlement         - Current selector of each slider.\n\t\t * @return {Void}\n\t\t */\n        function itemDefaultInit( slider, currentLlement ) {\n\t\t\t\n\n\t\t\tif ( currentLlement.find( 'video' ).length > 0 ) {\n\n\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\tconst video    = document.getElementById( currentLlement.find( 'video' ).attr( 'id' ) );\n\t\t\t\tlet\tvideoURL = currentLlement.find( 'source:first' ).attr( 'src' );\n                \n                if ( typeof videoURL === typeof undefined ) videoURL = currentLlement.attr( 'src' ); \n\n\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\tslider.css( 'height', this.videoHeight*(currentLlement.closest( '.uix-advanced-slider__outline' ).width()/this.videoWidth) + 'px' );\t\n\n\t\t\t\t}, false);\t\n\n\t\t\t\tvideo.src = videoURL;\n\n\n\t\t\t} else {\n\n\t\t\t\tlet imgURL   = currentLlement.find( 'img' ).attr( 'src' );\n\t\t\t\t\n\n\t\t\t\tif ( typeof imgURL != typeof undefined ) {\n\t\t\t\t\tconst img = new Image();\n\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tslider.css( 'height', currentLlement.closest( '.uix-advanced-slider__outline' ).width()*(this.height/this.width) + 'px' );\t\t\n\n\t\t\t\t\t};\n\n\t\t\t\t\timg.src = imgURL;\t\n\t\t\t\t}\n\t\t\t\n\t\t\t}\t\n\n\t\t}\n\t\t\n\t\t\n\t\t/*\n\t\t * Initialize embedded local video.\n\t\t *\n\t\t * @param  {Element} wrapper          - The outermost video container, which can contain multiple videos\n\t\t * @param  {Boolean} play            - Forced to trigger pause or play events.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction normalSliderVideoInit( wrapper, play ) {\n\t\t\twrapper.find( '.uix-video__slider' ).each( function()  {\n\t\t\t\tconst $this          = $( this );\n                \n\t\t\t\tconst videoWrapperW  = $this.closest( '.uix-advanced-slider__outline' ).width(),\n\t\t\t\t\t  curVideoID     = $this.find( 'video' ).attr( 'id' ) + '-slider-videopush',\n\t\t\t\t\t  coverPlayBtnID = 'videocover-' + curVideoID,\n                      $replayBtn     = $( '#'+curVideoID+'-replay-btn' );\n                \n                \n\t\t\t\tlet\t  dataControls   = $this.data( 'embed-video-controls' ),\n\t\t\t\t\t  dataAuto       = $this.data( 'embed-video-autoplay' ),\n\t\t\t\t\t  dataLoop       = $this.data( 'embed-video-loop' ),\n\t\t\t\t\t  dataW          = $this.data( 'embed-video-width' ),\n\t\t\t\t\t  dataH          = $this.data( 'embed-video-height' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Push a new ID to video\n\t\t\t\t//Solve the problem that ajax asynchronous loading does not play\n\t\t\t\t$this.find( '.video-js' ).attr( 'id', curVideoID );\n\n\t\t\t\t\n\t\t\t\tif ( typeof dataAuto === typeof undefined ) {\n\t\t\t\t\tdataAuto = true;\n\t\t\t\t}\n\t\t\t\tif ( typeof dataLoop === typeof undefined ) {\n\t\t\t\t\tdataLoop = true;\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\tif ( typeof dataControls === typeof undefined ) {\n\t\t\t\t\tdataControls = false;\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tif ( typeof dataW === typeof undefined || dataW == 'auto' ) {\n\t\t\t\t\tdataW = videoWrapperW;\n\t\t\t\t}\t\n\n\t\t\t\tif ( typeof dataH === typeof undefined || dataH == 'auto' ) {\n\t\t\t\t\tdataH = videoWrapperW/1.77777777777778;\n\t\t\t\t}\n\n\t\t\t\t\n\n\t\t\t\t//Display cover and play buttons when some mobile device browsers cannot automatically play video\n\t\t\t\tif ( $( '#' + coverPlayBtnID ).length == 0 ) {\n\t\t\t\t\t$( '<div id=\"'+coverPlayBtnID+'\" class=\"uix-video__cover\"><span class=\"uix-video__cover__placeholder\" style=\"background-image:url('+$this.find( 'video' ).attr( 'poster' )+')\"></span><span class=\"uix-video__cover__playbtn\"></span></div>' ).insertBefore( $this );\n\n\n\t\t\t\t\tconst btnEv = ( Modernizr.touchevents ) ? 'touchstart' : 'click';\n\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).on( btnEv, function( e ) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tmyPlayer.play();\n\n\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Add replay button to video \n\t\t\t\tif ( $replayBtn.length == 0 ) {\n\t\t\t\t\t$this.after( '<span class=\"uix-video__btn-play\" id=\"'+curVideoID+'-replay-btn\"></span>' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//HTML5 video autoplay on mobile revisited\n\t\t\t\tif ( dataAuto && windowWidth <= 768 ) {\n\t\t\t\t\t$this.find( '.video-js' ).attr({\n\t\t\t\t\t\t'autoplay'    : 'true',\n\t\t\t\t\t\t'muted'       : 'true',\n\t\t\t\t\t\t'playsinline' : 'true'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\tconst myPlayer = videojs( curVideoID, \n\t\t\t\t   {\n\t\t\t\t\t  width     : dataW,\n\t\t\t\t\t  height    : dataH,\n\t\t\t\t\t  loop      : dataLoop,\n\t\t\t\t\t  autoplay  : dataAuto\n\t\t\t\t\t}, \n\t\t\t\t   function onPlayerReady() {\n\n\n\t\t\t\t\t\tconst initVideo = function( obj ) {\n\n\t\t\t\t\t\t\t//Get Video Dimensions\n\t\t\t\t\t\t\tlet curW    = obj.videoWidth(),\n\t\t\t\t\t\t\t\tcurH    = obj.videoHeight(),\n\t\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\t\tnewW = videoWrapperW;\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH = curH*(newW/curW);\n\n\n\t\t\t\t\t\t\tif ( !isNaN( newW ) && !isNaN( newH ) )  {\n\t\t\t\t\t\t\t\tobj.height( newH );\t\t\n\t\t\t\t\t\t\t\tobj.width( newW );\t\t\t\n\n\t\t\t\t\t\t\t\t$this.css( 'height', newH );\n\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t//Show this video wrapper\n\t\t\t\t\t\t\t$this.css( 'visibility', 'visible' );\n\n\t\t\t\t\t\t\t//Hide loading effect\n\t\t\t\t\t\t\t$this.find( '.vjs-loading-spinner, .vjs-big-play-button' ).hide();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* ---------  Video initialize */\n\t\t\t\t\t\tthis.on( 'loadedmetadata', function() {\n\n\t\t\t\t\t\t\tinitVideo( this );\n\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t    /* ---------  Display the play button  */\n\t\t\t\t\t    if ( ! dataAuto ) $this.find( '.vjs-big-play-button' ).show();\n\t\t\t\t\t    $this.find( '.vjs-big-play-button' ).off( 'click' ).on( 'click', function() {\n\t\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\t/* ---------  Set, tell the player it's in fullscreen  */\n\t\t\t\t\t\tif ( dataAuto ) {\n\t\t\t\t\t\t\t//Fix an error of Video auto play is not working in browser\n\t\t\t\t\t\t\tthis.muted( true ); \n\n\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t/* ---------  Disable control bar play button click */\n\t\t\t\t\t\tif ( !dataControls ) {\n\t\t\t\t\t\t\tthis.controls( false );\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t/* ---------  Determine if the video is auto played from mobile devices  */\n\t\t\t\t\t\tlet autoPlayOK = false;\n\n\t\t\t\t\t\tthis.on( 'timeupdate', function() {\n\n\t\t\t\t\t\t\tlet duration = this.duration();\n\t\t\t\t\t\t\tif ( duration > 0 ) {\n\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\tif ( this.currentTime() > 0 ) {\n\t\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\t\tthis.off( 'timeupdate' );\n\n\t\t\t\t\t\t\t\t\t//Hide cover and play buttons when the video automatically played\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\t\t\t\t\t\t\t\t} \n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t\t/* ---------  Pause the video when it is not current slider  */\n\t\t\t\t\t\tif ( !play ) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t} else {\n                            \n                            //Unmute, because there is interaction, you can turn on the audio.\n                            this.muted( false );\n                            \n                            \n                            \n\t\t\t\t\t\t\tif ( dataAuto ) {\n                                 \n\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t//Hidden replay button\n\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\t\t\t\t\t\t\t\t//Should the video go to the beginning when it ends\n\t\t\t\t\t\t\t\tthis.on( 'ended', function () { \n\n\t\t\t\t\t\t\t\t\tif ( dataLoop ) {\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\t\t\t\t\t\t\t\t\t\tthis.play();\t\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t//Replay this video\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t\t\t\t\t$replayBtn\n\t\t\t\t\t\t\t\t\t\t\t.show()\n\t\t\t\t\t\t\t\t\t\t\t.off( 'click' )\n\t\t\t\t\t\t\t\t\t\t\t.on( 'click', function( e ) {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\t\t\t\t\t\tthis.play();\n\t\t\t\t\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t});\t\t\n\n\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t});\t\n\t\t}\t\n\t\t\n    \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.ADVANCED_SLIDER.pageLoaded );\n\t\n\n\treturn class ADVANCED_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/*!\n * VERSION: 0.3.0\n * DATE: 2019-05-13\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * PixiPlugin is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\n\n    var _numExp = /(\\d|\\.)+/g,\n\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\tlime:[0,255,0],\n\t\t\tsilver:[192,192,192],\n\t\t\tblack:[0,0,0],\n\t\t\tmaroon:[128,0,0],\n\t\t\tteal:[0,128,128],\n\t\t\tblue:[0,0,255],\n\t\t\tnavy:[0,0,128],\n\t\t\twhite:[255,255,255],\n\t\t\tfuchsia:[255,0,255],\n\t\t\tolive:[128,128,0],\n\t\t\tyellow:[255,255,0],\n\t\t\torange:[255,165,0],\n\t\t\tgray:[128,128,128],\n\t\t\tpurple:[128,0,128],\n\t\t\tgreen:[0,128,0],\n\t\t\tred:[255,0,0],\n\t\t\tpink:[255,192,203],\n\t\t\tcyan:[0,255,255],\n\t\t\ttransparent:[255,255,255,0]},\n\t\t_hue = function(h, m1, m2) {\n\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t},\n\t\t/**\n\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if \"format\" parameter is \"hsl\", it will populate the array with hue, saturation, and lightness values. Or if \"format\" is \"number\", it'll return a number like 0xFF0000 instead of an array. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t * @param {(string)} format If \"hsl\", an hsl() or hsla() value will be returned instead of rgb() or rgba(). Or if \"number\", then a numeric value will be returned, like 0xFF0000. Default is rgb.\n\t\t * @return {(array|number)} An array containing red, green, and blue (and optionally alpha) in that order, or if the format parameter was \"hsl\", the array will contain hue, saturation and lightness (and optionally alpha) in that order. Or if \"format\" is defined as \"number\", it'll return a number like 0xFF0000. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and \"format\" is \"hsl\".\n\t\t */\n\t\t_parseColor = function(v, format) {\n\t\t\tvar toHSL = (format === \"hsl\"),\n\t\t\t\ta, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\tif (!v) {\n\t\t\t\ta = _colorLookup.black;\n\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t} else {\n\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t}\n\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t}\n\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\ta[3] = Number(v[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t}\n\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\tif (a.length > 3) {\n\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\tr = a[0] / 255;\n\t\t\t\tg = a[1] / 255;\n\t\t\t\tb = a[2] / 255;\n\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\tl = (max + min) / 2;\n\t\t\t\tif (max === min) {\n\t\t\t\t\th = s = 0;\n\t\t\t\t} else {\n\t\t\t\t\td = max - min;\n\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\th *= 60;\n\t\t\t\t}\n\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t}\n\t\t\treturn (format === \"number\") ? (a[0] << 16 | a[1] << 8 | a[2]) : a;\n\t\t},\n\t\t_formatColors = function(s, toHSL) {\n\t\t\tvar colors = (s + \"\").match(_colorExp) || [],\n\t\t\t\tcharIndex = 0,\n\t\t\t\tparsed = \"\",\n\t\t\t\ti, color, temp;\n\t\t\tif (!colors.length) {\n\t\t\t\treturn s;\n\t\t\t}\n\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\tcolor = colors[i];\n\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\tcolor = _parseColor(color, (toHSL ? \"hsl\" : \"rgb\"));\n\t\t\t\tif (color.length === 3) {\n\t\t\t\t\tcolor.push(1);\n\t\t\t\t}\n\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t}\n\t\t\treturn parsed + s.substr(charIndex);\n\t\t}, _colorStringFilter,\n\t\tTweenLite = (_gsScope.GreenSockGlobals || _gsScope).TweenLite,\n\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\", //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\n\t\t_idMatrix = [1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],\n\t\t_lumR = 0.212671,\n\t\t_lumG = 0.715160,\n\t\t_lumB = 0.072169,\n\n\t\t_applyMatrix = function(m, m2) {\n\t\t\tvar temp = [],\n\t\t\t\ti = 0,\n\t\t\t\tz = 0,\n\t\t\t\ty, x;\n\t\t\tfor (y = 0; y < 4; y++) {\n\t\t\t\tfor (x = 0; x < 5; x++) {\n\t\t\t\t\tz = (x === 4) ? m[i + 4] : 0;\n\t\t\t\t\ttemp[i + x] = m[i]   * m2[x] + m[i+1] * m2[x + 5] +\tm[i+2] * m2[x + 10] + m[i+3] * m2[x + 15] +\tz;\n\t\t\t\t}\n\t\t\t\ti += 5;\n\t\t\t}\n\t\t\treturn temp;\n\t\t},\n\n\t\t_setSaturation = function(m, n) {\n\t\t\tvar inv = 1 - n,\n\t\t\t\tr = inv * _lumR,\n\t\t\t\tg = inv * _lumG,\n\t\t\t\tb = inv * _lumB;\n\t\t\treturn _applyMatrix([r + n, g, b, 0, 0, r, g + n, b, 0, 0, r, g, b + n, 0, 0, 0, 0, 0, 1, 0], m);\n\t\t},\n\n\t\t_colorize = function(m, color, amount) {\n\t\t\tvar c = _parseColor(color),\n\t\t\t\tr = c[0] / 255,\n\t\t\t\tg = c[1] / 255,\n\t\t\t\tb = c[2] / 255,\n\t\t\t\tinv = 1 - amount;\n\t\t\treturn _applyMatrix([inv + amount * r * _lumR, amount * r * _lumG, amount * r * _lumB, 0, 0, amount * g * _lumR, inv + amount * g * _lumG, amount * g * _lumB, 0, 0, amount * b * _lumR, amount * b * _lumG, inv + amount * b * _lumB, 0, 0, 0, 0, 0, 1, 0], m);\n\t\t},\n\n\t\t_setHue = function(m, n) {\n\t\t\tn *= Math.PI / 180;\n\t\t\tvar c = Math.cos(n),\n\t\t\t\ts = Math.sin(n);\n\t\t\treturn _applyMatrix([(_lumR + (c * (1 - _lumR))) + (s * (-_lumR)), (_lumG + (c * (-_lumG))) + (s * (-_lumG)), (_lumB + (c * (-_lumB))) + (s * (1 - _lumB)), 0, 0, (_lumR + (c * (-_lumR))) + (s * 0.143), (_lumG + (c * (1 - _lumG))) + (s * 0.14), (_lumB + (c * (-_lumB))) + (s * -0.283), 0, 0, (_lumR + (c * (-_lumR))) + (s * (-(1 - _lumR))), (_lumG + (c * (-_lumG))) + (s * _lumG), (_lumB + (c * (1 - _lumB))) + (s * _lumB), 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], m);\n\t\t},\n\n\t\t_setContrast = function(m, n) {\n\t\t\treturn _applyMatrix([n,0,0,0,0.5 * (1 - n), 0,n,0,0,0.5 * (1 - n), 0,0,n,0,0.5 * (1 - n), 0,0,0,1,0], m);\n\t\t},\n\n\t\t_getFilter = function(t, type) {\n\t\t\tvar filterClass = _gsScope.PIXI.filters[type],\n\t\t\t\tfilters = t.filters || [],\n\t\t\t\ti = filters.length,\n\t\t\t\tfilter;\n\t\t\tif (!filterClass) {\n\t\t\t\tthrow(\"PixiPlugin error: \" + type + \" isn't present.\");\n\t\t\t}\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (filters[i] instanceof filterClass) {\n\t\t\t\t\treturn filters[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfilter = new filterClass();\n\t\t\tif (type === \"BlurFilter\") {\n\t\t\t\tfilter.blur = 0;\n\t\t\t}\n\t\t\tfilters.push(filter);\n\t\t\tt.filters = filters;\n\t\t\treturn filter;\n\t\t},\n\n\t\t_addColorMatrixFilterCacheTween = function(p, pg, cache, vars) { //we cache the ColorMatrixFilter components in a _gsColorMatrixFilter object attached to the target object so that it's easy to grab the current value at any time.\n\t\t\tpg._addTween(cache, p, cache[p], vars[p], p);\n\t\t\tpg._overwriteProps.push(p);\n\t\t},\n\n\t\t_applyBrightnessToMatrix = function(brightness, matrix) {\n\t\t\tvar temp = new _gsScope.PIXI.filters.ColorMatrixFilter();\n\t\t\ttemp.matrix = matrix;\n\t\t\ttemp.brightness(brightness, true);\n\t\t\treturn temp.matrix;\n\t\t},\n\n\t\t_CMFdefaults = {contrast:1, saturation:1, colorizeAmount:0, colorize:\"rgb(255,255,255)\", hue:0, brightness:1},\n\n\t\t_parseColorMatrixFilter = function(t, v, pg) {\n\t\t\tvar filter = _getFilter(t, \"ColorMatrixFilter\"),\n\t\t\t\tcache = t._gsColorMatrixFilter = t._gsColorMatrixFilter || {contrast:1, saturation:1, colorizeAmount:0, colorize:\"rgb(255,255,255)\", hue:0, brightness:1},\n\t\t\t\tcombine = v.combineCMF && !(\"colorMatrixFilter\" in v && !v.colorMatrixFilter),\n\t\t\t\ti, matrix, startMatrix;\n\t\t\tstartMatrix = filter.matrix;\n\t\t\tif (v.resolution) {\n\t\t\t\tfilter.resolution = v.resolution;\n\t\t\t}\n\t\t\tif (v.matrix && v.matrix.length === startMatrix.length) {\n\t\t\t\tmatrix = v.matrix;\n\t\t\t\tif (cache.contrast !== 1) {\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"contrast\", pg, cache, _CMFdefaults);\n\t\t\t\t}\n\t\t\t\tif (cache.hue) {\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"hue\", pg, cache, _CMFdefaults);\n\t\t\t\t}\n\t\t\t\tif (cache.brightness !== 1) {\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"brightness\", pg, cache, _CMFdefaults);\n\t\t\t\t}\n\t\t\t\tif (cache.colorizeAmount) {\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorize\", pg, cache, _CMFdefaults);\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorizeAmount\", pg, cache, _CMFdefaults);\n\t\t\t\t}\n\t\t\t\tif (cache.saturation !== 1) {\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"saturation\", pg, cache, _CMFdefaults);\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tmatrix = _idMatrix.slice();\n\t\t\t\tif (v.contrast != null) {\n\t\t\t\t\tmatrix = _setContrast(matrix, Number(v.contrast));\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"contrast\", pg, cache, v);\n\t\t\t\t} else if (cache.contrast !== 1) {\n\t\t\t\t\tif (combine) {\n\t\t\t\t\t\tmatrix = _setContrast(matrix, cache.contrast);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"contrast\", pg, cache, _CMFdefaults);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (v.hue != null) {\n\t\t\t\t\tmatrix = _setHue(matrix, Number(v.hue));\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"hue\", pg, cache, v);\n\t\t\t\t} else if (cache.hue) {\n\t\t\t\t\tif (combine) {\n\t\t\t\t\t\tmatrix = _setHue(matrix, cache.hue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"hue\", pg, cache, _CMFdefaults);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (v.brightness != null) {\n\t\t\t\t\tmatrix = _applyBrightnessToMatrix(Number(v.brightness), matrix);\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"brightness\", pg, cache, v);\n\t\t\t\t} else if (cache.brightness !== 1) {\n\t\t\t\t\tif (combine) {\n\t\t\t\t\t\tmatrix = _applyBrightnessToMatrix(cache.brightness, matrix);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"brightness\", pg, cache, _CMFdefaults);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (v.colorize != null) {\n\t\t\t\t\tv.colorizeAmount = (\"colorizeAmount\" in v) ? Number(v.colorizeAmount) : 1;\n\t\t\t\t\tmatrix = _colorize(matrix, v.colorize, v.colorizeAmount);\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorize\", pg, cache, v);\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorizeAmount\", pg, cache, v);\n\t\t\t\t} else if (cache.colorizeAmount) {\n\t\t\t\t\tif (combine) {\n\t\t\t\t\t\tmatrix = _colorize(matrix, cache.colorize, cache.colorizeAmount);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorize\", pg, cache, _CMFdefaults);\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"colorizeAmount\", pg, cache, _CMFdefaults);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (v.saturation != null) {\n\t\t\t\t\tmatrix = _setSaturation(matrix, Number(v.saturation));\n\t\t\t\t\t_addColorMatrixFilterCacheTween(\"saturation\", pg, cache, v);\n\t\t\t\t} else if (cache.saturation !== 1) {\n\t\t\t\t\tif (combine) {\n\t\t\t\t\t\tmatrix = _setSaturation(matrix, cache.saturation);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorMatrixFilterCacheTween(\"saturation\", pg, cache, _CMFdefaults);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ti = matrix.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (matrix[i] !== startMatrix[i]) {\n\t\t\t\t\tpg._addTween(startMatrix, i, startMatrix[i], matrix[i], \"colorMatrixFilter\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpg._overwriteProps.push(\"colorMatrixFilter\");\n\t\t},\n\n\t\t_addColorTween = function(target, p, value, colorSetter, plugin) {\n\t\t\tvar pt = colorSetter._firstPT = {_next:colorSetter._firstPT, t:target, p:p, proxy:{}, f:(typeof(target[p]) === \"function\")};\n\t\t\tpt.proxy[p] = \"rgb(\" + _parseColor(!pt.f ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]()).join(\",\") + \")\";\n\t\t\tplugin._addTween(pt.proxy, p, \"get\", ((typeof(value) === \"number\") ? \"rgb(\" + _parseColor(value, false).join(\",\") + \")\" : value), p, null, null, _colorStringFilter);\n\t\t},\n\n\t\t//to improve performance, when a color is sensed, we hijack the setRatio() method of the plugin instance with a new function that this method spits back. This is a special method that handles parsing color values on-the-fly and turns them into numeric values which PixiJS requires. In other words, instead of \"rgb(255, 0, 0)\", PixiJS wants 0xFF0000. This also works with hsl() values.\n\t\t_buildColorSetter = function(tween, plugin) {\n\t\t\tvar setRatio = plugin.setRatio, //save the original (super) setRatio() function\n\t\t\t\tfunc = function(v) {\n\t\t\t\t\tvar pt = func._firstPT,\n\t\t\t\t\t\tval;\n\t\t\t\t\tsetRatio.call(plugin, v);\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tval = _parseColor(pt.proxy[pt.p], \"number\");\n\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (func.graphics) { //in order for PixiJS to actually redraw GraphicsData, we've gotta increment the \"dirty\" and \"clearDirty\" values. If we don't do this, the values will be tween properly, but not rendered.\n\t\t\t\t\t\tfunc.graphics.dirty++;\n\t\t\t\t\t\tfunc.graphics.clearDirty++;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\tplugin.setRatio = func;\n\t\t\treturn func;\n\t\t},\n\n\n\t\t_colorProps = {tint:1, lineColor:1, fillColor:1},\n\t\t_xyContexts = \"position,scale,skew,pivot,anchor,tilePosition,tileScale\".split(\",\"),\n\t\t_contexts = {x:\"position\", y:\"position\", tileX:\"tilePosition\", tileY:\"tilePosition\"},\n\t\t_colorMatrixFilterProps = {colorMatrixFilter:1, saturation:1, contrast:1, hue:1, colorize:1, colorizeAmount:1, brightness:1, combineCMF:1},\n\t\t_DEG2RAD = Math.PI / 180,\n        _degreesToRadians = function(value) {\n\t\t\treturn (typeof(value) === \"string\" && value.charAt(1) === \"=\") ? value.substr(0, 2) + (parseFloat(value.substr(2)) * _DEG2RAD) : value * _DEG2RAD;\n        }, i, p;\n\n\t//context setup...\n\tfor (i = 0; i < _xyContexts.length; i++) {\n\t\tp = _xyContexts[i];\n\t\t_contexts[p + \"X\"] = p;\n\t\t_contexts[p + \"Y\"] = p;\n    }\n\n    //color parsing setup...\n\tfor (p in _colorLookup) {\n\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t}\n\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\t_colorStringFilter = function(a) {\n\t\tvar combined = a[0] + \" \" + a[1],\n\t\t\ttoHSL;\n\t\t_colorExp.lastIndex = 0;\n\t\tif (_colorExp.test(combined)) {\n\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t}\n\t};\n\n\tif (!TweenLite.defaultStringFilter) {\n\t\tTweenLite.defaultStringFilter = _colorStringFilter;\n\t}\n\n    var PixiPlugin = _gsScope._gsDefine.plugin({\n        propName: \"pixi\",\n        priority: 0,\n        API: 2,\n\t\tglobal: true,\n        version: \"0.3.0\",\n\n        init: function (target, values, tween, index) {\n            if (!target instanceof _gsScope.PIXI.DisplayObject) {\n                return false;\n            }\n            var isV4 =  _gsScope.PIXI.VERSION.charAt(0) === \"4\",\n\t            context, axis, value, colorMatrix, filter, p, padding, colorSetter, i, data, pt;\n            for (p in values) {\n                context = _contexts[p];\n                value = values[p];\n                if (typeof(value) === \"function\") {\n                    value = value(index || 0, target);\n                }\n                if (context) {\n                    axis = (p.charAt(p.length-1).toLowerCase().indexOf(\"x\") !== -1) ? \"x\" : \"y\";\n\t\t\t\t\tthis._addTween(target[context], axis, target[context][axis], (context === \"skew\") ? _degreesToRadians(value) : value, p);\n                } else if (p === \"scale\" || p === \"anchor\" || p === \"pivot\" || p === \"tileScale\") {\n\t\t\t\t\tthis._addTween(target[p], \"x\", target[p].x, value, p + \"X\");\n\t\t\t\t\tthis._addTween(target[p], \"y\", target[p].y, value, p + \"Y\");\n                } else if (p === \"rotation\") { //PIXI expects rotation in radians, but as a convenience we let folks define it in degrees and we do the conversion.\n\t\t\t\t\tthis._addTween(target, p, target.rotation, _degreesToRadians(value), p);\n\n                } else if (_colorMatrixFilterProps[p]) {\n\t\t\t\t\tif (!colorMatrix) {\n\t\t\t\t\t\t_parseColorMatrixFilter(target, values.colorMatrixFilter || values, this);\n\t\t\t\t\t\tcolorMatrix = true;\n\t\t\t\t\t}\n                } else if (p === \"blur\" || p === \"blurX\" || p === \"blurY\" || p === \"blurPadding\") {\n\t\t\t\t\tfilter = _getFilter(target, \"BlurFilter\");\n\t\t\t\t\tthis._addTween(filter, p, filter[p], value, p);\n\t\t\t\t\tif (values.blurPadding !== 0) {\n\t\t\t\t\t\tpadding = values.blurPadding || Math.max(filter[p], value) * 2;\n\t\t\t\t\t\ti = target.filters.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\ttarget.filters[i].padding = Math.max(target.filters[i].padding, padding); //if we don't expand the padding on all the filters, it can look clipped.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n                } else if (_colorProps[p]) {\n\t\t\t\t\tif (!colorSetter) {\n\t\t\t\t\t\tcolorSetter = _buildColorSetter(tween, this);\n\t\t\t\t\t}\n\t\t\t\t\tif ((p === \"lineColor\" || p === \"fillColor\") && target instanceof _gsScope.PIXI.Graphics) {\n\t\t\t\t\t\tdata = (target.geometry || target).graphicsData; //\"geometry\" was introduced in PIXI version 5\n\t\t\t\t\t\ti = data.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t_addColorTween(isV4 ? data[i] : data[i][p.substr(0, 4) + \"Style\"], isV4 ? p : \"color\", value, colorSetter, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolorSetter.graphics = target.geometry || target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_addColorTween(target, p, value, colorSetter, this);\n\t\t\t\t\t}\n                } else if (p === \"autoAlpha\") {\n\t\t\t\t\tthis._firstPT = pt = {t: {setRatio:function() { target.visible = !!target.alpha; }}, p: \"setRatio\", s: 0, c: 1, f: 1, pg: 0, n: \"visible\", pr: 0, m: 0, _next:this._firstPT};\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._addTween(target, \"alpha\", target.alpha, value, \"alpha\");\n\t\t\t\t\tthis._overwriteProps.push(\"alpha\", \"visible\");\n                } else {\n\t\t\t\t\tthis._addTween(target, p, target[p], value, p);\n                }\n\t\t\t\tthis._overwriteProps.push(p);\n            }\n            return true;\n        }\n    });\n\n\tPixiPlugin.colorProps = _colorProps;\n\tPixiPlugin.parseColor = _parseColor;\n\tPixiPlugin.formatColors = _formatColors;\n\tPixiPlugin.colorStringFilter = _colorStringFilter;\n\tPixiPlugin.registerPIXI = function(PIXI) {\n\t\t_gsScope.PIXI = PIXI;\n\t};\n\nexport { PixiPlugin, PixiPlugin as default };","\n/* \n *************************************\n * <!-- Advanced Slider (Special Effects) -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport PixiPlugin from '@uixkit/plugins/GSAP/PixiPlugin';\n\nimport '../scss/_special.scss';\n\n\nexport const ADVANCED_SLIDER_FILTER = ( ( module, $, window, document ) => {\n\tif ( window.ADVANCED_SLIDER_FILTER === null ) return false;\n\t\n\n    module.ADVANCED_SLIDER_FILTER               = module.ADVANCED_SLIDER_FILTER || {};\n    module.ADVANCED_SLIDER_FILTER.version       = '0.3.2';\n    module.ADVANCED_SLIDER_FILTER.pageLoaded    = function() {\n\n\t\t\n\t\t// Remove pixi.js banner from the console\n\t\tPIXI.utils.skipHello();\t\t\n\t\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n        \n\t\tlet\tanimSpeed                 = 1000;\n\t\tconst $sliderWrapper          = $( '.uix-advanced-slider-sp' );\n\t\t\n        let\n\t\t\t//Save different canvas heights as an array\n\t\t\tcanvasHeights             = [],\n\n\t\t\t\n\t\t\t//Basic webGL renderers \n\t\t\trendererOuterID           = 'uix-advanced-slider-sp__canvas-container',\n\t\t\trendererCanvasID          = 'uix-advanced-slider-sp__canvas',\n\t\t\trenderer,\n\t\t    \n\t\t\t//PIXI\n\t\t\trenderer__filter,\n\t\t    rendererCanvasID__filter  = rendererCanvasID,\n\t\t    stage__filter,\n\t\t\tcontainer__items,\n\t\t\tdisplacementSprite,\n\t\t\tdisplacementFilter;\n        \n        \n\n\t\t\n\t\tsliderInit( false );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\tsliderInit( true );\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\n\t\t\n\n\t\t/*\n\t\t * Initialize slideshow\n\t\t *\n\t\t * @param  {Boolean} resize            - Determine whether the window size changes.\n\t\t * @return {Void}\n\t\t */\n        function sliderInit( resize ) {\n\t\n\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\tconst $this                    = $( this );\n                \n\t\t\t\tconst $items                   = $this.find( '.uix-advanced-slider-sp__item' ),\n\t\t\t\t\t  $first                   = $items.first(),\n                      activated                = $this.data( 'activated' );\n                \n\t\t\t\tlet\t  nativeItemW,\n\t\t\t\t\t  nativeItemH; \n\t\t\t\t\n\t\t\t\t\n                \n                if ( typeof activated === typeof undefined || activated === 0 ) {\n                    \n                    \n                    //Get parameter configuration from the data-* attribute of HTML\n                    let dataControlsPagination   = $this.data( 'controls-pagination' ),\n                        dataControlsArrows       = $this.data( 'controls-arrows' ),\n                        dataDraggable            = $this.data( 'draggable' ),\n                        dataDraggableCursor      = $this.data( 'draggable-cursor' ),                     \n                        dataCountTotal           = $this.data( 'count-total' ),\n                        dataCountCur             = $this.data( 'count-now' ),\n                        dataSpeed                = $this.data( 'speed' ),\n                        dataFilterTexture        = $this.data( 'filter-texture' );\n\n\n                    if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-advanced-slider-sp__pagination';\n                    if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-advanced-slider-sp__arrows';\n                    if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                    if ( typeof dataDraggableCursor === typeof undefined || dataDraggableCursor == false ) dataDraggableCursor = 'move';\n                    if ( typeof dataCountTotal === typeof undefined ) dataCountTotal = 'p.count em.count';\n                    if ( typeof dataCountCur === typeof undefined ) dataCountCur = 'p.count em.current';\n                    if ( typeof dataFilterTexture === typeof undefined || !dataFilterTexture || dataFilterTexture == '' ) dataFilterTexture = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n                    \n                    //Autoplay parameters\n                    let dataAuto                   = $this.data( 'auto' ),\n                        dataTiming                 = $this.data( 'timing' ),\n                        dataLoop                   = $this.data( 'loop' );  \n                    \n                    if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                    if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                    if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n                    \n                    \n                    \n                    //Autoplay times\n                    let playTimes;\n                    //A function called \"timer\" once every second (like a digital watch).\n                    $this[0].animatedSlides;\n\n\n                    //Get the animation speed\n                    //-------------------------------------\t\n                    if ( typeof dataSpeed != typeof undefined && dataSpeed != false ) {\n                        animSpeed = dataSpeed;\n                    }\n\n\n\n                    //Display all images\n                    //-------------------------------------\t\n                    if ( !Modernizr.webgl ) {\n                        $this.find( 'img' ).css( 'visibility', 'visible' );\n                    }\n\n\n\n                    //Initialize the first item container\n                    //-------------------------------------\t\t\n                    $items.addClass( 'next' );\n\n                    $first.addClass( 'is-active' );\n\n\n                    TweenMax.set( $items, {\n                        alpha      : 0,\n                        onComplete : function() {\n\n                            TweenMax.to( $first, animSpeed/1000, {\n                                alpha : 1,\n                                delay : animSpeed/1000\n                            });\t\t\n                        }\n\n                    });\t\t\t\n\n\n\n                    if ( $first.find( 'video' ).length > 0 ) {\n\n                        //Returns the dimensions (intrinsic height and width ) of the video\n                        const video    = document.getElementById( $first.find( 'video' ).attr( 'id' ) );\n                        let videoURL = $first.find( 'source:first' ).attr( 'src' );\n                        \n                        if ( typeof videoURL === typeof undefined ) videoURL = $first.attr( 'src' ); \n\n                        if ( typeof videoURL != typeof undefined ) {\n                            video.addEventListener( 'loadedmetadata', function( e ) {\n                                $this.css( 'height', this.videoHeight*($this.width()/this.videoWidth) + 'px' );\t\n\n                                nativeItemW = this.videoWidth;\n                                nativeItemH = this.videoHeight;\t\n\n                                //Initialize all the items to the stage\n                                addItemsToStage( $this, nativeItemW, nativeItemH, dataControlsPagination, dataControlsArrows, dataLoop, dataDraggable, dataDraggableCursor, dataCountTotal, dataCountCur, dataFilterTexture );\n\n\n                            }, false);\t\n\n                            video.src = videoURL;\n                        }\n\n\n\n\n                    } else {\n\n                        let imgURL   = $first.find( 'img' ).attr( 'src' );\n\n                        if ( typeof imgURL != typeof undefined ) {\n\n                            const img = new Image();\n\n                            img.onload = function() {\n                                $this.css( 'height', $this.width()*(this.height/this.width) + 'px' );\t\t\n\n                                nativeItemW = this.width;\n                                nativeItemH = this.height;\t\n\n                                //Initialize all the items to the stage\n                                addItemsToStage( $this, nativeItemW, nativeItemH, dataControlsPagination, dataControlsArrows, dataLoop, dataDraggable, dataDraggableCursor, dataCountTotal, dataCountCur, dataFilterTexture );\n\n\n\n                            };\n\n                            img.src = imgURL;\n                        }\n\n\n                    }\t\n\n\n\n\n                    //Autoplay Slider\n                    //-------------------------------------\t\t\n                    if ( !resize ) {\n\n\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        }\n\n\n                    }\n\n                    \n                    \n                    //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                    $this.data( 'activated', 1 );\n                    \n                }//endif activated\n  \n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t});\n\n\n\t\t}\n\t\t\n\t\t\n\n         /*\n\t\t * Trigger slider autoplay\n\t\t *\n\t\t * @param  {Function} playTimes            - Number of times.\n\t\t * @param  {Number} timing                 - Autoplay interval.\n\t\t * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n\t\t * @return {Void}                          - The constructor.\n\t\t */\n\t\tfunction sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n\t\t\tconst items = slider.find( '.uix-advanced-slider-sp__item' ),\n\t\t\t\ttotal = items.length;\n\t\t\t\n\t\t\tslider[0].animatedSlides = setInterval( function() {\n\n\t\t\t\tplayTimes = parseFloat( items.filter( '.is-active' ).index() );\n\t\t\t\tplayTimes++;\n\t\t\t\t\n\t\t\t\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\tif ( playTimes < total && playTimes >= 0 ) sliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t} else {\n\t\t\t\t\tif ( playTimes == total ) playTimes = 0;\n\t\t\t\t\tif ( playTimes < 0 ) playTimes = total-1;\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Prevent problems with styles when switching in positive order\n\t\t\t\t\tif ( playTimes == 0 ) {\n\t\t\t\t\t\tsliderUpdates( playTimes, slider, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t}, timing );\t\n\t\t}\n\n\t\t\n\t\t\n\t\t/*\n\t\t * Initialize all the items to the stage\n\t\t *\n\t\t * @param  {Element} slider                 - Current selector of each slider.\n\t\t * @param  {Number} nativeItemW            - Returns the intrinsic width of the image/video.\n\t\t * @param  {Number} nativeItemH            - Returns the intrinsic height of the image/video.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop. \n         * @param  {Boolean} draggable             - Allow drag and drop on the slider.\n         * @param  {String} draggableCursor        - Drag & Drop Change icon/cursor while dragging.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} filterTexture          - The texture used for the displacement map.\n\t\t * @return {Void}\n\t\t */\n        function addItemsToStage( slider, nativeItemW, nativeItemH, paginationID, arrowsID, loop, draggable, draggableCursor, countTotalID, countCurID, filterTexture ) {\n\t\t\t\n\t\t\tconst $this                    = slider,\n\t\t\t\t$items                   = $this.find( '.uix-advanced-slider-sp__item' ),\n\t\t\t\t$first                   = $items.first(),\n\t\t\t\titemTotal               = $items.length;\n\t\n\t\t\t\n\t\t\t\n\t\t\t//If arrows does not exist on the page, it will be added by default, \n\t\t\t//and the drag and drop function will be activated.\n\t\t\tif ( $( arrowsID ).length == 0 ) {\n\t\t\t\t$( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-advanced-slider-sp__arrows '+arrowsID.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-advanced-slider-sp__arrows--prev\"></a><a href=\"#\" class=\"uix-advanced-slider-sp__arrows--next\"></a></div>' );\n\t\t\t}\n\t\t\t\n            \n            //Add identifiers for the first and last items\n            $items.last().addClass( 'last' );\n            $items.first().addClass( 'first' );\n\t\t\t\n        \n\t\t    //Prevent bubbling\n\t\t\tif ( itemTotal == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t}\n\n\t\t\tif ( Modernizr.webgl ) {\n\t\t\t\t\n\t\t\t\t//Load slides to canvas\n\t\t\t\t//-------------------------------------\t\n\t\t\t\tif ( $( '#' + rendererCanvasID ).length == 0 ) {\n\t\t\t\t\t$this.prepend( '<div id=\"'+rendererOuterID+'\" class=\"uix-advanced-slider-sp__canvas-container\"><canvas id=\"'+rendererCanvasID+'\"></canvas></div>' );\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t//Save different canvas heights as an array\n\t\t\t\t//-------------------------------------\t\n\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\tconst $thisItem = $( this );\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\tconst video    = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n                        let videoURL = $thisItem.find( 'video source:first' ).attr( 'src' );\n\t\t\t\t\t\t\n                        if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n\t\t\t\t\t\n\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\tlet\tcurW    = this.videoWidth,\n\t\t\t\t\t\t\t\tcurH    = this.videoHeight,\n\t\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\t\tnewW = $this.width();\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH = curH*(newW/curW);\n\n\t\t\t\t\t\t\t//Save different canvas heights as an array\n\t\t\t\t\t\t\tif ( canvasHeights.length < itemTotal ) {\n\t\t\t\t\t\t\t\tcanvasHeights.push( newH );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\timgCur   = new Image();\n\n\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\tlet\tcurW_img    = this.width,\n\t\t\t\t\t\t\t\tcurH_img    = this.height,\n\t\t\t\t\t\t\t\tnewW_img    = curW_img,\n\t\t\t\t\t\t\t\tnewH_img    = curH_img;\t\n\n\t\t\t\t\t\t\tnewW_img = $this.width();\n\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH_img = curH_img*(newW_img/curW_img);\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Save different canvas heights as an array\n\t\t\t\t\t\t\tif ( canvasHeights.length < itemTotal ) {\n\t\t\t\t\t\t\t\tcanvasHeights.push( newH_img );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t});//$this.find( '.uix-advanced-slider-sp__item' ).each\n\t\t\t\t\n\n\t\t\t\t//Basic webGL renderers \n\t\t\t\t//-------------------------------------\n\t\t\t\trenderer              = new PIXI.Application({\n                                            width           : $this.width(),\n                                            height          : $this.height(),\n                                            transparent     : true,\n                                            antialias       : true,\n                                            autoResize      : true,\n                                            view            : document.getElementById( rendererCanvasID )\n                                        });\n                \n\t\t\t\trenderer__filter       = new PIXI.autoDetectRenderer({\n                                            width           : $this.width(),\n                                            height          : $this.height(),\n                                            transparent     : true,\n                                            view            : document.getElementById( rendererCanvasID__filter )\n                                        });\n                \n\n\n                //\n                //\n\t\t\t\tstage__filter          = new PIXI.Container();\n\t\t\t\tcontainer__items       = new PIXI.Container();\n\t\t\t\tdisplacementSprite    = ( /^.*\\.(avi|AVI|wmv|WMV|flv|FLV|mpg|MPG|mp4|MP4)/.test( filterTexture ) ) ? new PIXI.Sprite( PIXI.Texture.from( filterTexture ) ) : new PIXI.Sprite.from( filterTexture );\n\t\t\t\tdisplacementFilter    = new PIXI.filters.DisplacementFilter( displacementSprite );\n\n\t\t\t\t\n\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Brightness Effect -------------------------------\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//Usage of returning sprite object: renderer.stage.children[index]\n\t\t\t\tif ( $this.hasClass( 'uix-advanced-slider-sp--eff-brightness' ) ) {\n\n\t\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\t\tconst $thisItem = $( this );\n\n\t\t\t\t\t\t//Load sprite from each slider to canvas\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tlet curSprite;\n\n\t\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t\t// create a video texture from a path\n\t\t\t\t\t\t\tlet videoURL = $thisItem.find( 'source:first' ).attr( 'src' );\n                            if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n                            \n                            const texture  = PIXI.Texture.from( videoURL );\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite( texture );\n\n\t\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\t\tconst videoSource = texture.baseTexture.resource.source;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\tvideoSource.pause();\n\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\tvideoSource.muted = true;\n\n\t\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\t\tconst video = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n\t\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\n\n\t\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\t\timgCur   = new Image();\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite.from( imgURL );\n\n\t\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\t\t\t\t\t\t\t\t\n\t\t\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t\t}\n\n                        \n                        // center the sprite's anchor point\n                        curSprite.anchor.set( 0 );\n                        \n                        // sprite size\n\t\t\t\t\t\tcurSprite.width  = renderer.view.width;\n\t\t\t\t\t\tcurSprite.height = renderer.view.height;\t\n\n\t\t\t\t\t\t//Avoid error texture rendering errors ***!Important***\n\t\t\t\t\t\tTweenMax.set( curSprite, {\n\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t});\t\n\n                        \n                        \n\t\t\t\t\t\t//Render updated scene\n\t\t\t\t\t\t//-------------------------------------   \n\t\t\t\t\t\trenderer.stage.addChild( curSprite );\n\n                        \n\n\t\t\t\t\t});\n\n\n\n\t\t\t\t\t//Initialize the default height of canvas\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcanvasDefaultInit( $this, $first );\n\t\t\t\t\t}, animSpeed );\n\n\t\t\t\t\t\n\n\n\t\t\t\t}// end effect\n\n\n\n\n\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//Usage of returning sprite object: container__items.children[index]\n\t\t\t\tif ( $this.hasClass( 'uix-advanced-slider-sp--eff-liquid' ) ) {\n\n\t\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\t\tconst $thisItem = $( this );\n\n\n\n\t\t\t\t\t\t//Load sprite from each slider to canvas\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tlet curSprite, \n\t\t\t\t\t\t\tcanvasRatio = $this.width()/nativeItemW;\n\n\t\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t\t// create a video texture from a path\n\t\t\t\t\t\t\tlet videoURL = $thisItem.find( 'source:first' ).attr( 'src' );\n                            if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n                            \n                            const texture  = PIXI.Texture.from( videoURL );\n                            \n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite( texture );\n\n\t\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\t\tconst videoSource = texture.baseTexture.resource.source;\n\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\tvideoSource.pause();\n\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\tvideoSource.muted = true;\n\n\n\t\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\t\tconst video = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n\t\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\n\t\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\t\timgCur   = new Image();\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite.from( imgURL );\n\n\t\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t\t}\n\n                        \n                        // center the sprite's anchor point\n                        curSprite.anchor.set( 0 );\n                        \n                        // sprite size\n\t\t\t\t\t\tcurSprite.width  = renderer.view.width;\n\t\t\t\t\t\tcurSprite.height = renderer.view.height;\t\n\n\n\t\t\t\t\t\t//Need to scale according to the screen\n\t\t\t\t\t\tcurSprite.scale.set( canvasRatio );\n\n\n                        \n\t\t\t\t\t\t//Render updated scene\n\t\t\t\t\t\t//-------------------------------------   \n                        container__items.addChild( curSprite );\n\n\n\t\t\t\t\t\t//Add child container to the main container \n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tstage__filter.addChild( container__items );\n\t\t\t\t\t\t// Enable Interactions\n\t\t\t\t\t\tstage__filter.interactive = true;\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Set the filter to stage and set some default values for the animation\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\t\n\t\t\t\t\t\t//A texture stores the information that represents an image\n\t\t\t\t\t\tdisplacementSprite.texture.baseTexture.wrapMode = PIXI.WRAP_MODES.REPEAT;\n\n\t\t\t\t\t\tstage__filter.filters = [ displacementFilter ];    \n\n\n\t\t\t\t\t\t//Add filter container to the main container\n\t\t\t\t\t\t//-------------------------------------\t\t\t\t\n\t\t\t\t\t\tdisplacementSprite.anchor.set( 0.5 );\n\t\t\t\t\t\tdisplacementSprite.x = renderer__filter.width / 2;\n\t\t\t\t\t\tdisplacementSprite.y = renderer__filter.height / 2; \n\n\t\t\t\t\t\tdisplacementSprite.scale.x = 1;\n\t\t\t\t\t\tdisplacementSprite.scale.y = 1;\n\n\t\t\t\t\t\t// PIXI tries to fit the filter bounding box to the renderer so we optionally bypass\n\t\t\t\t\t\tdisplacementFilter.autoFit = false;\n\n\t\t\t\t\t\tstage__filter.addChild( displacementSprite );\n\n\n\n\t\t\t\t\t\t//Animation Effects\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tconst ticker       = new PIXI.Ticker();\n\t\t\t\t\t\tticker.autoStart = true;\n\t\t\t\t\t\tticker.add( function( delta ) {\n\n\t\t\t\t\t\t\t// Render updated scene\n\t\t\t\t\t\t\trenderer__filter.render( stage__filter );\n\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\n\n\t\t\t\t\t});\n\n\t\t\t\n\t\t\t\t\t//Initialize the default height of canvas\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcanvasDefaultInit( $this, $first );\n\t\t\t\t\t}, animSpeed );\n\n\t\n\t\t\t\t\t\n\n\t\t\t\t}// end effect\n\n\n\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect 2 -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//Usage of returning sprite object: container__items.children[index]\n\t\t\t\tif ( $this.hasClass( 'uix-advanced-slider-sp--eff-liquid2' ) ) {\n\n\t\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\t\tconst $thisItem = $( this );\n\n\n\n\t\t\t\t\t\t//Load sprite from each slider to canvas\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tlet curSprite, \n\t\t\t\t\t\t\tcanvasRatio = $this.width()/nativeItemW;\n\n\t\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t\t// create a video texture from a path\n\t\t\t\t\t\t\tlet videoURL = $thisItem.find( 'source:first' ).attr( 'src' );\n                            if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n                            \n                            const texture  = PIXI.Texture.from( videoURL );\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite( texture );\n\n\t\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\t\tconst videoSource = texture.baseTexture.resource.source;\n\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\tvideoSource.pause();\n\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\tvideoSource.muted = true;\n\n\n\t\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\t\tconst video = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n\t\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\t\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\t\t  imgCur   = new Image();\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite.from( imgURL );\n\n\t\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t\t}\n\n                        \n                        // center the sprite's anchor point\n                        curSprite.anchor.set( 0 );\n                        \n                        // sprite size\n\t\t\t\t\t\tcurSprite.width  = renderer.view.width;\n\t\t\t\t\t\tcurSprite.height = renderer.view.height;\t\n\n\n\t\t\t\t\t\t//Need to scale according to the screen\n\t\t\t\t\t\tcurSprite.scale.set( canvasRatio );\n\n                        \n                        //Avoid error texture rendering errors ***!Important***\n\t\t\t\t\t\tTweenMax.set( curSprite, {\n\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t//Render updated scene\n\t\t\t\t\t\t//-------------------------------------   \n\t\t\t\t\t\tcontainer__items.addChild( curSprite );\n\n\n\t\t\t\t\t\t//Add child container to the main container \n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tstage__filter.addChild( container__items );\n\t\t\t\t\t\t// Enable Interactions\n\t\t\t\t\t\tstage__filter.interactive = true;\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Set the filter to stage and set some default values for the animation\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\t\n\t\t\t\t\t\t//A texture stores the information that represents an image\n\t\t\t\t\t\tdisplacementSprite.texture.baseTexture.wrapMode = PIXI.WRAP_MODES.CLAMP;\n\t\t\t\t\t\t\n\t\t\t\t\t\tstage__filter.filters = [ displacementFilter ];    \n\n\n\t\t\t\t\t\t//Add filter container to the main container\n\t\t\t\t\t\t//-------------------------------------\t\t\t\t\n\t\t\t\t\t\tdisplacementSprite.anchor.set( 0.5 );\n\t\t\t\t\t\tdisplacementSprite.x = renderer__filter.width / 2;\n\t\t\t\t\t\tdisplacementSprite.y = renderer__filter.height / 2;\n\t\t\t\t\t\n\n\n\t\t\t\t\t\t// PIXI tries to fit the filter bounding box to the renderer so we optionally bypass\n\t\t\t\t\t\tdisplacementFilter.autoFit = false;\n\n\t\t\t\t\t\tstage__filter.addChild( displacementSprite );\n\n\t\t\t\t\t\t//Animation Effects\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tconst ticker       = new PIXI.Ticker();\n\t\t\t\t\t\tticker.autoStart = true;\n\t\t\t\t\t\tticker.add( function( delta ) {\n\t\t\t\t\t\t\t\n          \n\t\t\t\t\t\t\t// Render updated scene\n\t\t\t\t\t\t\trenderer__filter.render( stage__filter );\n\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\t\t//Initialize the default height of canvas\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcanvasDefaultInit( $this, $first );\n\t\t\t\t\t}, animSpeed );\n\n\n\t\t\t\t}// end effect\n\t\t\n\t\t\t\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect 3 -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//Usage of returning sprite object: container__items.children[index]\n\t\t\t\tif ( $this.hasClass( 'uix-advanced-slider-sp--eff-liquid3' ) ) {\n\n\t\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\t\tconst $thisItem = $( this );\n\n\n\n\t\t\t\t\t\t//Load sprite from each slider to canvas\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tlet curSprite, \n\t\t\t\t\t\t\tcanvasRatio = $this.width()/nativeItemW;\n\n\t\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t\t// create a video texture from a path\n\t\t\t\t\t\t\tlet videoURL = $thisItem.find( 'source:first' ).attr( 'src' );\n                            if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n                            \n                            const texture  = PIXI.Texture.from( videoURL );\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite( texture );\n\n\t\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\t\tconst videoSource = texture.baseTexture.resource.source;\n\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\tvideoSource.pause();\n\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\tvideoSource.muted = true;\n\n\n\t\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\t\tconst video = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n\t\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\n\t\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\t\t  imgCur   = new Image();\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite.from( imgURL );\n\n\t\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t\t}\n\n                        \n                        // center the sprite's anchor point\n                        curSprite.anchor.set( 0 );\n                        \n                        // sprite size\n\t\t\t\t\t\tcurSprite.width  = renderer.view.width;\n\t\t\t\t\t\tcurSprite.height = renderer.view.height;\t\n\n\n\t\t\t\t\t\t//Need to scale according to the screen\n\t\t\t\t\t\tcurSprite.scale.set( canvasRatio );\n\n                        \n                        //Avoid error texture rendering errors ***!Important***\n\t\t\t\t\t\tTweenMax.set( curSprite, {\n\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t//Render updated scene\n\t\t\t\t\t\t//-------------------------------------   \n\t\t\t\t\t\tcontainer__items.addChild( curSprite );\n\n\n\t\t\t\t\t\t//Add child container to the main container \n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tstage__filter.addChild( container__items );\n\t\t\t\t\t\t// Enable Interactions\n\t\t\t\t\t\tstage__filter.interactive = true;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Set the filter to stage and set some default values for the animation\n\t\t\t\t\t\t//-------------------------------------\n\n\t\t\t\t\t\t//A texture stores the information that represents an image\n\t\t\t\t\t\tdisplacementSprite.texture.baseTexture.wrapMode = PIXI.WRAP_MODES.REPEAT;\n\t\t\t\t\t\t\n\t\t\t\t\t\tstage__filter.filters = [ displacementFilter ];    \n\n\n\t\t\t\t\t\t//Add filter container to the main container\n\t\t\t\t\t\t//-------------------------------------\t\t\t\t\n\t\t\t\t\t\tdisplacementSprite.anchor.set( 0.5 );\n\t\t\t\t\t\tdisplacementSprite.x = renderer__filter.width / 2;\n\t\t\t\t\t\tdisplacementSprite.y = renderer__filter.height / 2;\n\t\t\t\t\t\n\n\n\t\t\t\t\t\t// PIXI tries to fit the filter bounding box to the renderer so we optionally bypass\n\t\t\t\t\t\tdisplacementFilter.autoFit = false;\n\n\t\t\t\t\t\tstage__filter.addChild( displacementSprite );\n\n\t\t\t\t\t\t//Animation Effects\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tconst ticker       = new PIXI.Ticker();\n\t\t\t\t\t\tticker.autoStart = true;\n\t\t\t\t\t\tticker.add( function( delta ) {\n\t\t\t\t\t\t\t\n                            //Need the displacementSprite.texture.baseTexture.wrapMode is \"PIXI.WRAP_MODES.REPEAT\"\n\t\t\t\t\t\t\tdisplacementSprite.x += 1 * delta;\n\t\t\t\t\t\t\tdisplacementSprite.y += 0.3;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Render updated scene\n\t\t\t\t\t\t\trenderer__filter.render( stage__filter );\n\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Initialize the default height of canvas\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcanvasDefaultInit( $this, $first );\n\t\t\t\t\t}, animSpeed );\n\n\n\t\t\t\t}// end effect\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Parallax Effect -------------------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//Usage of returning sprite object: container__items.children[index]\n\t\t\t\tif ( $this.hasClass( 'uix-advanced-slider-sp--eff-parallax' ) ) {\n\n\t\t\t\t\t\n\t\t\t\t\t$this.find( '.uix-advanced-slider-sp__item' ).each( function( index )  {\n\n\t\t\t\t\t\tconst $thisItem = $( this );\n\n\n\n\t\t\t\t\t\t//Load sprite from each slider to canvas\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tlet curSprite, \n\t\t\t\t\t\t\tcanvasRatio = $this.width()/nativeItemW;\n\n\t\t\t\t\t\tif ( $thisItem.find( 'video' ).length > 0 ) {\n\n\n\t\t\t\t\t\t\t// create a video texture from a path\n\t\t\t\t\t\t\tlet videoURL = $thisItem.find( 'source:first' ).attr( 'src' );\n                            if ( typeof videoURL === typeof undefined ) videoURL = $thisItem.attr( 'src' ); \n                            \n                            const texture  = PIXI.Texture.from( videoURL );\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite( texture );\n\n\t\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\t\tconst videoSource = texture.baseTexture.resource.source;\n\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\tvideoSource.pause();\n\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\tvideoSource.muted = true;\n\n\n\t\t\t\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\t\t\t\tconst video = document.getElementById( $thisItem.find( 'video' ).attr( 'id' ) );\n\t\t\t\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\n\t\t\t\t\t\t\t}, false);\t\n\n\t\t\t\t\t\t\tvideo.src = videoURL;\n\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet imgURL   = $thisItem.find( 'img' ).attr( 'src' ),\n\t\t\t\t\t\t\t\t  imgCur   = new Image();\n\n\t\t\t\t\t\t\tcurSprite = new PIXI.Sprite.from( imgURL );\n\n\t\t\t\t\t\t\timgCur.onload = function() {\n\n\t\t\t\t\t\t\t\t//At the same time change the height of the canvas\n\t\t\t\t\t\t\t\trenderer.view.style.width = $this.width() + 'px';\n\t\t\t\t\t\t\t\trenderer.view.style.height = canvasHeights[index] + 'px';\t\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\timgCur.src = imgURL;\n\n\n\t\t\t\t\t\t}\n\n                        \n                         // center the sprite's anchor point\n                        curSprite.anchor.set( 0 );\n                        \n                        // sprite size\n\t\t\t\t\t\tcurSprite.width  = renderer.view.width;\n\t\t\t\t\t\tcurSprite.height = renderer.view.height;\t\n\n\n\t\t\t\t\t\t//Need to scale according to the screen\n\t\t\t\t\t\tcurSprite.scale.set( canvasRatio );\n\t\t\t\t\t\t\n                        \n                        //Avoid error texture rendering errors ***!Important***\n\t\t\t\t\t\tTweenMax.set( curSprite, {\n\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t});\n                        \n\t\t\t\t\t\t//Render updated scene\n\t\t\t\t\t\t//-------------------------------------   \n\t\t\t\t\t\tcontainer__items.addChild( curSprite );\n\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Add child container to the main container \n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tstage__filter.addChild( container__items );\n\t\t\t\t\t\t// Enable Interactions\n\t\t\t\t\t\tstage__filter.interactive = true;\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Create mask\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\t//current mask\n\t\t\t\t\t\tconst curSpriteMask = new PIXI.Graphics();\n\t\t\t\t\t\tcurSpriteMask.lineStyle( 0 );\n\t\t\t\t\t\tcurSpriteMask.beginFill( 0xFFFFFF );\n\t\t\t\t\t\tcurSpriteMask.moveTo(0,0);\n\t\t\t\t\t\tcurSpriteMask.lineTo( renderer.view.width, 0 );\n\t\t\t\t\t\tcurSpriteMask.lineTo( renderer.view.width, renderer.view.height );\n\t\t\t\t\t\tcurSpriteMask.lineTo( 0, renderer.view.height );\n\t\t\t\t\t\tcurSpriteMask.endFill();\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tcurSpriteMask.position.x = 0;\n\t\t\t\t\t\tcurSpriteMask.position.y = 0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tcurSprite.mask = curSpriteMask;\n\t\t\t\t\t\tstage__filter.addChild( curSpriteMask ); //Do not add to the container\n\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t//Animation Effects\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tconst ticker       = new PIXI.Ticker();\n\t\t\t\t\t\tticker.autoStart = true;\n\t\t\t\t\t\tticker.add( function( delta ) {\n\n\t\t\t\t\t\t\t// Render updated scene\n\t\t\t\t\t\t\trenderer__filter.render( stage__filter );\n\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\n\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Initialize the default height of canvas\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcanvasDefaultInit( $this, $first );\n\t\t\t\t\t}, animSpeed );\n\n\n\t\t\t\t}// end effect\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t//Canvas Interactions\n\t\t\t\t//-------------------------------------\n\t\t\t\ttransitionInteractions( 0, itemTotal-1, $this, 'in', 'next' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\n\n\t\t\t// Fires local videos asynchronously with slider switch.\n\t\t\t//-------------------------------------\n\t\t\tif ( !Modernizr.webgl ) normalSliderVideoInit( $items, false );\t\n\n\n\n\t\t\t//Pagination dots \n\t\t\t//-------------------------------------\t\n\t\t\tlet _dot       = '',\n\t\t\t\t_dotActive = '';\n\t\t\t_dot += '<ul>';\n\t\t\tfor ( let i = 0; i < itemTotal; i++ ) {\n\n\t\t\t\t_dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n\t\t\t\t_dot += '<li><a '+_dotActive+' data-index=\"'+i+'\" href=\"javascript:\"></a></li>';\n\t\t\t}\n\t\t\t_dot += '</ul>';\n\n\t\t\tif ( $( paginationID ).html() == '' ) $( paginationID ).html( _dot );\n\n\t\t\t$( paginationID ).find( 'li a' ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n                \n                //Prevent buttons' events from firing multiple times\n                const $btn = $( this );\n                if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'true' );\n                \n                $( paginationID ).find( 'li a' )\n                    .delay(animSpeed)\n                    .queue(function(next) { $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'false' ); next(); });  \n                \n                \n                //\n\t\t\t\tif ( !$( this ).hasClass( 'is-active' ) ) {\n\n\t\t\t\t\t\n\t\t\t\t\t//Determine the direction\n\t\t\t\t\tlet curDir = 'prev';\n\t\t\t\t\tif ( $( this ).attr( 'data-index' ) > parseFloat( $items.filter( '.is-active' ).index() ) ) {\n\t\t\t\t\t\tcurDir = 'next';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Canvas Interactions\n\t\t\t\t\ttransitionInteractions( $items.filter( '.is-active' ).index(), $items.filter( '.leave' ).index(), $this, 'out', curDir );\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Update the current and previous/next items\n\t\t\t\t\tsliderUpdates( $( this ).attr( 'data-index' ), $this, curDir, countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t\t//Pause the auto play event\n\t\t\t\t\tclearInterval( $this[0].animatedSlides );\t\n\t\t\t\t}\n\n\n\n\t\t\t});\n\n\t\t\t//Next/Prev buttons\n\t\t\t//-------------------------------------\t\t\n\t\t\tconst _prev = $( arrowsID ).find( '.uix-advanced-slider-sp__arrows--prev' ),\n\t\t\t\t_next = $( arrowsID ).find( '.uix-advanced-slider-sp__arrows--next' );\n\n\t\t\t$( arrowsID ).find( 'a' ).attr( 'href', 'javascript:' );\n\n\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\tif ( !loop ) {\n\t\t\t\t_prev.addClass( 'is-disabled' );\n\t\t\t}\n\n\n\n\t\t\t_prev.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n           \n\n\t\t\t\t//Canvas Interactions\n\t\t\t\ttransitionInteractions( $items.filter( '.is-active' ).index(), $items.filter( '.leave' ).index(), $this, 'out', 'prev' );\t\n\n\t\t\t\t//Update the current and previous items\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) - 1, $this, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\t\t\t});\n\n\t\t\t_next.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n                //\n\n\t\t\t\t//Canvas Interactions\n\t\t\t\ttransitionInteractions( $items.filter( '.is-active' ).index(), $items.filter( '.leave' ).index(), $this, 'out', 'next' );\t\n\n\t\t\t\t//Update the current and next items\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) + 1, $this, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\n\t\t\t});\n\n\t\t\t\n\n\n\n\t\t\t//Added touch method to mobile device and desktop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $items;\n\t\t\t\n\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\tif ( draggable && draggableCursor != '' && draggableCursor != false ) $dragDropTrigger.css( 'cursor', draggableCursor );\n\n\n\t\t\t//Mouse event\n\t\t\t$dragDropTrigger.on( 'mousedown.ADVANCED_SLIDER_FILTER touchstart.ADVANCED_SLIDER_FILTER', function( e ) {\n\t\t\t\t//Do not use \"e.preventDefault()\" to avoid prevention page scroll on drag in IOS and Android\n\n\t\t\t\tconst touches = e.originalEvent.touches;\n\n\t\t\t\t$( this ).addClass( 'is-dragging' );\n\t\n\t\t\t\tif ( touches && touches.length ) {\t\n\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( touches[0].pageX ) );\n\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( touches[0].pageY ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( e.pageX ) );\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( e.pageY ) );\t\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\n\t\t\t\t$dragDropTrigger.on( 'mouseup.ADVANCED_SLIDER_FILTER touchmove.ADVANCED_SLIDER_FILTER', function( e ) {\n\t\t\t\t\t\n\n\t\t\t\t\t$( this ).removeClass( 'is-dragging' );\n\t\t\t\t\tlet touches        = e.originalEvent.touches,\n\t\t\t\t\t\torigin_mouse_x = $( this ).data( 'origin_mouse_x' ),\n\t\t\t\t\t\torigin_mouse_y = $( this ).data( 'origin_mouse_y' );\n\n\t\t\t\t\tif ( touches && touches.length ) {\n\n\t\t\t\t\t\tlet deltaX = origin_mouse_x - touches[0].pageX,\n\t\t\t\t\t\t\tdeltaY = origin_mouse_y - touches[0].pageY;\n\n\t\t\t\t\t\t//--- left\n\t\t\t\t\t\tif ( deltaX >= 50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- right\n\t\t\t\t\t\tif ( deltaX <= -50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- up\n\t\t\t\t\t\tif ( deltaY >= 50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- down\n\t\t\t\t\t\tif ( deltaY <= -50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tif ( Math.abs( deltaX ) >= 50 || Math.abs( deltaY ) >= 50 ) {\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'touchmove.ADVANCED_SLIDER_FILTER' );\n\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t\t//right\n\t\t\t\t\t\t\tif ( e.pageX > origin_mouse_x ) {\t\t\t\t\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//left\n\t\t\t\t\t\t\tif ( e.pageX < origin_mouse_x ) {\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//down\n\t\t\t\t\t\t\tif ( e.pageY > origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//up\n\t\t\t\t\t\t\tif ( e.pageY < origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'mouseup.ADVANCED_SLIDER_FILTER' );\n\n\t\t\t\t\t\t}\t\n\n\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t} );//end: mouseup.ADVANCED_SLIDER_FILTER touchmove.ADVANCED_SLIDER_FILTER\n\n\n\n\n\t\t\t} );// end: mousedown.ADVANCED_SLIDER_FILTER touchstart.ADVANCED_SLIDER_FILTER\n\n\t\t\n\n\t\t}\n\t\t\n\t\t\n\t\n\t\t/*\n\t\t * Transition Between Slides\n\t\t *\n\t\t * @param  {Number} elementIndex           - Index of current slider.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {String} dir                    - Switching direction indicator.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @return {Void}\n\t\t */\n        function sliderUpdates( elementIndex, slider, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\t\t\t\n\t\t\tconst $items                   = slider.find( '.uix-advanced-slider-sp__item' ),\n\t\t\t      total                    = $items.length;\n\t\t\t\n\t\t\n\t\t    //Prevent bubbling\n\t\t\tif ( total == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Transition Interception\n\t\t\t//-------------------------------------\n\t\t\tif ( loop ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = 0;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = total-1;\t\n\t\t\t} else {\n\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == total - 1 ) $( arrowsID ).find( '.uix-advanced-slider-sp__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == 0 ) $( arrowsID ).find( '.uix-advanced-slider-sp__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t}\n\n\n\n\t\t\t// To determine if it is a touch screen.\n\t\t\t//-------------------------------------\n\t\t\tif ( Modernizr.touchevents ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = total-1;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = 0;\t\n\t\t\t\t\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\t//first item\n\t\t\t\t\tif ( elementIndex == 0 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-advanced-slider-sp__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\t\t\t\t\t//last item\n\t\t\t\t\tif ( elementIndex == total - 1 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-advanced-slider-sp__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n            \n            \n            // call the current item\n            //-------------------------------------\n            const $current = $items.eq( elementIndex );\n            \n\t\t\t\n\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\t//-------------------------------------\n\t\t\tlet dirIndicatorClass = '';\n\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\t\t\t\n\n\t\t\t//Add transition class to Controls Pagination\n\t\t\t//-------------------------------------\n\t\t\t$( paginationID ).find( 'li a' ).removeClass( 'leave' );\n\t\t\t$( paginationID ).find( 'li a.is-active' ).removeClass( 'is-active' ).addClass( 'leave' );\n\t\t\t$( paginationID ).find( 'li a[data-index=\"'+elementIndex+'\"]' ).addClass( 'is-active' ).removeClass( 'leave' );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Add transition class to each item\n\t\t\t//-------------------------------------\t\n\t\t\t$items.removeClass( 'leave prev next' );\n\t\t\t$items.addClass( dirIndicatorClass );\n\t\t\tslider.find( '.uix-advanced-slider-sp__item.is-active' ).removeClass( 'is-active' ).addClass( 'leave ' + dirIndicatorClass );\n\t\t\t$current.addClass( 'is-active ' + dirIndicatorClass ).removeClass( 'leave' );\n\n\t\t\t\n\t\t\t\n\n\t\t\t//Display counter\n\t\t\t//-------------------------------------\n\t\t\t$( countTotalID ).text( total );\n\t\t\t$( countCurID ).text( parseFloat( elementIndex ) + 1 );\t\t\n\t\t\t\n\n\t\t\t// Fires local videos asynchronously with slider switch.\n\t\t\t//-------------------------------------\n\t\t\tif ( !Modernizr.webgl ) {\n\t\t\t\tnormalSliderVideoInit( $items, false );\n\t\t\t\tnormalSliderVideoInit( $current, true );\t\n\t\t\t}\n\t\t\t\n\t\t\t//Reset the default height of canvas\n\t\t\t//-------------------------------------\t\n\t\t\tsetTimeout( function() {\n\t\t\t\tcanvasDefaultInit( slider, $current );\n\t\t\t}, animSpeed );\n\t\t\t\n\t\t\t\n\t\t\t//Canvas Interactions\n\t\t\t//-------------------------------------\n\t\t\t\n\t\t\t//-- Brightness Effect\n\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-brightness' ) ) {\n\n\t\t\t}\n\n\n\n\t\t\t//-- Liquid Distortion Effect\n\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid' ) ) {\n\n\t\t\t}\n\n\n\n\t\t\t//-- Liquid Distortion Effect 2\n\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid2' ) ) {\n\n\t\t\t}\n\n\n\t\t\t//-- Liquid Distortion Effect 3\n\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid3' ) ) {\n\n\t\t\t}\n\n\n\n\t\t\t//-- Parallax Effect \n\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-parallax' ) ) {\n\n\t\t\t\tif ( loop ) {\n\t\t\t\t\tif ( elementIndex == 0 ) dir = 'prev';\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\ttransitionInteractions( elementIndex, $items.filter( '.leave' ).index(), slider, 'in', dir );\n\t\t\t\n\n\t\t\t\n\t\t}\n\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\n\t\t/*\n\t\t * Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t *\n\t\t * @param  {Number} w                - The width that the canvas will be set.\n\t\t * @param  {Number} h                - The height that the canvas will be set.\n\t\t * @return {Void}\n\t\t */\n        function fixCanvasTagSize( w, h ) {\n\n\t\t\t\n\t\t\tTweenMax.to( ['#' + rendererCanvasID, '.uix-advanced-slider-sp__wrapper', '.uix-advanced-slider-sp__inner', '.uix-advanced-slider-sp__canvas-container' ], animSpeed/1000, { \n\t\t\t\twidth : w,\n\t\t\t\theight: h\n\t\t\t} );\n\n\t\t}\n\t\t\n\n\t\t/*\n\t\t * Initialize the default height of canvas\n\t\t *\n         * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {Element} currentLlement         - Current selector of each slider.\n\t\t * @return {Void}\n\t\t */\n        function canvasDefaultInit( slider, currentLlement ) {\n\t\t\t\n\t\t\tif ( currentLlement.find( 'video' ).length > 0 ) {\n\n\t\t\t\t//Returns the dimensions (intrinsic height and width ) of the video\n\t\t\t\tconst video    = document.getElementById( currentLlement.find( 'video' ).attr( 'id' ) );\n\t\t\t\tlet\tvideoURL = currentLlement.find( 'source:first' ).attr( 'src' );\n                \n                if ( typeof videoURL === typeof undefined ) videoURL = currentLlement.attr( 'src' ); \n\n\t\t\t\tvideo.addEventListener( 'loadedmetadata', function( e ) {\n\n\t\t\t\t\t//At the same time change the height of the canvas and slider container\n\t\t\t\t\tconst h = this.videoHeight*(currentLlement.closest( '.uix-advanced-slider__outline' ).width()/this.videoWidth);\n\t\t\t\t\t\n\t\t\t\t\tif ( Modernizr.webgl ) {\n\t\t\t\t\t\trenderer.view.style.height = h + 'px';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//---\n\t\t\t\t\tslider.css( 'height', h + 'px' );\t\n\n\t\t\t\t}, false);\t\n\n\t\t\t\tvideo.src = videoURL;\n\n\n\t\t\t} else {\n\n\t\t\t\tlet imgURL   = currentLlement.find( 'img' ).attr( 'src' );\n\t\t\t\t\n\t\t\t\tif ( typeof imgURL != typeof undefined ) {\n\t\t\t\t\t\n\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t\n\t\t\t\t\timg.onload = function() {\n\n\t\t\t\t\t\tif ( Modernizr.webgl ) {\n\t\t\t\t\t\t\trenderer.view.style.height = currentLlement.find( 'img' ).height() + 'px';\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//---\n\t\t\t\t\t\tslider.css( 'height', currentLlement.closest( '.uix-advanced-slider__outline' ).width()*(this.height/this.width) + 'px' );\t\t\n\n\t\t\t\t\t};\n\n\t\t\t\t\timg.src = imgURL;\n\t\t\t\t}\n\n\n\t\t\t}\t\n\t\t\t\n\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Canvas Transition Interactions\n\t\t * @http://pixijs.download/dev/docs/index.html\n\t\t *\n\t\t * @param  {Number} elementIndex           - Index of current slider.\n\t\t * @param  {Number} prevElementIndex       - Index of previous slider.\n\t\t * @param  {Element} slider                 - Selector of the slider.\n\t\t * @param  {String} goType                 - The type of entry and exit between two items.  \n\t\t                                             Optional values: in, out\n\t\t * @param  {String} dir                    - Switching direction indicator.\t \n\t\t * @return {Void}\n\t\t */\n        function transitionInteractions( elementIndex, prevElementIndex, slider, goType, dir ) {\n\t\t\t\n\t\t\t\n\t\t\tif ( Modernizr.webgl ) {\n\t\t\t\n\t\t\t\tconst $myRenderer           = $( '#' + rendererOuterID ),\n\t\t\t\t      $current              = slider.find( '.uix-advanced-slider-sp__item' ).eq( elementIndex ),\n\t\t\t\t\t  $allItems             = slider.find( '.uix-advanced-slider-sp__item' ),\n\t\t\t\t\t  imgSel                = $current.find( 'img' ),\n\t\t\t\t      curImgURL             = imgSel.attr( 'src' ),\n\t\t\t\t\t  stageW                = slider.width(),\n\t\t\t\t\t  stageH                = slider.height(),\n\t\t\t\t\t  spTotal               = slider.find( '.uix-advanced-slider-sp__item' ).length;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\telementIndex              = parseFloat( elementIndex );\n\t\t\t\tprevElementIndex          = parseFloat( prevElementIndex );\n\n\n\t\t\t\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Brightness Effect -------------------------------\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-brightness' ) ) {\n\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Hide description container of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tTweenMax.to( $allItems, animSpeed/1000, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t//Display wrapper of canvas (transitions between slides)\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tif ( goType == 'out' ) {\n\t\t\t\t\t\t//Current item leaving action\n\t\t\t\t\t\t\n\t\t\t\t\t\tTweenMax.to( renderer.stage.children[ elementIndex ], animSpeed/1000, {\n\t\t\t\t\t\t\tpixi: {\n\t\t\t\t\t\t\t\tbrightness: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t});\t\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Current item entry action\n\t\t\t\t\t\tTweenMax.to( $myRenderer, animSpeed/1000, {\n\t\t\t\t\t\t\talpha : 0,\n\t\t\t\t\t\t\tonComplete    : function() {\n\n\t\t\t\t\t\t\t\tconst curSp = renderer.stage.children[ elementIndex ];\n\n\t\t\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t\t\t});\t\t\t\n\n\n\n\t\t\t\t\t\t\t\t//display the current item\n\t\t\t\t\t\t\t\tfor ( let k = 0; k < spTotal; k++ ) {\n\n\t\t\t\t\t\t\t\t\tconst obj = renderer.stage.children[ k ];\n\t\t\t\t\t\t\t\t\tTweenMax.set( obj, {\n\t\t\t\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t\t\t\t//pause all videos\n\t\t\t\t\t\t\t\t\tif ( obj._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\t\tconst videoSource = obj.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource.pause ) == '[object Function]' ) videoSource.pause();\n\t\t\t\t\t\t\t\t\t\tvideoSource.muted = true;\n\t\t\t\t\t\t\t\t\t}\t\t\n\n\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t//play current video\n\t\t\t\t\t\t\t\tif ( curSp._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\tconst videoSource2 = curSp.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\tvideoSource2.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoSource2.autoplay = true;\n\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource2.play ) == '[object Function]' ) videoSource2.play();\n\t\t\t\t\t\t\t\t\tvideoSource2.muted = false;\n\t\t\t\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t\t\t\t//Reset the height of the canvas when each item is switched\n\t\t\t\t\t\t\t\t//Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t\t\t\t\t\t\t//console.log( 'width: ' + windowWidth + ' | height: ' + canvasHeights[ elementIndex ] + ' | index: ' + elementIndex );\n\t\t\t\t\t\t\t\tfixCanvasTagSize( windowWidth, canvasHeights[ elementIndex ] );\n\n\n\t\t\t\t\t\t\t\t//display filters\n\t\t\t\t\t\t\t\tTweenMax.set( curSp, {\n\t\t\t\t\t\t\t\t\tpixi: {\n\t\t\t\t\t\t\t\t\t\tbrightness: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\talpha : 1,\n\t\t\t\t\t\t\t\t\tonComplete    : function() {\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\t\t\tpixi: {\n\t\t\t\t\t\t\t\t\t\t\t\tbrightness: 1\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t\t\t\t\tTweenMax.to( $current, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t\t\t\t\t});\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\t\t\n\n\n\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\n\n\n\t\t\t\t} // end effect\n\n\n\t\t\t\t\n\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid' ) ) {\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Hide description container of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tTweenMax.to( $allItems, animSpeed/1000, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\tconst curSp    = container__items.children[ elementIndex ],\n\t\t\t\t\t\tprevSp   = container__items.children[ prevElementIndex ];\n\n\t\t\t\t\t\t\n\t\t\t\t\t//Display the current item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( !slider.hasClass( 'js-init-ok' ) ) {\n\t\t\t\t\t\tfor ( let k = 0; k < spTotal; k++ ) {\n\n\t\t\t\t\t\t\tconst obj = container__items.children[ k ];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tTweenMax.set( obj, {\n\t\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Avoid repeated initialization\n\t\t\t\t\t\tslider.addClass( 'js-init-ok' );\t\n\t\t\t\t\t}\n\n\n\t\t\t\t\t\n\t\t\t\t\t//Display wrapper of canvas (transitions between slides)\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tif ( goType == 'out' ) {\n\t\t\t\t\t\t//Current item leaving action\n\t\n\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Video sprite initialization\n\t\t\t\t\t\t//Need to ensure that the video tag exists\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tfor ( let k = 0; k < spTotal; k++ ) {\n\n\t\t\t\t\t\t\t\tconst obj = container__items.children[ k ];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//pause all videos\n\t\t\t\t\t\t\t\tif ( obj._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\tconst videoSource = obj.texture.baseTexture.resource.source;\n\n\n\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource.pause ) == '[object Function]' ) videoSource.pause();\n\t\t\t\t\t\t\t\t\tvideoSource.muted = true;\n\t\t\t\t\t\t\t\t}\t\n\t\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//play current video\n\t\t\t\t\t\t\tif ( curSp._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\tconst videoSource2 = curSp.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\tvideoSource2.currentTime = 0;\n\t\t\t\t\t\t\t\tvideoSource2.autoplay = true;\n\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource2.play ) == '[object Function]' ) videoSource2.play();\n\t\t\t\t\t\t\t\tvideoSource2.muted = false;\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Reset the height of the canvas when each item is switched\n\t\t\t\t\t\t\t//Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t\t\t\t\t\t//console.log( 'width: ' + windowWidth + ' | height: ' + canvasHeights[ elementIndex ] + ' | index: ' + elementIndex );\n\t\t\t\t\t\t\tfixCanvasTagSize( windowWidth, canvasHeights[ elementIndex ] );\n\t\n\t\t\t\t\t\t}, 100 );\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Current item entry action\n\t\t\t\t\t\tconst baseTimeline = new TimelineMax( { onComplete: function () {\n\t\t\t\t\t\t\tdisplacementSprite.scale.set( 1 );       \n\t\t\t\t\t\t },onUpdate: function() {\n\t\t\t\t\t\t\tdisplacementSprite.rotation += baseTimeline.progress() * 0.02;      \n\t\t\t\t\t\t\tdisplacementSprite.scale.set( baseTimeline.progress() * 3 );\n\n\t\t\t\t\t\t} });\n\n\t\t\t\t\t\tbaseTimeline.clear();\n\n\t\t\t\t\t\tif ( baseTimeline.isActive() ) {\n\t\t\t\t\t\t  return;\n\t\t\t\t\t\t}        \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tbaseTimeline\n\t\t\t\t\t\t.to( displacementFilter.scale, animSpeed/1000, { x: 300, y: 300, ease: Power1.easeOut } )\n\t\t\t\t\t\t.to( prevSp, (animSpeed/2)/1000, { alpha: 0, ease: Power2.easeOut }, (animSpeed/3)/1000 )\n\t\t\t\t\t\t.to( curSp, (animSpeed/2)/1000, { alpha: 1, ease: Power2.easeOut }, (animSpeed/2)/1000 )\n\t\t\t\t\t\t.to( displacementFilter.scale, animSpeed/1000, { x: 0, y: 0, ease: Power2.easeOut }, (animSpeed/2)/1000 )\n\t\t\t\t\t\t.to( $current, animSpeed/1000, { alpha: 1, ease: Power2.easeOut }, 'final' );\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t//Add new ripple each time mouse\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tslider[0].addEventListener(\"mousedown\", function(e) {\n\t\t\t\t\t  \n\t\t\t\t\t\t\tTweenMax.to( displacementFilter.scale, 1, { x: \"+=\" + Math.sin( e.pageX ) * 100 + \"\", y: \"+=\" + Math.cos( e.pageY ) * 100 + \"\"  });   \n\t\t\t\t\t\t\trotateSpite();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tslider[0].addEventListener(\"mouseup\", function(e) {\n\t\t\t\t\t\n\t\t\t\t\t\t\tTweenMax.to( displacementFilter.scale, 1, { x: 0, y: 0 } );\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst rotateSpite = function() {\n\t\t\t\t\t\t\tdisplacementFilter.rotation += 0.001;\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t} // end effect\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect 2 -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid2' ) ) {\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Hide description container of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tTweenMax.to( $allItems, animSpeed/1000, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Display wrapper of canvas (transitions between slides)\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tif ( goType == 'out' ) {\n\t\t\t\t\t\t//Current item leaving action\n\t\t\t\t\t\t\n\t\t\t\t\t\tTweenMax.to( displacementSprite.scale, 1, { \n\t\t\t\t\t\t\tx: 10\n\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Current item entry action\n\t\t\t\t\t\tTweenMax.to( $myRenderer, animSpeed/1000, {\n\t\t\t\t\t\t\talpha : 0,\n\t\t\t\t\t\t\tonComplete    : function() {\n\n\t\t\t\t\t\t\t\tconst curSp = container__items.children[ elementIndex ];\n\n\t\t\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t\t\t});\t\n\n\n\t\t\t\t\t\t\t\t//display the current item\n\t\t\t\t\t\t\t\tfor ( let k = 0; k < spTotal; k++ ) {\n\n\t\t\t\t\t\t\t\t\tconst obj = container__items.children[ k ];\n\t\t\t\t\t\t\t\t\tTweenMax.set( obj, {\n\t\t\t\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t\t\t\t//pause all videos\n\t\t\t\t\t\t\t\t\tif ( obj._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\t\tconst videoSource = obj.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource.pause ) == '[object Function]' ) videoSource.pause();\n\t\t\t\t\t\t\t\t\t\tvideoSource.muted = true;\n\t\t\t\t\t\t\t\t\t}\t\t\n\n\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t//play current video\n\t\t\t\t\t\t\t\tif ( curSp._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\tconst videoSource2 = curSp.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\tvideoSource2.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoSource2.autoplay = true;\n\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource2.play ) == '[object Function]' ) videoSource2.play();\n\t\t\t\t\t\t\t\t\tvideoSource2.muted = false;\n\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\t//Reset the height of the canvas when each item is switched\n\t\t\t\t\t\t\t\t//Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t\t\t\t\t\t\t//console.log( 'width: ' + windowWidth + ' | height: ' + canvasHeights[ elementIndex ] + ' | index: ' + elementIndex );\n\t\t\t\t\t\t\t\tfixCanvasTagSize( windowWidth, canvasHeights[ elementIndex ] );\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//display filters\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//sprite\n\t\t\t\t\t\t\t\tconst baseTimeline = new TimelineMax( {\n\t\t\t\t\t\t\t\t\tdelay       : 0,\n\t\t\t\t\t\t\t\t\tpaused      : false,\n\t\t\t\t\t\t\t\t\trepeat      : 0,\n\t\t\t\t\t\t\t\t\tonRepeat    : function() {},\n\t\t\t\t\t\t\t\t\tonComplete  : function() {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tTweenMax.to( displacementSprite.scale, 1, { x: 1, y: 1 });   \n\t\t\t\t\t\t\t\t\t\tTweenMax.to( displacementSprite, 1, { rotation: 0 }); \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonUpdate    : function() {  \n\t\t\t\t\t\t\t\t\t\tdisplacementSprite.scale.set( baseTimeline.progress() * 13 );\n\t\t\t\t\t\t\t\t\t\tdisplacementSprite.rotation += baseTimeline.progress() * 0.02;\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbaseTimeline.clear();\n\n\t\t\t\t\t\t\t\t//filter\n\t\t\t\t\t\t\t\tbaseTimeline\n\t\t\t\t\t\t\t\t  .to( displacementFilter.scale, animSpeed/1000, { y: \"+=\" + 200 + \"\", ease: Power3.easeOut } )\n\t\t\t\t\t\t\t\t  .to( curSp, (animSpeed/2)/1000, { alpha: 1, ease: Power3.easeOut }, (animSpeed/2)/1000 )     \n\t\t\t\t\t\t\t\t  .to( displacementFilter.scale, animSpeed/1000, { y: 0,  ease: Power3.easeOut }, (animSpeed/2)/1000 )\n\t\t\t\t\t\t\t\t  .to( $current, animSpeed/1000, { alpha: 1, ease: Power2.easeOut }, 'final' );\n\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t//Add new ripple each time mouse is clicked/mousemoved\n\t\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t\tdocument.addEventListener(\"mousemove\", function(e) {\n\t\t\t\t\t\n\t\t\t\t\t\t\tTweenMax.to( displacementFilter.scale, 1, { x: e.pageX/2 + \"\" });   \n\t\t\t\t\t\t});\n\n\t\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t} // end effect\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Liquid Distortion Effect 3 -----------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-liquid3' ) ) {\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Hide description container of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tTweenMax.to( $allItems, animSpeed/1000, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Display wrapper of canvas (transitions between slides)\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tif ( goType == 'out' ) {\n\t\t\t\t\t\t//Current item leaving action\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tTweenMax.to( displacementSprite, 1, { \n\t\t\t\t\t\t\tx: 23,\n\t\t\t\t\t\t\ty: 10\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Current item entry action\n\t\t\t\t\t\tTweenMax.to( $myRenderer, animSpeed/1000, {\n\t\t\t\t\t\t\talpha : 0,\n\t\t\t\t\t\t\tonComplete    : function() {\n\n\t\t\t\t\t\t\t\tconst curSp = container__items.children[ elementIndex ];\n\n\t\t\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t\t\t});\t\n\n\n\t\t\t\t\t\t\t\t//display the current item\n\t\t\t\t\t\t\t\tfor ( let k = 0; k < spTotal; k++ ) {\n\n\t\t\t\t\t\t\t\t\tconst obj = container__items.children[ k ];\n\t\t\t\t\t\t\t\t\tTweenMax.set( obj, {\n\t\t\t\t\t\t\t\t\t\talpha : 0\n\t\t\t\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t\t\t\t//pause all videos\n\t\t\t\t\t\t\t\t\tif ( obj._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\t\tconst videoSource = obj.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource.pause ) == '[object Function]' ) videoSource.pause();\n\t\t\t\t\t\t\t\t\t\tvideoSource.muted = true;\n\t\t\t\t\t\t\t\t\t}\t\t\n\n\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t//play current video\n\t\t\t\t\t\t\t\tif ( curSp._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\tconst videoSource2 = curSp.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\tvideoSource2.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoSource2.autoplay = true;\n\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource2.play ) == '[object Function]' ) videoSource2.play();\n\t\t\t\t\t\t\t\t\tvideoSource2.muted = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//Reset the height of the canvas when each item is switched\n\t\t\t\t\t\t\t\t//Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t\t\t\t\t\t\t//console.log( 'width: ' + windowWidth + ' | height: ' + canvasHeights[ elementIndex ] + ' | index: ' + elementIndex );\n\t\t\t\t\t\t\t\tfixCanvasTagSize( windowWidth, canvasHeights[ elementIndex ] );\t\n\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t//display filters\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//sprite\n\t\t\t\t\t\t\t\tconst baseTimeline = new TimelineMax( {\n\t\t\t\t\t\t\t\t\tdelay       : 0,\n\t\t\t\t\t\t\t\t\tpaused      : false,\n\t\t\t\t\t\t\t\t\trepeat      : 0,\n\t\t\t\t\t\t\t\t\tonRepeat    : function() {},\n\t\t\t\t\t\t\t\t\tonComplete  : function() {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonUpdate    : function() {  \n\t\t\t\t\t\t\t\t\t   \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbaseTimeline.clear();\n\n\t\t\t\t\t\t\t\t//filter\n\t\t\t\t\t\t\t\tbaseTimeline\n\t\t\t\t\t\t\t\t  .to( displacementFilter.scale, animSpeed/1000, { y: \"+=\" + 50 + \"\", ease: Power3.easeOut } )\n\t\t\t\t\t\t\t\t  .to( curSp, (animSpeed/2)/1000, { alpha: 1, ease: Power3.easeOut }, (animSpeed/2)/1000 )     \n\t\t\t\t\t\t\t\t  .to( displacementFilter.scale, animSpeed/1000, { y: 0,  ease: Power3.easeOut }, (animSpeed/2)/1000 )\n\t\t\t\t\t\t\t\t  .to( $current, animSpeed/1000, { alpha: 1, ease: Power2.easeOut }, 'final' );\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\t\n\n\t\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t} // end effect\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\t//--------------------------------- Parallax Effect -----------------------------\n\t\t\t\t//----------------------------------------------------------------------------------\n\t\t\t\tif ( slider.hasClass( 'uix-advanced-slider-sp--eff-parallax' ) ) {\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Hide description container of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tTweenMax.to( $allItems, animSpeed/1000, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Prevent text overlap when switching quickly\n\t\t\t\t\t$allItems.attr( 'data-text-eff-enable', 0 );\n\t\t\t\t\t$current.attr( 'data-text-eff-enable', 1 );\t\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tconst curSpParallax  = container__items.children[ elementIndex ],\n\t\t\t\t\t\tprevSpParallax = container__items.children[ prevElementIndex ];\n\n\t\t\t\t\t//Display the current item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( !slider.hasClass( 'js-init-ok' ) ) {\n\t\t\t\t\t\tfor ( let m = 0; m < spTotal; m++ ) {\n\n\t\t\t\t\t\t\tconst objParallax = container__items.children[ m ];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tTweenMax.set( objParallax.mask, {\n\t\t\t\t\t\t\t\tx : renderer.view.width\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Avoid repeated initialization\n\t\t\t\t\t\tslider.addClass( 'js-init-ok' );\t\n\t\t\t\t\t}\n\n\t\t\t\t\t\n\n\n\t\t\t\t\t\n\t\t\t\t\t//Display wrapper of canvas (transitions between slides)\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tif ( goType == 'out' ) {\n\t\t\t\t\t\t//Current item leaving action\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Video sprite initialization\n\t\t\t\t\t\t//Need to ensure that the video tag exists\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tfor ( let m = 0; m < spTotal; m++ ) {\n\n\t\t\t\t\t\t\t\tconst obj = container__items.children[ m ];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//pause all videos\n\t\t\t\t\t\t\t\tif ( obj._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\t\tconst videoSource = obj.texture.baseTexture.resource.source;\n\n\n\t\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\t\tvideoSource.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoSource.autoplay = false;\n\t\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource.pause ) == '[object Function]' ) videoSource.pause();\n\t\t\t\t\t\t\t\t\tvideoSource.muted = true;\n\t\t\t\t\t\t\t\t}\t\n\t\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//play current video\n\t\t\t\t\t\t\tif ( curSpParallax._texture.baseTexture.imageType == null ) {\n\t\t\t\t\t\t\t\tconst videoSource2 = curSpParallax.texture.baseTexture.resource.source;\n\n\t\t\t\t\t\t\t\t// play the video\n\t\t\t\t\t\t\t\tvideoSource2.currentTime = 0;\n\t\t\t\t\t\t\t\tvideoSource2.autoplay = true;\n\t\t\t\t\t\t\t\tif ( Object.prototype.toString.call( videoSource2.play ) == '[object Function]' ) videoSource2.play();\n\t\t\t\t\t\t\t\tvideoSource2.muted = false;\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t\t//Reset the height of the canvas when each item is switched\n\t\t\t\t\t\t\t//Fixed image width adaptation problem for Advanced Slider (on HTML tag <canvas>)\n\t\t\t\t\t\t\t//console.log( 'width: ' + windowWidth + ' | height: ' + canvasHeights[ elementIndex ] + ' | index: ' + elementIndex );\n\t\t\t\t\t\t\tfixCanvasTagSize( windowWidth, canvasHeights[ elementIndex ] );\t\t\n\n\n\t\t\t\t\t\t}, 100 );\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Current item entry action\n\t\t\t\t\t\tlet restoreX,\n\t\t\t\t\t\t\toffsetX       = renderer.view.width / 6,\n\t\t\t\t\t\t\tparallaxSpeed = animSpeed/1000,\n\t\t\t\t\t\t\trestoreItems  = function() {\n\t\t\t\t\t\t\t\t//restore other items besides the current item\n\t\t\t\t\t\t\t\tfor ( let n = 0; n < spTotal; n++ ) {\n\n\t\t\t\t\t\t\t\t\tconst objParallax = container__items.children[ n ];\n\t\t\t\t\t\t\t\t\tif ( elementIndex != n ) objParallax.mask.x = restoreX;\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgoNextItem    = function() {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Paralax effect on current slide\n\t\t\t\t\t\t\t\tTweenMax.set( curSpParallax, {\n                                    alpha  : 1, //Avoid error texture rendering errors ***!Important***\n\t\t\t\t\t\t\t\t\tonComplete : function() {\n                                        TweenMax.to( this.target, parallaxSpeed, { \n                                            x      : 0, \n                                            ease   : Power2.easeInOut\n                                        });\n\t\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t\t});\n                                \n\n\n\t\t\t\t\t\t\t\t// Current Mask animation\n\t\t\t\t\t\t\t\tTweenMax.to( curSpParallax.mask, parallaxSpeed, { \n\t\t\t\t\t\t\t\t\tx          : 0, \n\t\t\t\t\t\t\t\t\tease       : Power4.easeInOut, \n\t\t\t\t\t\t\t\t\tonComplete : function() {\n\t\t\t\t\t\t\t\t\t\trestoreItems();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t//text effect\n\t\t\t\t\t\t\t\t\tif ( $.isFunction( $.fn.UixTextEff ) ) {\n\t\t\t\t\t\t\t\t\t\t$current.find( '[data-text-eff]' ).each( function( index )  {\n\t\t\t\t\t\t\t\t\t\t\t$( document ).UixTextEff( { selectors: '[data-text-eff=\"'+$( this ).data( 'text-eff' )+'\"]', scrollSpy: false } );\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t\t\t\t\t//Prevent text overlap when switching quickly\n\t\t\t\t\t\t\t\t\t$allItems.each( function()  {\n\t\t\t\t\t\t\t\t\t\tif ( $( this ).attr( 'data-text-eff-enable' ) == 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tTweenMax.to( $( this ), parallaxSpeed, {\n\t\t\t\t\t\t\t\t\t\t\t\talpha : 1,\n\t\t\t\t\t\t\t\t\t\t\t\tdelay : parallaxSpeed/2\n\t\t\t\t\t\t\t\t\t\t\t});\t\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tTweenMax.to( $( this ), parallaxSpeed, {\n\t\t\t\t\t\t\t\t\t\t\t\talpha : 0,\n\t\t\t\t\t\t\t\t\t\t\t\tdelay : parallaxSpeed/2\n\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}, parallaxSpeed*1000 / 2 );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Direction handler\n\t\t\t\t\t\tif ( dir == 'next' ){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcurSpParallax.x = offsetX;\n\t\t\t\t\t\t\tcurSpParallax.mask.x = renderer.view.width;\n\t\t\t\t\t\t\trestoreX = renderer.view.width;\n\t\t\t\t\n\t\t\t\t\t\t\t// Paralax effect on current slide\n\t\t\t\t\t\t\tTweenMax.to( prevSpParallax, parallaxSpeed, { \n\t\t\t\t\t\t\t\tx      : -offsetX, \n\t\t\t\t\t\t\t\tease   : Power2.easeInOut\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else { \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcurSpParallax.x = -offsetX;\n\t\t\t\t\t\t\tcurSpParallax.mask.x = - ( renderer.view.width + curSpParallax.x );\n\t\t\t\t\t\t\trestoreX = -renderer.view.width;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Paralax effect on previous slide\n\t\t\t\t\t\t\tTweenMax.to( prevSpParallax, parallaxSpeed, { \n\t\t\t\t\t\t\t\tx      : offsetX, \n\t\t\t\t\t\t\t\tease   : Power2.easeInOut\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Previous Mask animation\n\t\t\t\t\t\t\tTweenMax.to( prevSpParallax.mask, parallaxSpeed, { \n\t\t\t\t\t\t\t\tx      : renderer.view.width, \n\t\t\t\t\t\t\t\tease   : Power4.easeInOut\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tgoNextItem();\n\t\t\t\t\t\t\n\n\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t} // end effect\t\t\n\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tslider.find( '.uix-advanced-slider-sp__item canvas' ).hide();\n\t\t\t}\n\t\n\t\t\t\n\t\t}\n\n\t\t\n\t\t/*\n\t\t * Initialize embedded local video.\n\t\t *\n\t\t * @param  {Element} wrapper          - The outermost video container, which can contain multiple videos\n\t\t * @param  {Boolean} play            - Forced to trigger pause or play events.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction normalSliderVideoInit( wrapper, play ) {\n\t\t\twrapper.find( '.uix-video__slider' ).each( function()  {\n\t\t\t\tconst $this          = $( this );\n                \n\t\t\t\tconst videoWrapperW  = $this.closest( '.uix-advanced-slider__outline' ).width(),\n\t\t\t\t\t  curVideoID     = $this.find( 'video' ).attr( 'id' ) + '-slider-videopush',\n\t\t\t\t\t  coverPlayBtnID = 'videocover-' + curVideoID,\n                      $replayBtn     = $( '#'+curVideoID+'-replay-btn' );\n                \n                \n\t\t\t\tlet\tdataControls   = $this.data( 'embed-video-controls' ),\n\t\t\t\t\tdataAuto       = $this.data( 'embed-video-autoplay' ),\n\t\t\t\t\tdataLoop       = $this.data( 'embed-video-loop' ),\n\t\t\t\t\tdataW          = $this.data( 'embed-video-width' ),\n\t\t\t\t\tdataH          = $this.data( 'embed-video-height' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Push a new ID to video\n\t\t\t\t//Solve the problem that ajax asynchronous loading does not play\n\t\t\t\t$this.find( '.video-js' ).attr( 'id', curVideoID );\n\n\t\t\t\t\n\t\t\t\tif ( typeof dataAuto === typeof undefined ) {\n\t\t\t\t\tdataAuto = true;\n\t\t\t\t}\n\t\t\t\tif ( typeof dataLoop === typeof undefined ) {\n\t\t\t\t\tdataLoop = true;\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\tif ( typeof dataControls === typeof undefined ) {\n\t\t\t\t\tdataControls = false;\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tif ( typeof dataW === typeof undefined || dataW == 'auto' ) {\n\t\t\t\t\tdataW = videoWrapperW;\n\t\t\t\t}\t\n\n\t\t\t\tif ( typeof dataH === typeof undefined || dataH == 'auto' ) {\n\t\t\t\t\tdataH = videoWrapperW/1.77777777777778;\n\t\t\t\t}\n\n\t\t\t\t\n\n\t\t\t\t//Display cover and play buttons when some mobile device browsers cannot automatically play video\n\t\t\t\tif ( $( '#' + coverPlayBtnID ).length == 0 ) {\n\t\t\t\t\t$( '<div id=\"'+coverPlayBtnID+'\" class=\"uix-video__cover\"><span class=\"uix-video__cover__placeholder\" style=\"background-image:url('+$this.find( 'video' ).attr( 'poster' )+')\"></span><span class=\"uix-video__cover__playbtn\"></span></div>' ).insertBefore( $this );\n\n\n\t\t\t\t\tconst btnEv = ( Modernizr.touchevents ) ? 'touchstart' : 'click';\n\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).on( btnEv, function( e ) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tmyPlayer.play();\n\n\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Add replay button to video \n\t\t\t\tif ( $replayBtn.length == 0 ) {\n\t\t\t\t\t$this.after( '<span class=\"uix-video__btn-play\" id=\"'+curVideoID+'-replay-btn\"></span>' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//HTML5 video autoplay on mobile revisited\n\t\t\t\tif ( dataAuto && windowWidth <= 768 ) {\n\t\t\t\t\t$this.find( '.video-js' ).attr({\n\t\t\t\t\t\t'autoplay'    : 'true',\n\t\t\t\t\t\t'muted'       : 'true',\n\t\t\t\t\t\t'playsinline' : 'true'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst myPlayer = videojs( curVideoID, \n\t\t\t\t   {\n\t\t\t\t\t  width     : dataW,\n\t\t\t\t\t  height    : dataH,\n\t\t\t\t\t  loop      : dataLoop,\n\t\t\t\t\t  autoplay  : dataAuto\n\t\t\t\t\t}, \n\t\t\t\t   function onPlayerReady() {\n\n\n\t\t\t\t\t\tconst initVideo = function( obj ) {\n\n\t\t\t\t\t\t\t//Get Video Dimensions\n\t\t\t\t\t\t\tlet curW    = obj.videoWidth(),\n\t\t\t\t\t\t\t\tcurH    = obj.videoHeight(),\n\t\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\t\tnewW = videoWrapperW;\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH = curH*(newW/curW);\n\n\n\t\t\t\t\t\t\tif ( !isNaN( newW ) && !isNaN( newH ) )  {\n\t\t\t\t\t\t\t\tobj.height( newH );\t\t\n\t\t\t\t\t\t\t\tobj.width( newW );\t\t\t\n\n\t\t\t\t\t\t\t\t$this.css( 'height', newH );\n\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t//Show this video wrapper\n\t\t\t\t\t\t\t$this.css( 'visibility', 'visible' );\n\n\t\t\t\t\t\t\t//Hide loading effect\n\t\t\t\t\t\t\t$this.find( '.vjs-loading-spinner, .vjs-big-play-button' ).hide();\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t/* ---------  Video initialize */\n\t\t\t\t\t\tthis.on( 'loadedmetadata', function() {\n\n\t\t\t\t\t\t\tinitVideo( this );\n\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\t\t\t\t    /* ---------  Display the play button  */\n\t\t\t\t\t    if ( ! dataAuto ) $this.find( '.vjs-big-play-button' ).show();\n\t\t\t\t\t    $this.find( '.vjs-big-play-button' ).off( 'click' ).on( 'click', function() {\n\t\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t/* ---------  Set, tell the player it's in fullscreen  */\n\t\t\t\t\t\tif ( dataAuto ) {\n\t\t\t\t\t\t\t//Fix an error of Video auto play is not working in browser\n\t\t\t\t\t\t\tthis.muted( true ); \n\n\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t/* ---------  Disable control bar play button click */\n\t\t\t\t\t\tif ( !dataControls ) {\n\t\t\t\t\t\t\tthis.controls( false );\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t/* ---------  Determine if the video is auto played from mobile devices  */\n\t\t\t\t\t\tlet autoPlayOK = false;\n\n\t\t\t\t\t\tthis.on( 'timeupdate', function() {\n\n\t\t\t\t\t\t\tlet duration = this.duration();\n\t\t\t\t\t\t\tif ( duration > 0 ) {\n\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\tif ( this.currentTime() > 0 ) {\n\t\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\t\tthis.off( 'timeupdate' );\n\n\t\t\t\t\t\t\t\t\t//Hide cover and play buttons when the video automatically played\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\t\t\t\t\t\t\t\t} \n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t\t/* ---------  Pause the video when it is not current slider  */\n\t\t\t\t\t\tif ( !play ) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t} else {\n                            \n                            //Unmute, because there is interaction, you can turn on the audio.\n                            this.muted( false );\n                            \n                            \n\t\t\t\t\t\t\tif ( dataAuto ) {\n\n\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t//Hidden replay button\n\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\t\t\t\t\t\t\t\t//Should the video go to the beginning when it ends\n\t\t\t\t\t\t\t\tthis.on( 'ended', function () { \n\n\t\t\t\t\t\t\t\t\tif ( dataLoop ) {\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\t\t\t\t\t\t\t\t\t\tthis.play();\t\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t//Replay this video\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t\t\t\t\t$replayBtn\n\t\t\t\t\t\t\t\t\t\t\t.show()\n\t\t\t\t\t\t\t\t\t\t\t.off( 'click' )\n\t\t\t\t\t\t\t\t\t\t\t.on( 'click', function( e ) {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\t\t\t\t\t\tthis.play();\n\t\t\t\t\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t});\t\t\n\n\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\n\t\t\t});\t\n\t\t}\t    \n\t\t\n    };\n\n    \n    \n    \n    \n    module.components.pageLoaded.push( module.ADVANCED_SLIDER_FILTER.pageLoaded );\n\t\n\n\treturn class ADVANCED_SLIDER_FILTER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t\n\n\n","/* \n *************************************\n * <!-- Ajax Push Content  -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixApplyAsyncScripts from '@uixkit/core/_global/js/fn/UixApplyAsyncScripts';\n\n\nexport const AJAX_PUSH_CONTENT = ( ( module, $, window, document ) => {\n\tif ( window.AJAX_PUSH_CONTENT === null ) return false;\n\t\n\t\n    module.AJAX_PUSH_CONTENT               = module.AJAX_PUSH_CONTENT || {};\n    module.AJAX_PUSH_CONTENT.version       = '0.1.9';\n    module.AJAX_PUSH_CONTENT.documentReady = function( $ ) {\n\n\n        // trigger of AJAX request\n        const AJAXPageLinks = '[data-ajax-push-content]';\n        \n        //all images from pages\n        let sources = []; \n        \n        //Added timer to prevent page loading errors for a long time\n        let timeClockInit; \n\n\t\t\n\t\t/* Need to set it as a global variable for history */\n\t\tlet ajaxConfig   = {\n\t\t\t\t\t\"container\" :\"#my-ajax-demo-push-container\",\n\t\t\t\t\t\"target\"    :\"#my-ajax-demo-target-container\",\n\t\t\t\t\t\"loading\"   :\"<div class=\\\"my-loader\\\"><span><i class=\\\"fa fa-spinner fa-spin\\\"></i> loading <em id=\\\"app-loading\\\" data-txt=\\\"{progress}%\\\"></em>...</span></div>\",\n\t\t\t\t\t\"method\"    :\"POST\"\n\t\t\t\t},\n\t\t\tthisPageTitle = document.title;\n\t\t\n        \n        // The progress of each page load, using global variables to accurately determine\n        let loadedProgress = 0;\n        \n        //loading animation\n        const loadingAnim = function( per ) {\n\t\t\t$( '#app-loading' ).text( $( '#app-loading' ).data( 'txt' ).replace(/\\{progress\\}/g, per ) );\n        }; \n        \n        \n\t\t\n\t\t//Click event\n\t\t$( document ).off( 'click.AJAX_PUSH_CONTENT' ).on( 'click.AJAX_PUSH_CONTENT', AJAXPageLinks, function( event ) {\n\t\t\t\n\t\t\tevent.preventDefault();\n\t\t\t\n            // The progress of each page load\n            loadedProgress = 0; \n\n\t\t\t//\n\t\t\tconst $this               = $( this );\n            \n\t\t\tlet curURL              = $this.attr( 'href' ),\n\t\t\t\tconfig              = $this.data( 'ajax-push-content' );\n\t\t\t\n\n\t\t\tif ( typeof config == typeof undefined ) {\n\t\t\t\tconfig = ajaxConfig;\n\t\t\t}\n\n\t\t\t\n\t\t\t//The currently URL of link\n\t\t\tif ( typeof curURL === typeof undefined ) {\n\t\t\t\tcurURL = $this.closest( 'a' ).attr( 'href' );\n\t\t\t}\n\n\n\t\t\t//Prevent multiple request on click\n\t\t\tif ( $this.data( 'request-running' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$this.data( 'request-running', true );\n\n\n\t\n\t\t\t\t\t\t\n\t\t\t// Modify the URL without reloading the page\n\t\t\tif( history.pushState ) {\n\t\t\t\thistory.pushState( null, null, curURL );\n\n\t\t\t} else {\n\t\t\t\tlocation.hash = curURL;\n\t\t\t}\n\n\t\t\t\n\t\t\t//Click on this link element using an AJAX request\n\t\t\tpushAction( $( config.container ), config.target, config.loading, curURL, config.method, $this );\n\n\n\t\t\treturn false;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\n\t\t//Detect URL change & Fire click event\n\t\twindow.addEventListener( 'popstate', function( e ) {\n\t\t\n\t\t\tlet eleTarget = null,\n\t\t\t\tgoURL     = location.href;\n\t\t\t\n\t\t\t$( AJAXPageLinks ).each( function() {\n\t\t\t\t\n\t\t\t\t//don't use $( this ).attr( 'href' )\n\t\t\t\tif ( this.href === location.href ) {\n\t\t\t\t\teleTarget = this;\n\t\t\t\t\tgoURL = this.href;\n\t\t\t\t}\n                \n                \n\t\t\t});\n\n            //Empty content that does not exist\n            if ( eleTarget == null ) {\n                $( AJAXPageLinks ).each( function() {\n                    const curConfig = $( this ).data( 'ajax-push-content' );\n                    if ( typeof curConfig != typeof undefined ) {\n                        $( curConfig.container ).html( '' );\n                    }  \n                });\n            }  \n\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Push new content to target container\n\t\t\tconst backConfig = $( eleTarget ).data( 'ajax-push-content' );\n\t\t\t\n\t\t\tif ( typeof backConfig != typeof undefined ) {\n\t\t\t\tpushAction( $( backConfig.container ), backConfig.target, backConfig.loading, goURL, backConfig.method, $( eleTarget ) );\t\n\t\t\t}\n\t\t\t\n\t\t\t// Output history button\n\t\t\t//console.log(  $( eleTarget ).data( 'ajax-push-content' ) );\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\t\n\n\t\t/*\n\t\t * Move Animation\n\t\t *\n\t\t * @param  {Element} container       - The target container to which the content will be added.\n\t\t * @param  {String|Boolean} target  - The instance ID or class name returned from the callback data. If it is \"false\", the push content is empty.\n\t\t * @param  {String} loading         - Content of loading area.\n\t\t * @param  {String} url             - The target URL via AJAX. \n\t\t * @param  {String} method          - The HTTP method to use for the request (e.g. \"POST\", \"GET\", \"PUT\")\n\t\t * @param  {?Element|Boolean} btn     - Current trigger button. Avoid button events if \"false\".\n\t\t * @return {Void}\n\t\t */\n\t\tfunction pushAction( container, target, loading, url, method, btn ) {\n\t\t\t\n\t\t\t\n\t\t\tif ( container.length == 0 ) return false;\n\n\t\t\t\n\t\t\tif ( typeof method === typeof undefined || method == '' ) {\n\t\t\t    method = 'POST';\n\t\t\t}\n            \n            \n\n \n            // Add a request or response interceptor\n            const axiosInterceptor = axios.interceptors.request.use(function(config) {\n                // Do something before request is sent\n\n                //Display loader\n                showLoader( container, loading );\n\n                //\n                return config;\n            },\n            function(error) {\n                return Promise.reject(error);\n            });\n            \n            \n\n\n            // To send data in the application/x-www-form-urlencoded format instead\n            const formData = new FormData();\n            const defaultPostData = {\n                action  : 'load_singlepages_ajax_content'\n            };\n            for(let k in defaultPostData) {\n                formData.append(k, defaultPostData[k]);\n            }\n\n            // Create a request event\n            axios({\n                timeout: 15000,\n                method: method,\n                url: url,\n                data: formData,\n                responseType: 'text',\n            })\n            .then(function (response) {\n                \n                const htmlCode = response.data;\n                \n                //A function to be called if the request succeeds\n                const pushContent = ( !target ) ? '' : $( htmlCode ).find( target ).html();\n                \n                \n                //Display loading image when AJAX call is in progress\n                \n                \n                //Remove existing images\n                sources = [];\n\n                //Push all images from page\n                $( htmlCode ).find( 'img' ).each(function() {\n                    sources.push(\n                        {\n                            \"url\": this.src,\n                            \"id\": 'img-' + UixGUID.create(),\n                            \"type\": 'img'\n                        }\n                    );\n                }); \n                \n                \n               //Push all videos from page\n                $( htmlCode ).find( '.uix-video__slider > video' ).each(function() {\n\n                    let _src = $( this ).find( 'source:first' ).attr( 'src' );\n                    if ( typeof _src === typeof undefined ) _src = $( this ).attr( 'src' );     \n\n                    sources.push(\n                        {\n                            \"url\": _src,\n                            \"id\": 'video-' + UixGUID.create(),\n                            \"type\": 'video'\n                        }\n                    );\n                });  \n\n\n                //Execute after all images have loaded\n                let per;\n                let perInit = 1;\n                if ( sources.length == 0 ) {\n                    per = 100;\n                    \n                    //loading animation\n                    loadingAnim( per );\n                    \n                    //Remove loader\n                    hideLoader(container, $( htmlCode ).filter( 'title' ).text(), btn, htmlCode);     \n                    \n                    \n                }\n                \n                \n                \n                const loadImages = function() {\n                    let promises = [];\n\n                    for (let i = 0; i < sources.length; i++) {\n\n                        if ( sources[i].type == 'img' ) {\n\n                            ///////////\n                            // IMAGE //\n                            ///////////   \n\n                            promises.push( \n\n                                new Promise(function(resolve, reject) {\n\n                                    const img = document.createElement(\"img\");\n                                    img.crossOrigin = \"anonymous\";\n                                    img.src = sources[i].url;\n\n                                    img.onload = function(image) {\n                                      //Compatible with safari and firefox\n                                      if ( typeof image.path === typeof undefined ) {\n                                          return resolve(image.target.currentSrc);\n                                      } else {\n                                          return resolve(image.path[0].currentSrc);\n                                      }\n                                    };  \n\n                                }).then( textureLoaded )\n                            );\n\n\n\n                        } else {\n\n\n\n                            ///////////\n                            // VIDEO //\n                            ///////////    \n\n                            promises.push( \n                                new Promise( function(resolve, reject) {\n                                    \n                                    $( '#' + sources[i].id ).one( 'loadedmetadata', resolve );\n\n                                    return resolve( sources[i].url);\n\n\n                                }).then( textureLoaded )\n                            );\n\n\n\n                        }                   \n\n                    }\n\n\n\n                    return Promise.all(promises);\n                };\n\n\n                const textureLoaded = function( url ) {\n                    //loading\n                    per = parseInt( 100 * ( perInit / sources.length ) );\n\n                    console.log( 'progress: ' + per + '%' );\n\n                    if ( isNaN( per ) ) per = 100;  \n                    \n                    // The progress of each page load\n                    loadedProgress = per; \n\n                    //loading animation\n                    loadingAnim( per );\n\n                    let texture = null;\n                    \n                    perInit++;\n                    return per;   \n                };\n  \n                \n                \n                const func = function() {\n                    ajaxSucceeds( container, pushContent, $( htmlCode ).filter( 'title' ).text(), btn );\n                };\n\n\n                //images loaded\n                //Must be placed behind the loadImages()\n                loadImages().then( function( images ) {\n                    clearInterval( timeClockInit );\n                    func();\n                });\n                \n                \n            \n                //Calculating page load time\n                const timeLimit = 10,\n                      timeStart = new Date().getTime();\n\n\n                //Prevent duplicate runs when returning to this page\n                if ( timeClockInit ) {\n                    clearInterval( timeClockInit );\n                } \n                \n                timeClockInit = setInterval( function() {\n\n                    //Converting milliseconds to minutes and seconds\n                    let _time = (new Date().getTime() - timeStart) / 1000;\n\n                    if ( _time >= timeLimit ) {\n                        console.log( 'Page load timeout!' );\n                        \n                        \n                        //Remove loader\n                        if ( htmlCode.indexOf( '<body' ) >= 0 ) {\n                            window.location.href = location.href;\n                        } else {\n                            hideLoader(container, $( htmlCode ).filter( 'title' ).text(), btn, htmlCode);\n\n                        }   \n                    \n\n                        // clear loader event\n                        clearInterval( timeClockInit );\n                        func();\n                    }    \n                }, 500 );\n                \n                \n            })  \n            .catch(function (error) {\n                \n                if (error.response) {\n                    // The request was made and the server responded with a status code\n                    // that falls out of the range of 2xx\n                    const status = error.response.status;\n                    console.log(status);\n                    \n                    if ( status == 404 || status == 405 ) window.location.href = url;\n                    \n                    \n                } else if (error.request) {\n                    // The request was made but no response was received\n                    // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n                    // http.ClientRequest in node.js\n                    console.log(error.request);\n                    \n                    //\n                    window.location.href = url;\n                    \n                } else {\n                    // If there was a problem, we need to\n                    // dispatch the error condition\n                    console.log(error.message);\n                }\n            });\n            \n            // Remove an interceptor later\n            axios.interceptors.request.eject(axiosInterceptor);\n\n\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * A function to be called if the request succeeds\n\t\t *\n\t\t * @param  {String} container    - The target container to which the content will be added.\n\t\t * @param  {String} content      - The data returned from the server\n\t\t * @param  {String} title        - The title of a requested page.\n\t\t * @param  {?Element} btn          - Current trigger button.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction ajaxSucceeds( container, content, title, btn ) {\n\t\t\t\n            //If the page resource is not loaded, then the following code is not executed\n            if ( loadedProgress < 100 ) return false;\n            \n            \n\t\t\t//Remove loader\n            hideLoader(container, title, btn, content);\n\n\t\t\t\n\t\t}\n\n        \n        \n        \n\t\t\n\t\t/*\n\t\t * Remove loader\n\t\t *\n         * @param  {Element} container - The instance returned from the request succeeds\n         * @param  {String} title      - The title of a requested page.\n\t\t * @param  {?Element} btn      - Current trigger button.\n         * @param  {String} content    - The data returned from the server\n\t\t * @return {Void}\n\t\t */\n\t\tfunction hideLoader( container, title, btn, content ) {\n\t\t\t\n            \n\t\t\tTweenMax.to( container.find( '.ajax-content-loader' ), 0.5, {\n\t\t\t\talpha       : 0,\n\t\t\t\tonComplete  : function() {\n\t\t\t\t\tTweenMax.set( this.target, {\n\t\t\t\t\t\tcss         : {\n\t\t\t\t\t\t\t'display' : 'none'\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t//The data returned from the server\n\t\t\t\t\tcontainer.html( content ).promise().done( function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Apply some asynchronism scripts\n\t\t\t\t\t\t$( document ).UixApplyAsyncScripts();\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Change the page title\n\t\t\t\t\t\tif ( title ) {\n\t\t\t\t\t\t\tdocument.title = title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Prevent multiple request on click\n\t\t\t\t\t\tif ( btn ) {\n\t\t\t\t\t\t\tbtn.data( 'request-running', false );\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Determine the direction of a jQuery scroll event\n\t\t\t\t//Fix an issue for mousewheel event is too fast.\n\t\t\t\tdelay       : 0.5\n\t\t\t});\n            \n           \n\t\t}\n\t\t\n\n\t\t\n\t\t/*\n\t\t * Display loader\n\t\t *\n\t\t * @param  {Element} container       - The target container to which the content will be added.\n\t\t * @param  {String} loading         - Content of loading area.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction showLoader( container, loading ) {\n\t\t\t\n\n            TweenMax.to( container.find( '.ajax-content-loader' ), 0.3, {\n                css: {\n                    opacity    : 1\n                },\n                ease   : Power2.easeOut\n            });\t\t\n\n\n            container.html( '<div class=\"ajax-content-loader\">'+loading+'</div>' ).promise().done( function() {\n\n                //loading animation\n                loadingAnim( 0 );\n\n                //loader effect from AJAX request\n                TweenMax.set( container.find( '.ajax-content-loader' ), {\n                    css         : {\n                        'display' : 'block'\n                    },\n                    onComplete  : function() {\n                        TweenMax.to( this.target, 0.5, {\n                            alpha : 1\n                        });\n                    }\n                });\t\n            });\n\n\t\t}\n        \n        \n\t\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.AJAX_PUSH_CONTENT.documentReady );\n\t\n\n\treturn class AJAX_PUSH_CONTENT {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Ajax Page Loader (Loading A Page via Ajax Into Div)  -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixApplyAsyncScripts from '@uixkit/core/_global/js/fn/UixApplyAsyncScripts';\n\n\nimport '../scss/_style.scss';\n\n\nexport const AJAX_PAGE_LOADER = ( ( module, $, window, document ) => {\n\tif ( window.AJAX_PAGE_LOADER === null ) return false;\n\t\n\t\n    module.AJAX_PAGE_LOADER               = module.AJAX_PAGE_LOADER || {};\n    module.AJAX_PAGE_LOADER.version       = '0.1.9';\n    module.AJAX_PAGE_LOADER.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n        \n        //all images from pages\n        let sources = []; \n\n        //Added timer to prevent page loading errors for a long time\n        let timeClockInit;   \n\t\t\n\t    //Determine the direction of a jQuery scroll event\n\t\t//Fix an issue for mousewheel event is too fast.\n\t\tconst quietPeriod         = 500, //Do not change it\n\t\t\t  animationTime       = 1000,//According to page transition animation changes\n\t\t\t  loaderRemoveDelay   = 500,\n\t\t\t  AJAXPageLinks       = '[data-ajax-page]',\n\t\t\t  $navs               = $( AJAXPageLinks ).parent().parent().find( 'li' ),\n\t\t\t  total               = $navs.length,\n\t\t\t  $sectionsContainer  = $( '.uix-ajax-load__fullpage-container' ),\n\t\t\t  ajaxContainer       = '.ajax-container',\n\t\t\t  curAjaxPageID       = $( ajaxContainer ).data( 'ajax-page-id' );\n        \n        let lastAnimation = 0;\n\t\t\n        \n        // The progress of each page load, using global variables to accurately determine\n        let loadedProgress = 0;\n\t\t\n        //loading animation\n        const loadingAnim = function( per ) {\n\t\t\t$( '#app-loading' ).text( $( '#app-loading' ).data( 'txt' ).replace(/\\{progress\\}/g, per ) );\n        }; \n        \n        \n\t\t//Prevent this module from loading in other pages\n\t\tif ( $sectionsContainer.length == 0 ) return false;\n\t\t\n\t\t\n\t\t/* \n\t\t ====================================================\n\t\t *  Navigation Interaction\n\t\t ====================================================\n\t\t */\n\t\n\t\t//Activate the first item\n\t\tif ( $( '.js-uix-ajax-load__container' ).length == 0 ) {\n\t\t\tmoveTo( $( ajaxContainer ), false, 'down', 0, false );\n\t\t} else {\n\t\t\t//Activate navigation from AJAX request\n\t\t\tif ( typeof curAjaxPageID != typeof undefined ) $navs.eq( curAjaxPageID ).addClass( 'is-active' );\n\t\t}\n\n\n\t\t\n\n\t\t/* \n\t\t ====================================================\n\t\t *  AJAX Interaction\n\t\t ====================================================\n\t\t */\n\t\t/*\n\t\t * Initialize the clickable ajax links\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction ajaxInit() {\n\t\t\tif ( windowWidth <= 768 ) {\n\t\t\t\t$( AJAXPageLinks ).data( 'mobile-running', true );\n\t\t\t} else {\n\t\t\t\t$( AJAXPageLinks ).data( 'mobile-running', false );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\t\n\t\tajaxInit();\n\t\t$window.on( 'resize', function() {\n\t\t\twindowWidth = window.innerWidth;\n\t\t\tajaxInit();\n\t\t} );\t\n\n\t\t\n\n\t\t\n\t\t/*\n\t\t * Call AJAX on click event for \"single pages links\"\n\t\t *\n\t\t */\n\t\t$( document ).off( 'click.AJAX_PAGE_LOADER' ).on( 'click.AJAX_PAGE_LOADER', AJAXPageLinks, function( e ) {\n\t\t\t\n\t\t\t//Prevents third-party plug-ins from triggering\n\t\t\tif ( $( this ).data( 'mobile-running' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\t\t\t\n            \n            // The progress of each page load\n            loadedProgress = 0; \n\n\t\t\t//\n\t\t\tconst $this = $( this );\n            const curIndex = $this.attr( 'data-index' );\n            let curURL = $this.attr( 'href' ); \n\n\t\t\t\n\t\t\t//The currently URL of link\n\t\t\tif ( typeof curURL === typeof undefined ) {\n\t\t\t\tcurURL = $this.closest( 'a' ).attr( 'href' );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//Prevent multiple request on click\n\t\t\tif ( $( AJAXPageLinks ).data( 'request-running' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$( AJAXPageLinks ).data( 'request-running', true );\n\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t// Modify the URL without reloading the page\n\t\t\tif( history.pushState ) {\n\t\t\t\thistory.pushState( null, null, curURL );\n\n\t\t\t} else {\n\t\t\t\tlocation.hash = curURL;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//Click on this link element using an AJAX request\n\t\t\tconst dir = ( $navs.filter( '.is-active' ).find( '> a' ).attr( 'data-index' ) > curIndex ) ? 'up' : 'down';\n\t\t\tmoveTo( $( ajaxContainer ), curURL, dir, curIndex, false );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\treturn false;\n\t\t\t\n\t\t\t\n\t\t});\n\n\t\t//Detect URL change & Fire click event\n\t\twindow.addEventListener( 'popstate', function( e ) {\n\t\t\n\t\t\tlet eleTarget = null,\n\t\t\t\tgoURL     = location.href;\n\t\t\t\n\t\t\t$( AJAXPageLinks ).each( function() {\n\t\t\t\t\n\t\t\t\t//don't use $( this ).attr( 'href' )\n\t\t\t\t\n\t\t\t\tif ( this.href === location.href ) {\n\t\t\t\t\teleTarget = this;\n\t\t\t\t\tgoURL = this.href;\n\t\t\t\t}\n\t\t\t});\n\n            \n            //Empty content that does not exist\n            if ( eleTarget == null ) {\n                moveTo( $( ajaxContainer ), false, 'down', 0, false );\n            }  \n\n\t\t\t  \n            \n\t\t    //Push new content to target container\n\t\t\tconst pageIndex = $( eleTarget ).data( 'index' );\n\t\t\t\n\t\t\t//Push new content to target container\n\t\t\tif ( typeof pageIndex != typeof undefined ) {\n\t\t\t\tmoveTo( $( ajaxContainer ), goURL, 'down', pageIndex, false );\n\t\t\t}\n            \n            \n            \n            \n\t\t\t\n\t\t\t// Output history button\n\t\t\t//console.log(  $( eleTarget ).data( 'index' ) );\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Scroll initialize\n\t\t *\n\t\t * @param  {Event} event        - The wheel event is fired when a wheel button of a pointing device (usually a mouse) is rotated. \n\t\t * @param  {String} dir          - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction scrollMoveInit( event, dir ) {\n\t\n\t\t\tconst timeNow = new Date().getTime();\n\t\t\t// Cancel scroll if currently animating or within quiet period\n\t\t\tif( timeNow - lastAnimation < quietPeriod + animationTime) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( dir == 'down' ) {\n\t\t\t\t//scroll down\n\t\t\t\tmoveTo( $( ajaxContainer ), false, 'down', false, true );\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t//scroll up\n\t\t\t\tmoveTo( $( ajaxContainer ), false, 'up', false, true );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tlastAnimation = timeNow;\n\t\t}\n\t\t\n\t\t\n\t\t/*\n\t\t * Move Animation\n\t\t *\n\t\t * @param  {Element} container    - The instance returned from the request succeeds \n\t\t * @param  {String} url          - The target URL via AJAX.\n\t\t * @param  {String} dir          - Rolling direction indicator.\n\t\t * @param  {Number} customIndex  - User-specified index value, located on the corresponding AJAX hyperlink.\n\t\t * @param  {Boolean} wheel       - Whether to enable mouse wheel control.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction moveTo( container, url, dir, customIndex, wheel ) {\n\t\t\tconst index     = parseFloat( $navs.filter( '.is-active' ).find( '> a' ).attr( 'data-index' ) );\n\t\t\tconst isNumeric = /^[-+]?(\\d+|\\d+\\.\\d*|\\d*\\.\\d+)$/;\n            \n            let\tnextIndex = null;\n\t\t\t\n\t\t\n\t\t\t//If there is a custom index, it is enabled first\n\t\t\tif ( isNumeric.test( customIndex ) ) {\n\t\t\t\tnextIndex = customIndex;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tif ( dir == 'down' || dir === false ) {\n\t\t\t\t\tnextIndex = index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tnextIndex = index - 1;\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\t\n\t\t\tif ( nextIndex <= parseFloat( total - 1 ) && nextIndex >= 0 ) {\n\t\t\t\t\n\t\t\t\tif ( nextIndex > parseFloat( total - 1 ) ) nextIndex = parseFloat( total - 1 );\n\t\t\t\tif ( nextIndex < 0 ) nextIndex = 0;\n\t\t\t\t\n\n\t\t\n\t\t\t\t//Prevents third-party plug-ins from triggering\n\t\t\t\tif ( $navs.eq( nextIndex ).find( '> a' ).data( 'mobile-running' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t\n\t\t\t\t//Activate navigation from AJAX request\n\t\t\t\t$navs.removeClass( 'is-active' );\n\t\t\t\t$navs.eq( nextIndex ).addClass( 'is-active' );\n\n\t\t\t\t\n\t\t\t\t//Use automatic indexing when no URLs come in.\n\t\t\t\tif ( !url || typeof url === typeof undefined ) {\n\t\t\t\t\turl = $navs.eq( nextIndex ).find( '> a' ).attr( 'href' );\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t// Modify the URL without reloading the page when mouse wheel\n\t\t\t\tif ( wheel ) {\n\t\t\t\t\tconst turl = $navs.eq( nextIndex ).find( '> a' ).attr( 'href' );\n\t\t\t\t\t\n\t\t\t\t\tif( history.pushState ) {\n\t\t\t\t\t\thistory.pushState( null, null, url );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocation.hash = turl;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t}\n\n \n\t\t\t\t//Click on this link element using an AJAX request\n                // Add a request or response interceptor\n                const axiosInterceptor = axios.interceptors.request.use(function(config) {\n                    // Do something before request is sent\n\n                    //Display loader\n                    showLoader();\n                    \n                    //\n                    return config;\n                },\n                function(error) {\n                    return Promise.reject(error);\n                });\n\n\t\t\t\n                // To send data in the application/x-www-form-urlencoded format instead\n                const formData = new FormData();\n                const defaultPostData = {\n                    action  : 'load_singlepages_ajax_content'\n                };\n                for(let k in defaultPostData) {\n                    formData.append(k, defaultPostData[k]);\n                }\n                \n                /*\n                // For multiple form fields data acquisition\n                const formData = new FormData();\n                const oldFormData = $this.serializeArray();\n                oldFormData.forEach(function(item){\n                    formData.append(item.name, item.value);\n                });\n                formData.append('action', 'load_singlepages_ajax_content');\n                */\n\n\n                \n                // Create a request event\n                axios({\n                    timeout: 15000,\n                    method: ( typeof container.data( 'ajax-method' ) === typeof undefined ) ? 'POST' : container.data( 'ajax-method' ),\n                    url: url,\n                    data: formData,\n                    responseType: 'text',\n                })\n                .then(function (response) {\n\n                    const htmlCode = response.data;\n                    \n                    //A function to be called if the request succeeds\n                    //Display loading image when AJAX call is in progress\n\n                    //Remove existing images\n                    sources = [];\n\n                    //Push all images from page\n                    $( htmlCode ).find( 'img' ).each(function() {\n                        sources.push(\n                            {\n                                \"url\": this.src,\n                                \"id\": 'img-' + UixGUID.create(),\n                                \"type\": 'img'\n                            }\n                        );\n                    }); \n\n\n                    //Push all videos from page\n                    $( htmlCode ).find( '.uix-video__slider > video' ).each(function() {\n\n                        let _src = $( this ).find( 'source:first' ).attr( 'src' );\n                        if ( typeof _src === typeof undefined ) _src = $( this ).attr( 'src' );     \n\n                        sources.push(\n                            {\n                                \"url\": _src,\n                                \"id\": 'video-' + UixGUID.create(),\n                                \"type\": 'video'\n                            }\n                        );\n                    });    \n\n\n                    //Execute after all images have loaded\n                    let per;\n                    let perInit = 1;\n                    if ( sources.length == 0 ) {\n                        per = 100;\n\n                        //loading animation\n                        loadingAnim( per );\n\n                        //Remove loader\n                        const oldContent = container.html();\n                        hideLoader(container, $( htmlCode ).filter( 'title' ).text(), dir, oldContent, htmlCode);\n\n\n                    }\n\n\n                    const loadImages = function() {\n                        let promises = [];\n\n                        for (let i = 0; i < sources.length; i++) {\n\n                            if ( sources[i].type == 'img' ) {\n\n                                ///////////\n                                // IMAGE //\n                                ///////////   \n\n                                promises.push( \n\n                                    new Promise(function(resolve, reject) {\n\n                                        const img = document.createElement(\"img\");\n                                        img.crossOrigin = \"anonymous\";\n                                        img.src = sources[i].url;\n\n                                        img.onload = function(image) {\n                                          //Compatible with safari and firefox\n                                          if ( typeof image.path === typeof undefined ) {\n                                              return resolve(image.target.currentSrc);\n                                          } else {\n                                              return resolve(image.path[0].currentSrc);\n                                          }\n                                        };  \n\n                                    }).then( textureLoaded )\n                                );\n\n\n\n                            } else {\n\n\n\n                                ///////////\n                                // VIDEO //\n                                ///////////    \n\n                                promises.push( \n                                    new Promise( function(resolve, reject) {\n\n                                        $( '#' + sources[i].id ).one( 'loadedmetadata', resolve );\n\n                                        return resolve( sources[i].url);\n\n\n                                    }).then( textureLoaded )\n                                );\n\n\n\n                            }                   \n\n                        }\n\n\n\n                        return Promise.all(promises);\n                    };\n\n\n                    const textureLoaded = function( url ) {\n\n                        //loading\n                        per = parseInt( 100 * ( perInit / sources.length ) );\n\n                        console.log( 'progress: ' + per + '%' );\n\n                        if ( isNaN( per ) ) per = 100;  \n\n                        // The progress of each page load\n                        loadedProgress = per;\n\n\n                        //loading animation\n                        loadingAnim( per ); \n\n                        let texture = null;\n\n                        perInit++;\n                        return per;   \n\n                    };\n\n\n\n                    const func = function() {\n                        ajaxSucceeds( dir, container, $( htmlCode ).find( '.js-uix-ajax-load__container' ).html(), $( htmlCode ).filter( 'title' ).text() ); \n                    };\n\n\n                    //images loaded\n                    //Must be placed behind the loadImages()\n                    loadImages().then( function( images ) {\n                        clearInterval( timeClockInit );\n                        func();\n                    });\n\n\n\n                    //Calculating page load time\n                    const timeLimit = 10,\n                          timeStart = new Date().getTime();\n\n                    //Prevent duplicate runs when returning to this page\n                    if ( timeClockInit ) {\n                        clearInterval( timeClockInit );\n                    } \n\n\n                    timeClockInit = setInterval( function() {\n\n                        //Converting milliseconds to minutes and seconds\n                        let _time = (new Date().getTime() - timeStart) / 1000;\n\n                        if ( _time >= timeLimit ) {\n                            console.log( 'Page load timeout!' );\n\n                            //Remove loader\n                            if ( htmlCode.indexOf( '<body' ) >= 0 ) {\n                                window.location.href = location.href;\n                            } else {\n                                const oldContent = container.html();\n                                hideLoader(container, $( htmlCode ).filter( 'title' ).text(), dir, oldContent, htmlCode);\n\n                            }\n\n\n                            // clear loader event\n                            clearInterval( timeClockInit );\n                            func();\n                        }    \n                    }, 500 );\n\n\n                })  \n                .catch(function (error) {\n\n                    if (error.response) {\n                        // The request was made and the server responded with a status code\n                        // that falls out of the range of 2xx\n                        const status = error.response.status;\n                        console.log(status);\n                        \n                        if ( status == 404 || status == 405 ) window.location.href = url;\n\n\n                    } else if (error.request) {\n                        // The request was made but no response was received\n                        // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n                        // http.ClientRequest in node.js\n                        console.log(error.request);\n\n                        //\n                        window.location.href = url;\n\n                    } else {\n                        // If there was a problem, we need to\n                        // dispatch the error condition\n                        console.log(error.message);\n                    }\n                });\n\n\n                // Remove an interceptor later\n                axios.interceptors.request.eject(axiosInterceptor);\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * A function to be called if the request succeeds\n\t\t *\n\t\t * @param  {String} dir       - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @param  {Element} container - The instance returned from the request succeeds\n\t\t * @param  {String} content   - The data returned from the server\n\t\t * @param  {String} title        - The title of a requested page.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction ajaxSucceeds( dir, container, content, title ) {\n            \n            //If the page resource is not loaded, then the following code is not executed\n            if ( loadedProgress < 100 ) return false;\n\t\t\t\n   \n\t\t\t//Remove loader\n            const oldContent = container.html();\n            hideLoader(container, title, dir, oldContent, content);\n\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t/*\n\t\t * Remove loader\n\t\t *\n         * @param  {Element} container - The instance returned from the request succeeds\n         * @param  {String} title     - The title of a requested page.\n\t\t * @param  {String} dir       - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @param  {String} oldContent   - The old data returned from the server\n         * @param  {String} content   - The data returned from the server\n\t\t * @return {Void}\n\t\t */\n\t\tfunction hideLoader( container, title, dir, oldContent, content ) {\n\t\t\t\n\t\t\tTweenMax.to( '.uix-ajax-load__loader', 0.5, {\n\t\t\t\talpha       : 0,\n\t\t\t\tonComplete  : function() {\n\t\t\t\t\tTweenMax.set( this.target, {\n\t\t\t\t\t\tcss         : {\n\t\t\t\t\t\t\t'display' : 'none'\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t\t\t//The data returned from the server\n\t\t\t\t\tcontainer.html( content ).promise().done( function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Transition effect between two elements.\n\t\t\t\t\t\teleTransitionEff( dir, oldContent, content );\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Change the page title\n\t\t\t\t\t\tif ( title ) {\n\t\t\t\t\t\t\tdocument.title = title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t//Prevent multiple request on click\n\t\t\t\t\t\t$( AJAXPageLinks ).data( 'request-running', false );\t\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\t\n\n\t\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tdelay       : loaderRemoveDelay/1000\n\t\t\t});   \n            \n           \n\t\t\t\n\t\t}\n\t\t\n\n\t\t\n\t\t/*\n\t\t * Display loader\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction showLoader() {\n\t\t\t\n            //loading animation\n            loadingAnim( 0 );\n\n            //loader effect from AJAX request\n            TweenMax.set( '.uix-ajax-load__loader', {\n                css         : {\n                    'display' : 'block'\n                },\n                onComplete  : function() {\n                    TweenMax.to( this.target, 0.5, {\n                        alpha : 1\n                    });\n                }\n            });\n\t\t}\n        \n        \n        \n        \n\t\t/*\n\t\t * Transition effect between two elements.\n\t\t *\n\t\t * @param  {String} dir            - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @param  {String} oldContent     - A string of HTML to set as the content of matched old element.\n\t\t * @param  {String} newContent     - A string of HTML to set as the content of matched new element.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction eleTransitionEff( dir, oldContent, newContent ) {\n\t\t\t\n\t\t\tconst $originalItem   = $sectionsContainer.find( '> section' ),\n\t\t\t\t$cloneItem      = $originalItem.clone();\n\n\t\t\t\n\t\t\t//Reset the original element\n\t\t\t$originalItem.css( {\n\t\t\t\t'z-index': 1\n\t\t\t} );\n\t\t\t\n\n\t\t\t//Clone the last element to the first position\n\t\t\t$cloneItem\n\t\t\t\t.prependTo( $sectionsContainer )\n\t\t\t\t.css( {\n\t\t\t\t    'z-index': 2,\n\t\t\t\t    'transform': 'translateY('+( ( dir == 'down' || dir === false ) ? windowHeight : -windowHeight )+'px)'\n\t\t\t\t} )\n\t\t\t    //Add the latest content to the new container\n\t\t\t    .find( ajaxContainer )\n\t\t\t    .html( newContent );\n\n\t\t\t\n\t\t\t$originalItem.first().find( ajaxContainer ).html( oldContent ).promise().done( function() {\n\t\t\t\t\t\t\n\n\t\t\t\tTweenMax.to( $originalItem.first(), animationTime/1000, {\n\t\t\t\t\ty          : ( dir == 'down' || dir === false ) ? -windowHeight/2 : windowHeight/2,\n\t\t\t\t\tease       : Power2.easeOut\n\t\t\t\t});\t\t\n\n\t\t\t\t\n\n\t\t\t\tTweenMax.to( $cloneItem, animationTime/1000, {\n\t\t\t\t\ty          : 0,\n\t\t\t\t\tease       : Power2.easeOut,\n\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\t//Remove duplicate elements\n\t\t\t\t\t\t$originalItem\n\t\t\t\t\t\t\t.first()\n\t\t\t\t\t\t\t.remove();\n\n\n\t\t\t\t\t\t// Apply some asynchronism scripts\n\t\t\t\t\t\t$( document ).UixApplyAsyncScripts();\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\n\t\t\n\t\t/* \n\t\t ====================================================\n\t\t *  Mouse Wheel Method\n\t\t ====================================================\n\t\t */\n\t\tlet startY = 0;\n\t\tconst onTouchStart = function ( e ) {\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tstartY = touches[0].pageY;\n\t\t\t\t\n\t\t\t}\n\t\t};\n\n\t\t\n\t\tconst onDeviceWheel = function ( e ) {\n\t\t\t\n\t\t\t//Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t\tlet dir, delta, mobileDeltaY = null;\n\t\t\t\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tmobileDeltaY = startY - touches[0].pageY;\n\t\t\t} else {\n\t\t\t\tdelta = Math.max(-1, Math.min(1, (-e.deltaY)));\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\tif ( mobileDeltaY != null ) {\n\t\t\t\t\n\t\t\t\tif ( mobileDeltaY >= 50 ) {\n\t\t\t\t\t//--- swipe up\n\t\t\t\t    dir = 'up';\n\t\t\t\t}\n\t\t\t\tif ( mobileDeltaY <= -50 ) {\n\t\t\t\t\t//--- swipe down\n\t\t\t\t\tdir = 'down';\n\t\t\t\t\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\tif( delta < 0 ) { \n\t\t\t\t\t//scroll down\n\t\t\t\t\tdir = 'down';\n\n\t\t\t\t} else {\n\t\t\t\t\t//scroll up\n\t\t\t\t\tdir = 'up';\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\t\n\t\t\tscrollMoveInit( e, dir );\n\t\t\t\n\t\t};\n\t\t\n\n\t\twindow.addEventListener( 'wheel', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchstart', onTouchStart, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchmove', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.AJAX_PAGE_LOADER.documentReady );\n\n\treturn class AJAX_PAGE_LOADER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/*!\n * VERSION: 1.9.2\n * DATE: 2019-02-07\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\n\nvar _doc = (_gsScope.document || {}).documentElement,\n\t\t_window = _gsScope,\n\t\t_max = function(element, axis) {\n\t\t\tvar dim = (axis === \"x\") ? \"Width\" : \"Height\",\n\t\t\t\tscroll = \"scroll\" + dim,\n\t\t\t\tclient = \"client\" + dim,\n\t\t\t\tbody = document.body;\n\t\t\treturn (element === _window || element === _doc || element === body) ? Math.max(_doc[scroll], body[scroll]) - (_window[\"inner\" + dim] || _doc[client] || body[client]) : element[scroll] - element[\"offset\" + dim];\n\t\t},\n\t\t_unwrapElement = function(value) {\n\t\t\tif (typeof(value) === \"string\") {\n\t\t\t\tvalue = TweenLite.selector(value);\n\t\t\t}\n\t\t\tif (value.length && value !== _window && value[0] && value[0].style && !value.nodeType) {\n\t\t\t\tvalue = value[0];\n\t\t\t}\n\t\t\treturn (value === _window || (value.nodeType && value.style)) ? value : null;\n\t\t},\n\t\t_buildGetter = function(e, axis) { //pass in an element and an axis (\"x\" or \"y\") and it'll return a getter function for the scroll position of that element (like scrollTop or scrollLeft, although if the element is the window, it'll use the pageXOffset/pageYOffset or the documentElement's scrollTop/scrollLeft or document.body's. Basically this streamlines things and makes a very fast getter across browsers.\n\t\t\tvar p = \"scroll\" + ((axis === \"x\") ? \"Left\" : \"Top\");\n\t\t\tif (e === _window) {\n\t\t\t\tif (e.pageXOffset != null) {\n\t\t\t\t\tp = \"page\" + axis.toUpperCase() + \"Offset\";\n\t\t\t\t} else if (_doc[p] != null) {\n\t\t\t\t\te = _doc;\n\t\t\t\t} else {\n\t\t\t\t\te = document.body;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn function() {\n\t\t\t\treturn e[p];\n\t\t\t};\n\t\t},\n\t\t_getOffset = function(element, container) {\n\t\t\tvar rect = _unwrapElement(element).getBoundingClientRect(),\n\t\t\t\tb = document.body,\n\t\t\t\tisRoot = (!container || container === _window || container === b),\n\t\t\t\tcRect = isRoot ? {top:_doc.clientTop - (window.pageYOffset || _doc.scrollTop || b.scrollTop || 0), left:_doc.clientLeft - (window.pageXOffset || _doc.scrollLeft || b.scrollLeft || 0)} : container.getBoundingClientRect(),\n\t\t\t\toffsets = {x: rect.left - cRect.left, y: rect.top - cRect.top};\n\t\t\tif (!isRoot && container) { //only add the current scroll position if it's not the window/body.\n\t\t\t\toffsets.x += _buildGetter(container, \"x\")();\n\t\t\t\toffsets.y += _buildGetter(container, \"y\")();\n\t\t\t}\n\t\t\treturn offsets;\n\t\t\t/*\tPREVIOUS\n\t\t\tvar rect = _unwrapElement(element).getBoundingClientRect(),\n\t\t\t\tisRoot = (!container || container === _window || container === document.body),\n\t\t\t\tcRect = (isRoot ? _doc : container).getBoundingClientRect(),\n\t\t\t\toffsets = {x: rect.left - cRect.left, y: rect.top - cRect.top};\n\t\t\tif (!isRoot && container) { //only add the current scroll position if it's not the window/body.\n\t\t\t\toffsets.x += _buildGetter(container, \"x\")();\n\t\t\t\toffsets.y += _buildGetter(container, \"y\")();\n\t\t\t}\n\t\t\treturn offsets;\n\t\t\t*/\n\t\t},\n\t\t_parseVal = function(value, target, axis, currentVal) {\n\t\t\tvar type = typeof(value);\n\t\t\treturn !isNaN(value) ? parseFloat(value) : (type === \"string\" && value.charAt(1) === \"=\") ? parseInt(value.charAt(0) + \"1\", 10) * parseFloat(value.substr(2)) + currentVal : (value === \"max\") ? _max(target, axis) : Math.min(_max(target, axis), _getOffset(value, target)[axis]);\n\t\t},\n\n\t\tScrollToPlugin = _gsScope._gsDefine.plugin({\n\t\t\tpropName: \"scrollTo\",\n\t\t\tAPI: 2,\n\t\t\tglobal: true,\n\t\t\tversion:\"1.9.2\",\n\n\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\tinit: function(target, value, tween) {\n\t\t\t\tthis._wdw = (target === _window);\n\t\t\t\tthis._target = target;\n\t\t\t\tthis._tween = tween;\n\t\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\t\tvalue = {y:value}; //if we don't receive an object as the parameter, assume the user intends \"y\".\n\t\t\t\t\tif (typeof(value.y) === \"string\" && value.y !== \"max\" && value.y.charAt(1) !== \"=\") {\n\t\t\t\t\t\tvalue.x = value.y;\n\t\t\t\t\t}\n\t\t\t\t} else if (value.nodeType) {\n\t\t\t\t\tvalue = {y:value, x:value};\n\t\t\t\t}\n\t\t\t\tthis.vars = value;\n\t\t\t\tthis._autoKill = (value.autoKill !== false);\n\t\t\t\tthis.getX = _buildGetter(target, \"x\");\n\t\t\t\tthis.getY = _buildGetter(target, \"y\");\n\t\t\t\tthis.x = this.xPrev = this.getX();\n\t\t\t\tthis.y = this.yPrev = this.getY();\n\t\t\t\tif (value.x != null) {\n\t\t\t\t\tthis._addTween(this, \"x\", this.x, _parseVal(value.x, target, \"x\", this.x) - (value.offsetX || 0), \"scrollTo_x\", true);\n\t\t\t\t\tthis._overwriteProps.push(\"scrollTo_x\");\n\t\t\t\t} else {\n\t\t\t\t\tthis.skipX = true;\n\t\t\t\t}\n\t\t\t\tif (value.y != null) {\n\t\t\t\t\tthis._addTween(this, \"y\", this.y, _parseVal(value.y, target, \"y\", this.y) - (value.offsetY || 0), \"scrollTo_y\", true);\n\t\t\t\t\tthis._overwriteProps.push(\"scrollTo_y\");\n\t\t\t\t} else {\n\t\t\t\t\tthis.skipY = true;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\tset: function(v) {\n\t\t\t\tthis._super.setRatio.call(this, v);\n\n\t\t\t\tvar x = (this._wdw || !this.skipX) ? this.getX() : this.xPrev,\n\t\t\t\t\ty = (this._wdw || !this.skipY) ? this.getY() : this.yPrev,\n\t\t\t\t\tyDif = y - this.yPrev,\n\t\t\t\t\txDif = x - this.xPrev,\n\t\t\t\t\tthreshold = ScrollToPlugin.autoKillThreshold;\n\n\t\t\t\tif (this.x < 0) { //can't scroll to a position less than 0! Might happen if someone uses a Back.easeOut or Elastic.easeOut when scrolling back to the top of the page (for example)\n\t\t\t\t\tthis.x = 0;\n\t\t\t\t}\n\t\t\t\tif (this.y < 0) {\n\t\t\t\t\tthis.y = 0;\n\t\t\t\t}\n\t\t\t\tif (this._autoKill) {\n\t\t\t\t\t//note: iOS has a bug that throws off the scroll by several pixels, so we need to check if it's within 7 pixels of the previous one that we set instead of just looking for an exact match.\n\t\t\t\t\tif (!this.skipX && (xDif > threshold || xDif < -threshold) && x < _max(this._target, \"x\")) {\n\t\t\t\t\t\tthis.skipX = true; //if the user scrolls separately, we should stop tweening!\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.skipY && (yDif > threshold || yDif < -threshold) && y < _max(this._target, \"y\")) {\n\t\t\t\t\t\tthis.skipY = true; //if the user scrolls separately, we should stop tweening!\n\t\t\t\t\t}\n\t\t\t\t\tif (this.skipX && this.skipY) {\n\t\t\t\t\t\tthis._tween.kill();\n\t\t\t\t\t\tif (this.vars.onAutoKill) {\n\t\t\t\t\t\t\tthis.vars.onAutoKill.apply(this.vars.onAutoKillScope || this._tween, this.vars.onAutoKillParams || []);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._wdw) {\n\t\t\t\t\t_window.scrollTo((!this.skipX) ? this.x : x, (!this.skipY) ? this.y : y);\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.skipY) {\n\t\t\t\t\t\tthis._target.scrollTop = this.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.skipX) {\n\t\t\t\t\t\tthis._target.scrollLeft = this.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.xPrev = this.x;\n\t\t\t\tthis.yPrev = this.y;\n\t\t\t}\n\n\t\t}),\n\t\tp = ScrollToPlugin.prototype;\n\n\tScrollToPlugin.max = _max;\n\tScrollToPlugin.getOffset = _getOffset;\n\tScrollToPlugin.buildGetter = _buildGetter;\n\tScrollToPlugin.autoKillThreshold = 7;\n\n\tp._kill = function(lookup) {\n\t\tif (lookup.scrollTo_x) {\n\t\t\tthis.skipX = true;\n\t\t}\n\t\tif (lookup.scrollTo_y) {\n\t\t\tthis.skipY = true;\n\t\t}\n\t\treturn this._super._kill.call(this, lookup);\n\t};\n\n\nexport { ScrollToPlugin, ScrollToPlugin as default };","/* \n *************************************\n * <!-- Back to Top -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport ScrollToPlugin from '@uixkit/plugins/GSAP/ScrollToPlugin';\n\nimport '../scss/_style.scss';\n\n\nexport const BACK_TO_TOP = ( ( module, $, window, document ) => {\n\tif ( window.BACK_TO_TOP === null ) return false;\n\t\n\t\n\t\n    module.BACK_TO_TOP               = module.BACK_TO_TOP || {};\n    module.BACK_TO_TOP.version       = '0.0.9';\n    module.BACK_TO_TOP.documentReady = function( $ ) {\n\n\t\t\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\t\t\n\t\t$( '<a href=\"#\" id=\"uix-to-top\"><i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i></a>' ).appendTo( 'body' );\n\t\t$.when( $( '#uix-to-top' ).length > 0).then( function() {\n\t\t\t\n\t\t\t//-------- Sticky button of back to top \n\t\t\t//Note: Don't use Waypoint, because the Offset is wrong on calculating height of fixed element\n\t\t\tconst $el = $( '#uix-to-top' );\n\t\t\t\n\t\t\t$window.off( 'scroll.BACK_TO_TOP touchmove.BACK_TO_TOP' ).on( 'scroll.BACK_TO_TOP touchmove.BACK_TO_TOP', function() {\n\n\t\t\t\tconst scrolled = $( this ).scrollTop(),\n\t\t\t\t\t  spyTop   = windowHeight/2;\n\n\n\t\t\t\tif ( scrolled >= spyTop ) {\n\t\t\t\t\t$el.addClass( 'is-active' );\n\t\t\t\t} else {\n\t\t\t\t\t$el.removeClass( 'is-active' );\t\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t\n\n\t\t\t//-------- Click event of back button\n\t\t\t$el.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tTweenMax.to( window, 0.5, {\n\t\t\t\t\tscrollTo: {\n\t\t\t\t\t\ty        : 0, //y: \"max\" --> vertical scroll to bottom\n\t\t\t\t\t\tautoKill : false\n\t\t\t\t\t},\n\t\t\t\t\tease: Power2.easeOut\n\t\t\t\t});\t\n\t\t\t\t\n\t\t\t\treturn false;\n\n\n\t\t\t});\t\n\t\n\t\t\t\n\t\t});\n\t\t\n\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.BACK_TO_TOP.documentReady );\n\t\n\n\treturn class BACK_TO_TOP {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t","\n/* \n *************************************\n * <!-- Circle Layout -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const CIRCLE_LAYOUT = ( ( module, $, window, document ) => {\n\tif ( window.CIRCLE_LAYOUT === null ) return false;\n\t\n\t\n    module.CIRCLE_LAYOUT               = module.CIRCLE_LAYOUT || {};\n    module.CIRCLE_LAYOUT.version       = '0.0.1';\n    module.CIRCLE_LAYOUT.documentReady = function( $ ) {\n\n\t\t$( '.js-uix-circle-layout' ).each( function( id ) {\n\t\t\tconst $this             = $( this );\n            \n\t\t\tconst $ul               = $this.find( '> ul' ),\n\t\t\t      $li               = $ul.find( '> li' ),\n\t\t\t\t  liWidth           = $li.first().outerWidth(),\n\t\t\t\t  liHeight          = $li.first().outerHeight();\n            \n            \n\t\t\tlet\tdisplay           = $this.data( 'circle-layout-display' ),\n\t\t\t\tradius            = $this.data( 'circle-layout-radius' ),\n\t\t\t\tradius2           = $this.data( 'circle-layout-radius-c' ),\n\t\t\t\trotation          = $this.data( 'circle-layout-rotation' );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof display === typeof undefined ) {\n\t\t\t\tdisplay = 5;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof radius === typeof undefined ) {\n\t\t\t\tradius = 180;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof radius2 === typeof undefined ) {\n\t\t\t\tradius2 = 110;\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif ( typeof rotation === typeof undefined ) {\n\t\t\t\trotation = 0;\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\t$this.css( {\n\t\t\t    'width'      : radius * 2 + 'px'\n\t\t\t} );\n\n\t\t\t\n\t\t\t\n\t\t\t$ul.css( {\n\t\t\t    'width'     : radius * 2 + 'px',\n\t\t\t    'height'    : radius * 2 + 'px',\n\t\t\t\t'transform' : 'rotate('+parseFloat(rotation)+'deg)'\n\t\t\t} );\n\n\t\t\t\n\t\t\t$ul.next( 'div' ).css( {\n\t\t\t    'width'      : radius2 * 2 + 'px',\n\t\t\t    'height'     : radius2 * 2 + 'px'\n\t\t\t} );\t\n\t\t\t\n\t\t\t\n\t\t\t\n\n\t\t\t//Layout components in a circle layout\n\t\t\tconst step            = 2 * Math.PI / display,\n\t\t\t\t  pad             = $ul.width();\n            \n            let angle             = 0,\n                transitionDelay   = 0;   \n\n\t\t\t\n\t\t\t$li.each( function() { //Can'nt use arrow function here!!!\n\t\t\t\t// 'this' works differently with arrow fucntions\n\t\t\t\tconst el          = $( this ),\n\t\t\t\t\t  x           = radius * Math.cos(angle) - liWidth / 2,\n\t\t\t\t\t  y           = radius * Math.sin(angle) - liHeight / 2;\n\n\t\t\t\t\n\t\t\t\tel.css({\n\t\t\t\t\t'transform'        : 'translate('+parseFloat( x + liWidth/2 )+'px,'+parseFloat( pad/2 + y + liHeight/2 )+'px)',\n\t\t\t\t\t'transition-delay' : transitionDelay + \"s\"\n\t\t\t\t})\n\t\t\t\t.find( '> a' )\n\t\t\t\t.css({\n\t\t\t\t\t'transform'        : 'rotate('+parseFloat(-rotation)+'deg)'\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tangle += step;\n\t\t\t\ttransitionDelay += 0.15;\n\t\t\t});\t\n\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.CIRCLE_LAYOUT.documentReady );\n\t\n\n\treturn class CIRCLE_LAYOUT {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- Counter -->\n *************************************\n */\t\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixCountTo from '@uixkit/core/counter/js/fn/count-to';\n\nimport '../scss/_style.scss';\n\n\nexport const COUNTER = ( ( module, $, window, document ) => {\n\tif ( window.COUNTER === null ) return false;\n\t\n\t\n\t\n    module.COUNTER               = module.COUNTER || {};\n    module.COUNTER.version       = '0.0.4';\n    module.COUNTER.documentReady = function( $ ) {\n\n\t\t\n\t\tconst $scrollElements = $( '[data-counter-number]' );\n      \n        $( window ).off( 'scroll.COUNTER touchmove.COUNTER' );\n        \n        $scrollElements.each( function()  {\n\n            \n            const viewport = 1;\n            const $el = $( this );\n           \n\n            //\n            const scrollUpdate = function() {\n                \n                const spyTop = $el[0].getBoundingClientRect().top;\n                \n                //Prevent asynchronous loading of repeated calls\n                const actived = $el.data( 'activated' );\n\n\n                if ( spyTop < ( window.innerHeight * viewport ) ) {\n\n                    if( typeof actived === typeof undefined ) {\n\n                    \n                        $el.UixCountTo();\n                        \n                        //Prevents front-end javascripts that are activated in the background to repeat loading.\n                        $el.data( 'activated', 1 );\n\n\n\n                    }//endif actived\n\n\n                }\n            };\n            \n            \n            scrollUpdate();\n            \n            // Please do not use scroll's off method in each\n            $( window ).on( 'scroll.COUNTER touchmove.COUNTER', function( event ) {\n                 scrollUpdate();\n            });\n\n\n\n        });//end each        \n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.COUNTER.documentReady );\n\t\n\n\treturn class COUNTER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n","\n/* \n *************************************\n * <!-- Dropdown Menu -->\n *************************************\n */\t\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const DROPDOWN_MENU = ( ( module, $, window, document ) => {\n\tif ( window.DROPDOWN_MENU === null ) return false;\n\t\n\t\n\t\n    module.DROPDOWN_MENU               = module.DROPDOWN_MENU || {};\n    module.DROPDOWN_MENU.version       = '0.0.7';\n    module.DROPDOWN_MENU.documentReady = function( $ ) {\n        \n        \n        \n        //Initialize option status\n        $( '.uix-dropdown-menu' ).each( function()  {\n            const v = $( this ).find( 'input[type=\"hidden\"]' ).val(),\n                selectedIndex = $( this ).find( 'ul > li > a[data-value=\"'+v+'\"]' ).parent().index(),\n                $li = $( this ).find( 'ul > li' );\n          \n            $li.removeClass( 'is-active' ); \n            $li.eq( selectedIndex ).addClass( 'is-active' );    \n            $( this ).find( '> summary > span' ).html( $li.eq( selectedIndex ).find( '> a' ).data( 'display-text' ) );\n            \n            \n        });\n        \n        \n\t\t//Create a trigger of Dropdown Menu on Click\n\t\t//Use $( document ) to support other click events for ajax\n\t\t$( document ).off( 'click.DROPDOWN_MENU' ).on( 'click.DROPDOWN_MENU', '.uix-dropdown-menu > summary', function( e ) {\n\t\t\n\t\t\t// stop propagation of this event, it will never reach body in bubbling phase.\n\t\t\te.stopPropagation();\n\t\t\t\n\t\t\tconst $this = $( this ).parent( '.uix-dropdown-menu' );\n\n\t\t\t$this.toggleClass( 'is-opened' );\n\n\t\t});\t\n\n        \n\t\t$( document ).off( 'click.DROPDOWN_MENU_LINK' ).on( 'click.DROPDOWN_MENU_LINK', '.uix-dropdown-menu li a', function( e ) {\n\t\t\t\n\t\t\t// stop propagation of this event, it will never reach body in bubbling phase.\n\t\t\te.stopPropagation();\n\t\t\t\n\t\t\tconst $this = $( this ).closest( '.uix-dropdown-menu' );\n\n\t\t\tif ( $this.hasClass( 'is-opened' ) ) {\n\t\t\t\t$this.removeAttr( 'open' ).removeClass( 'is-opened' );\n\t\t\t}\n            \n\n\t\t\t\n\t\t\tif ( typeof $( this ).attr( 'data-value' ) != typeof undefined && $( this ).attr( 'data-value' ) != '' ) {\n\t\t\t\t$this.find( 'input[type=\"hidden\"]' ).val( $( this ).attr( 'data-value' ) );\n\t\t\t}\n\t\t\tif ( typeof $( this ).data( 'display-text' ) != typeof undefined && $( this ).data( 'display-text' ) != '' ) {\n\t\t\t\t$this.find( '> summary > span' ).html( $( this ).data( 'display-text' ) );\n\t\t\t}\n\t\t\t\n            // update active status\n            $this.find( 'li' ).removeClass( 'is-active' );\n            $( this ).parent().addClass( 'is-active' ); \n\n\t\t\t\n\t\t\t\n\n\t\t});\t\t\n\n\n\t\t//Close the target\n        //Do not add off() to this\n\t\t$( document.body ).on( 'click', function( e ) {\n\t\t\t\n\t\t\t//Apply click method to outer div but not inner div\n\t\t\tif ( ! $( e.target.offsetParent ).hasClass( 'uix-dropdown-menu' ) ) {\n\t\t\t\t$( '.uix-dropdown-menu' ).removeAttr( 'open' ).removeClass( 'is-opened' );\t\n\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t});\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.DROPDOWN_MENU.documentReady );\n\t\n\n\treturn class DROPDOWN_MENU {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Dropdown Menu 2 (Multi-level drop-down navigation) -->\n *************************************\n */\t\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const DROPDOWN_MENU2 = ( ( module, $, window, document ) => {\n\tif ( window.DROPDOWN_MENU2 === null ) return false;\n\t\n\t\n\t\n    module.DROPDOWN_MENU2               = module.DROPDOWN_MENU2 || {};\n    module.DROPDOWN_MENU2.version       = '0.0.5';\n    module.DROPDOWN_MENU2.documentReady = function( $ ) {\n\n\t\tconst $verticalMenuLi = $( '.uix-vertical-menu li' );\n\t\t\n\t\t$verticalMenuLi.find( '> a' ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\n\t\t\tconst $sub = $( this ).next( 'ul' );\n\t\t\t\n\t\t\tif ( $sub.length > 0 ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\t//Its value is not a boolean but a string\n\t\t\t\tconst expanded = ( $( this ).attr( 'aria-expanded' ) == 'true' ) ? false : true;\n\t\t\t\t\n\t\t\t\tif ( expanded ) {\n\t\t\t\t\t//Hide other all sibling <ul> of the selected element\n\t\t\t\t\tconst $e = $( this ).parent( 'li' ).siblings().find( '> a' );\n\t\t\t\t\t\n\t\t\t\t\t$e.removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\n\t\t\t\t\t$( this ).addClass( 'is-active' ).attr( 'aria-expanded', true );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tTweenMax.to( $e.next( 'ul' ), 0.5, { height: 0 } );\n\n\t\t\t\t\t//to open\n\t\t\t\t\t// - temporarilty set height:auto\n\t\t\t\t\t// - tween from height:0\n\t\t\t\t\tTweenMax.set( $sub, { height: 'auto' } );\n\t\t\t\t\tTweenMax.from( $sub, 0.5, { height:0 } );\t\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\t$( this ).removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\t\t\t\t\t\n\t\t\t\t\t//to close\n\t\t\t\t\tTweenMax.to( $sub, 0.5, { height: 0 } );\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\t\n\n        });\n\t\t\n\t\t//Add multilevel indicator arrow\n\t\tif ( $verticalMenuLi.find( '> a .uix-vertical-menu__arrow' ).length == 0 ) {\n\t\t\t$verticalMenuLi.find( '> a' ).append( '<span class=\"uix-vertical-menu__arrow\"></span>' );\n\t\t}\n        \n\t\t$verticalMenuLi.each( function() {\n\t\t\tconst len = $( this ).find( 'ul' ).length;\n\t\t\tif ( len == 0 ) {\n\t\t\t\t$( this ).children( 'a' ).children( '.uix-vertical-menu__arrow' ).hide();\n\t\t\t}\n\t\t});\n\t\t\n    };\n\n    module.components.documentReady.push( module.DROPDOWN_MENU2.documentReady );\n\n\treturn class DROPDOWN_MENU2 {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Dynamic Drop Down List from JSON -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixRenderCustomSelect from '@uixkit/core/form/js/fn/select';\n\n\nexport const DYNAMIC_DD_LIST = ( ( module, $, window, document ) => {\n\tif ( window.DYNAMIC_DD_LIST === null ) return false;\n\t\n\t\n    module.DYNAMIC_DD_LIST               = module.DYNAMIC_DD_LIST || {};\n    module.DYNAMIC_DD_LIST.version       = '0.1.1';\n    module.DYNAMIC_DD_LIST.documentReady = function( $ ) {\n        \n\n\t\t$( '[data-ajax-dynamic-dd-json]' ).each( function() {\n\t\t\tconst $this            = $( this );\n            \n            const ranID            = 'dynamic-dd-control-' + UixGUID.create(),\n\t\t\t\t  ID               = $this.attr( 'id' );\n            \n            \n\t\t\tlet\tjsonFile          = $this.data( 'ajax-dynamic-dd-json' ),\n                dataType          = $this.data( 'ajax-dynamic-dd-datatype' ),\n                method            = $this.data( 'ajax-dynamic-dd-method' ),\n\t\t\t\tparamsWithJson    = $this.data( 'ajax-dynamic-dd-data' ),\n\t\t\t\tplaceholderStrArr = $this.data( 'ajax-dynamic-dd-placeholder-str' ),\n                controlIDsArr     = $this.data( 'ajax-dynamic-dd-control-ids' ),\n                appendTemp        = $this.data( 'ajax-dynamic-dd-append-temp' ),\n\t\t\t\tcurID;\n\t\n\t\t\t\t\t\n\t\t\tif ( typeof placeholderStrArr === typeof undefined ) placeholderStrArr = [];\n            if ( typeof controlIDsArr === typeof undefined ) controlIDsArr = [];\n\t\t\tif ( typeof jsonFile === typeof undefined ) jsonFile = '';\n\t\t\tif ( typeof paramsWithJson === typeof undefined ) paramsWithJson = {};\n\t\t\tif ( typeof method === typeof undefined ) method = 'POST';\n            if ( typeof appendTemp === typeof undefined ) appendTemp = '';\n\t\t\tif ( typeof ID === typeof undefined ) $this.attr( 'id', ranID );\n\t\t\tif ( typeof dataType === typeof undefined ) dataType = 'category'; // options: category, place\n\t\t\t\n\t\t\t\n\n\t\t\tcurID = $this.attr( 'id' );\n\t\t\t\n\t\t\t\n\t\t\t//Parse the JSON data\n\t\t\tif ( jsonFile != '' ) {\n\t\t\t\n\t\t\t\t//Initialize dependent/chained dropdown list\n\t\t\t\tlet dataExist = $this.data( 'exist' );\n\t\t\t\tif ( typeof dataExist === typeof undefined && dataExist != 1 ) {\n\n                    \n                    // Add a request or response interceptor\n                    const axiosInterceptor = axios.interceptors.request.use(function(config) {\n                        // Do something before request is sent\n\n\n                        //\n                        return config;\n                    },\n                    function(error) {\n                        return Promise.reject(error);\n                    });\n\n\n                    // To send data in the application/x-www-form-urlencoded format instead\n                    const formData = new FormData();\n                    const defaultPostData = paramsWithJson;\n                    for(let k in defaultPostData) {\n                        formData.append(k, defaultPostData[k]);\n                    }\n\n                    // Create a request event\n                    axios({\n                        timeout: 15000,\n                        method: method,\n                        url: jsonFile,\n                        data: formData,\n                        responseType: 'json',\n                    })\n                    .then(function (response) {\n\n                        const jsonData = response.data;\n                       \n                        \n                        \n                        //Recursive and initialized functions\n                        //------------------------------------\n                        const initSelectControls = function( selectIndex, nodeName, $select, arr, allControlsLength ) {\n\n                            //-- Hide or display controls\n                            const controlView = function() {\n                                \n                                for( let p = 0; p < controlIDsArr.length; p++ ) {\n                                    \n                                    const data = controlIDsArr[p];\n                                    const curSelInputID = ( data != null ) ? controlIDsArr[p].replace( '#', '' ) : data;\n                                    const curSelWrapperID = curSelInputID + '----select';\n                                    const isCustomSel = $( '#' + curSelWrapperID ).hasClass( 'uix-controls__select' );\n                                    const $curSelWrapper = isCustomSel ? $( '#' + curSelWrapperID ).parent( '.uix-controls__select-wrapper' ) : $( '#' + curSelWrapperID ); \n\n                                    //hide/display select wrapper\n                                    if ( $( '#' + curSelWrapperID ).find( 'select option' ).length == 0 ) {\n                                        $curSelWrapper.hide();\n                                    } else {\n                                        $curSelWrapper.show();\n                                    } \n\n                                    //Render the custom select\n                                    if ( isCustomSel ) $( document ).UixRenderCustomSelect();   \n\n                                }\n                               \n                            };\n                            \n                            \n                            \n                            //-- Clear the select controls behind       \n                            const clearAllSelControls = function() {\n                                if( allControlsLength > selectIndex ) {                \n                                    for( let i = allControlsLength; i > selectIndex; i-- ) {\n\n                                        const $targetClearSel = $this.find( 'select' ).eq(i-1);\n                                        const tid = $targetClearSel.closest( '.uix-controls' ).attr( 'id' );\n                                        const curSelInputID = ( tid != null ) ? tid.replace('----select','') : tid;\n\n                                        //Remove options\n                                        $targetClearSel.empty();\n\n                                        //update a empty value\n                                        $( '#' + curSelInputID ).val( '' );   \n\n                                        //Hide or display controls\n                                        controlView();   \n\n\n                                    }\n                                }\n                            };\n                            \n                            clearAllSelControls();\n\n\n                            //-- Json Infinite Recursion\n                            if ( arr == '' ) return false; //Empty data sent when the change event is triggered\n                            if ( arr ) {\n\n                                /*\n                                console.log( '--------' );\n                                console.log( '-> target select ID: ' + $select.closest( '.uix-controls' ).attr( 'id' ) );\n                                console.log( '-> target select data: ' );\n                                console.log( arr );\n                                */\n                                \n                                \n                                //add empty option\n                                const emptyOption = '<option value=\"\">' + placeholderStrArr[selectIndex] + '</option>';\n                                $select.append( emptyOption );\n\n                                //\n                                for( let i = 0; i < arr.length; i++ ) {\n                                \n                                    if ( arr[i] ) {\n                                        \n\n                                        ///////////////////////////////////////\n                                        //////////////// category /////////////\n                                        ///////////////////////////////////////\n\n                                        if ( dataType == 'category' ) {\n\n                                            const _name = arr[i].name;\n                                            $select.append( '<option data-index=\"'+i+'\" value=\"'+_name+'\">' + _name + '</option>' );\n\n                                        } // endif dataType\n\n\n                                        ///////////////////////////////////////\n                                        //////////////// place ////////////////\n                                        /////////////////////////////////////// \n\n                                        if ( dataType == 'place' ) {\n\n                                            const _name = arr[i].name;\n                                            if ( typeof _name === typeof undefined ) {\n                                                $select.append( '<option data-index=\"'+i+'\" value=\"'+arr[i]+'\">' + arr[i] + '</option>' );\n                                            } else {\n                                                $select.append( '<option data-index=\"'+i+'\" value=\"'+_name+'\">' + _name + '</option>' );\n                                            }\n                                            \n\n\n                                        } // endif dataType     \n\n                                        \n                                    }\n\n\n                                }//end for arr  \n\n                            }//endif arr\n\n\n                            \n                            //-- Hide or display controls\n                            controlView();\n                            \n\n                            //-- Change Event\n                            $select.off( 'change.DYNAMIC_DD_LIST' ).on( 'change.DYNAMIC_DD_LIST', function() {\n                                \n                                const curDeep = $( this ).find( 'option:selected' ).data( 'index' );\n                                const curVal = $( this[ this.selectedIndex ] ).val();\n                                const $targetSel = $this.find( 'select' ).eq(selectIndex+1);\n                                \n                                \n                                //update a new value\n                                const tid = $( this ).closest( '.uix-controls' ).attr( 'id' );\n                                $( '#' + ( tid != null ? tid.replace('----select','') : tid ) ).val( curVal );\n\n                                //Remove options\n                                if ( curVal == '' || curVal == null ) {\n                                    $targetSel.empty();\n                                } \n                                \n                                \n                                //Hide or display controls\n                                controlView(); \n                                \n                                \n                                //send new JSON data\n                                let sendData = ( arr[curDeep] ) ? arr[curDeep][nodeName] : '';\n                                initSelectControls( selectIndex+1, 'list', $targetSel, sendData, allControlsLength );\n\n                                \n\n                            });\n\n                        };\n\n                        \n                      \n                        // Append the default select control to the container\n                        //------------------------------------\n                        for( let p = 0; p < controlIDsArr.length; p++ ) {\n \n                            const data = controlIDsArr[p];\n                            const curSelInputID = ( data != null ) ? controlIDsArr[p].replace( '#', '' ) : data;\n                            const curSelWrapperID = curSelInputID + '----select';\n                            \n\n                            if ( $( '#' + curSelWrapperID ).length == 0 ) {\n                                \n                                $( $.parseHTML( appendTemp ) )\n                                    .attr( 'id', curSelWrapperID )\n                                    .appendTo( $this );\n\n                            }\n\n\n\n                        }//endfor controlIDsArr \n\n\n                        \n                        // Initialize the selection box\n                        //------------------------------------\n                        const lastData = controlIDsArr[controlIDsArr.length-1];\n                        const lastSelInputID = ( lastData != null ) ? lastData.replace( '#', '' ) : lastData;\n                        const lastSelWrapperID = lastSelInputID + '-select'; \n                        $.when( $( '#' + lastSelWrapperID ).length > 0 ).then( function() {\n                            initSelectControls( 0, 'list', $this.find( 'select' ).first(), jsonData, controlIDsArr.length );\n                            \n                       \n                            //-- Reset default value and select style\n                            for( let p = 0; p < controlIDsArr.length; p++ ) {\n\n                                const data = controlIDsArr[p];\n                                const curSelInputID = ( data != null ) ? controlIDsArr[p].replace( '#', '' ) : data;\n                                const curSelWrapperID = curSelInputID + '----select';\n                                const isCustomSel = $( '#' + curSelWrapperID ).hasClass( 'uix-controls__select' );\n                                const $curSelWrapper = isCustomSel ? $( '#' + curSelWrapperID ).parent( '.uix-controls__select-wrapper' ) : $( '#' + curSelWrapperID ); \n\n\n                                //update a new value to select control when the default is not empty\n                                const defaultVal = $( '#' + curSelInputID ).data( 'default-value' );\n\n                                if ( defaultVal != '' && defaultVal != null ) {\n                                    \n                                    $( '#' + curSelInputID ).val( defaultVal );\n                                    $curSelWrapper.find( 'select' )\n                                                                .val( defaultVal )\n                                                                .attr( 'selected', 'selected' )\n                                                                .change(); \n\n\n                                }\n\n\n                                //Render the custom select\n                                if ( isCustomSel ) {\n                                    $( document ).UixRenderCustomSelect();\n                                    $curSelWrapper.find( 'select' ).attr( 'selected', 'selected' ).change();\n                                }\n\n\n                            }\n  \n                            \n                        });\n\n\n\n                    })  \n                    .catch(function (error) {\n\n                        if (error.response) {\n                            // The request was made and the server responded with a status code\n                            // that falls out of the range of 2xx\n                            const status = error.response.status;\n                            console.log(status);\n\n\n                        } else if (error.request) {\n                            // The request was made but no response was received\n                            // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n                            // http.ClientRequest in node.js\n                            console.log(error.request);\n\n\n                        } else {\n                            // If there was a problem, we need to\n                            // dispatch the error condition\n                            console.log(error.message);\n                        }\n                    });\n\n\n                    // Remove an interceptor later\n                    axios.interceptors.request.eject(axiosInterceptor);\n\n\n\n\n\t\t\t\t\t//Prevent the form from being initialized again\n\t\t\t\t\t$this.data( 'exist', 1 );\t\n\t\t\t\t}\n\n\n\t\t\t\t\n\t\t\t} // end of jsonFile\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n    };\n\n    module.components.documentReady.push( module.DYNAMIC_DD_LIST.documentReady );\n\t\n\n\treturn class DYNAMIC_DD_LIST {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- Flexslider (Third-party plugin) -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '@uixkit/core/flexslider/js/third-party/jquery.flexslider.js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const FLEXSLIDER = ( ( module, $, window, document ) => {\n\tif ( window.FLEXSLIDER === null ) return false;\n\t\n\t\n\t\n    module.FLEXSLIDER               = module.FLEXSLIDER || {};\n    module.FLEXSLIDER.version       = '0.1.9';\n    module.FLEXSLIDER.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\t\t\n\n        \n\t\tlet\tflexslider         = {\n\t\t\t\t\t\t           vars: {}\n\t\t\t\t\t              };\n\t\t\n\t\tconst pluginNamespace = 'uix-flexslider__';\n\t\t\n\t\t\n\t\t/*\n\t\t * Tiny helper function to add breakpoints.\n\t\t *\n\t\t * @param  {Number} number           - Number of carousel items that should be visible.\n\t\t * @return {Void}\n\t\t */\n        function getGridSize( number ) {\n            return ( window.innerWidth <= 768 ) ? 1 : number;\n        }\n\n\t\t\n\t\t/*\n\t\t * Return an event from callback function to each slider.\n\t\t *\n\t\t * @param  {Element} thisSlider             - The current slider.\n\t\t * @param  {Element} sliderWrapper          - The current slider wrapper.\n\t\t * @param  {String} fireState              - State of fire asynchronously.\n\t\t * @return {Number}                        - Index of current slider .\n\t\t */\n        function initslides( sliderWrapper, thisSlider, fireState ) {\n\t\t\t\n\t\n\t\t\tif ( thisSlider.find( '.'+pluginNamespace+'item' ).length == 0 ) return false;\n\n\t\t\tlet curIndex          = thisSlider.currentSlide,\n\t\t\t\tcount             = thisSlider.count,\n\t\t\t\tactiveClass       = pluginNamespace + 'item--active',\n\t\t\t\tprevClass         = activeClass + '-prev',\n\t\t\t\tnextClass         = activeClass + '-next',\n\t\t\t\t$items            = thisSlider.find( '.'+pluginNamespace+'item' ),\n\t\t\t\t$current          = thisSlider.slides.eq( curIndex ),\n\t\t\t\t$prev             = thisSlider.slides.eq( curIndex - 1 ),\n\t\t\t\t$next             = thisSlider.slides.eq( thisSlider.animatingTo ),\n\t\t\t\t$first            = thisSlider.slides.eq( 0 ),\n\t\t\t\tcurHeight         = $current.height(),\n\t\t\t\tdataNhumbs        = thisSlider.data( 'my-nav-thumbs' ),\n\t\t\t\tdataPNThumbs      = thisSlider.data( 'my-prev-next-thumbs' ),\n\t\t\t\tdataTimeline      = thisSlider.data( 'my-nav-timeline' ),\n\t\t\t\tdataCountTotal    = thisSlider.data( 'my-count-total' ),\n\t\t\t\tdataCountCur      = thisSlider.data( 'my-count-now' ),\n\t\t\t\tdataShowItems     = thisSlider.data( 'my-multiple-items' ),\n\t\t\t\tdataShowItemsMove = thisSlider.data( 'my-multiple-items-move' ),\n\t\t\t\tdataParallax      = thisSlider.data( 'my-parallax' ),\n\t\t\t\tdataCustomConID   = thisSlider.data( 'my-controls' );\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof dataPNThumbs === typeof undefined ) dataPNThumbs = false;\n\t\t\tif ( typeof dataTimeline === typeof undefined ) dataTimeline = false;\n\t\t\tif ( typeof dataCountTotal === typeof undefined ) dataCountTotal = false;\n\t\t\tif ( typeof dataCountCur === typeof undefined ) dataCountCur = false;\n\t\t\tif ( typeof dataParallax === typeof undefined ) dataParallax = false;\n\t\t\tif ( typeof dataShowItemsMove === typeof undefined ) dataShowItemsMove = 1;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Add disabled class to custom navigation \n\t\t\tif ( typeof dataCustomConID != typeof undefined && dataCustomConID != '' && dataCustomConID != false ) {\n\t\t\t\tconst myCustomDirectionNav = $( '.uix-flexslider__mycontrols'+dataCustomConID+' a' );\t\n\t\t\t\tconst disabledClass = pluginNamespace + 'disabled';\n\t\t\t\tif (thisSlider.pagingCount === 1) {\n\t\t\t\t\tmyCustomDirectionNav.addClass(disabledClass).attr( 'tabindex', '-1' );\n\t\t\t\t} else if (!thisSlider.vars.animationLoop) {\n\t\t\t\t\tif ( thisSlider.animatingTo === 0 ) {\n\t\t\t\t\t\tmyCustomDirectionNav.removeClass(disabledClass);\n\t\t\t\t\t\tmyCustomDirectionNav.first().addClass(disabledClass).attr( 'tabindex', '-1' );\n\t\t\t\t\t} else if ( thisSlider.animatingTo === thisSlider.last ) {\n\t\t\t\t\t\tmyCustomDirectionNav.removeClass(disabledClass);\n\t\t\t\t\t\tmyCustomDirectionNav.last().addClass(disabledClass).attr( 'tabindex', '-1' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmyCustomDirectionNav.removeClass(disabledClass).removeAttr( 'tabindex' );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmyCustomDirectionNav.removeClass(disabledClass).removeAttr( 'tabindex' );\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t//Total counter selector\n\t\t\t//Current counter selector.\n\t\t\tconst countTotalSelector = ( dataCountTotal ) ? $( dataCountTotal ) : $( '.uix-flexslider__mycontrols__count em.count' ), \n\t\t\t\t  countCurSelector   = ( dataCountCur ) ? $( dataCountCur ) : $( '.uix-flexslider__mycontrols__count em.current' );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t// Fires when the slider loads the first slide.\n\t\t\t// Fires after each slider animation completes.\n\t\t\tif ( fireState == 'start' || fireState == 'after' ) {\n\t\t\t\t\n\t\t\t\t//Remove the slider loading\n\t\t\t\t//-------------------------------------\n\t\t\t\tthisSlider.removeClass( pluginNamespace+'-flexslider-loading' );\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t//With Timeline\n\t\t\t\t//-------------------------------------\t\n\t\t\t\tif ( dataTimeline && dataTimeline != '' ) {\n\t\t\t\t\tconst curPerMinWidth = curIndex/count*100 + '%',\n\t\t\t\t\t\t  curPerMaxWidth = (curIndex + 1)/count*100 + '%',\n\t\t\t\t\t\t  curTotalWidth  = $( dataTimeline ).width();\n\t\t\t\t\n\t\t\t\t\t//Fires animation effect of an element width.\n\t\t\t\t\t$( dataTimeline ).find( '> span' ).css( {\n\t\t\t\t\t\t'width'     : curTotalWidth,\n\t\t\t\t\t\t'transition': 'all ' + parseFloat( thisSlider.vars.slideshowSpeed - thisSlider.vars.animationSpeed ) + 'ms linear'\t\n\t\t\t\t\t} );\t\n\t\t\t\t\t\n\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Display Next/Prev image thumbnail in navigation\n\t\t\t\t//-------------------------------------\t\t\n\t\t\t\tif ( dataPNThumbs && dataPNThumbs != '' ) {\n\t\t\t\t\tlet prevIndex  = curIndex - 1,\n\t\t\t\t\t\tnextIndex  = thisSlider.animatingTo + 1,\n\t\t\t\t\t\tpimg       = '',\n\t\t\t\t\t\tnimg       = '',\n\t\t\t\t\t\t$plink     = $( dataPNThumbs+'> a' ),\n\t\t\t\t\t\t$plinkPrev = $plink.filter( '.uix-flexslider__mycontrols--thumb__prev' ),\n\t\t\t\t\t\t$plinkNext = $plink.filter( '.uix-flexslider__mycontrols--thumb__next' );\n\n\t\t\t\t\t$plinkPrev.removeClass( 'is-disabled' );\n\t\t\t\t\t$plinkNext.removeClass( 'is-disabled' );\n\n\t\t\t\t\tif ( !thisSlider.vars.animationLoop ) {\n\t\t\t\t\t\tif ( prevIndex === -1 ) $plinkPrev.addClass( 'is-disabled' );\n\t\t\t\t\t\tif ( nextIndex === thisSlider.last + 1 ) $plinkNext.addClass( 'is-disabled' );\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( prevIndex === -1 ) prevIndex = thisSlider.last;\n\t\t\t\t\t\tif ( nextIndex === thisSlider.last + 1 ) nextIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t//Get images URL\n\t\t\t\t\tpimg = thisSlider.slides.eq( prevIndex ).find( 'img' ).attr( 'src' );\n\t\t\t\t\tnimg = thisSlider.slides.eq( nextIndex ).find( 'img' ).attr( 'src' );\n\n\n\t\t\t\t\tif ( $( dataPNThumbs ).length > 0 ) {\n\n\t\t\t\t\t\t$plink.attr( 'href', 'javascript:void(0);' );\n\n\n\t\t\t\t\t\tif ( typeof pimg != typeof undefined ) $plinkPrev.attr( 'data-goto', prevIndex ).find( '> span' ).html('<img src=\"'+pimg+'\" alt=\"\">');\n\t\t\t\t\t\tif ( typeof nimg != typeof undefined ) $plinkNext.attr( 'data-goto', nextIndex ).find( '> span' ).html('<img src=\"'+nimg+'\" alt=\"\">');\t\t\n\n\n\t\t\t\t\t\t$plink.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tthisSlider.flexslider( parseInt( $( this ).attr( 'data-goto' ) ) );\n\t\t\t\t\t\t});\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t\t// Fires local videos asynchronously with slider switch.\n\t\t\t\t//-------------------------------------\n\t\t\t\tvideoEmbedInit( $items, false );\n\t\t\t\tvideoEmbedInit( $current, true );\n\n\t\t\t\t//Auto-restart player if paused after action\n\t\t\t\t//-------------------------------------\n\t\t\t\tif ( thisSlider.vars.slideshow ) {\n\t\t\t\t\tif ( !thisSlider.playing ) {\n\t\t\t\t\t\tthisSlider.play();\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t//Prevent to <a> of page transitions\n\t\t\t\t//-------------------------------------\n\t\t\t\t$( 'a' ).each( function() {\n\t\t\t\t\tconst attr = $( this ).attr( 'href' );\n\n\t\t\t\t\tif ( typeof attr === typeof undefined ) {\n\t\t\t\t\t\t$( this ).attr( 'href', '#' );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\n\t\t\t\t//Thumbnail ControlNav Pattern\n\t\t\t\t//-------------------------------------\n\t\t\t\tif ( dataNhumbs && dataNhumbs != '' ) {\n\t\t\t\t\t$( '.uix-flexslider__thumbs'+dataNhumbs+' > ul > li' ).removeClass( 'is-active' );\n\t\t\t\t\t$( '.uix-flexslider__thumbs'+dataNhumbs+' > ul > li' ).eq( curIndex ).addClass( 'is-active' );\t\t\t\n\t\t\t\t}\n\n\n\t\t\t\t//Initialize items background of the slider\n\t\t\t\t//-------------------------------------\n\t\t\t\tthisSlider.find( '[data-slider-bg]' ).each( function()  {\n\t\t\t\t\t$( this ).css( 'background-image', 'url('+$( this ).data( 'slider-bg' )+')' );\n\t\t\t\t});\t\n\n\n\t\t\t\t//Enable \"prettyPhoto\" plugin\n\t\t\t\t//-------------------------------------\n\t\t\t\tif( $.isFunction( $.fn.lightbox ) ) {\n\t\t\t\t\tthisSlider.slides.find( \"a[rel^='theme-slider-prettyPhoto']\" ).lightbox();\n\t\t\t\t}\n\n\n\t\t\t\t//Return an event from callback function to each slider \n\t\t\t\t//with dynamic min/max ranges.\n\t\t\t\t//-------------------------------------\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif( \n\t\t\t\t\ttypeof dataShowItems != typeof undefined && \n\t\t\t\t\tdataShowItems != '' && \n\t\t\t\t\tdataShowItems != 0\n\t\t\t\t) {\n\n\t\t\t\t\t\n\t\t\t\t\tif ( dataShowItemsMove == 1 ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t$items.removeClass( activeClass );\n\t\t\t\t\t\t$items.removeClass( prevClass );\n\t\t\t\t\t\t$items.removeClass( nextClass );\n\n\t\t\t\t\t\tif ( windowWidth <= 768 ) {\n\n\t\t\t\t\t\t\t//Focus slider\n\t\t\t\t\t\t\t$items.eq( parseFloat( curIndex ) ).addClass( activeClass );\t\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//Focus slider\n\t\t\t\t\t\t\t$items.eq( parseFloat( curIndex+1 ) ).addClass( activeClass );\n\n\t\t\t\t\t\t\t//Previous slider\n\t\t\t\t\t\t\t$items.eq( parseFloat( curIndex ) ).addClass( prevClass );\n\n\t\t\t\t\t\t\t//Next slider\n\t\t\t\t\t\t\t$items.eq( parseFloat( curIndex+2 ) ).addClass( nextClass );\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$items.addClass( activeClass );\n\t\t\t\t\t}\n\n\n\t\t\t\t\t\n\t\t\t\t}\n\n\n\t\t\t\t//Display counter\n\t\t\t\t//-------------------------------------\n\t\t\t\tif ( sliderWrapper.find( '.uix-flexslider__mycontrols__count' ).length == 0 ) {\n\t\t\t\t\tif ( sliderWrapper.closest( 'section' ).find( '.uix-flexslider__mycontrols__count' ).length > 0 ) {\n\t\t\t\t\t\tlet showCountTotal = count,\n\t\t\t\t            showCountCur   = curIndex + 1;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( showCountTotal < 10 ) showCountTotal = '0' + showCountTotal;\n\t\t\t\t\t\tif ( showCountCur < 10 ) showCountCur = '0' + showCountCur;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcountTotalSelector.text( showCountTotal );\n\t\t\t\t\t\tcountCurSelector.text( showCountCur );\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// Fires asynchronously with each slider animation.\n\t\t\tif ( fireState == 'before' ) {\n\t\t\t\t\n\t\t\t\t//Common images style\n\t\t\t\t//-------------------------------------\t\n\t\t\t\t$next.find( 'img' ).addClass( 'is-active' );\n\t\t\t\t$current.find( 'img' ).removeClass( 'is-active' );\n\t\t\t\t$prev.find( 'img' ).removeClass( 'is-active' );\n\t\t\t\t$first.find( 'img' ).removeClass( 'is-active' );\n\n\t\t\t\t//With Timeline\n\t\t\t\t//-------------------------------------\t\n\t\t\t\tif ( dataTimeline && dataTimeline != '' ) {\n\t\t\t\n\t\t\t\t\t//Fires animation effect of an element width.\n\t\t\t\t\t$( dataTimeline ).find( '> span' ).css( {\n\t\t\t\t\t\t'width'     : 0,\n\t\t\t\t\t\t'transition': 'all 100ms linear'\t\n\t\t\t\t\t} );\n\t\t\t\t\t\n\n\t\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// Fires when the slider reaches the last slide (asynchronous).\n\t\t\tif ( fireState == 'end' ) {\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Common images style\n\t\t\t\t//-------------------------------------\t\n\t\t\t\t$first.find( 'img' ).addClass( 'is-active' );\n\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// Fires asynchronously with each slider animation.\n\t\t\t// Fires when the slider loads the first slide.\n\t\t\tif ( fireState == 'before' || fireState == 'start' ) {\n\t\t\t\t\n\t\t\t\t//Return an event from callback function to each slider to make parallax effect.\n\t\t\t\t//-------------------------------------\n\t\t\t\tif ( dataParallax ) {\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tlet dir = 'uix-flexslider__item--left';\n\n\t\t\t\t\t$.each( thisSlider.slides, function( i, item ) {\n\t\t\t\t\t\tconst el = $( item );\n\t\t\t\t\t\tel.removeClass( 'uix-flexslider__item--right uix-flexslider__item--left' );\n\t\t\t\t\t\tif (i >= thisSlider.animatingTo && dir !== 'uix-flexslider__item--right') {\n\t\t\t\t\t\t\tdir = 'uix-flexslider__item--right';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.addClass( dir );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\n\t\t\t\t}\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\treturn curIndex;\n\t\t\t\n        }\n\t\t\n\t\n\n\t\n\t\t/*\n\t\t * Initialize embedded local video.\n\t\t *\n\t\t * @param  {Element} wrapper          - The outermost video container, which can contain multiple videos\n\t\t * @param  {Boolean} play            - Forced to trigger pause or play events.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction videoEmbedInit( wrapper, play ) {\n\t\t\twrapper.find( '.uix-video__slider' ).each( function()  {\n\t\t\t\tconst $this          = $( this );\n                \n\t\t\t\tconst videoWrapperW  = $this.closest( '[data-embed-video-wrapper]' ).width(),\n\t\t\t\t\t  curVideoID     = $this.find( 'video' ).attr( 'id' ) + '-slider-videopush',\n\t\t\t\t\t  coverPlayBtnID = 'videocover-' + curVideoID,\n                      $replayBtn     = $( '#'+curVideoID+'-replay-btn' );\n                \n\t\t\t\tlet\tdataControls   = $this.data( 'embed-video-controls' ),\n\t\t\t\t\tdataAuto       = $this.data( 'embed-video-autoplay' ),\n\t\t\t\t\tdataLoop       = $this.data( 'embed-video-loop' ),\n\t\t\t\t\tdataW          = $this.data( 'embed-video-width' ),\n\t\t\t\t\tdataH          = $this.data( 'embed-video-height' );\n\n\t\t\t\t//Push a new ID to video\n\t\t\t\t//Solve the problem that ajax asynchronous loading does not play\n\t\t\t\t$this.find( '.video-js' ).attr( 'id', curVideoID );\n\n\t\t\t\n\t\t\t\tif ( typeof dataAuto === typeof undefined ) {\n\t\t\t\t\tdataAuto = true;\n\t\t\t\t}\n\t\t\t\tif ( typeof dataLoop === typeof undefined ) {\n\t\t\t\t\tdataLoop = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( typeof dataControls === typeof undefined ) {\n\t\t\t\t\tdataControls = false;\n\t\t\t\t}\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\tif ( typeof dataW === typeof undefined || dataW == 'auto' ) {\n\t\t\t\t\tdataW = videoWrapperW;\n\t\t\t\t}\t\n\n\t\t\t\tif ( typeof dataH === typeof undefined || dataH == 'auto' ) {\n\t\t\t\t\tdataH = videoWrapperW/1.77777777777778;\n\t\t\t\t}\n\t\t\t\t\n\n\n\t\t\t\t//Display cover and play buttons when some mobile device browsers cannot automatically play video\n\t\t\t\tif ( $( '#' + coverPlayBtnID ).length == 0 ) {\n\t\t\t\t\t$( '<div id=\"'+coverPlayBtnID+'\" class=\"uix-video__cover\"><span class=\"uix-video__cover__placeholder\" style=\"background-image:url('+$this.find( 'video' ).attr( 'poster' )+')\"></span><span class=\"uix-video__cover__playbtn\"></span></div>' ).insertBefore( $this );\n\n\n\t\t\t\t\tconst btnEv = ( Modernizr.touchevents ) ? 'touchstart' : 'click';\n\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).on( btnEv, function( e ) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\n\t\t\t\t\t\tmyPlayer.play();\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\n\t\t\t\t\t});\n\n\n\t\t\t\t\t\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Add replay button to video \n\t\t\t\tif ( $replayBtn.length == 0 ) {\n\t\t\t\t\t$this.after( '<span class=\"uix-video__btn-play\" id=\"'+curVideoID+'-replay-btn\"></span>' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//HTML5 video autoplay on mobile revisited\n\t\t\t\tif ( dataAuto && windowWidth <= 768 ) {\n\t\t\t\t\t$this.find( '.video-js' ).attr({\n\t\t\t\t\t\t'autoplay'    : 'true',\n\t\t\t\t\t\t'muted'       : 'true',\n\t\t\t\t\t\t'playsinline' : 'true'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\tconst myPlayer = videojs( curVideoID, \n\t\t\t\t   {\n\t\t\t\t\t  width     : dataW,\n\t\t\t\t\t  height    : dataH,\n\t\t\t\t\t  loop      : dataLoop,\n\t\t\t\t\t  autoplay  : dataAuto\n\t\t\t\t\t}, \n\t\t\t\t   function onPlayerReady() {\n\n\n\t\t\t\t\t\tconst initVideo = function( obj ) {\n\n\t\t\t\t\t\t\t//Get Video Dimensions\n\t\t\t\t\t\t\tlet curW    = obj.videoWidth(),\n\t\t\t\t\t\t\t\tcurH    = obj.videoHeight(),\n\t\t\t\t\t\t\t\tnewW    = curW,\n\t\t\t\t\t\t\t\tnewH    = curH;\n\n\t\t\t\t\t\t\tnewW = videoWrapperW;\n\n\t\t\t\t\t\t\t//Scaled/Proportional Content \n\t\t\t\t\t\t\tnewH = curH*(newW/curW);\n\n\n\t\t\t\t\t\t\tif ( !isNaN( newW ) && !isNaN( newH ) )  {\n\t\t\t\t\t\t\t\tobj.height( newH );\t\t\n\t\t\t\t\t\t\t\tobj.width( newW );\t\t\t\n\n\t\t\t\t\t\t\t\t$this.css( 'height', newH );\n\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t//Show this video wrapper\n\t\t\t\t\t\t\t$this.css( 'visibility', 'visible' );\n\n\t\t\t\t\t\t\t//Hide loading effect\n\t\t\t\t\t\t\t$this.find( '.vjs-loading-spinner, .vjs-big-play-button' ).hide();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* ---------  Video initialize */\n\t\t\t\t\t\tthis.on( 'loadedmetadata', function() {\n\n\t\t\t\t\t\t\tinitVideo( this );\n\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t    /* ---------  Display the play button  */\n\t\t\t\t\t    if ( ! dataAuto ) $this.find( '.vjs-big-play-button' ).show();\n\t\t\t\t\t    $this.find( '.vjs-big-play-button' ).off( 'click' ).on( 'click', function() {\n\t\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\n\n\t\t\t\t\t\t/* ---------  Set, tell the player it's in fullscreen  */\n\t\t\t\t\t\tif ( dataAuto ) {\n\n\t\t\t\t\t\t\t//Fix an error of Video auto play is not working in browser\n\t\t\t\t\t\t\t//this.muted( true ); \n\n\n\n\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\n\t\t\t\t\t\t\t\t});\n\n\n\t\t\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t/* ---------  Disable control bar play button click */\n\t\t\t\t\t\tif ( !dataControls ) {\n\t\t\t\t\t\t\tthis.controls( false );\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t/* ---------  Determine if the video is auto played from mobile devices  */\n\t\t\t\t\t\tlet autoPlayOK = false;\n\n\t\t\t\t\t\tthis.on( 'timeupdate', function() {\n\n\t\t\t\t\t\t\tlet duration = this.duration();\n\t\t\t\t\t\t\tif ( duration > 0 ) {\n\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\tif ( this.currentTime() > 0 ) {\n\t\t\t\t\t\t\t\t\tautoPlayOK = true;\n\t\t\t\t\t\t\t\t\tthis.off( 'timeupdate' );\n\n\t\t\t\t\t\t\t\t\t//Hide cover and play buttons when the video automatically played\n\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).hide();\n\t\t\t\t\t\t\t\t} \n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t});\n\n\n\n\t\t\t\t\t\t/* ---------  Pause the video when it is not current slider  */\n\t\t\t\t\t\tif ( !play ) {\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\tthis.currentTime(0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ( dataAuto ) {\n\n\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\n\t\t\t\t\t\t\t\t//Prevent autoplay error: Uncaught (in promise) DOMException\n\t\t\t\t\t\t\t\tconst promise = this.play();\n\n\t\t\t\t\t\t\t\tif ( promise !== undefined ) {\n\t\t\t\t\t\t\t\t\tpromise.then( function() {\n\t\t\t\t\t\t\t\t\t\t// Autoplay started!\n\n\t\t\t\t\t\t\t\t\t}).catch( function( error ) {\n\t\t\t\t\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID ).show();\n\t\t\t\t\t\t\t\t\t\t$( '#' + coverPlayBtnID + ' .uix-video__cover__playbtn' ).show();\n\t\t\t\t\t\t\t\t\t\tconsole.log( 'Autoplay was prevented.' );\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\n\n\n\n\t\t\t\t\t\t\t\t//Hidden replay button\n\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\n\t\t\t\t\t\t\t\t//Should the video go to the beginning when it ends\n\t\t\t\t\t\t\t\tthis.on( 'ended', function () { \n\n\t\t\t\t\t\t\t\t\tif ( dataLoop ) {\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\t\t\t\t\t\t\t\t\t\tthis.play();\t\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t//Replay this video\n\t\t\t\t\t\t\t\t\t\tthis.currentTime(0);\n\n\t\t\t\t\t\t\t\t\t\t$replayBtn\n\t\t\t\t\t\t\t\t\t\t\t.show()\n\t\t\t\t\t\t\t\t\t\t\t.off( 'click' )\n\t\t\t\t\t\t\t\t\t\t\t.on( 'click', function( e ) {\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\t\t\t\t\t\tthis.play();\n\t\t\t\t\t\t\t\t\t\t\t\t$replayBtn.hide();\n\n\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t});\t\t\n\n\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t});\n\n\t\t\t\t\n\n\t\t\t});\t\n\t\t}\t\n\t\t\n\n\t\t\n\t\t/*\n\t\t * Make slider image draggable \n\t\t *\n\t\t * @param  {Element} $obj             - The current FlexSlider setup using custom selector.\n\t\t * @return {Void}\n\t\t */\n        function slidesExDraggable( $obj ) {\n\t\t\t\n\t\t\tconst $dragDropTrigger = $obj.find( '.uix-flexslider__inner > div.uix-flexslider__item' );\n\t\t\t\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\t$dragDropTrigger.css( 'cursor', 'move' );\n\t\t\t\n\n\t\t\t//Mouse event\n\t\t\t$dragDropTrigger.on( 'mousedown', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( $obj.data( 'flexslider' ).animating ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$( this ).addClass( 'is-dragging' );\n\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( e.pageX ) );\n\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( e.pageY ) );\n\t\t\t\t\n\t\t\t} ).on( 'mouseup', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( $obj.data('flexslider').animating ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$( this ).removeClass( 'is-dragging' );\n\t\t\t\tlet origin_mouse_x = $( this ).data( 'origin_mouse_x' ),\n\t\t\t\t\torigin_mouse_y = $( this ).data( 'origin_mouse_y' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( 'horizontal' === $obj.data( 'flexslider' ).vars.direction ) {\n\t\t\t\t\t\n\t\t\t\t\t//right\n\t\t\t\t\tif ( e.pageX > origin_mouse_x ) {\n\t\t\t\t\t\t$obj.flexslider( 'prev' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//left\n\t\t\t\t\tif ( e.pageX < origin_mouse_x ) {\n\t\t\t\t\t\t$obj.flexslider( 'next' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\n\t\t\t\t\t//down\n\t\t\t\t\tif ( e.pageY > origin_mouse_y ) {\n\t\t\t\t\t\t$obj.flexslider( 'prev' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//up\n\t\t\t\t\tif ( e.pageY < origin_mouse_y ) {\n\t\t\t\t\t\t$obj.flexslider( 'next' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t} );\n\t\t\t\n\t\t\t\n        }\n\n\t\t\n\t\t/*\n\t\t *  Scroll The Slider With Mousewheel\n\t\t *\n\t\t * @param  {Element} $obj            - The current FlexSlider setup using custom selector.\n\t\t * @return {Void}\n\t\t */\n        function slidesExMousewheel( $obj ) {\n\n\t\t\tlet timer    = null,\n\t\t\t\twheeling = false;\n\n            \n\t\t\t$obj[0].addEventListener( 'wheel', function( e ) {\n\n\t\t\t\t//Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t\t\tconst delta = Math.max(-1, Math.min(1, (-e.deltaY)));\n\n\t\t\t\tif ( timer ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\t\t\t}\n\n\t\t\t\tif ( !wheeling ) {\n\t\t\t\t\t\n\t\t\t\t\tif( delta < 0 ) { \n\t\t\t\t\t\t//scroll down\n\t\t\t\t\t\t$obj.flexslider( 'next' );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//scroll up\n\t\t\t\t\t\t$obj.flexslider( 'prev' );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\twheeling = true;\n\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\twheeling = false;\n\t\t\t\t}, 60 );\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t}, browser.supportsPassive ? { passive: true } : false );\n\n\t\t\t\n\t\t\t\n        }\t\n\t\t\n\n\t\t\n\t\t\n\t\t/*\n\t\t * Slider With Thumbnail ControlNav Pattern\n\t\t *\n\t\t * @param  {Element} slider           - The current slider.\n\t\t * @param  {String} navThumbClass    - Class name of thumbnail controlNav.\n\t\t * @return {Void}\n\t\t */\n        function initslidesWithNavThumb( slider, navThumbClass ) {\n\n\t\t\t\t$( '.uix-flexslider__thumbs'+navThumbClass+' > ul > li' ).off( 'click' ).on( 'click', function() {\n\n\t\t\t\t\t$( '.uix-flexslider__thumbs'+navThumbClass+' > ul > li' ).removeClass( 'is-active' );\n\t\t\t\t\t$( this ).addClass( 'is-active' );\n\t\t\t\t\tslider.flexslider( $( this ).index() );\n\n\t\t\t\t});\t\n\t\t\t\n        }\n\t\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t* Method that updates children slides\n\t\t* fortunately, since all the children are not animating,\n\t\t* they will only update if the main flexslider updates. \n\t\t *\n\t\t * @param  {Number} slideNumber          - The current slider index.\n\t\t * @param  {Element} childrenSlidesObj    - Target slider.\n\t\t * @param  {Boolean} loop                - Gives the slider a seamless infinite loop.\n\t\t * @param  {Number} speed                - Set the speed of animations, in milliseconds.\n\t\t * @param  {Number} timing               - Set the speed of the slideshow cycling, in milliseconds.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction updateChildrenSlides( slideNumber, childrenSlidesObj, loop, speed, timing ) {\n\t\t\t\n\t\t\t/** \n\t\t\t* Create the children flexsliders. Must be array of jquery objects with the\n\t\t\t* flexslider data. Easiest way is to place selector group in a var.\n\t\t\t*/\n\t\t\tlet childrenSlides = $( childrenSlidesObj ).flexslider({\n\t\t\t\tslideshow         : false, // Remove the animations\n\t\t\t\tcontrolNav        : false, // Remove the controls\n\t\t\t\tanimationLoop     : loop,\n\t\t\t\tanimationSpeed    : speed,\n\t\t\t\tslideshowSpeed    : timing\n\t\t\t}); \n\n\t\t\t\n\t\t\t// Iterate through the children slides but not past the max\n\t\t\tfor ( let i=0; i < childrenSlides.length; i++ ) {\n\t\t\t\t// Run the animate method on the child slide\n\t\t\t\t$( childrenSlides[i] ).data( 'flexslider' ).flexAnimate( slideNumber );\n\t\t\t}   \n\t\t}\n\t\t\n\n\t\t/*! \n\t\t ---------------------------\n         Initialize slideshow\n\t\t ---------------------------\n\t\t */\n\t\tconst $sliderDefault = $( '.uix-flexslider' );\n\t\t$sliderDefault.each( function()  {\n\t\t\tconst $this             = $( this );\n\t\n\t\t\tlet\tdataSpeed         = $this.data( 'speed' ),\n\t\t\t\tdataDrag          = $this.data( 'draggable' ),\n\t\t\t\tdataWheel         = $this.data( 'wheel' ),\n\t\t\t\tdataTiming        = $this.data( 'timing' ),\n\t\t\t\tdataLoop          = $this.data( 'loop' ),\n\t\t\t\tdataPrev          = $this.data( 'prev' ),\n\t\t\t\tdataNext          = $this.data( 'next' ),\n\t\t\t\tdataAnim          = $this.data( 'animation' ),\n\t\t\t\tdataPaging        = $this.data( 'paging' ),\n\t\t\t\tdataArrows        = $this.data( 'arrows' ),\n\t\t\t\tdataAuto          = $this.data( 'auto' ),\n\t\t\t\tdataNhumbs        = $this.data( 'my-nav-thumbs' ),\n\t\t\t\tdataPNThumbs      = $this.data( 'my-prev-next-thumbs' ),\n\t\t\t\tdataTimeline      = $this.data( 'my-nav-timeline' ),\n\t\t\t\tdataCountTotal    = $this.data( 'my-count-total' ),\n\t\t\t\tdataCountCur      = $this.data( 'my-count-now' ),\n\t\t\t\tcustomConID       = $this.data( 'my-controls' ),\n\t\t\t\tdataShowItems     = $this.data( 'my-multiple-items' ),\n\t\t\t\tdataShowItemsMove = $this.data( 'my-multiple-items-move' ),\n\t\t\t\tdataParallax      = $this.data( 'my-parallax' ),\n\t\t\t\tdataSync          = $this.data( 'my-sync' );\n\t\t\t\n\t\t\t\n\t\t\t//Fires local videos asynchronously with slider switch.\n\t\t\tvideoEmbedInit( $this.find( '.uix-flexslider__item' ), false );\n\t\t\t\n\t\t\t\n\t\t\t// Custom Controls\n\t\t\tlet myControlsContainer, myCustomDirectionNav;\n\t\t\tif ( typeof customConID === typeof undefined || customConID == '' || customConID == false ) {\n\t\t\t\tmyControlsContainer  = '';\n\t\t\t\tmyCustomDirectionNav = '';\n\t\t\t} else {\n\t\t\t\tmyControlsContainer  = $( '.uix-flexslider__mycontrols'+customConID+' .uix-flexslider__mycontrols__control-paging' );\n\t\t\t\tmyCustomDirectionNav = $( '.uix-flexslider__mycontrols'+customConID+' a' );\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Change the class naming of the page up and down buttons to support trigger events\n\t\t\t\tmyCustomDirectionNav.first().addClass( pluginNamespace + 'prev' );\n\t\t\t\tmyCustomDirectionNav.last().addClass( pluginNamespace + 'next' );\n\t\t\t}\n\n\t\t\t\n\t\t\t// If there is no data-xxx, save current source to it\n\t\t\tif ( typeof dataSpeed === typeof undefined ) dataSpeed = 600;\n\t\t\tif ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n\t\t\tif ( typeof dataLoop === typeof undefined ) dataLoop = true;\n\t\t\tif ( typeof dataPrev === typeof undefined ) dataPrev = \"<i class='fa fa-chevron-left'></i>\";\n\t\t\tif ( typeof dataNext === typeof undefined ) dataNext = \"<i class='fa fa-chevron-right'></i>\";\n\t\t\tif ( typeof dataAnim === typeof undefined ) dataAnim = 'slide';\n\t\t\tif ( typeof dataPaging === typeof undefined ) dataPaging = true;\n\t\t\tif ( typeof dataArrows === typeof undefined ) dataArrows = true;\n\t\t\tif ( typeof dataAuto === typeof undefined ) dataAuto = true;\n\t\t\tif ( typeof dataDrag === typeof undefined ) dataDrag = false;\n\t\t\tif ( typeof dataWheel === typeof undefined ) dataWheel = false;\n\t\t\tif ( typeof dataNhumbs === typeof undefined ) dataNhumbs = false;\n\t\t\tif ( typeof dataPNThumbs === typeof undefined ) dataPNThumbs = false;\n\t\t\tif ( typeof dataTimeline === typeof undefined ) dataTimeline = false;\n\t\t\tif ( typeof dataCountTotal === typeof undefined ) dataCountTotal = false;\n\t\t\tif ( typeof dataCountCur === typeof undefined ) dataCountCur = false;\n\t\t\tif ( typeof dataParallax === typeof undefined ) dataParallax = false;\n\t\t    if ( typeof dataShowItemsMove === typeof undefined ) dataShowItemsMove = 1;\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t//Make slider image draggable \n\t\t\tif ( dataDrag ) slidesExDraggable( $this );\n\n\t\t\t//Scroll The Slider With Mousewheel\n\t\t\tif ( dataWheel ) slidesExMousewheel( $this );\n\t\t\t\n\n\t\t\t//With Thumbnail ControlNav Pattern\n\t\t\tif ( dataNhumbs ) {\n\t\t\t\tinitslidesWithNavThumb( $this, dataNhumbs );\n\t\t\t\t//Prevent index error\n\t\t\t\tdataLoop = false;\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\t\n\t\t\t//Show number of items\n\t\t\tlet my_itemWidth = 0, \n\t\t\t\tmy_move      = dataShowItemsMove,\n\t\t\t\tmy_minItems  = 0,\n\t\t\t\tmy_maxItems  = 0;\n\t\t\t\n\t\t\tif ( typeof dataShowItems != typeof undefined && dataShowItems != '' && dataShowItems != 0 ) {\n\t\t\t\t\n\t\t\t    my_itemWidth = 1;\n\t\t\t\tmy_minItems  = getGridSize( dataShowItems );\n\t\t\t\tmy_maxItems  = getGridSize( dataShowItems );\n\t\t\t\t\n\t\t\t} \n\t\t\t\n\t\t\t\n\t\t\t// Determine if this slider is added with a synchronization event\n\t\t\t$( '[data-my-sync]' ).each( function()  {\n\t\t\t\tlet curSync      = $( this ).data( 'my-sync' );\n\t\t\t\tconst thisSliderID = $this.attr( 'id' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( typeof curSync != typeof undefined ) {\n\t\t\t\t\tcurSync = curSync.toString().replace( '#', '' ).replace( '.', '' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( typeof thisSliderID != typeof undefined && thisSliderID == curSync ) {\n\t\t\t\t\tdataAuto = false; //Set it not to scroll automatically\n\t\t\t\t\tdataPaging = false;\n\t\t\t\t\t\n\t\t\t\t\t// break out of jQuery each Loop\n\t\t\t\t\treturn false; \n\t\t\t\t}\n\n\n\t\t\t});\n\n\n\t\t\t$this.flexslider({\n\t\t\t\tnamespace\t      : pluginNamespace,\n\t\t\t\tanimation         : dataAnim,\n\t\t\t\tselector          : '.uix-flexslider__inner > div.uix-flexslider__item',\n\t\t\t\tcontrolNav        : dataPaging,\n\t\t\t\tsmoothHeight      : true,\n\t\t\t\tprevText          : dataPrev,\n\t\t\t\tnextText          : dataNext,\n\t\t\t\tanimationSpeed    : dataSpeed,\n\t\t\t\tslideshowSpeed    : dataTiming,\n\t\t\t\tslideshow         : dataAuto,\n\t\t\t\tanimationLoop     : dataLoop,\n\t\t\t\tdirectionNav      : dataArrows,\n\t\t\t    itemWidth         : my_itemWidth,\n\t\t\t\tmove              : my_move, // Number of carousel items that should move on animation.\n\t\t\t    minItems          : my_minItems, // use function to pull in initial value\n\t\t\t    maxItems          : my_maxItems, // use function to pull in initial value\n\t\t\t\tcontrolsContainer : myControlsContainer,\n\t\t\t\tcustomDirectionNav: myCustomDirectionNav,\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Fires when the slider loads the first slide.\n\t\t\t\tstart: function( slider ) {\n\t\t\t\t\t\n\t\t\t\t\t//set slider instance to flexslider variable\n\t\t\t\t\tif ( typeof dataShowItems != typeof undefined && dataShowItems != '' && dataShowItems != 0 ) {\n\t\t\t\t\t    flexslider = slider;\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tinitslides( $this, slider, 'start' );\n\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t//Fires asynchronously with each slider animation.\n\t\t\t\tbefore: function( slider ) {\n\t\t\t\t\tinitslides( $this, slider, 'before' );\n\t\t\t\t\t\n\t\t\t\t\t// Call the updateChildrenSlides which itterates through all children slides \n\t\t\t\t\tif ( typeof dataSync != typeof undefined && dataSync != '' && dataSync != 0 ) {\n\t\t\t\t\t\tupdateChildrenSlides( slider.animatingTo, dataSync, dataLoop, dataSpeed, dataTiming );\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t//Fires after each slider animation completes.\n\t\t\t\tafter: function( slider ) {\n\t\t\t\t\tinitslides( $this, slider, 'after' );\n\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t//Fires when the slider reaches the last slide (asynchronous).\n\t\t\t\tend: function( slider ) {\n\t\t\t\t\tinitslides( $this, slider, 'end' );\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\n\t\t\t\n\t\t});\n\t\t\n\n\t\t\n\t\t/*! \n\t\t ---------------------------\n         Check grid size on resize event\n\t\t ---------------------------\n\t\t */\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t$sliderDefault.each( function() {\n\t\t\t\t\t\n\t\t\t\t\tif ( $( this ).length > 0 ) {\n\n\t\t\t\t\t\t// check grid size on resize event\n\t\t\t\t\t\tconst dataShowItems = $( this ).data( 'my-multiple-items' );\n\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( typeof dataShowItems != typeof undefined && dataShowItems != '' && dataShowItems != 0 ) {\n\n\t\t\t\t\t\t\tconst gridSize = getGridSize( dataShowItems );\n\t\t\t\t\t\t\tflexslider.vars.minItems = gridSize;\n\t\t\t\t\t\t\tflexslider.vars.maxItems = gridSize;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t$( this ).data( 'flexslider' ).setup();\n\t\t\t\t\t}\t\t\t\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n    };\n\t\n    module.components.documentReady.push( module.FLEXSLIDER.documentReady );\n\t\n\n\treturn class FLEXSLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Floating Side Element -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const FLOATING_SIDE_EL = ( ( module, $, window, document ) => {\n\tif ( window.FLOATING_SIDE_EL === null ) return false;\n\t\n\t\n\t\n    module.FLOATING_SIDE_EL               = module.FLOATING_SIDE_EL || {};\n    module.FLOATING_SIDE_EL.version       = '0.0.6';\n    module.FLOATING_SIDE_EL.documentReady = function( $ ) {\n\n\n\t\t\n\t\tlet documentHeight  = 0,\n\t\t\t$floatingSideEl = $( '.uix-floating-side-el' ),\n\t\t\tfloatingOffset  = $floatingSideEl.offset();\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $floatingSideEl.length == 0 ) return false;\n\t\t\n\n\t\tdocumentHeight = $( document ).height();\n\t\t\n\t\t//Init position\n\t\tTweenMax.to( $floatingSideEl, 0.3, {\n\t\t\tcss: {\n\t\t\t\tmarginTop  : -floatingOffset.top + ( $( window ).height() - $floatingSideEl.height() )/2\n\t\t\t}\n\t\t});\t\n\t\t\n\n\t\t$( window ).off( 'scroll.FLOATING_SIDE_EL touchmove.FLOATING_SIDE_EL' ).on( 'scroll.FLOATING_SIDE_EL touchmove.FLOATING_SIDE_EL', function() {\n\t\t\tlet sideBarHeight = $floatingSideEl.height(),\n\t\t\t\tscrolled      = $( this ).scrollTop();\n            \n            documentHeight = $( document ).height();\n\n\t\t\tif ( scrolled > floatingOffset.top ) {\n\t\t\t\tlet newPosition = scrolled - floatingOffset.top,\n\t\t\t\t\tmaxPosition = documentHeight - sideBarHeight;\n\t\t\t\tif ( newPosition > maxPosition ) {\n\t\t\t\t\tnewPosition = maxPosition;\n\t\t\t\t}\n\n\t\t\t\tTweenMax.to( $floatingSideEl, 0.3, {\n\t\t\t\t\tcss: {\n\t\t\t\t\t\tmarginTop  : newPosition + ( window.innerHeight - sideBarHeight )/2\n\t\t\t\t\t}\n\t\t\t\t});\t\t\n\t\t\t} else {\n\n\t\t\t\tTweenMax.to( $floatingSideEl, 0.3, {\n\t\t\t\t\tcss: {\n\t\t\t\t\t\tmarginTop  : 0\n\t\t\t\t\t}\n\t\t\t\t});\t\n\t\t\t}\n\t\t});\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.FLOATING_SIDE_EL.documentReady );\n\t\n\n\treturn class FLOATING_SIDE_EL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Form Progress -->\n *************************************\n */\n\n/*\n    Note:\n\t\n\tIf you want to initialize the indicator to a location when the page is first run,\n\tyou need to call the following function:\n\t\n\t$( 'body' ).waitForImages().done(function() {\n\t\t$( document ).UixFormProgressToNext({ \n\t\t\t'selector'         : $( '.uix-form-progress__target .uix-form-progress__target__step' ),\n\t\t\t'formTarget'       : $( '.uix-form-progress__target' ),\n\t\t\t'indicator'        : '.uix-form-progress .uix-form-progress__indicator',\n\t\t\t'index'            : 0\n\t\t});\n\t});\n\n\n*/\n\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixFormProgressToNext from '@uixkit/core/form-progress/js/fn/form-progress-to-next';\nimport ScrollToPlugin from '@uixkit/plugins/GSAP/ScrollToPlugin';\n\nimport '../scss/_style.scss';\n\n\nexport const FORM_PROGRESS = ( ( module, $, window, document ) => {\n\tif ( window.FORM_PROGRESS === null ) return false;\n\t\n\t\n    module.FORM_PROGRESS               = module.FORM_PROGRESS || {};\n    module.FORM_PROGRESS.version       = '0.0.5';\n    module.FORM_PROGRESS.pageLoaded    = function() {\n\n\t\tlet $progressBar   = $( '.uix-form-progress progress' ),\n\t\t\t$formTarget    = $( '.uix-form-progress__target' ),\n\t\t\t$indicator     = $( '.uix-form-progress .uix-form-progress__indicator' ),\n\t\t\tformAreaH      = $formTarget.height(),\n\t\t\tallStep        = $indicator.length,\n\t\t\tstepPerValue   = 100/( allStep - 1 ),\n\t\t\tvalue          = 0,\n\t\t\ttransitionEnd  = 'webkitTransitionEnd transitionend';\n\t\t\n\n\t\t//Get form transition speed\n\t\tlet dur = $formTarget.data( 'anime-speed' );\n\t\tif ( typeof dur === typeof undefined ) { \n\t\t\tdur = '0.5s';\n\t\t}\n\n\t\tconst durString  = dur.toString().toLowerCase(),\n\t\t\t  isMS       = durString.indexOf( 'ms' ) >= 0,\n\t\t\t  numberNum  = durString.replace( 'ms', '' ).replace( 's', '' ),\n\t\t\t  animeSpeed = isMS ? numberNum : numberNum * 1000;\n\t\n\t\t\n\t\t//Gets the party started.\n\t\tformReset();\n\t\t\n\t\t//Display the target\n\t\tsetTimeout( function() {\n\t\t\t$formTarget.addClass( 'is-active' );\n\t\t}, parseFloat( dur ) * 1000 );\n\t\t\n\n\t\t// Show next form on continue click\n\t\t$( document ).off( 'click.FORM_PROGRESS' ).on( 'click.FORM_PROGRESS', '.uix-form-progress__target .go-step:not(.disable)', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tconst $sections = $( this ).parents( '.uix-form-progress__target__step' );\n            \n\t\t\t$( document ).UixFormProgressToNext({ \n\t\t\t\t'selector'   : $( '.uix-form-progress__target .uix-form-progress__target__step' ),\n\t\t\t\t'formTarget' : $formTarget,\n\t\t\t\t'indicator'  : '.uix-form-progress .uix-form-progress__indicator',\n\t\t\t\t'index'      : $sections.index() + 1\n\t\t\t});\n\t\t\t\n\n\t\t\t//Scroll Top\n\t\t\tTweenMax.to( window, 0.5, {\n\t\t\t\tscrollTo: {\n\t\t\t\t\ty        : 0,\n\t\t\t\t\tautoKill : false\n\t\t\t\t},\n\t\t\t\tease: Power2.easeOut\n\t\t\t});\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\n\t\t// Reset form on reset button click\n\t\t$( document ).off( 'click.FORM_PROGRESS_RESET' ).on( 'click.FORM_PROGRESS_RESET', '.uix-form-progress__target .go-reset', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tformReset();\n\t\t});\n\t\t\n\n\t\t/*\n\t\t * Resets the form back to the default state.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction formReset() {\n\t\t\t\n\t\t\t$( document ).UixFormProgressToNext({ \n\t\t\t\t'selector'         : $( '.uix-form-progress__target .uix-form-progress__target__step' ),\n\t\t\t\t'formTarget'       : $( '.uix-form-progress__target' ),\n\t\t\t\t'indicator'        : '.uix-form-progress .uix-form-progress__indicator',\n\t\t\t\t'index'            : 0\n\t\t\t});\n\t\t\n\t\t\t\n\t\t}\n\t\t\t    \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.FORM_PROGRESS.pageLoaded );\n\t\n\n\treturn class FORM_PROGRESS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","import './jquery.mousewheel.esm';\n\n/*!\n * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2016\n * @version 1.3.4\n *\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\n * @see http://php.net/manual/en/function.date.php\n *\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */var DateFormatter;!function(){\"use strict\";var t,e,r,n,a,u,i;u=864e5,i=3600,t=function(t,e){return\"string\"==typeof t&&\"string\"==typeof e&&t.toLowerCase()===e.toLowerCase()},e=function(t,r,n){var a=n||\"0\",u=t.toString();return u.length<r?e(a+u,r):u},r=function(t){var e,n;for(t=t||{},e=1;e<arguments.length;e++)if(n=arguments[e])for(var a in n)n.hasOwnProperty(a)&&(\"object\"==typeof n[a]?r(t[a],n[a]):t[a]=n[a]);return t},n=function(t,e){for(var r=0;r<e.length;r++)if(e[r].toLowerCase()===t.toLowerCase())return r;return-1},a={dateSettings:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],meridiem:[\"AM\",\"PM\"],ordinal:function(t){var e=t%10,r={1:\"st\",2:\"nd\",3:\"rd\"};return 1!==Math.floor(t%100/10)&&r[e]?r[e]:\"th\"}},separators:/[ \\-+\\/\\.T:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,tzClip:/[^-+\\dA-Z]/g},DateFormatter=function(t){var e=this,n=r(a,t);e.dateSettings=n.dateSettings,e.separators=n.separators,e.validParts=n.validParts,e.intParts=n.intParts,e.tzParts=n.tzParts,e.tzClip=n.tzClip},DateFormatter.prototype={constructor:DateFormatter,getMonth:function(t){var e,r=this;return e=n(t,r.dateSettings.monthsShort)+1,0===e&&(e=n(t,r.dateSettings.months)+1),e},parseDate:function(e,r){var n,a,u,i,s,o,c,f,l,h,d=this,g=!1,m=!1,p=d.dateSettings,y={date:null,year:null,month:null,day:null,hour:0,min:0,sec:0};if(!e)return null;if(e instanceof Date)return e;if(\"U\"===r)return u=parseInt(e),u?new Date(1e3*u):e;switch(typeof e){case\"number\":return new Date(e);case\"string\":break;default:return null}if(n=r.match(d.validParts),!n||0===n.length)throw new Error(\"Invalid date format definition.\");for(a=e.replace(d.separators,\"\\x00\").split(\"\\x00\"),u=0;u<a.length;u++)switch(i=a[u],s=parseInt(i),n[u]){case\"y\":case\"Y\":if(!s)return null;l=i.length,y.year=2===l?parseInt((70>s?\"20\":\"19\")+i):s,g=!0;break;case\"m\":case\"n\":case\"M\":case\"F\":if(isNaN(s)){if(o=d.getMonth(i),!(o>0))return null;y.month=o}else{if(!(s>=1&&12>=s))return null;y.month=s}g=!0;break;case\"d\":case\"j\":if(!(s>=1&&31>=s))return null;y.day=s,g=!0;break;case\"g\":case\"h\":if(c=n.indexOf(\"a\")>-1?n.indexOf(\"a\"):n.indexOf(\"A\")>-1?n.indexOf(\"A\"):-1,h=a[c],c>-1)f=t(h,p.meridiem[0])?0:t(h,p.meridiem[1])?12:-1,s>=1&&12>=s&&f>-1?y.hour=s+f-1:s>=0&&23>=s&&(y.hour=s);else{if(!(s>=0&&23>=s))return null;y.hour=s}m=!0;break;case\"G\":case\"H\":if(!(s>=0&&23>=s))return null;y.hour=s,m=!0;break;case\"i\":if(!(s>=0&&59>=s))return null;y.min=s,m=!0;break;case\"s\":if(!(s>=0&&59>=s))return null;y.sec=s,m=!0}if(g===!0&&y.year&&y.month&&y.day)y.date=new Date(y.year,y.month-1,y.day,y.hour,y.min,y.sec,0);else{if(m!==!0)return null;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(t,e){if(\"string\"!=typeof t)return t;var r,n,a,u,i,s,o=this,c=t.replace(o.separators,\"\\x00\").split(\"\\x00\"),f=/^[djmn]/g,l=e.match(o.validParts),h=new Date,d=0;if(!f.test(l[0]))return t;for(a=0;a<c.length;a++){if(d=2,i=c[a],s=parseInt(i.substr(0,2)),isNaN(s))return null;switch(a){case 0:\"m\"===l[0]||\"n\"===l[0]?h.setMonth(s-1):h.setDate(s);break;case 1:\"m\"===l[0]||\"n\"===l[0]?h.setDate(s):h.setMonth(s-1);break;case 2:if(n=h.getFullYear(),r=i.length,d=4>r?r:4,n=parseInt(4>r?n.toString().substr(0,4-r)+i:i.substr(0,4)),!n)return null;h.setFullYear(n);break;case 3:h.setHours(s);break;case 4:h.setMinutes(s);break;case 5:h.setSeconds(s)}u=i.substr(d),u.length>0&&c.splice(a+1,0,u)}return h},parseFormat:function(t,r){var n,a=this,s=a.dateSettings,o=/\\\\?(.?)/gi,c=function(t,e){return n[t]?n[t]():e};return n={d:function(){return e(n.j(),2)},D:function(){return s.daysShort[n.w()]},j:function(){return r.getDate()},l:function(){return s.days[n.w()]},N:function(){return n.w()||7},w:function(){return r.getDay()},z:function(){var t=new Date(n.Y(),n.n()-1,n.j()),e=new Date(n.Y(),0,1);return Math.round((t-e)/u)},W:function(){var t=new Date(n.Y(),n.n()-1,n.j()-n.N()+3),r=new Date(t.getFullYear(),0,4);return e(1+Math.round((t-r)/u/7),2)},F:function(){return s.months[r.getMonth()]},m:function(){return e(n.n(),2)},M:function(){return s.monthsShort[r.getMonth()]},n:function(){return r.getMonth()+1},t:function(){return new Date(n.Y(),n.n(),0).getDate()},L:function(){var t=n.Y();return t%4===0&&t%100!==0||t%400===0?1:0},o:function(){var t=n.n(),e=n.W(),r=n.Y();return r+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return r.getFullYear()},y:function(){return n.Y().toString().slice(-2)},a:function(){return n.A().toLowerCase()},A:function(){var t=n.G()<12?0:1;return s.meridiem[t]},B:function(){var t=r.getUTCHours()*i,n=60*r.getUTCMinutes(),a=r.getUTCSeconds();return e(Math.floor((t+n+a+i)/86.4)%1e3,3)},g:function(){return n.G()%12||12},G:function(){return r.getHours()},h:function(){return e(n.g(),2)},H:function(){return e(n.G(),2)},i:function(){return e(r.getMinutes(),2)},s:function(){return e(r.getSeconds(),2)},u:function(){return e(1e3*r.getMilliseconds(),6)},e:function(){var t=/\\((.*)\\)/.exec(String(r))[1];return t||\"Coordinated Universal Time\"},I:function(){var t=new Date(n.Y(),0),e=Date.UTC(n.Y(),0),r=new Date(n.Y(),6),a=Date.UTC(n.Y(),6);return t-e!==r-a?1:0},O:function(){var t=r.getTimezoneOffset(),n=Math.abs(t);return(t>0?\"-\":\"+\")+e(100*Math.floor(n/60)+n%60,4)},P:function(){var t=n.O();return t.substr(0,3)+\":\"+t.substr(3,2)},T:function(){var t=(String(r).match(a.tzParts)||[\"\"]).pop().replace(a.tzClip,\"\");return t||\"UTC\"},Z:function(){return 60*-r.getTimezoneOffset()},c:function(){return\"Y-m-d\\\\TH:i:sP\".replace(o,c)},r:function(){return\"D, d M Y H:i:s O\".replace(o,c)},U:function(){return r.getTime()/1e3||0}},c(t,t)},formatDate:function(t,e){var r,n,a,u,i,s=this,o=\"\",c=\"\\\\\";if(\"string\"==typeof t&&(t=s.parseDate(t,e),!t))return null;if(t instanceof Date){for(a=e.length,r=0;a>r;r++)i=e.charAt(r),\"S\"!==i&&i!==c&&(r>0&&e.charAt(r-1)===c?o+=i:(u=s.parseFormat(i,t),r!==a-1&&s.intParts.test(i)&&\"S\"===e.charAt(r+1)&&(n=parseInt(u)||0,u+=s.dateSettings.ordinal(n)),o+=u));return o}return\"\"}}}();/**\n * @preserve jQuery DateTimePicker\n * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n * @author Chupurnov Valeriy (<chupurnov@gmail.com>)\n */\n\n\n\n(function( $ ) {\n \n\t'use strict';\n\n\tvar default_options  = {\n\t\ti18n: {\n\t\t\tar: { // Arabic\n\t\t\t\tmonths: [\n\t\t\t\t\t\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"مايو\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"ن\", \"ث\", \"ع\", \"خ\", \"ج\", \"س\", \"ح\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\", \"الأحد\"]\n\t\t\t},\n\t\t\tro: { // Romanian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sâ\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Duminică\", \"Luni\", \"Marţi\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\"]\n\t\t\t},\n\t\t\tid: { // Indonesian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Min\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"]\n\t\t\t},\n\t\t\tis: { // Icelandic\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janúar\", \"Febrúar\", \"Mars\", \"Apríl\", \"Maí\", \"Júní\", \"Júlí\", \"Ágúst\", \"September\", \"Október\", \"Nóvember\", \"Desember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sun\", \"Mán\", \"Þrið\", \"Mið\", \"Fim\", \"Fös\", \"Lau\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Sunnudagur\", \"Mánudagur\", \"Þriðjudagur\", \"Miðvikudagur\", \"Fimmtudagur\", \"Föstudagur\", \"Laugardagur\"]\n\t\t\t},\n\t\t\tbg: { // Bulgarian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\"]\n\t\t\t},\n\t\t\tfa: { // Persian/Farsi\n\t\t\t\tmonths: [\n\t\t\t\t\t'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"یک‌شنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنج‌شنبه\", \"جمعه\", \"شنبه\", \"یک‌شنبه\"]\n\t\t\t},\n\t\t\tru: { // Russian\n\t\t\t\tmonths: [\n\t\t\t\t\t'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"]\n\t\t\t},\n\t\t\tuk: { // Ukrainian\n\t\t\t\tmonths: [\n\t\t\t\t\t'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ндл\", \"Пнд\", \"Втр\", \"Срд\", \"Чтв\", \"Птн\", \"Сбт\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"]\n\t\t\t},\n\t\t\ten: { // English\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n\t\t\t},\n\t\t\tel: { // Ελληνικά\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\"]\n\t\t\t},\n\t\t\tde: { // German\n\t\t\t\tmonths: [\n\t\t\t\t\t'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"]\n\t\t\t},\n\t\t\tnl: { // Dutch\n\t\t\t\tmonths: [\n\t\t\t\t\t\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"]\n\t\t\t},\n\t\t\ttr: { // Turkish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"]\n\t\t\t},\n\t\t\tfr: { //French\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"]\n\t\t\t},\n\t\t\tes: { // Spanish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"]\n\t\t\t},\n\t\t\tth: { // Thai\n\t\t\t\tmonths: [\n\t\t\t\t\t'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"อาทิตย์\", \"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัส\", \"ศุกร์\", \"เสาร์\", \"อาทิตย์\"]\n\t\t\t},\n\t\t\tpl: { // Polish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"niedziela\", \"poniedziałek\", \"wtorek\", \"środa\", \"czwartek\", \"piątek\", \"sobota\"]\n\t\t\t},\n\t\t\tpt: { // Portuguese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\n\t\t\t},\n\t\t\tch: { // Simplified Chinese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tse: { // Swedish\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\",  \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tkm: { // Khmer (ភាសាខ្មែរ)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"មករា​\", \"កុម្ភៈ\", \"មិនា​\", \"មេសា​\", \"ឧសភា​\", \"មិថុនា​\", \"កក្កដា​\", \"សីហា​\", \"កញ្ញា​\", \"តុលា​\", \"វិច្ឆិកា\", \"ធ្នូ​\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\"អាទិ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហ​​\", \"សុក្រ​\", \"សៅរ៍\"],\n\t\t\t\tdayOfWeek: [\"អាទិត្យ​\", \"ច័ន្ទ​\", \"អង្គារ​\", \"ពុធ​\", \"ព្រហស្បតិ៍​\", \"សុក្រ​\", \"សៅរ៍\"]\n\t\t\t},\n\t\t\tkr: { // Korean\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\n\t\t\t},\n\t\t\tit: { // Italian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"]\n\t\t\t},\n\t\t\tda: { // Dansk\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"]\n\t\t\t},\n\t\t\tno: { // Norwegian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']\n\t\t\t},\n\t\t\tja: { // Japanese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"日曜\", \"月曜\", \"火曜\", \"水曜\", \"木曜\", \"金曜\", \"土曜\"]\n\t\t\t},\n\t\t\tvi: { // Vietnamese\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Tháng 1\", \"Tháng 2\", \"Tháng 3\", \"Tháng 4\", \"Tháng 5\", \"Tháng 6\", \"Tháng 7\", \"Tháng 8\", \"Tháng 9\", \"Tháng 10\", \"Tháng 11\", \"Tháng 12\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"CN\", \"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Chủ nhật\", \"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\"]\n\t\t\t},\n\t\t\tsl: { // Slovenščina\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"]\n\t\t\t},\n\t\t\tcs: { // Čeština\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"\n\t\t\t\t]\n\t\t\t},\n\t\t\thu: { // Hungarian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Cs\", \"Pé\", \"Szo\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"vasárnap\", \"hétfő\", \"kedd\", \"szerda\", \"csütörtök\", \"péntek\", \"szombat\"]\n\t\t\t},\n\t\t\taz: { //Azerbaijanian (Azeri)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avqust\", \"Sentyabr\", \"Oktyabr\", \"Noyabr\", \"Dekabr\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"B\", \"Be\", \"Ça\", \"Ç\", \"Ca\", \"C\", \"Ş\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Bazar\", \"Bazar ertəsi\", \"Çərşənbə axşamı\", \"Çərşənbə\", \"Cümə axşamı\", \"Cümə\", \"Şənbə\"]\n\t\t\t},\n\t\t\tbs: { //Bosanski\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Nedjelja\",\"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\n\t\t\t},\n\t\t\tca: { //Català\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"]\n\t\t\t},\n\t\t\t'en-GB': { //English (British)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n\t\t\t},\n\t\t\tet: { //\"Eesti\"\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Jaanuar\", \"Veebruar\", \"Märts\", \"Aprill\", \"Mai\", \"Juuni\", \"Juuli\", \"August\", \"September\", \"Oktoober\", \"November\", \"Detsember\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"P\", \"E\", \"T\", \"K\", \"N\", \"R\", \"L\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Pühapäev\", \"Esmaspäev\", \"Teisipäev\", \"Kolmapäev\", \"Neljapäev\", \"Reede\", \"Laupäev\"]\n\t\t\t},\n\t\t\teu: { //Euskara\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ig.\", \"Al.\", \"Ar.\", \"Az.\", \"Og.\", \"Or.\", \"La.\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']\n\t\t\t},\n\t\t\tfi: { //Finnish (Suomi)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"]\n\t\t\t},\n\t\t\tgl: { //Galego\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Xan\", \"Feb\", \"Maz\", \"Abr\", \"Mai\", \"Xun\", \"Xul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dec\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Xov\", \"Ven\", \"Sab\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Luns\", \"Martes\", \"Mércores\", \"Xoves\", \"Venres\", \"Sábado\"]\n\t\t\t},\n\t\t\thr: { //Hrvatski\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"]\n\t\t\t},\n\t\t\tko: { //Korean (한국어)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\n\t\t\t},\n\t\t\tlt: { //Lithuanian (lietuvių)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sek\", \"Pir\", \"Ant\", \"Tre\", \"Ket\", \"Pen\", \"Šeš\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\"]\n\t\t\t},\n\t\t\tlv: { //Latvian (Latviešu)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis \", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sv\", \"Pr\", \"Ot\", \"Tr\", \"Ct\", \"Pk\", \"St\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\"]\n\t\t\t},\n\t\t\tmk: { //Macedonian (Македонски)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Недела\", \"Понеделник\", \"Вторник\", \"Среда\", \"Четврток\", \"Петок\", \"Сабота\"]\n\t\t\t},\n\t\t\tmn: { //Mongolian (Монгол)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1-р сар\", \"2-р сар\", \"3-р сар\", \"4-р сар\", \"5-р сар\", \"6-р сар\", \"7-р сар\", \"8-р сар\", \"9-р сар\", \"10-р сар\", \"11-р сар\", \"12-р сар\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Дав\", \"Мяг\", \"Лха\", \"Пүр\", \"Бсн\", \"Бям\", \"Ням\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Даваа\", \"Мягмар\", \"Лхагва\", \"Пүрэв\", \"Баасан\", \"Бямба\", \"Ням\"]\n\t\t\t},\n\t\t\t'pt-BR': { //Português(Brasil)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"]\n\t\t\t},\n\t\t\tsk: { //Slovenčina\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"]\n\t\t\t},\n\t\t\tsq: { //Albanian (Shqip)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Janar\", \"Shkurt\", \"Mars\", \"Prill\", \"Maj\", \"Qershor\", \"Korrik\", \"Gusht\", \"Shtator\", \"Tetor\", \"Nëntor\", \"Dhjetor\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Die\", \"Hën\", \"Mar\", \"Mër\", \"Enj\", \"Pre\", \"Shtu\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"E Diel\", \"E Hënë\", \"E Martē\", \"E Mërkurë\", \"E Enjte\", \"E Premte\", \"E Shtunë\"]\n\t\t\t},\n\t\t\t'sr-YU': { //Serbian (Srpski)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"čet\", \"Pet\", \"Sub\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Nedelja\",\"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvrtak\", \"Petak\", \"Subota\"]\n\t\t\t},\n\t\t\tsr: { //Serbian Cyrillic (Српски)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"јануар\", \"фебруар\", \"март\", \"април\", \"мај\", \"јун\", \"јул\", \"август\", \"септембар\", \"октобар\", \"новембар\", \"децембар\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"нед\", \"пон\", \"уто\", \"сре\", \"чет\", \"пет\", \"суб\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Недеља\",\"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\"]\n\t\t\t},\n\t\t\tsv: { //Svenska\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"]\n\t\t\t},\n\t\t\t'zh-TW': { //Traditional Chinese (繁體中文)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\n\t\t\t},\n\t\t\tzh: { //Simplified Chinese (简体中文)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"]\n\t\t\t},\n\t\t\tug:{ // Uyghur(ئۇيغۇرچە)\n\t\t\t\tmonths: [\n\t\t\t\t\t\"1-ئاي\",\"2-ئاي\",\"3-ئاي\",\"4-ئاي\",\"5-ئاي\",\"6-ئاي\",\"7-ئاي\",\"8-ئاي\",\"9-ئاي\",\"10-ئاي\",\"11-ئاي\",\"12-ئاي\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"يەكشەنبە\", \"دۈشەنبە\",\"سەيشەنبە\",\"چارشەنبە\",\"پەيشەنبە\",\"جۈمە\",\"شەنبە\"\n\t\t\t\t]\n\t\t\t},\n\t\t\the: { //Hebrew (עברית)\n\t\t\t\tmonths: [\n\t\t\t\t\t'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t'א\\'', 'ב\\'', 'ג\\'', 'ד\\'', 'ה\\'', 'ו\\'', 'שבת'\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\", \"ראשון\"]\n\t\t\t},\n\t\t\thy: { // Armenian\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Հունվար\", \"Փետրվար\", \"Մարտ\", \"Ապրիլ\", \"Մայիս\", \"Հունիս\", \"Հուլիս\", \"Օգոստոս\", \"Սեպտեմբեր\", \"Հոկտեմբեր\", \"Նոյեմբեր\", \"Դեկտեմբեր\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Կի\", \"Երկ\", \"Երք\", \"Չոր\", \"Հնգ\", \"Ուրբ\", \"Շբթ\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"Կիրակի\", \"Երկուշաբթի\", \"Երեքշաբթի\", \"Չորեքշաբթի\", \"Հինգշաբթի\", \"Ուրբաթ\", \"Շաբաթ\"]\n\t\t\t},\n\t\t\tkg: { // Kyrgyz\n\t\t\t\tmonths: [\n\t\t\t\t\t'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Жек\", \"Дүй\", \"Шей\", \"Шар\", \"Бей\", \"Жум\", \"Ише\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Жекшемб\", \"Дүйшөмб\", \"Шейшемб\", \"Шаршемб\", \"Бейшемби\", \"Жума\", \"Ишенб\"\n\t\t\t\t]\n\t\t\t},\n\t\t\trm: { // Romansh\n\t\t\t\tmonths: [\n\t\t\t\t\t\"Schaner\", \"Favrer\", \"Mars\", \"Avrigl\", \"Matg\", \"Zercladur\", \"Fanadur\", \"Avust\", \"Settember\", \"October\", \"November\", \"December\"\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"Du\", \"Gli\", \"Ma\", \"Me\", \"Gie\", \"Ve\", \"So\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\n\t\t\t\t\t\"Dumengia\", \"Glindesdi\", \"Mardi\", \"Mesemna\", \"Gievgia\", \"Venderdi\", \"Sonda\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tka: { // Georgian\n\t\t\t\tmonths: [\n\t\t\t\t\t'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'\n\t\t\t\t],\n\t\t\t\tdayOfWeekShort: [\n\t\t\t\t\t\"კვ\", \"ორშ\", \"სამშ\", \"ოთხ\", \"ხუთ\", \"პარ\", \"შაბ\"\n\t\t\t\t],\n\t\t\t\tdayOfWeek: [\"კვირა\", \"ორშაბათი\", \"სამშაბათი\", \"ოთხშაბათი\", \"ხუთშაბათი\", \"პარასკევი\", \"შაბათი\"]\n\t\t\t}\n\t\t},\n\n\t\townerDocument: document,\n\t\tcontentWindow: window,\n\n\t\tvalue: '',\n\t\trtl: false,\n\n\t\tformat:\t'Y/m/d H:i',\n\t\tformatTime:\t'H:i',\n\t\tformatDate:\t'Y/m/d',\n\n\t\tstartDate:\tfalse, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',\n\t\tstep: 60,\n\t\tmonthChangeSpinner: true,\n\n\t\tcloseOnDateSelect: false,\n\t\tcloseOnTimeSelect: true,\n\t\tcloseOnWithoutClick: true,\n\t\tcloseOnInputClick: true,\n\t\topenOnFocus: true,\n\n\t\ttimepicker: true,\n\t\tdatepicker: true,\n\t\tweeks: false,\n\n\t\tdefaultTime: false,\t// use formatTime format (ex. '10:00' for formatTime:\t'H:i')\n\t\tdefaultDate: false,\t// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')\n\n\t\tminDate: false,\n\t\tmaxDate: false,\n\t\tminTime: false,\n\t\tmaxTime: false,\n\t\tminDateTime: false,\n\t\tmaxDateTime: false,\n\n\t\tallowTimes: [],\n\t\topened: false,\n\t\tinitTime: true,\n\t\tinline: false,\n\t\ttheme: '',\n\t\ttouchMovedThreshold: 5,\n\n\t\tonSelectDate: function () {},\n\t\tonSelectTime: function () {},\n\t\tonChangeMonth: function () {},\n\t\tonGetWeekOfYear: function () {},\n\t\tonChangeYear: function () {},\n\t\tonChangeDateTime: function () {},\n\t\tonShow: function () {},\n\t\tonClose: function () {},\n\t\tonGenerate: function () {},\n\n\t\twithoutCopyright: true,\n\t\tinverseButton: false,\n\t\thours12: false,\n\t\tnext: 'xdsoft_next',\n\t\tprev : 'xdsoft_prev',\n\t\tdayOfWeekStart: 0,\n\t\tparentID: 'body',\n\t\ttimeHeightInTimePicker: 25,\n\t\ttimepickerScrollbar: true,\n\t\ttodayButton: true,\n\t\tprevButton: true,\n\t\tnextButton: true,\n\t\tdefaultSelect: true,\n\n\t\tscrollMonth: true,\n\t\tscrollTime: true,\n\t\tscrollInput: true,\n\n\t\tlazyInit: false,\n\t\tmask: false,\n\t\tvalidateOnBlur: true,\n\t\tallowBlank: true,\n\t\tyearStart: 1950,\n\t\tyearEnd: 2050,\n\t\tmonthStart: 0,\n\t\tmonthEnd: 11,\n\t\tstyle: '',\n\t\tid: '',\n\t\tfixed: false,\n\t\troundTime: 'round', // ceil, floor\n\t\tclassName: '',\n\t\tweekends: [],\n\t\thighlightedDates: [],\n\t\thighlightedPeriods: [],\n\t\tallowDates : [],\n\t\tallowDateRe : null,\n\t\tdisabledDates : [],\n\t\tdisabledWeekDays: [],\n\t\tyearOffset: 0,\n\t\tbeforeShowDay: null,\n\n\t\tenterLikeTab: true,\n        showApplyButton: false,\n        insideParent: false,\n\t};\n\n\tvar dateHelper = null,\n\t\tdefaultDateHelper = null,\n\t\tglobalLocaleDefault = 'en',\n\t\tglobalLocale = 'en';\n\n\tvar dateFormatterOptionsDefault = {\n\t\tmeridiem: ['AM', 'PM']\n\t};\n\n\tvar initDateFormatter = function(){\n\t\tvar locale = default_options.i18n[globalLocale],\n\t\t\topts = {\n\t\t\t\tdays: locale.dayOfWeek,\n\t\t\t\tdaysShort: locale.dayOfWeekShort,\n\t\t\t\tmonths: locale.months,\n\t\t\t\tmonthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) })\n\t\t\t};\n\n\t\tif (typeof DateFormatter === 'function') {\n\t\t\tdateHelper = defaultDateHelper = new DateFormatter({\n\t\t\t\tdateSettings: $.extend({}, dateFormatterOptionsDefault, opts)\n\t\t\t});\n\t\t}\n\t};\n\n\tvar dateFormatters = {\n\t\tmoment: {\n\t\t\tdefault_options:{\n\t\t\t\tformat: 'YYYY/MM/DD HH:mm',\n\t\t\t\tformatDate: 'YYYY/MM/DD',\n\t\t\t\tformatTime: 'HH:mm',\n\t\t\t},\n\t\t\tformatter: {\n\t\t\t\tparseDate: function (date, format) {\n\t\t\t\t\tif(isFormatStandard(format)){\n\t\t\t\t\t\treturn defaultDateHelper.parseDate(date, format);\n\t\t\t\t\t} \n\t\t\t\t\tvar d = moment(date, format);\n\t\t\t\t\treturn d.isValid() ? d.toDate() : false;\n\t\t\t\t},\n\n\t\t\t\tformatDate: function (date, format) {\n\t\t\t\t\tif(isFormatStandard(format)){\n\t\t\t\t\t\treturn defaultDateHelper.formatDate(date, format);\n\t\t\t\t\t} \n\t\t\t\t\treturn moment(date).format(format);\n\t\t\t\t},\n\n\t\t\t\tformatMask: function(format){\n\t\t\t\t\treturn format\n\t\t\t\t\t\t.replace(/Y{4}/g, '9999')\n\t\t\t\t\t\t.replace(/Y{2}/g, '99')\n\t\t\t\t\t\t.replace(/M{2}/g, '19')\n\t\t\t\t\t\t.replace(/D{2}/g, '39')\n\t\t\t\t\t\t.replace(/H{2}/g, '29')\n\t\t\t\t\t\t.replace(/m{2}/g, '59')\n\t\t\t\t\t\t.replace(/s{2}/g, '59');\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\t// for locale settings\n\t$.datetimepicker = {\n\t\tsetLocale: function(locale){\n\t\t\tvar newLocale = default_options.i18n[locale] ? locale : globalLocaleDefault;\n\t\t\tif (globalLocale !== newLocale) {\n\t\t\t\tglobalLocale = newLocale;\n\t\t\t\t// reinit date formatter\n\t\t\t\tinitDateFormatter();\n\t\t\t}\n\t\t},\n\n\t\tsetDateFormatter: function(dateFormatter) {\n\t\t\tif(typeof dateFormatter === 'string' && dateFormatters.hasOwnProperty(dateFormatter)){\n\t\t\t\tvar df = dateFormatters[dateFormatter];\n\t\t\t\t$.extend(default_options, df.default_options);\n\t\t\t\tdateHelper = df.formatter; \n\t\t\t}\n\t\t\telse {\n\t\t\t\tdateHelper = dateFormatter;\n\t\t\t}\n\t\t},\n\t};\n\n\tvar standardFormats = {\n\t\tRFC_2822: 'D, d M Y H:i:s O',\n\t\tATOM: 'Y-m-d\\TH:i:sP',\n\t\tISO_8601: 'Y-m-d\\TH:i:sO',\n\t\tRFC_822: 'D, d M y H:i:s O',\n\t\tRFC_850: 'l, d-M-y H:i:s T',\n\t\tRFC_1036: 'D, d M y H:i:s O',\n\t\tRFC_1123: 'D, d M Y H:i:s O',\n\t\tRSS: 'D, d M Y H:i:s O',\n\t\tW3C: 'Y-m-d\\TH:i:sP'\n\t}\n\n\tvar isFormatStandard = function(format){\n\t\treturn Object.values(standardFormats).indexOf(format) === -1 ? false : true;\n\t}\n\n\t$.extend($.datetimepicker, standardFormats);\n\n\t// first init date formatter\n\tinitDateFormatter();\n\n\t// fix for ie8\n\tif (!window.getComputedStyle) {\n\t\twindow.getComputedStyle = function (el) {\n\t\t\tthis.el = el;\n\t\t\tthis.getPropertyValue = function (prop) {\n\t\t\t\tvar re = /(-([a-z]))/g;\n\t\t\t\tif (prop === 'float') {\n\t\t\t\t\tprop = 'styleFloat';\n\t\t\t\t}\n\t\t\t\tif (re.test(prop)) {\n\t\t\t\t\tprop = prop.replace(re, function (a, b, c) {\n\t\t\t\t\t\treturn c.toUpperCase();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn el.currentStyle[prop] || null;\n\t\t\t};\n\t\t\treturn this;\n\t\t};\n\t}\n\tif (!Array.prototype.indexOf) {\n\t\tArray.prototype.indexOf = function (obj, start) {\n\t\t\tvar i, j;\n\t\t\tfor (i = (start || 0), j = this.length; i < j; i += 1) {\n\t\t\t\tif (this[i] === obj) { return i; }\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\t}\n\n\tDate.prototype.countDaysInMonth = function () {\n\t\treturn new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();\n\t};\n\n\t$.fn.xdsoftScroller = function (options, percent) {\n\t\treturn this.each(function () {\n\t\t\tvar timeboxparent = $(this),\n\t\t\t\tpointerEventToXY = function (e) {\n\t\t\t\t\tvar out = {x: 0, y: 0},\n\t\t\t\t\t\ttouch;\n\t\t\t\t\tif (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {\n\t\t\t\t\t\ttouch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n\t\t\t\t\t\tout.x = touch.clientX;\n\t\t\t\t\t\tout.y = touch.clientY;\n\t\t\t\t\t} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {\n\t\t\t\t\t\tout.x = e.clientX;\n\t\t\t\t\t\tout.y = e.clientY;\n\t\t\t\t\t}\n\t\t\t\t\treturn out;\n\t\t\t\t},\n\t\t\t\ttimebox,\n\t\t\t\tparentHeight,\n\t\t\t\theight,\n\t\t\t\tscrollbar,\n\t\t\t\tscroller,\n\t\t\t\tmaximumOffset = 100,\n\t\t\t\tstart = false,\n\t\t\t\tstartY = 0,\n\t\t\t\tstartTop = 0,\n\t\t\t\th1 = 0,\n\t\t\t\ttouchStart = false,\n\t\t\t\tstartTopScroll = 0,\n\t\t\t\tcalcOffset = function () {};\n\n\t\t\tif (percent === 'hide') {\n\t\t\t\ttimeboxparent.find('.xdsoft_scrollbar').hide();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!$(this).hasClass('xdsoft_scroller_box')) {\n\t\t\t\ttimebox = timeboxparent.children().eq(0);\n\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\tscrollbar = $('<div class=\"xdsoft_scrollbar\"></div>');\n\t\t\t\tscroller = $('<div class=\"xdsoft_scroller\"></div>');\n\t\t\t\tscrollbar.append(scroller);\n\n\t\t\t\ttimeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n\t\t\t\tcalcOffset = function calcOffset(event) {\n\t\t\t\t\tvar offset = pointerEventToXY(event).y - startY + startTopScroll;\n\t\t\t\t\tif (offset < 0) {\n\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (offset + scroller[0].offsetHeight > h1) {\n\t\t\t\t\t\toffset = h1 - scroller[0].offsetHeight;\n\t\t\t\t\t}\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n\t\t\t\t};\n\n\t\t\t\tscroller\n\t\t\t\t\t.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {\n\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstartY = pointerEventToXY(event).y;\n\t\t\t\t\t\tstartTopScroll = parseInt(scroller.css('margin-top'), 10);\n\t\t\t\t\t\th1 = scrollbar[0].offsetHeight;\n\n\t\t\t\t\t\tif (event.type === 'mousedown' || event.type === 'touchstart') {\n\t\t\t\t\t\t\tif (options.ownerDocument) {\n\t\t\t\t\t\t\t\t$(options.ownerDocument.body).addClass('xdsoft_noselect');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft_scroller', arguments_callee)\n\t\t\t\t\t\t\t\t\t.off('mousemove.xdsoft_scroller', calcOffset)\n\t\t\t\t\t\t\t\t\t.removeClass('xdsoft_noselect');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$(options.ownerDocument.body).on('mousemove.xdsoft_scroller', calcOffset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouchStart = true;\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('touchmove', function (event) {\n\t\t\t\t\t\tif (touchStart) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tcalcOffset(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('touchend touchcancel', function () {\n\t\t\t\t\t\ttouchStart =  false;\n\t\t\t\t\t\tstartTopScroll = 0;\n\t\t\t\t\t});\n\n\t\t\t\ttimeboxparent\n\t\t\t\t\t.on('scroll_element.xdsoft_scroller', function (event, percentage) {\n\t\t\t\t\t\tif (!parentHeight) {\n\t\t\t\t\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpercentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;\n\n\t\t\t\t\t\tscroller.css('margin-top', maximumOffset * percentage);\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\ttimebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t})\n\t\t\t\t\t.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {\n\t\t\t\t\t\tvar percent, sh;\n\t\t\t\t\t\tparentHeight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\tpercent = parentHeight / height;\n\t\t\t\t\t\tsh = percent * scrollbar[0].offsetHeight;\n\t\t\t\t\t\tif (percent > 1) {\n\t\t\t\t\t\t\tscroller.hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscroller.show();\n\t\t\t\t\t\t\tscroller.css('height', parseInt(sh > 10 ? sh : 10, 10));\n\t\t\t\t\t\t\tmaximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n\t\t\t\t\t\t\tif (noTriggerScroll !== true) {\n\t\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('mousewheel', function (event) {\n\t\t\t\t\tvar top = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\n\t\t\t\t\ttop = top - (event.deltaY * 20);\n\t\t\t\t\tif (top < 0) {\n\t\t\t\t\t\ttop = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchstart', function (event) {\n\t\t\t\t\tstart = pointerEventToXY(event);\n\t\t\t\t\tstartTop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchmove', function (event) {\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar coord = pointerEventToXY(event);\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttimeboxparent.on('touchend touchcancel', function () {\n\t\t\t\t\tstart = false;\n\t\t\t\t\tstartTop = 0;\n\t\t\t\t});\n\t\t\t}\n\t\t\ttimeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);\n\t\t});\n\t};\n\n\t$.fn.datetimepicker = function (opt, opt2) {\n\t\tvar result = this,\n\t\t\tKEY0 = 48,\n\t\t\tKEY9 = 57,\n\t\t\t_KEY0 = 96,\n\t\t\t_KEY9 = 105,\n            CTRLKEY = 17,\n            CMDKEY = 91,\n\t\t\tDEL = 46,\n\t\t\tENTER = 13,\n\t\t\tESC = 27,\n\t\t\tBACKSPACE = 8,\n\t\t\tARROWLEFT = 37,\n\t\t\tARROWUP = 38,\n\t\t\tARROWRIGHT = 39,\n\t\t\tARROWDOWN = 40,\n\t\t\tTAB = 9,\n\t\t\tF5 = 116,\n\t\t\tAKEY = 65,\n\t\t\tCKEY = 67,\n\t\t\tVKEY = 86,\n\t\t\tZKEY = 90,\n\t\t\tYKEY = 89,\n            ctrlDown\t=\tfalse,\n            cmdDown = false,\n\t\t\toptions = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),\n\n\t\t\tlazyInitTimer = 0,\n\t\t\tcreateDateTimePicker,\n\t\t\tdestroyDateTimePicker,\n\n\t\t\tlazyInit = function (input) {\n\t\t\t\tinput\n\t\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback() {\n\t\t\t\t\t\tif (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearTimeout(lazyInitTimer);\n\t\t\t\t\t\tlazyInitTimer = setTimeout(function () {\n\n\t\t\t\t\t\t\tif (!input.data('xdsoft_datetimepicker')) {\n\t\t\t\t\t\t\t\tcreateDateTimePicker(input);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinput\n\t\t\t\t\t\t\t\t.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)\n\t\t\t\t\t\t\t\t.trigger('open.xdsoft');\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t});\n\t\t\t};\n\n\t\tcreateDateTimePicker = function (input) {\n\t\t\tvar datetimepicker = $('<div class=\"xdsoft_datetimepicker xdsoft_noselect\"></div>'),\n\t\t\t\txdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n\t\t\t\tdatepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n\t\t\t\tmonth_picker = $('<div class=\"xdsoft_monthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button>' +\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_month\"><span></span><i></i></div>' +\n\t\t\t\t\t'<div class=\"xdsoft_label xdsoft_year\"><span></span><i></i></div>' +\n\t\t\t\t\t'<button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\tcalendar = $('<div class=\"xdsoft_calendar\"></div>'),\n\t\t\t\ttimepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n\t\t\t\ttimeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n\t\t\t\ttimebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n\t\t\t\tapplyButton = $('<button type=\"button\" class=\"xdsoft_save_selected blue-gradient-button\">Save Selected</button>'),\n\n\t\t\t\tmonthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n\t\t\t\tyearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>'),\n\t\t\t\ttriggerAfterOpen = false,\n\t\t\t\tXDSoft_datetime,\n\n\t\t\t\txchangeTimer,\n\t\t\t\ttimerclick,\n\t\t\t\tcurrent_time_index,\n\t\t\t\tsetPos,\n\t\t\t\ttimer = 0,\n\t\t\t\t_xdsoft_datetime,\n\t\t\t\tforEachAncestorOf;\n\n\t\t\tif (options.id) {\n\t\t\t\tdatetimepicker.attr('id', options.id);\n\t\t\t}\n\t\t\tif (options.style) {\n\t\t\t\tdatetimepicker.attr('style', options.style);\n\t\t\t}\n\t\t\tif (options.weeks) {\n\t\t\t\tdatetimepicker.addClass('xdsoft_showweeks');\n\t\t\t}\n\t\t\tif (options.rtl) {\n\t\t\t\tdatetimepicker.addClass('xdsoft_rtl');\n\t\t\t}\n\n\t\t\tdatetimepicker.addClass('xdsoft_' + options.theme);\n\t\t\tdatetimepicker.addClass(options.className);\n\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_month span')\n\t\t\t\t.after(monthselect);\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_year span')\n\t\t\t\t.after(yearselect);\n\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\n\t\t\t\t\tvar select = $(this).find('.xdsoft_select').eq(0),\n\t\t\t\t\t\tval = 0,\n\t\t\t\t\t\ttop = 0,\n\t\t\t\t\t\tvisible = select.is(':visible'),\n\t\t\t\t\t\titems,\n\t\t\t\t\t\ti;\n\n\t\t\t\t\tmonth_picker\n\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.hide();\n\t\t\t\t\tif (_xdsoft_datetime.currentTime) {\n\t\t\t\t\t\tval = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\t\t\t\t\t}\n\n\t\t\t\t\tselect[visible ? 'hide' : 'show']();\n\t\t\t\t\tfor (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {\n\t\t\t\t\t\tif (items.eq(i).data('value') === val) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttop += items[0].offsetHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tselect.xdsoftScroller(options, top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\tvar handleTouchMoved = function (event) {\n\t\t\t\tvar evt = event.originalEvent;\n\t\t\t\tvar touchPosition = evt.touches ? evt.touches[0] : evt;\n\t\t\t\tthis.touchStartPosition = this.touchStartPosition || touchPosition;\n\t\t\t\tvar xMovement = Math.abs(this.touchStartPosition.clientX - touchPosition.clientX);\n\t\t\t\tvar yMovement = Math.abs(this.touchStartPosition.clientY - touchPosition.clientY);\n\t\t\t\tvar distance = Math.sqrt(xMovement * xMovement + yMovement * yMovement);\n\t\t\t\tif(distance > options.touchMovedThreshold) {\n\t\t\t\t\tthis.touchMoved = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t.xdsoftScroller(options)\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\n\t\t\t\t\tvar evt = event.originalEvent;\n\t\t\t\t\tthis.touchMoved = false;\n\t\t\t\t\tthis.touchStartPosition = evt.touches ? evt.touches[0] : evt;\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t})\n\t\t\t\t.on('touchmove', '.xdsoft_option', handleTouchMoved)\n\t\t\t\t.on('touchend mousedown.xdsoft', '.xdsoft_option', function () {\n\t\t\t\t\tif (!this.touchMoved) {\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar year = _xdsoft_datetime.currentTime.getFullYear();\n\t\t\t\t\t\tif (_xdsoft_datetime && _xdsoft_datetime.currentTime) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(this).parent().parent().hide();\n\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tdatetimepicker.getValue = function () {\n\t\t\t\treturn _xdsoft_datetime.getCurrentTime();\n\t\t\t};\n\n\t\t\tdatetimepicker.setOptions = function (_options) {\n\t\t\t\tvar highlightedDates = {};\n\n\t\t\t\toptions = $.extend(true, {}, options, _options);\n\n\t\t\t\tif (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {\n\t\t\t\t\toptions.allowTimes = $.extend(true, [], _options.allowTimes);\n\t\t\t\t}\n\n\t\t\t\tif (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {\n\t\t\t\t\toptions.weekends = $.extend(true, [], _options.weekends);\n\t\t\t\t}\n\n\t\t\t\tif (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {\n\t\t\t\t\toptions.allowDates = $.extend(true, [], _options.allowDates);\n\t\t\t\t}\n\n\t\t\t\tif (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)===\"[object String]\") {\n\t\t\t\t\toptions.allowDateRe = new RegExp(_options.allowDateRe);\n\t\t\t\t}\n\n\t\t\t\tif (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {\n\t\t\t\t\t$.each(_options.highlightedDates, function (index, value) {\n\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim),\n\t\t\t\t\t\t\texDesc,\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(hDate.date, options.formatDate);\n\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\n\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\n\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\n\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\n\t\t\t\t}\n\n\t\t\t\tif (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {\n\t\t\t\t\thighlightedDates = $.extend(true, [], options.highlightedDates);\n\t\t\t\t\t$.each(_options.highlightedPeriods, function (index, value) {\n\t\t\t\t\t\tvar dateTest, // start date\n\t\t\t\t\t\t\tdateEnd,\n\t\t\t\t\t\t\tdesc,\n\t\t\t\t\t\t\thDate,\n\t\t\t\t\t\t\tkeyDate,\n\t\t\t\t\t\t\texDesc,\n\t\t\t\t\t\t\tstyle;\n\t\t\t\t\t\tif ($.isArray(value)) {\n\t\t\t\t\t\t\tdateTest = value[0];\n\t\t\t\t\t\t\tdateEnd = value[1];\n\t\t\t\t\t\t\tdesc = value[2];\n\t\t\t\t\t\t\tstyle = value[3];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar splitData = $.map(value.split(','), $.trim);\n\t\t\t\t\t\t\tdateTest = dateHelper.parseDate(splitData[0], options.formatDate);\n\t\t\t\t\t\t\tdateEnd = dateHelper.parseDate(splitData[1], options.formatDate);\n\t\t\t\t\t\t\tdesc = splitData[2];\n\t\t\t\t\t\t\tstyle = splitData[3];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (dateTest <= dateEnd) {\n\t\t\t\t\t\t\thDate = new HighlightedDate(dateTest, desc, style);\n\t\t\t\t\t\t\tkeyDate = dateHelper.formatDate(dateTest, options.formatDate);\n\t\t\t\t\t\t\tdateTest.setDate(dateTest.getDate() + 1);\n\t\t\t\t\t\t\tif (highlightedDates[keyDate] !== undefined) {\n\t\t\t\t\t\t\t\texDesc = highlightedDates[keyDate].desc;\n\t\t\t\t\t\t\t\tif (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {\n\t\t\t\t\t\t\t\t\thighlightedDates[keyDate].desc = exDesc + \"\\n\" + hDate.desc;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thighlightedDates[keyDate] = hDate;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\toptions.highlightedDates = $.extend(true, [], highlightedDates);\n\t\t\t\t}\n\n\t\t\t\tif (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {\n\t\t\t\t\toptions.disabledDates = $.extend(true, [], _options.disabledDates);\n\t\t\t\t}\n\n\t\t\t\tif (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {\n\t\t\t\t\toptions.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);\n\t\t\t\t}\n\n\t\t\t\tif ((options.open || options.opened) && (!options.inline)) {\n\t\t\t\t\tinput.trigger('open.xdsoft');\n\t\t\t\t}\n\n\t\t\t\tif (options.inline) {\n\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\tdatetimepicker.addClass('xdsoft_inline');\n\t\t\t\t\tinput.after(datetimepicker).hide();\n\t\t\t\t}\n\n\t\t\t\tif (options.inverseButton) {\n\t\t\t\t\toptions.next = 'xdsoft_prev';\n\t\t\t\t\toptions.prev = 'xdsoft_next';\n\t\t\t\t}\n\n\t\t\t\tif (options.datepicker) {\n\t\t\t\t\tdatepicker.addClass('active');\n\t\t\t\t} else {\n\t\t\t\t\tdatepicker.removeClass('active');\n\t\t\t\t}\n\n\t\t\t\tif (options.timepicker) {\n\t\t\t\t\ttimepicker.addClass('active');\n\t\t\t\t} else {\n\t\t\t\t\ttimepicker.removeClass('active');\n\t\t\t\t}\n\n\t\t\t\tif (options.value) {\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(options.value);\n\t\t\t\t\tif (input && input.val) {\n\t\t\t\t\t\tinput.val(_xdsoft_datetime.str);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isNaN(options.dayOfWeekStart)) {\n\t\t\t\t\toptions.dayOfWeekStart = 0;\n\t\t\t\t} else {\n\t\t\t\t\toptions.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;\n\t\t\t\t}\n\n\t\t\t\tif (!options.timepickerScrollbar) {\n\t\t\t\t\ttimeboxparent.xdsoftScroller(options, 'hide');\n\t\t\t\t}\n\n\t\t\t\tif (options.minDate && /^[\\+\\-](.*)$/.test(options.minDate)) {\n\t\t\t\t\toptions.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);\n\t\t\t\t}\n\n\t\t\t\tif (options.maxDate &&  /^[\\+\\-](.*)$/.test(options.maxDate)) {\n\t\t\t\t\toptions.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);\n\t\t\t\t}\n\n                if (options.minDateTime &&  /^\\+(.*)$/.test(options.minDateTime)) {\n                \toptions.minDateTime = _xdsoft_datetime.strToDateTime(options.minDateTime).dateFormat(options.formatDate);\n                }\n\n                if (options.maxDateTime &&  /^\\+(.*)$/.test(options.maxDateTime)) {\n                \toptions.maxDateTime = _xdsoft_datetime.strToDateTime(options.maxDateTime).dateFormat(options.formatDate);\n                }\n\n\t\t\t\tapplyButton.toggle(options.showApplyButton);\n\n\t\t\t\tmonth_picker\n\t\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t\t.css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n\t\t\t\tmonth_picker\n\t\t\t\t\t.find('.' + options.prev)\n\t\t\t\t\t.css('visibility', !options.prevButton ? 'hidden' : 'visible');\n\n\t\t\t\tmonth_picker\n\t\t\t\t\t.find('.' + options.next)\n\t\t\t\t\t.css('visibility', !options.nextButton ? 'hidden' : 'visible');\n\n\t\t\t\tsetMask(options);\n\n\t\t\t\tif (options.validateOnBlur) {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.off('blur.xdsoft')\n\t\t\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\t\t\tif (options.allowBlank && (!$.trim($(this).val()).length ||\n\t\t\t\t\t\t\t\t\t(typeof options.mask === \"string\" && $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_')))) {\n\t\t\t\t\t\t\t\t$(this).val(null);\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').empty();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar d = dateHelper.parseDate($(this).val(), options.format);\n\t\t\t\t\t\t\t\tif (d) { // parseDate() may skip some invalid parts like date or time, so make it clear for user: show parsed date/time\n\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(d, options.format));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar splittedHours   = +([$(this).val()[0], $(this).val()[1]].join('')),\n\t\t\t\t\t\t\t\t\t\tsplittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));\n\n\t\t\t\t\t\t\t\t\t// parse the numbers as 0312 => 03:12\n\t\t\t\t\t\t\t\t\tif (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {\n\t\t\t\t\t\t\t\t\t\t$(this).val([splittedHours, splittedMinutes].map(function (item) {\n\t\t\t\t\t\t\t\t\t\t\treturn item > 9 ? item : '0' + item;\n\t\t\t\t\t\t\t\t\t\t}).join(':'));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t$(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\toptions.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;\n\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.trigger('xchange.xdsoft')\n\t\t\t\t\t.trigger('afterOpen.xdsoft');\n\t\t\t};\n\n\t\t\tdatetimepicker\n\t\t\t\t.data('options', options)\n\t\t\t\t.on('touchstart mousedown.xdsoft', function (event) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tyearselect.hide();\n\t\t\t\t\tmonthselect.hide();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t//scroll_element = timepicker.find('.xdsoft_time_box');\n\t\t\ttimeboxparent.append(timebox);\n\t\t\ttimeboxparent.xdsoftScroller(options);\n\n\t\t\tdatetimepicker.on('afterOpen.xdsoft', function () {\n\t\t\t\ttimeboxparent.xdsoftScroller(options);\n\t\t\t});\n\n\t\t\tdatetimepicker\n\t\t\t\t.append(datepicker)\n\t\t\t\t.append(timepicker);\n\n\t\t\tif (options.withoutCopyright !== true) {\n\t\t\t\tdatetimepicker\n\t\t\t\t\t.append(xdsoft_copyright);\n\t\t\t}\n\n\t\t\tdatepicker\n\t\t\t\t.append(month_picker)\n\t\t\t\t.append(calendar)\n\t\t\t\t.append(applyButton);\n\n            if (options.insideParent) {\n                $(input).parent().append(datetimepicker);\n            } else {\n                $(options.parentID).append(datetimepicker);\n            }\n\n\t\t\tXDSoft_datetime = function () {\n\t\t\t\tvar _this = this;\n\t\t\t\t_this.now = function (norecursion) {\n\t\t\t\t\tvar d = new Date(),\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\ttime;\n\n\t\t\t\t\tif (!norecursion && options.defaultDate) {\n\t\t\t\t\t\tdate = _this.strToDateTime(options.defaultDate);\n\t\t\t\t\t\td.setFullYear(date.getFullYear());\n\t\t\t\t\t\td.setMonth(date.getMonth());\n\t\t\t\t\t\td.setDate(date.getDate());\n\t\t\t\t\t}\n\n\t\t\t\t\td.setFullYear(d.getFullYear());\n\n\t\t\t\t\tif (!norecursion && options.defaultTime) {\n\t\t\t\t\t\ttime = _this.strtotime(options.defaultTime);\n\t\t\t\t\t\td.setHours(time.getHours());\n\t\t\t\t\t\td.setMinutes(time.getMinutes());\n\t\t\t\t\t\td.setSeconds(time.getSeconds());\n\t\t\t\t\t\td.setMilliseconds(time.getMilliseconds());\n\t\t\t\t\t}\n\t\t\t\t\treturn d;\n\t\t\t\t};\n\n\t\t\t\t_this.isValidDate = function (d) {\n\t\t\t\t\tif (Object.prototype.toString.call(d) !== \"[object Date]\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn !isNaN(d.getTime());\n\t\t\t\t};\n\n\t\t\t\t_this.setCurrentTime = function (dTime, requireValidDate) {\n\t\t\t\t\tif (typeof dTime === 'string') {\n\t\t\t\t\t\t_this.currentTime = _this.strToDateTime(dTime);\n\t\t\t\t\t}\n\t\t\t\t\telse if (_this.isValidDate(dTime)) {\n\t\t\t\t\t\t_this.currentTime = dTime;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!dTime && !requireValidDate && options.allowBlank && !options.inline) {\n\t\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t_this.currentTime = _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t};\n\n\t\t\t\t_this.empty = function () {\n\t\t\t\t\t_this.currentTime = null;\n\t\t\t\t};\n\n\t\t\t\t_this.getCurrentTime = function () {\n\t\t\t\t\treturn _this.currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.nextMonth = function () {\n\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\n\t\t\t\t\t\t_this.currentTime = _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar month = _this.currentTime.getMonth() + 1,\n\t\t\t\t\t\tyear;\n\t\t\t\t\tif (month === 12) {\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tyear = _this.currentTime.getFullYear();\n\n\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t_this.currentTime.setMonth(month);\n\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {\n\t\t\t\t\t\toptions.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\treturn month;\n\t\t\t\t};\n\n\t\t\t\t_this.prevMonth = function () {\n\n\t\t\t\t\tif (_this.currentTime === undefined || _this.currentTime === null) {\n\t\t\t\t\t\t_this.currentTime = _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tvar month = _this.currentTime.getMonth() - 1;\n\t\t\t\t\tif (month === -1) {\n\t\t\t\t\t\t_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t}\n\t\t\t\t\t_this.currentTime.setDate(\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\tnew Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),\n\t\t\t\t\t\t\t_this.currentTime.getDate()\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t_this.currentTime.setMonth(month);\n\t\t\t\t\tif (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {\n\t\t\t\t\t\toptions.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\treturn month;\n\t\t\t\t};\n\n\t\t\t\t_this.getWeekOfYear = function (datetime) {\n\t\t\t\t\tif (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {\n\t\t\t\t\t\tvar week = options.onGetWeekOfYear.call(datetimepicker, datetime);\n\t\t\t\t\t\tif (typeof week !== 'undefined') {\n\t\t\t\t\t\t\treturn week;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar onejan = new Date(datetime.getFullYear(), 0, 1);\n\n\t\t\t\t\t//First week of the year is th one with the first Thursday according to ISO8601\n\t\t\t\t\tif (onejan.getDay() !== 4) {\n\t\t\t\t\t\tonejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);\n\t\t\t\t};\n\n\t\t\t\t_this.strToDateTime = function (sDateTime) {\n\t\t\t\t\tvar tmpDate = [], timeOffset, currentTime;\n\n\t\t\t\t\tif (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {\n\t\t\t\t\t\treturn sDateTime;\n\t\t\t\t\t}\n\n\t\t\t\t\ttmpDate = /^([+-]{1})(.*)$/.exec(sDateTime);\n\n\t\t\t\t\tif (tmpDate) {\n\t\t\t\t\t\ttmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tmpDate  && tmpDate[2]) {\n\t\t\t\t\t\ttimeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;\n\t\t\t\t\t\tcurrentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.strToDate = function (sDate) {\n\t\t\t\t\tif (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {\n\t\t\t\t\t\treturn sDate;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t}\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.strtotime = function (sTime) {\n\t\t\t\t\tif (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {\n\t\t\t\t\t\treturn sTime;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);\n\t\t\t\t\tif (!_this.isValidDate(currentTime)) {\n\t\t\t\t\t\tcurrentTime = _this.now(true);\n\t\t\t\t\t}\n\t\t\t\t\treturn currentTime;\n\t\t\t\t};\n\n\t\t\t\t_this.str = function () {\n\t\t\t\t\tvar format = options.format;\n\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\tformat = format.replace('Y', _this.currentTime.getFullYear() + options.yearOffset);\n\t\t\t\t\t\tformat = format.replace('y', String(_this.currentTime.getFullYear() + options.yearOffset).substring(2, 4));\n\t\t\t\t\t}\n\t\t\t\t\treturn dateHelper.formatDate(_this.currentTime, format);\n\t\t\t\t};\n\t\t\t\t_this.currentTime = this.now();\n\t\t\t};\n\n\t\t\t_xdsoft_datetime = new XDSoft_datetime();\n\n\t\t\tapplyButton.on('touchend click', function (e) {//pathbrite\n\t\t\t\te.preventDefault();\n\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t});\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_today_button')\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t_xdsoft_datetime.setCurrentTime(0, true);\n\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t}).on('dblclick.xdsoft', function () {\n\t\t\t\tvar currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;\n\t\t\t\tcurrentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\tif (currentDate < minDate) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());\n\t\t\t\tif (currentDate > maxDate) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\tinput.trigger('change');\n\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t});\n\t\t\tmonth_picker\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\tstop = false;\n\n\t\t\t\t\t(function arguments_callee1(v) {\n\t\t\t\t\t\tif ($this.hasClass(options.next)) {\n\t\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev)) {\n\t\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.monthChangeSpinner) {\n\t\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee1, v || 100);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}(500));\n\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee2() {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchend mouseup.xdsoft', arguments_callee2);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\ttimepicker\n\t\t\t\t.find('.xdsoft_prev,.xdsoft_next')\n\t\t\t\t.on('touchend mousedown.xdsoft', function () {\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\ttimer = 0,\n\t\t\t\t\t\tstop = false,\n\t\t\t\t\t\tperiod = 110;\n\t\t\t\t\t(function arguments_callee4(v) {\n\t\t\t\t\t\tvar pheight = timeboxparent[0].clientHeight,\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight,\n\t\t\t\t\t\t\ttop = Math.abs(parseInt(timebox.css('marginTop'), 10));\n\t\t\t\t\t\tif ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n\t\t\t\t\t\t\ttimebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Fixed bug:\n\t\t\t\t\t\t * When using css3 transition, it will cause a bug that you cannot scroll the timepicker list.\n\t\t\t\t\t\t * The reason is that the transition-duration time, if you set it to 0, all things fine, otherwise, this\n\t\t\t\t\t\t * would cause a bug when you use jquery.css method.\n\t\t\t\t\t\t * Let's say: * { transition: all .5s ease; }\n\t\t\t\t\t\t * jquery timebox.css('marginTop') will return the original value which is before you clicking the next/prev button,\n\t\t\t\t\t\t * meanwhile the timebox[0].style.marginTop will return the right value which is after you clicking the\n\t\t\t\t\t\t * next/prev button.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * What we should do:\n\t\t\t\t\t\t * Replace timebox.css('marginTop') with timebox[0].style.marginTop.\n\t\t\t\t\t\t */\n\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);\n\t\t\t\t\t\tperiod = (period > 10) ? 10 : period - 10;\n\t\t\t\t\t\tif (!stop) {\n\t\t\t\t\t\t\ttimer = setTimeout(arguments_callee4, v || period);\n\t\t\t\t\t\t}\n\t\t\t\t\t}(500));\n\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchend mouseup.xdsoft', function arguments_callee5() {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow])\n\t\t\t\t\t\t\t.off('touchend mouseup.xdsoft', arguments_callee5);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\txchangeTimer = 0;\n\t\t\t// base handler - generating a calendar and timepicker\n\t\t\tdatetimepicker\n\t\t\t\t.on('xchange.xdsoft', function (event) {\n\t\t\t\t\tclearTimeout(xchangeTimer);\n\t\t\t\t\txchangeTimer = setTimeout(function () {\n\n\t\t\t\t\t\tif (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar table =\t'',\n\t\t\t\t\t\t\tstart = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\ttoday = _xdsoft_datetime.now(),\n\t\t\t\t\t\t\tmaxDate = false,\n\t\t\t\t\t\t\tminDate = false,\n\t\t\t\t\t\t\tminDateTime = false,\n\t\t\t\t\t\t\tmaxDateTime = false,\n\t\t\t\t\t\t\thDate,\n\t\t\t\t\t\t\tday,\n\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\tw,\n\t\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\t\tcustomDateSettings,\n\t\t\t\t\t\t\tnewRow = true,\n\t\t\t\t\t\t\ttime = '',\n\t\t\t\t\t\t\th,\n\t\t\t\t\t\t\tline_time,\n\t\t\t\t\t\t\tdescription;\n\n\t\t\t\t\t\twhile (start.getDay() !== options.dayOfWeekStart) {\n\t\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable += '<table><thead><tr>';\n\n\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\ttable += '<th></th>';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (j = 0; j < 7; j += 1) {\n\t\t\t\t\t\t\ttable += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable += '</tr></thead>';\n\t\t\t\t\t\ttable += '<tbody>';\n\n\t\t\t\t\t\tif (options.maxDate !== false) {\n\t\t\t\t\t\t\tmaxDate = _xdsoft_datetime.strToDate(options.maxDate);\n\t\t\t\t\t\t\tmaxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.minDate !== false) {\n\t\t\t\t\t\t\tminDate = _xdsoft_datetime.strToDate(options.minDate);\n\t\t\t\t\t\t\tminDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n\t\t\t\t\t\t}\n\n                        if (options.minDateTime !== false) {\n\t\t\t\t\t\t\tminDateTime = _xdsoft_datetime.strToDate(options.minDateTime);\n\t\t\t\t\t\t\tminDateTime = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), minDateTime.getHours(), minDateTime.getMinutes(), minDateTime.getSeconds());\n\t\t\t\t\t\t}\n\n                        if (options.maxDateTime !== false) {\n\t\t\t\t\t\t\tmaxDateTime = _xdsoft_datetime.strToDate(options.maxDateTime);\n\t\t\t\t\t\t\tmaxDateTime = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), maxDateTime.getHours(), maxDateTime.getMinutes(), maxDateTime.getSeconds());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar maxDateTimeDay;\n\t\t\t\t\t\tif (maxDateTime !== false) {\n\t\t\t\t\t\t\tmaxDateTimeDay = ((maxDateTime.getFullYear() * 12) + maxDateTime.getMonth()) * 31 + maxDateTime.getDate();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twhile (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {\n\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\ti += 1;\n\n\t\t\t\t\t\t\tday = start.getDay();\n\t\t\t\t\t\t\td = start.getDate();\n\t\t\t\t\t\t\ty = start.getFullYear();\n\t\t\t\t\t\t\tm = start.getMonth();\n\t\t\t\t\t\t\tw = _xdsoft_datetime.getWeekOfYear(start);\n\t\t\t\t\t\t\tdescription = '';\n\n\t\t\t\t\t\t\tclasses.push('xdsoft_date');\n\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {\n\t\t\t\t\t\t\t\tcustomDateSettings = options.beforeShowDay.call(datetimepicker, start);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcustomDateSettings = null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === \"[object RegExp]\"){\n\t\t\t\t\t\t\t\tif(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(options.allowDates && options.allowDates.length>0){\n\t\t\t\t\t\t\t\tif(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar currentDay = ((start.getFullYear() * 12) + start.getMonth()) * 31 + start.getDate();\n\t\t\t\t\t\t\tif ((maxDate !== false && start > maxDate) || (minDateTime !== false && start < minDateTime)  || (minDate !== false && start < minDate) || (maxDateTime !== false && currentDay > maxDateTimeDay) || (customDateSettings && customDateSettings[0] === false)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (options.disabledWeekDays.indexOf(day) !== -1) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (input.is('[disabled]')) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (customDateSettings && customDateSettings[1] !== \"\") {\n\t\t\t\t\t\t\t\tclasses.push(customDateSettings[1]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (_xdsoft_datetime.currentTime.getMonth() !== m) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_other_month');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_weekend');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {\n\t\t\t\t\t\t\t\thDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];\n\t\t\t\t\t\t\t\tclasses.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);\n\t\t\t\t\t\t\t\tdescription = hDate.desc === undefined ? '' : hDate.desc;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {\n\t\t\t\t\t\t\t\tclasses.push(options.beforeShowDay(start));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newRow) {\n\t\t\t\t\t\t\t\ttable += '<tr>';\n\t\t\t\t\t\t\t\tnewRow = false;\n\t\t\t\t\t\t\t\tif (options.weeks) {\n\t\t\t\t\t\t\t\t\ttable += '<th>' + w + '</th>';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttable += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\" title=\"' + description + '\">' +\n\t\t\t\t\t\t\t\t'<div>' + d + '</div>' +\n\t\t\t\t\t\t\t\t'</td>';\n\n\t\t\t\t\t\t\tif (start.getDay() === options.dayOfWeekStartPrev) {\n\t\t\t\t\t\t\t\ttable += '</tr>';\n\t\t\t\t\t\t\t\tnewRow = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstart.setDate(d + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttable += '</tbody></table>';\n\n\t\t\t\t\t\tcalendar.html(table);\n\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);\n\t\t\t\t\t\tmonth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear() + options.yearOffset);\n\n\t\t\t\t\t\t// generate timebox\n\t\t\t\t\t\ttime = '';\n\t\t\t\t\t\th = '';\n\t\t\t\t\t\tm = '';\n\n\t\t\t\t\t\tvar minTimeMinutesOfDay = 0;\n\t\t\t\t\t\tif (options.minTime !== false) {\n\t\t\t\t\t\t    var t = _xdsoft_datetime.strtotime(options.minTime);\n\t\t\t\t\t\t    minTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar maxTimeMinutesOfDay = 24 * 60;\n\t\t\t\t\t\tif (options.maxTime !== false) {\n\t\t\t\t\t\t    var t = _xdsoft_datetime.strtotime(options.maxTime);\n\t\t\t\t\t\t    maxTimeMinutesOfDay = 60 * t.getHours() + t.getMinutes();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.minDateTime !== false) {\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.minDateTime);\n\t\t\t\t\t\t        var currentDayIsMinDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\n\t\t\t\t\t\t\tif (currentDayIsMinDateTimeDay) {\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\n\t\t\t\t\t\t\t\tif (m > minTimeMinutesOfDay) minTimeMinutesOfDay = m;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.maxDateTime !== false) {\n\t\t\t\t\t\t\tvar t = _xdsoft_datetime.strToDateTime(options.maxDateTime);\n\t\t\t\t\t\t        var currentDayIsMaxDateTimeDay = dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(t, options.formatDate);\n\t\t\t\t\t\t\tif (currentDayIsMaxDateTimeDay) {\n\t\t\t\t\t\t\t\tvar m = 60 * t.getHours() + t.getMinutes();\n\t\t\t\t\t\t\t\tif (m < maxTimeMinutesOfDay) maxTimeMinutesOfDay = m;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tline_time = function line_time(h, m) {\n\t\t\t\t\t\t\tvar now = _xdsoft_datetime.now(), current_time,\n\t\t\t\t\t\t\t\tisALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;\n\t\t\t\t\t\t\tnow.setHours(h);\n\t\t\t\t\t\t\th = parseInt(now.getHours(), 10);\n\t\t\t\t\t\t\tnow.setMinutes(m);\n\t\t\t\t\t\t\tm = parseInt(now.getMinutes(), 10);\n\t\t\t\t\t\t\tclasses = [];\n\t\t\t\t\t\t\tvar currentMinutesOfDay = 60 * h + m;\n\t\t\t\t\t\t\tif (input.is('[disabled]') || (currentMinutesOfDay >= maxTimeMinutesOfDay) || (currentMinutesOfDay < minTimeMinutesOfDay)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_disabled');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcurrent_time = new Date(_xdsoft_datetime.currentTime);\n\t\t\t\t\t\t\tcurrent_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));\n\n\t\t\t\t\t\t\tif (!isALlowTimesInit) {\n\t\t\t\t\t\t\t\tcurrent_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {\n\t\t\t\t\t\t\t\tif (options.defaultSelect || datetimepicker.data('changed')) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_current');\n\t\t\t\t\t\t\t\t} else if (options.initTime) {\n\t\t\t\t\t\t\t\t\tclasses.push('xdsoft_init_time');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {\n\t\t\t\t\t\t\t\tclasses.push('xdsoft_today');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + dateHelper.formatDate(now, options.formatTime) + '</div>';\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n\t\t\t\t\t\t\tfor (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 60; j += options.step) {\n\t\t\t\t\t\t\t\t        var currentMinutesOfDay = i * 60 + j;\n\t\t\t\t\t\t\t\t        if (currentMinutesOfDay < minTimeMinutesOfDay) continue;\n\t\t\t\t\t\t\t\t        if (currentMinutesOfDay >= maxTimeMinutesOfDay) continue;\n\t\t\t\t\t\t\t\t\th = (i < 10 ? '0' : '') + i;\n\t\t\t\t\t\t\t\t\tm = (j < 10 ? '0' : '') + j;\n\t\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = 0; i < options.allowTimes.length; i += 1) {\n\t\t\t\t\t\t\t\th = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n\t\t\t\t\t\t\t\tm = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n\t\t\t\t\t\t\t\tline_time(h, m);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimebox.html(time);\n\n\t\t\t\t\t\topt = '';\n\n\t\t\t\t\t\tfor (i = parseInt(options.yearStart, 10); i <= parseInt(options.yearEnd, 10); i += 1) {\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + (i + options.yearOffset) + '</div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyearselect.children().eq(0)\n\t\t\t\t\t\t\t.html(opt);\n\n\t\t\t\t\t\tfor (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {\n\t\t\t\t\t\t\topt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[globalLocale].months[i] + '</div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmonthselect.children().eq(0).html(opt);\n\t\t\t\t\t\t$(datetimepicker)\n\t\t\t\t\t\t\t.trigger('generate.xdsoft');\n\t\t\t\t\t}, 10);\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t})\n\t\t\t\t.on('afterOpen.xdsoft', function () {\n\t\t\t\t\tif (options.timepicker) {\n\t\t\t\t\t\tvar classType, pheight, height, top;\n\t\t\t\t\t\tif (timebox.find('.xdsoft_current').length) {\n\t\t\t\t\t\t\tclassType = '.xdsoft_current';\n\t\t\t\t\t\t} else if (timebox.find('.xdsoft_init_time').length) {\n\t\t\t\t\t\t\tclassType = '.xdsoft_init_time';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (classType) {\n\t\t\t\t\t\t\tpheight = timeboxparent[0].clientHeight;\n\t\t\t\t\t\t\theight = timebox[0].offsetHeight;\n\t\t\t\t\t\t\ttop = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;\n\t\t\t\t\t\t\tif ((height - pheight) < top) {\n\t\t\t\t\t\t\t\ttop = height - pheight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttimeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\ttimerclick = 0;\n\t\t\tcalendar\n\t\t\t\t.on('touchend click.xdsoft', 'td', function (xdevent) {\n\t\t\t\t\txdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap\n\t\t\t\t\ttimerclick += 1;\n\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentTime.setDate(1);\n\t\t\t\t\tcurrentTime.setFullYear($this.data('year'));\n\t\t\t\t\tcurrentTime.setMonth($this.data('month'));\n\t\t\t\t\tcurrentTime.setDate($this.data('date'));\n\n\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\n\t\t\t\t\tif (options.onSelectDate &&\t$.isFunction(options.onSelectDate)) {\n\t\t\t\t\t\toptions.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t}\n\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\tif ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t}\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\ttimerclick = 0;\n\t\t\t\t\t}, 200);\n\t\t\t\t});\n\n\t\t\ttimebox\n\t\t\t\t.on('touchstart', 'div', function (xdevent) {\n\t\t\t\t\tthis.touchMoved = false;\n\t\t\t\t})\n\t\t\t\t.on('touchmove', 'div', handleTouchMoved)\n\t\t\t\t.on('touchend click.xdsoft', 'div', function (xdevent) {\n\t\t\t\t\tif (!this.touchMoved) {\n\t\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t\t\tvar $this = $(this),\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\n\t\t\t\t\t\tif (currentTime === undefined || currentTime === null) {\n\t\t\t\t\t\t\t_xdsoft_datetime.currentTime = _xdsoft_datetime.now();\n\t\t\t\t\t\t\tcurrentTime = _xdsoft_datetime.currentTime;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($this.hasClass('xdsoft_disabled')) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTime.setHours($this.data('hour'));\n\t\t\t\t\t\tcurrentTime.setMinutes($this.data('minute'));\n\t\t\t\t\t\tdatetimepicker.trigger('select.xdsoft', [currentTime]);\n\n\t\t\t\t\t\tdatetimepicker.data('input').val(_xdsoft_datetime.str());\n\n\t\t\t\t\t\tif (options.onSelectTime && $.isFunction(options.onSelectTime)) {\n\t\t\t\t\t\t\toptions.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t\t\tdatetimepicker.trigger('xchange.xdsoft');\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\tif (options.inline !== true && options.closeOnTimeSelect === true) {\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tdatepicker\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\tif (!options.scrollMonth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (event.deltaY < 0) {\n\t\t\t\t\t\t_xdsoft_datetime.nextMonth();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_xdsoft_datetime.prevMonth();\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\tinput\n\t\t\t\t.on('mousewheel.xdsoft', function (event) {\n\t\t\t\t\tif (!options.scrollInput) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!options.datepicker && options.timepicker) {\n\t\t\t\t\t\tcurrent_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n\t\t\t\t\t\tif (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {\n\t\t\t\t\t\t\tcurrent_time_index += event.deltaY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (timebox.children().eq(current_time_index).length) {\n\t\t\t\t\t\t\ttimebox.children().eq(current_time_index).trigger('mousedown');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (options.datepicker && !options.timepicker) {\n\t\t\t\t\t\tdatepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);\n\t\t\t\t\t\tif (input.val) {\n\t\t\t\t\t\t\tinput.val(_xdsoft_datetime.str());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('changedatetime.xdsoft');\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tdatetimepicker\n\t\t\t\t.on('changedatetime.xdsoft', function (event) {\n\t\t\t\t\tif (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {\n\t\t\t\t\t\tvar $input = datetimepicker.data('input');\n\t\t\t\t\t\toptions.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);\n\t\t\t\t\t\tdelete options.value;\n\t\t\t\t\t\t$input.trigger('change');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('generate.xdsoft', function () {\n\t\t\t\t\tif (options.onGenerate && $.isFunction(options.onGenerate)) {\n\t\t\t\t\t\toptions.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n\t\t\t\t\t}\n\t\t\t\t\tif (triggerAfterOpen) {\n\t\t\t\t\t\tdatetimepicker.trigger('afterOpen.xdsoft');\n\t\t\t\t\t\ttriggerAfterOpen = false;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('click.xdsoft', function (xdevent) {\n\t\t\t\t\txdevent.stopPropagation();\n\t\t\t\t});\n\n\t\t\tcurrent_time_index = 0;\n\n\t\t\t/**\n\t\t\t * Runs the callback for each of the specified node's ancestors.\n\t\t\t *\n\t\t\t * Return FALSE from the callback to stop ascending.\n\t\t\t *\n\t\t\t * @param {DOMNode} node\n\t\t\t * @param {Function} callback\n\t\t\t * @returns {undefined}\n\t\t\t */\n\t\t\tforEachAncestorOf = function (node, callback) {\n\t\t\t\tdo {\n\t\t\t\t\tnode = node.parentNode;\n\n\t\t\t\t\tif (!node || callback(node) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} while (node.nodeName !== 'HTML');\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Sets the position of the picker.\n\t\t\t *\n\t\t\t * @returns {undefined}\n\t\t\t */\n\t\t\tsetPos = function () {\n\t\t\t\tvar dateInputOffset,\n\t\t\t\t\tdateInputElem,\n\t\t\t\t\tverticalPosition,\n\t\t\t\t\tleft,\n\t\t\t\t\tposition,\n\t\t\t\t\tdatetimepickerElem,\n\t\t\t\t\tdateInputHasFixedAncestor,\n\t\t\t\t\t$dateInput,\n\t\t\t\t\twindowWidth,\n\t\t\t\t\tverticalAnchorEdge,\n\t\t\t\t\tdatetimepickerCss,\n\t\t\t\t\twindowHeight,\n\t\t\t\t\twindowScrollTop;\n\n\t\t\t\t$dateInput = datetimepicker.data('input');\n\t\t\t\tdateInputOffset = $dateInput.offset();\n\t\t\t\tdateInputElem = $dateInput[0];\n\n\t\t\t\tverticalAnchorEdge = 'top';\n\t\t\t\tverticalPosition = (dateInputOffset.top + dateInputElem.offsetHeight) - 1;\n\t\t\t\tleft = dateInputOffset.left;\n\t\t\t\tposition = \"absolute\";\n\n\t\t\t\twindowWidth = $(options.contentWindow).width();\n\t\t\t\twindowHeight = $(options.contentWindow).height();\n\t\t\t\twindowScrollTop = $(options.contentWindow).scrollTop();\n\n\t\t\t\tif ((options.ownerDocument.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)) {\n\t\t\t\t\tvar diff = datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;\n\t\t\t\t\tleft = left - diff;\n\t\t\t\t}\n\n\t\t\t\tif ($dateInput.parent().css('direction') === 'rtl') {\n\t\t\t\t\tleft -= (datetimepicker.outerWidth() - $dateInput.outerWidth());\n\t\t\t\t}\n\n\t\t\t\tif (options.fixed) {\n\t\t\t\t\tverticalPosition -= windowScrollTop;\n\t\t\t\t\tleft -= $(options.contentWindow).scrollLeft();\n\t\t\t\t\tposition = \"fixed\";\n\t\t\t\t} else {\n\t\t\t\t\tdateInputHasFixedAncestor = false;\n\n\t\t\t\t\tforEachAncestorOf(dateInputElem, function (ancestorNode) {\n\t\t\t\t\t\tif (ancestorNode === null) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position') === 'fixed') {\n\t\t\t\t\t\t\tdateInputHasFixedAncestor = true;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (dateInputHasFixedAncestor && !options.insideParent) {\n\t\t\t\t\t\tposition = 'fixed';\n\n\t\t\t\t\t\t//If the picker won't fit entirely within the viewport then display it above the date input.\n\t\t\t\t\t\tif (verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop) {\n\t\t\t\t\t\t\tverticalAnchorEdge = 'bottom';\n\t\t\t\t\t\t\tverticalPosition = (windowHeight + windowScrollTop) - dateInputOffset.top;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tverticalPosition -= windowScrollTop;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (verticalPosition + datetimepicker[0].offsetHeight > windowHeight + windowScrollTop) {\n\t\t\t\t\t\t\tverticalPosition = dateInputOffset.top - datetimepicker[0].offsetHeight + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (verticalPosition < 0) {\n\t\t\t\t\t\tverticalPosition = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (left + dateInputElem.offsetWidth > windowWidth) {\n\t\t\t\t\t\tleft = windowWidth - dateInputElem.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdatetimepickerElem = datetimepicker[0];\n\n\t\t\t\tforEachAncestorOf(datetimepickerElem, function (ancestorNode) {\n\t\t\t\t\tvar ancestorNodePosition;\n\n\t\t\t\t\tancestorNodePosition = options.contentWindow.getComputedStyle(ancestorNode).getPropertyValue('position');\n\n\t\t\t\t\tif (ancestorNodePosition === 'relative' && windowWidth >= ancestorNode.offsetWidth) {\n\t\t\t\t\t\tleft = left - ((windowWidth - ancestorNode.offsetWidth) / 2);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdatetimepickerCss = {\n\t\t\t\t\tposition: position,\n\t\t\t\t\tleft: options.insideParent ? dateInputElem.offsetLeft : left,\n\t\t\t\t\ttop: '',  //Initialize to prevent previous values interfering with new ones.\n\t\t\t\t\tbottom: ''  //Initialize to prevent previous values interfering with new ones.\n\t\t\t\t};\n\n\t\t\t\tif (options.insideParent) {\n                    datetimepickerCss[verticalAnchorEdge] = dateInputElem.offsetTop + dateInputElem.offsetHeight;\n                } else {\n                    datetimepickerCss[verticalAnchorEdge] = verticalPosition;\n                }\n\n\t\t\t\tdatetimepicker.css(datetimepickerCss);\n\t\t\t};\n\n\t\t\tdatetimepicker\n\t\t\t\t.on('open.xdsoft', function (event) {\n\t\t\t\t\tvar onShow = true;\n\t\t\t\t\tif (options.onShow && $.isFunction(options.onShow)) {\n\t\t\t\t\t\tonShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t}\n\t\t\t\t\tif (onShow !== false) {\n\t\t\t\t\t\tdatetimepicker.show();\n\t\t\t\t\t\tsetPos();\n\t\t\t\t\t\t$(options.contentWindow)\n\t\t\t\t\t\t\t.off('resize.xdsoft', setPos)\n\t\t\t\t\t\t\t.on('resize.xdsoft', setPos);\n\n\t\t\t\t\t\tif (options.closeOnWithoutClick) {\n\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).on('touchstart mousedown.xdsoft', function arguments_callee6() {\n\t\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\t\t$([options.ownerDocument.body, options.contentWindow]).off('touchstart mousedown.xdsoft', arguments_callee6);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('close.xdsoft', function (event) {\n\t\t\t\t\tvar onClose = true;\n\t\t\t\t\tmonth_picker\n\t\t\t\t\t\t.find('.xdsoft_month,.xdsoft_year')\n\t\t\t\t\t\t.find('.xdsoft_select')\n\t\t\t\t\t\t.hide();\n\t\t\t\t\tif (options.onClose && $.isFunction(options.onClose)) {\n\t\t\t\t\t\tonClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);\n\t\t\t\t\t}\n\t\t\t\t\tif (onClose !== false && !options.opened && !options.inline) {\n\t\t\t\t\t\tdatetimepicker.hide();\n\t\t\t\t\t}\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t})\n\t\t\t\t.on('toggle.xdsoft', function () {\n\t\t\t\t\tif (datetimepicker.is(':visible')) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.data('input', input);\n\n\t\t\ttimer = 0;\n\n\t\t\tdatetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n\t\t\tdatetimepicker.setOptions(options);\n\n\t\t\tfunction getCurrentValue() {\n\t\t\t\tvar ct = false, time;\n\n\t\t\t\tif (options.startDate) {\n\t\t\t\t\tct = _xdsoft_datetime.strToDate(options.startDate);\n\t\t\t\t} else {\n\t\t\t\t\tct = options.value || ((input && input.val && input.val()) ? input.val() : '');\n\t\t\t\t\tif (ct) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(ct);\n\t\t\t\t\t\tif (options.yearOffset) {\n\t\t\t\t\t\t\tct = new Date(ct.getFullYear() - options.yearOffset, ct.getMonth(), ct.getDate(), ct.getHours(), ct.getMinutes(), ct.getSeconds(), ct.getMilliseconds());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (options.defaultDate) {\n\t\t\t\t\t\tct = _xdsoft_datetime.strToDateTime(options.defaultDate);\n\t\t\t\t\t\tif (options.defaultTime) {\n\t\t\t\t\t\t\ttime = _xdsoft_datetime.strtotime(options.defaultTime);\n\t\t\t\t\t\t\tct.setHours(time.getHours());\n\t\t\t\t\t\t\tct.setMinutes(time.getMinutes());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ct && _xdsoft_datetime.isValidDate(ct)) {\n\t\t\t\t\tdatetimepicker.data('changed', true);\n\t\t\t\t} else {\n\t\t\t\t\tct = '';\n\t\t\t\t}\n\n\t\t\t\treturn ct || 0;\n\t\t\t}\n\n\t\t\tfunction setMask(options) {\n\n\t\t\t\tvar isValidValue = function (mask, value) {\n\t\t\t\t\t\tvar reg = mask\n\t\t\t\t\t\t\t.replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n\t\t\t\t\t\t\t.replace(/_/g, '{digit+}')\n\t\t\t\t\t\t\t.replace(/([0-9]{1})/g, '{digit$1}')\n\t\t\t\t\t\t\t.replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n\t\t\t\t\t\t\t.replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n\t\t\t\t\t\treturn (new RegExp(reg)).test(value);\n\t\t\t\t\t},\n\t\t\t\t\tgetCaretPos = function (input) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (options.ownerDocument.selection && options.ownerDocument.selection.createRange) {\n\t\t\t\t\t\t\t\tvar range = options.ownerDocument.selection.createRange();\n\t\t\t\t\t\t\t\treturn range.getBookmark().charCodeAt(2) - 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\t\t\t\treturn input.selectionStart;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsetCaretPos = function (node, pos) {\n\t\t\t\t\t\tnode = (typeof node === \"string\" || node instanceof String) ? options.ownerDocument.getElementById(node) : node;\n\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node.createTextRange) {\n\t\t\t\t\t\t\tvar textRange = node.createTextRange();\n\t\t\t\t\t\t\ttextRange.collapse(true);\n\t\t\t\t\t\t\ttextRange.moveEnd('character', pos);\n\t\t\t\t\t\t\ttextRange.moveStart('character', pos);\n\t\t\t\t\t\t\ttextRange.select();\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node.setSelectionRange) {\n\t\t\t\t\t\t\tnode.setSelectionRange(pos, pos);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\n\t\t\t\tif(options.mask) {\n\t\t\t\t\tinput.off('keydown.xdsoft');\n\t\t\t\t}\n\n\t\t\t\tif (options.mask === true) {\n\t\t\t\t\tif (dateHelper.formatMask) {\n\t\t\t\t\t\toptions.mask = dateHelper.formatMask(options.format)\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.mask = options.format\n\t\t\t\t\t\t\t.replace(/Y/g, '9999')\n\t\t\t\t\t\t\t.replace(/F/g, '9999')\n\t\t\t\t\t\t\t.replace(/m/g, '19')\n\t\t\t\t\t\t\t.replace(/d/g, '39')\n\t\t\t\t\t\t\t.replace(/H/g, '29')\n\t\t\t\t\t\t\t.replace(/i/g, '59')\n\t\t\t\t\t\t\t.replace(/s/g, '59');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ($.type(options.mask) === 'string') {\n\t\t\t\t\tif (!isValidValue(options.mask, input.val())) {\n\t\t\t\t\t\tinput.val(options.mask.replace(/[0-9]/g, '_'));\n\t\t\t\t\t\tsetCaretPos(input[0], 0);\n\t\t\t\t\t}\n\n\t\t\t\t\tinput.on('paste.xdsoft', function (event) {\n\t\t\t\t\t    // couple options here\n\t\t\t\t\t    // 1. return false - tell them they can't paste\n\t\t\t\t\t    // 2. insert over current characters - minimal validation\n\t\t\t\t\t    // 3. full fledged parsing and validation\n\t\t\t\t\t    // let's go option 2 for now\n\n\t\t\t\t\t    // fires multiple times for some reason\n\n\t\t\t\t\t    // https://stackoverflow.com/a/30496488/1366033\n\t\t\t\t\t    var clipboardData = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData,\n\t\t\t\t\t\tpastedData = clipboardData.getData('text'),\n\t\t\t\t\t\tval = this.value,\n\t\t\t\t\t\tpos = this.selectionStart\n\n\t\t\t\t\t    var valueBeforeCursor = val.substr(0, pos);\n\t\t\t\t\t    var valueAfterPaste = val.substr(pos + pastedData.length);\n\n\t\t\t\t\t    val = valueBeforeCursor + pastedData + valueAfterPaste;           \n\t\t\t\t\t    pos += pastedData.length;\n\n\t\t\t\t\t    if (isValidValue(options.mask, val)) {\n\t\t\t\t\t\tthis.value = val;\n\t\t\t\t\t\tsetCaretPos(this, pos);\n\t\t\t\t\t    } else if ($.trim(val) === '') {\n\t\t\t\t\t\tthis.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t    } else {\n\t\t\t\t\t\tinput.trigger('error_input.xdsoft');\n\t\t\t\t\t    }\n\n\t\t\t\t\t    event.preventDefault();\n\t\t\t\t\t    return false;\n\t\t\t\t\t  });\n\n\t\t\t\t\t  input.on('keydown.xdsoft', function (event) {\n\t\t\t\t\t    var val = this.value,\n\t\t\t\t\t\tkey = event.which,\n\t\t\t\t\t\tpos = this.selectionStart,\n\t\t\t\t\t\tselEnd = this.selectionEnd,\n\t\t\t\t\t\thasSel = pos !== selEnd,\n\t\t\t\t\t\tdigit;\n\n\t\t\t\t\t    // only alow these characters\n\t\t\t\t\t    if (((key >=  KEY0 && key <=  KEY9)  ||\n\t\t\t\t\t\t (key >= _KEY0 && key <= _KEY9)) || \n\t\t\t\t\t\t (key === BACKSPACE || key === DEL)) {\n\n\t\t\t\t\t      // get char to insert which is new character or placeholder ('_')\n\t\t\t\t\t      digit = (key === BACKSPACE || key === DEL) ? '_' :\n\t\t\t\t\t\t\t  String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key);\n\n\t\t\t\t\t\t// we're deleting something, we're not at the start, and have normal cursor, move back one\n\t\t\t\t\t\t// if we have a selection length, cursor actually sits behind deletable char, not in front\n\t\t\t\t\t\tif (key === BACKSPACE && pos && !hasSel) {\n\t\t\t\t\t\t    pos -= 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\n\t\t\t\t\t\t//   value char - keep incrementing position while on separator char and we still have room\n\t\t\t\t\t\t//   del char   - keep decrementing position while on separator char and we still have room\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t  var maskValueAtCurPos = options.mask.substr(pos, 1);\n\t\t\t\t\t\t  var posShorterThanMaskLength = pos < options.mask.length;\n\t\t\t\t\t\t  var posGreaterThanZero = pos > 0;\n\t\t\t\t\t\t  var notNumberOrPlaceholder = /[^0-9_]/;\n\t\t\t\t\t\t  var curPosOnSep = notNumberOrPlaceholder.test(maskValueAtCurPos);\n\t\t\t\t\t\t  var continueMovingPosition = curPosOnSep && posShorterThanMaskLength && posGreaterThanZero\n\n\t\t\t\t\t\t  // if we hit a real char, stay where we are\n\t\t\t\t\t\t  if (!continueMovingPosition) break;\n\n\t\t\t\t\t\t  // hitting backspace in a selection, you can possibly go back any further - go forward\n\t\t\t\t\t\t  pos += (key === BACKSPACE && !hasSel) ? -1 : 1;\n\n                        }\n                        \n                        if (event.metaKey) {    // cmd has been pressed\n                            pos = 0;\n                            hasSel = true;\n                        }\n\n\t\t\t\t\t\tif (hasSel) {\n\t\t\t\t\t\t  // pos might have moved so re-calc length\n\t\t\t\t\t\t  var selLength = selEnd - pos\n\n\t\t\t\t\t\t  // if we have a selection length we will wipe out entire selection and replace with default template for that range\n\t\t\t\t\t\t  var defaultBlank = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t  var defaultBlankSelectionReplacement = defaultBlank.substr(pos, selLength); \n\t\t\t\t\t\t  var selReplacementRemainder = defaultBlankSelectionReplacement.substr(1) // might be empty\n\n\t\t\t\t\t\t  var valueBeforeSel = val.substr(0, pos);\n\t\t\t\t\t\t  var insertChars = digit + selReplacementRemainder;\n\t\t\t\t\t\t  var charsAfterSelection = val.substr(pos + selLength);\n\n\t\t\t\t\t\t  val = valueBeforeSel + insertChars + charsAfterSelection\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t  var valueBeforeCursor = val.substr(0, pos);\n\t\t\t\t\t\t  var insertChar = digit;\n\t\t\t\t\t\t  var valueAfterNextChar = val.substr(pos + 1);\n\n\t\t\t\t\t\t  val = valueBeforeCursor + insertChar + valueAfterNextChar\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($.trim(val) === '') {\n\t\t\t\t\t\t  // if empty, set to default\n\t\t\t\t\t\t    val = defaultBlank\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t  // if at the last character don't need to do anything\n\t\t\t\t\t\t    if (pos === options.mask.length) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t    }\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// resume cursor location\n\t\t\t\t\t\tpos += (key === BACKSPACE) ? 0 : 1;\n\t\t\t\t\t\t// don't stop on a separator, continue whatever direction you were going\n\t\t\t\t\t\twhile (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {\n\t\t\t\t\t\t    pos += (key === BACKSPACE) ? 0 : 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isValidValue(options.mask, val)) {\n\t\t\t\t\t\t    this.value = val;\n\t\t\t\t\t\t    setCaretPos(this, pos);\n\t\t\t\t\t\t} else if ($.trim(val) === '') {\n\t\t\t\t\t\t    this.value = options.mask.replace(/[0-9]/g, '_');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t    input.trigger('error_input.xdsoft');\n\t\t\t\t\t\t}\n\t\t\t\t\t    } else {\n\t\t\t\t\t\tif (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {\n\t\t\t\t\t\t    return true;\n\t\t\t\t\t\t}\n\t\t\t\t\t    }\n\n\t\t\t\t\t    event.preventDefault();\n\t\t\t\t\t    return false;\n\t\t\t\t\t  });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue());\n\n\t\t\tinput\n\t\t\t\t.data('xdsoft_datetimepicker', datetimepicker)\n\t\t\t\t.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function () {\n\t\t\t\t\tif (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!options.openOnFocus) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\tif (input.is(':disabled')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttriggerAfterOpen = true;\n\t\t\t\t\t\t_xdsoft_datetime.setCurrentTime(getCurrentValue(), true);\n\t\t\t\t\t\tif(options.mask) {\n\t\t\t\t\t\t\tsetMask(options);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t}, 100);\n\t\t\t\t})\n\t\t\t\t.on('keydown.xdsoft', function (event) {\n\t\t\t\t\tvar elementSelector,\n\t\t\t\t\t\tkey = event.which;\n\t\t\t\t\tif ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {\n\t\t\t\t\t\telementSelector = $(\"input:visible,textarea:visible,button:visible,a:visible\");\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\telementSelector.eq(elementSelector.index(this) + 1).focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif ([TAB].indexOf(key) !== -1) {\n\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('blur.xdsoft', function () {\n\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t});\n\t\t};\n\t\tdestroyDateTimePicker = function (input) {\n\t\t\tvar datetimepicker = input.data('xdsoft_datetimepicker');\n\t\t\tif (datetimepicker) {\n\t\t\t\tdatetimepicker.data('xdsoft_datetime', null);\n\t\t\t\tdatetimepicker.remove();\n\t\t\t\tinput\n\t\t\t\t\t.data('xdsoft_datetimepicker', null)\n\t\t\t\t\t.off('.xdsoft');\n\t\t\t\t$(options.contentWindow).off('resize.xdsoft');\n\t\t\t\t$([options.contentWindow, options.ownerDocument.body]).off('mousedown.xdsoft touchstart');\n\t\t\t\tif (input.unmousewheel) {\n\t\t\t\t\tinput.unmousewheel();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t$(options.ownerDocument)\n            .off('keydown.xdsoftctrl keyup.xdsoftctrl')\n            .off('keydown.xdsoftcmd keyup.xdsoftcmd')\n\t\t\t.on('keydown.xdsoftctrl', function (e) {\n\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\tctrlDown = true;\n                }\n\t\t\t})\n\t\t\t.on('keyup.xdsoftctrl', function (e) {\n\t\t\t\tif (e.keyCode === CTRLKEY) {\n\t\t\t\t\tctrlDown = false;\n                }\n            })\n            .on('keydown.xdsoftcmd', function (e) {\n                if (e.keyCode === CMDKEY) {\n                    cmdDown = true;\n                }\n\t\t\t})\n\t\t\t.on('keyup.xdsoftcmd', function (e) {\n                if (e.keyCode === CMDKEY) {\n                    cmdDown = false;\n                }\n\t\t\t});\n\n\t\tthis.each(function () {\n\t\t\tvar datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;\n\t\t\tif (datetimepicker) {\n\t\t\t\tif ($.type(opt) === 'string') {\n\t\t\t\t\tswitch (opt) {\n\t\t\t\t\t\tcase 'show':\n\t\t\t\t\t\t\t$(this).select().focus();\n\t\t\t\t\t\t\tdatetimepicker.trigger('open.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hide':\n\t\t\t\t\t\t\tdatetimepicker.trigger('close.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'toggle':\n\t\t\t\t\t\t\tdatetimepicker.trigger('toggle.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'destroy':\n\t\t\t\t\t\t\tdestroyDateTimePicker($(this));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\t\tthis.value = this.defaultValue;\n\t\t\t\t\t\t\tif (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {\n\t\t\t\t\t\t\t\tdatetimepicker.data('changed', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdatetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'validate':\n\t\t\t\t\t\t\t$input = datetimepicker.data('input');\n\t\t\t\t\t\t\t$input.trigger('blur.xdsoft');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {\n\t\t\t\t\t\t\t\tresult = datetimepicker[opt](opt2);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatetimepicker\n\t\t\t\t\t\t.setOptions(opt);\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif ($.type(opt) !== 'string') {\n\t\t\t\tif (!options.lazyInit || options.open || options.inline) {\n\t\t\t\t\tcreateDateTimePicker($(this));\n\t\t\t\t} else {\n\t\t\t\t\tlazyInit($(this));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t};\n\n\t$.fn.datetimepicker.defaults = default_options;\n\n\tfunction HighlightedDate(date, desc, style) {\n\t\t\"use strict\";\n\t\tthis.date = date;\n\t\tthis.desc = desc;\n\t\tthis.style = style;\n\t}\n \n}( jQuery ));\n \n","\n/*\n * Render Date Picker\n *\n * @param  {String} controls                 - Wrapper of controls.\n * @return {Void}\n */\n\nimport '@uixkit/core/form/js/third-party/jquery.datetimepicker.esm';\n\n\n( function ( $ ) {\n    'use strict';\n    $.fn.UixRenderDatePicker = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tcontrols    : '[data-picker]'\n        }, options );\n \n        this.each( function() {\n\t\t\n\t\t\n\t\t\tif ( $.isFunction( $.fn.datetimepicker ) ) {\n\n\t\t\t\t$( settings.controls ).each( function() {\n\n\t\t\t\t\tconst $this            = $( this );\n                    \n\t\t\t\t\tlet\tdateFormat       = $this.data( 'picker-format' ),\n\t\t\t\t\t\ttimeEnable       = $this.data( 'picker-timepicker' ),\n\t\t\t\t\t\tlang             = $this.data( 'picker-lang' ),\n\t\t\t\t\t\tmyminDate        = $this.data( 'picker-min-date' ),\n\t\t\t\t\t\tmymaxDate        = $this.data( 'picker-max-date' ),\n\t\t\t\t\t\trtlEnable        = false;\n\n\n\t\t\t\t\t// If there is no data-xxx, save current source to it\n\t\t\t\t\tif ( typeof dateFormat === typeof undefined ) dateFormat = 'M d, Y';  //Y-m-d H:i:s\n\t\t\t\t\tif ( typeof timeEnable === typeof undefined ) timeEnable = false;\n\t\t\t\t\tif ( typeof lang === typeof undefined ) lang = 'en';\n\t\t\t\t\tif ( typeof myminDate === typeof undefined ) myminDate = false; //yesterday is minimum date(for today use 0 or -1970/01/01)\n\t\t\t\t\tif ( typeof mymaxDate === typeof undefined ) mymaxDate = false; //tomorrow is maximum date calendar, such as '+2050/01/01'\n\t\t\t\t\tif ( typeof rtlEnable === typeof undefined ) rtlEnable = false;\n\n\t\t\t\t    $.datetimepicker.setLocale( lang );\n\n\t\t\t\t\t//RTL \n\t\t\t\t\tif ( $( 'body' ).hasClass( 'rtl' ) ) {\n\t\t\t\t\t\trtlEnable = true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//hide or display time selector\n\t\t\t\t\tif ( timeEnable ) {\n\t\t\t\t\t\n\t\t\t\t\t\t$( document ).on( 'mouseenter', 'td.xdsoft_date[data-date]', function() {\n\t\t\t\t\t\t\tif ( $( this ).hasClass( 'xdsoft_disabled' ) ) {\n\t\t\t\t\t\t\t\t$( this ).closest( '.xdsoft_datepicker' ).next( '.xdsoft_timepicker.active' ).hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$( this ).closest( '.xdsoft_datepicker' ).next( '.xdsoft_timepicker.active' ).show();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.datetimepicker({\n\t\t\t\t\t\trtl         : rtlEnable,\n\t\t\t\t\t\ttimepicker  : timeEnable,\n\t\t\t\t\t\tformat      : dateFormat,\n\t\t\t\t\t\tformatTime  : 'H:i',\n\t\t\t\t\t\tformatDate  : 'Y/m/d',\n\t\t\t\t\t\tminDate     : myminDate,\n\t\t\t\t\t\tmaxDate     : mymaxDate\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t} );\n\n\n\n\t\t\t\t//Dynamic listening for the latest value\n\t\t\t\t$( document ).on( 'mouseleave', '[data-handler]', function() {\n\t\t\t\t\t$( '[data-picker]' ).each( function() {\n\t\t\t\t\t\t$( this ).closest( 'div' ).find( 'label, .uix-controls__bar' ).addClass( 'is-active' );\n\t\t\t\t\t});\n\n\t\t\t\t});\t\n\n\n\n\t\t\t}// function datetimepicker is exist\n\n\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/* \n *************************************\n * <!-- Form -->\n *************************************\n */\n/*\n    Note:\n\t\n\tIf you use the \"change\" event to asynchronously change a custom control of select, radio or checkbox, \n\tyou need add a callback function that initializes the style:\n\t\n\n\t$( document ).UixRenderCustomSelect(); //Render Custom Select\n\t$( document ).UixRenderCustomRadioCheckbox(); //Render Custom Radio, Toggle And Checkbox\n\t$( document ).UixRenderControlsLineEff(); //Create Line Effect on Click\n\t$( document ).UixRenderControlsDisable(); //Disabled Controls Status\n\t$( document ).UixRenderCustomFile(); //Render Custom File Type\n\t$( document ).UixRenderCustomFileDropzone(); //Render Custom File Dropzone\n\t$( document ).UixRenderControlsHover(); //Hover Effect\n\t$( document ).UixRenderCustomMultiSel(); //Render Multiple Selector Status\n\t$( document ).UixRenderCustomSingleSel(); //Render Single Selector Status\n\t$( document ).UixRenderNormalRadio(); //Render Normal Radio Status\n\t$( document ).UixRenderDatePicker(); //Render Date Picker\n\n\t\n*/\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixRenderNormalRadio from '@uixkit/core/form/js/fn/normal-radio';\nimport UixRenderDatePicker from '@uixkit/core/form/js/fn/datepicker';\nimport UixRenderControlsHover from '@uixkit/core/form/js/fn/controls-hover';\nimport UixRenderCustomSingleSel from '@uixkit/core/form/js/fn/single-seletor';\nimport UixRenderCustomMultiSel from '@uixkit/core/form/js/fn/multi-seletor';\nimport UixRenderCustomFileDropzone from '@uixkit/core/form/js/fn/file-dropzone';\nimport UixRenderCustomFile from '@uixkit/core/form/js/fn/upload';\nimport UixRenderControlsDisable from '@uixkit/core/form/js/fn/controls-disable';\nimport UixRenderControlsLineEff from '@uixkit/core/form/js/fn/controls-line';\nimport UixRenderCustomRadioCheckbox from '@uixkit/core/form/js/fn/radio-and-checkbox';\nimport UixRenderCustomSelect from '@uixkit/core/form/js/fn/select';\n\n\nimport '../scss/_basic.scss';\nimport '../scss/_layout.scss';\nimport '../scss/_theme_material.scss';\nimport '../scss/_jquery.datetimepicker.scss';\n\n\n\nexport const FORM = ( ( module, $, window, document ) => {\n\tif ( window.FORM === null ) return false;\n\t\n\t\n\t\n    module.FORM               = module.FORM || {};\n    module.FORM.version       = '0.1.8';\n    module.FORM.documentReady = function( $ ) {\n\n\t\t\n\t\t/*\n\t\t * Callbacks for special forms (supports asynchronous)\n\t\t * Add this code to initialize the style when calling \n\t\t * the form externally with other scripts\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tconst customSpecialFormsInit = function() {\n\t\t\t$( document ).UixRenderCustomSelect(); //Render Custom Select\n\t\t\t$( document ).UixRenderCustomRadioCheckbox(); //Render Custom Radio, Toggle And Checkbox\n\t\t\t$( document ).UixRenderControlsLineEff(); //Create Line Effect on Click\n\t\t\t$( document ).UixRenderControlsDisable(); //Disabled Controls Status\n\t\t\t$( document ).UixRenderCustomFile(); //Render Custom File Type\n\t\t\t$( document ).UixRenderCustomFileDropzone(); //Render Custom File Dropzone\n\t\t\t$( document ).UixRenderControlsHover(); //Hover Effect\n\t\t\t$( document ).UixRenderCustomMultiSel(); //Render Multiple Selector Status\n\t\t\t$( document ).UixRenderCustomSingleSel(); //Render Single Selector Status\n\t\t\t$( document ).UixRenderNormalRadio(); //Render Normal Radio Status\n\t\t\t$( document ).UixRenderDatePicker(); //Render Date Picker\t\n\t\t};\n\t\t\n\t\t\n\t\n\t\tcustomSpecialFormsInit();\n\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Submit Button\n\t\t ---------------------------\n\t\t */ \n\t\t//Search Submit Event in WordPress\n\t\t$( '.uix-search-box__submit' ).off( 'click' ).on( 'click', function() {\n\t\t\t$( this ).closest( 'form' ).submit();\n\t\t});\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of add / remove input field dynamically\n\t\t ---------------------------\n\t\t */ \n\t\t$( '.uix-controls__dynamic-fields-container' ).each(function(){\n\n\n\t\t\tconst $this            = $( this );\n            \n\t\t\tconst $addButton       = $this.find( '.uix-controls__dynamic-fields__addbtn' ), //The add button\n\t\t\t\t  $appendWrapper   = $this.find( '.uix-controls__dynamic-fields__append' ), //The field wrapper ID or class \n                  loopCls          = '.uix-controls__dynamic-fields__tmpl__wrapper',\n                  defaultItems     = $appendWrapper.find( loopCls ).length;\n                  \n            \n\t\t\tlet\tx                = ( defaultItems == 0 ) ? 1 : defaultItems+1,\n                maxField         = $this.data( 'max-fields' ),\n\t\t\t\tfieldHTML        = '';\n\n\t\t\t//Maximum number of forms added\n\t\t\tif ( typeof maxField === typeof undefined ) {\n\t\t\t\t maxField = 5;\n\t\t\t}\n\n\t\t\t//Add a field\n\t\t\tconst addOne = function( fieldCode ) {\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//replace the index of field name\n\t\t\t\tfieldCode = fieldCode.replace(/___GUID___/gi, UixGUID.create() );\n\t\t\t\t\n\t\t\t\t//hide add button\n\t\t\t\tif ( x == maxField ) $addButton.hide();\n\t\t\t\t\n\t\t\t\tif ( x <= maxField ) { \n\n\t\t\t\t\t\n\t\t\t\t\t$appendWrapper.append( fieldCode );\n\t\t\t\t\t$.when( $appendWrapper.length > 0 ).then( function() {\n\n\t\t\t\t\t\t//Initialize Form\n\t\t\t\t\t\tcustomSpecialFormsInit();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tx++;\n\t\t\t\t}\n\n\t\t\t};\n\n            // default item\n            if ( defaultItems == 0 ) {\n                addOne( $this.find( '.uix-controls__dynamic-fields__tmpl' ).html() );\n            }\n            \n\t\t\t\n\t\t\t//Prevent duplicate function assigned\n\t\t\t$addButton.off( 'click' ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n                \n                //template init\n\t\t\t\taddOne( $this.find( '.uix-controls__dynamic-fields__tmpl' ).html() );\n                \n                //Remove per item\n                //Prevent duplicate function assigned\n                $this.find( '.uix-controls__dynamic-fields__removebtn' ).off( 'click' ).on( 'click', function( e ) {\n                    e.preventDefault();\n\n\n                    //display add button\n                    $addButton.show();\n\n\n                    //remove current item\n                    $( this ).closest( loopCls ).remove();\n\n\n                    x--;\n                });\t   \n                \n\t\t\t\treturn false;\n\t\t\t});\n\n\n\n\n\n\t\t} );\t\n\t\t\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Custom Input Number \n\t\t ---------------------------\n\t\t */ \t\n\t\t$( document ).off( 'click.FORM_NUMBER_BTN_ADD' ).on( 'click.FORM_NUMBER_BTN_ADD', '.uix-controls__number__btn--add', function( e ) {\n\n\t\t\tlet step           = parseFloat( $( this ).data( 'step' ) ),\n\t\t\t\tdecimals       = $( this ).data( 'decimals' ),\n\t\t\t\t$numberInput   = $( this ).closest( '.uix-controls__number' ).find( 'input[type=\"number\"]' ),\n\t\t\t\tnumberInputVal = parseFloat( $numberInput.val() ),\n\t\t\t\tmax            = $numberInput.attr( 'max' );\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof step === typeof undefined || isNaN( step ) ) step = 1;\n\t\t\tif ( typeof decimals === typeof undefined ) decimals = 0;\n\t\t\tif ( typeof max != typeof undefined && parseFloat( numberInputVal + step ) > max ) {\n\t\t\t\tstep = 0;\n\t\t\t}\n\n\t\t\t\n\t\t\tnumberInputVal = parseFloat( numberInputVal + step );\n\t\t\t\n\t\t\t\n\t\t\t$numberInput.val( numberInputVal.toFixed( decimals ) );\n\t\t});\n\n\t\t$( document ).off( 'click.FORM_NUMBER_BTN_REMOVE' ).on( 'click.FORM_NUMBER_BTN_REMOVE', '.uix-controls__number__btn--remove', function( e ) {\n\n\t\t\tlet step           = $( this ).data( 'step' ),\n\t\t\t\tdecimals       = $( this ).data( 'decimals' ),\n\t\t\t\t$numberInput   = $( this ).closest( '.uix-controls__number' ).find( 'input[type=\"number\"]' ),\n\t\t\t\tnumberInputVal = parseFloat( $numberInput.val() ),\n\t\t\t\tmin            = $numberInput.attr( 'min' );\n\n\t\t\tif ( typeof step === typeof undefined || isNaN( step ) ) step = 1;\n\t\t\tif ( typeof decimals === typeof undefined ) decimals = 0;\n\t\t\tif ( typeof min != typeof undefined && parseFloat( numberInputVal - step ) < min ) {\n\t\t\t\tstep = 0;\n\t\t\t}\n\t\t\t\n\t\t\tnumberInputVal -= step;\t\n\n\t\t\t$numberInput.val( numberInputVal.toFixed( decimals ) );\n\t\t});\n\n\t\t\t\n\t\t\n\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Multiple Selector\n\t\t ---------------------------\n\t\t */ \n\t\tconst multiSel     = '.uix-controls__multi-sel',\n\t\t\tmultiSelItem = multiSel + ' > span';\n\n\t\t$( document ).off( 'click.FORM_MULTI_SEL' ).on( 'click.FORM_MULTI_SEL', multiSelItem, function( e ) {\n\t\t\te.preventDefault();\n\n\t\t\tlet $selector     = $( this ).parent(),\n\t\t\t\t$option       = $( this ),\n\t\t\t\ttargetID      = '#' + $selector.data( \"targetid\" ),\n\t\t\t\tcurVal        = $option.data( 'value' ),\n\t\t\t\ttarVal        = $( targetID ).val() + ',',\n\t\t\t\tresVal        = '';\n\n\n\n\t\t\t$option.toggleClass( 'is-active' ).attr( 'aria-checked', function( index, attr ) {\n\t\t\t\treturn attr == 'true' ? false : true;\n\t\t\t});\n\n\t\t\tif ( tarVal.indexOf( curVal + ',' ) < 0 ) {\n\t\t\t\tresVal = tarVal + curVal + ',';\n\t\t\t} else {\n\t\t\t\tresVal = tarVal.replace( curVal + ',', '' );\n\t\t\t}\n\n\t\t\tresVal = resVal\n\t\t\t\t\t\t\t.replace(/,\\s*$/, '' )\n\t\t\t\t\t\t\t.replace(/^,/, '' );\n\n\t\t\t$( targetID ).val( resVal );\n\n\n\t\t\t//Dynamic listening for the latest value\n\t\t\t$( targetID ).focus().blur();\n\n\t\t} );\n\n\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Single Selector\n\t\t ---------------------------\n\t\t */ \n\t\tconst singleSel     = '.uix-controls__single-sel',\n\t\t\tsingleSelItem = singleSel + ' > span';\n\n\n\t\t/*\n\t\t * Initialize single switch\n\t\t *\n\t\t * @param  {Element} obj                 - Radio controls. \n\t\t * @return {Void}\n\t\t */\n\t\tconst hideAllSingleSelItems = function( obj ) {\n\t\t\tobj.each( function( index )  {\n\n\t\t\t\tlet $sel                = $( this ),\n\t\t\t\t\tdefaultValue        = $( '#' + $sel.attr( 'data-targetid' ) ).val(),\n\t\t\t\t\tdeffaultSwitchIndex = 0;\n\n\t\t\t\t//get default selected switch index\n\t\t\t\t$sel.find( '> span' ).each( function( index )  {\n\n\t\t\t\t\tif ( defaultValue == $( this ).data( 'value' ) ) {\n\t\t\t\t\t\tdeffaultSwitchIndex = index;\n\t\t\t\t\t}\n\n\n\t\t\t\t});\n\n\n\t\t\t\tif ( typeof $sel.data( 'switchids' ) != typeof undefined && $sel.data( 'switchids' ) != '' ) {\n\t\t\t\t\tconst _switchIDsArr = $sel.data( 'switchids' ).split( ',' );\n\t\t\t\t\t_switchIDsArr.forEach( function( element, index ) {\n\n\t\t\t\t\t\tif ( deffaultSwitchIndex != index ) {\n\t\t\t\t\t\t\t$( '#' + element ).hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$( '#' + element ).show();\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t});\n\n\n\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t};\n\n\t\thideAllSingleSelItems( $( singleSel ) );\n\n\n\t\t$( document ).off( 'click.FORM_SINGLE_SEL' ).on( 'click.FORM_SINGLE_SEL', singleSelItem, function( e ) {\n\t\t\te.preventDefault();\n\n\t\t\tlet $selector     = $( this ).parent(),\n\t\t\t\t$option       = $( this ),\n\t\t\t\ttargetID      = '#' + $selector.data( \"targetid\" ),\n\t\t\t\tswitchID      = '#' + $option.data( \"switchid\" ),\n\t\t\t\tcurVal        = $option.data( 'value' );\n\n\n\t\t\t//Radio Selector\n\t\t\t$selector.find( '> span' ).removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t$( targetID ).val( curVal );\n\t\t\t$option.addClass( 'is-active' ).attr( 'aria-checked', true );\n\n\n\t\t\t//Switch some options\n\t\t\tif ( typeof $option.data( \"switchid\" ) != typeof undefined ) {\n\t\t\t\t hideAllSingleSelItems( $selector );\n\t\t\t\t $( switchID ).show();\n\t\t\t}\n\n\n\n\t\t\t//Dynamic listening for the latest value\n\t\t\t$( targetID ).focus().blur();\n\n\t\t} );\n\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Normal Radio\n\t\t ---------------------------\n\t\t */ \n\t\tconst normalRadio     = '.uix-controls__radio',\n\t\t\tnormalRadioItem = normalRadio + ' > label';\n\n\n\t\t/*\n\t\t * Initialize single switch\n\t\t *\n\t\t * @param  {Element} obj                 - Radio controls. \n\t\t * @return {Void}\n\t\t */\n\t\tconst hideAllNormalRadioItems = function( obj ) {\n\t\t\tobj.each( function( index )  {\n\n\t\t\t\tlet $sel                = $( this ),\n\t\t\t\t\tdefaultValue        = $( '#' + $sel.attr( \"data-targetid\" ) ).val(),\n\t\t\t\t\tdeffaultSwitchIndex = 0;\n\n\t\t\t\t//get default selected switch index\n\t\t\t\t$sel.find( '> label' ).each( function( index )  {\n\n\t\t\t\t\tif ( defaultValue == $( this ).data( 'value' ) ) {\n\t\t\t\t\t\tdeffaultSwitchIndex = index;\n\t\t\t\t\t}\n\n\n\t\t\t\t});\n\n\n\t\t\t\tif ( typeof $sel.data( 'switchids' ) != typeof undefined && $sel.data( 'switchids' ) != '' ) {\n\t\t\t\t\tconst _switchIDsArr = $sel.data( 'switchids' ).split( ',' );\n\t\t\t\t\t_switchIDsArr.forEach( function( element, index ) {\n\n\t\t\t\t\t\tif ( deffaultSwitchIndex != index ) {\n\t\t\t\t\t\t\t$( '#' + element ).hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$( '#' + element ).show();\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t});\n\n\n\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t};\n\n\t\thideAllNormalRadioItems( $( normalRadio ) );\n\n\n\t\t$( document ).off( 'click.FORM_NORMAL_RADIO' ).on( 'click.FORM_NORMAL_RADIO', normalRadioItem, function( e ) {\n\n\t\t\tconst $selector     = $( this ).parent(),\n\t\t\t\t$option       = $( this ),\n\t\t\t\ttargetID      = '#' + $selector.data( \"targetid\" ),\n\t\t\t\tswitchID      = '#' + $option.data( \"switchid\" ),\n\t\t\t\tcurVal        = $option.data( 'value' );\n\n\n\t\t\t//Radio Selector\n\t\t\t$selector.find( '> label' )\n\t\t\t\t.removeClass( 'is-active' )\n\t\t\t    .find( '[type=\"radio\"]' ).prop( 'checked', false );\n\t\t\t\n\t\t\t$( targetID ).val( curVal );\n\t\t\t$option\n\t\t\t\t.addClass( 'is-active' )\n\t\t\t    .find( '[type=\"radio\"]' ).prop( 'checked', true );\n\t\t\t\n\n\n\n\t\t\t//Switch some options\n\t\t\tif ( typeof $option.data( \"switchid\" ) != typeof undefined ) {\n\t\t\t\t hideAllNormalRadioItems( $selector );\n\t\t\t\t $( switchID ).show();\n\t\t\t}\n\n\n\n\t\t\t//Dynamic listening for the latest value\n\t\t\t$( targetID ).focus().blur();\n\n\t\t} );\t\n\t\t\n\n\n\n\t\t\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Click Event of Checkbox and Toggle \n\t\t ---------------------------\n\t\t */ \n\t\tconst checkboxSel     = '.uix-controls__toggle [type=\"checkbox\"], .uix-controls__checkbox [type=\"checkbox\"]';\n\n\t\t$( document ).on( 'change', checkboxSel, function( e ) {\n\t\t\t//hide or display a associated div\n\t\t\tconst $obj      = $( this ).closest( '.uix-controls' ),\n\t\t\t\ttargetID  = '#' + $obj.attr( 'data-targetid' );\n\t\t\t\n\t\t\tif ( this.checked ) {\n\t\t\t\t$obj.addClass( 'is-active' ).attr( 'aria-checked', true );\n\t\t\t\t$( targetID ).show();\n\t\t\t} else {\n\t\t\t\t$obj.removeClass( 'is-active' ).attr( 'aria-checked', false );\n\t\t\t\t$( targetID ).hide();\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.FORM.documentReady );\n\t\n\n\treturn class FORM {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Gallery -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const GALLERY = ( ( module, $, window, document ) => {\n\tif ( window.GALLERY === null ) return false;\n\t\n\t\n    module.GALLERY               = module.GALLERY || {};\n    module.GALLERY.version       = '0.0.5';\n    module.GALLERY.documentReady = function( $ ) {\n\n\t\t$( '.uix-gallery' ).each( function() {\n\n\t\t\tconst galleryType = $( this ).data( 'show-type' );\n\t\t\t\n\t\t\t\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Add a tagname to each list item\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t// Masonry\n\t\t\tif ( galleryType.indexOf( 'masonry' ) >= 0  ) {\n\t\t\t\t$( this ).addClass( 'masonry-container' );\n\t\t\t\t$( this ).find( '.uix-gallery__item' ).addClass( 'masonry-item' );\n\t\t\t}\n\t\t\t\n\t\t\t// Filterable\n\t\t\tif ( galleryType.indexOf( 'filter' ) >= 0  ) {\n\t\t\t\t$( this ).addClass( 'filter-container' );\n\t\t\t\t$( this ).find( '.uix-gallery__item' ).addClass( 'filter-item' );\t\n\t\t\t}\t\n\n\t\t\t\n\t\t\tif ( galleryType.indexOf( 'filter' ) >= 0 || galleryType.indexOf( 'masonry' ) >= 0 ) {\n\n\t\t\t\tconst filterCat      = $( this ).data( 'filter-id' ),\n\t\t\t\t\t$grid          = $( this ).find( '.uix-gallery__tiles' ),\n\t\t\t\t\t$allItems      = $( this ).find( '.uix-gallery__item' ),\n\t\t\t\t\t$filterOptions = $( filterCat );\n\n\t\t\t\t\n\t\t\t\tconst MuuriGrid = new Muuri( $grid.get(0), {\n\t\t\t\t\titems: $grid.get(0).querySelectorAll( '.uix-gallery__item' ),\n\t\t\t\t\t\n\t\t\t\t\t// Default show animation\n\t\t\t\t\tshowDuration: 300,\n\t\t\t\t\tshowEasing: 'ease',\n\n\t\t\t\t\t// Default hide animation\n\t\t\t\t\thideDuration: 300,\n\t\t\t\t\thideEasing: 'ease',\n\n\t\t\t\t\t// Item's visible/hidden state styles\n\t\t\t\t\tvisibleStyles: {\n\t\t\t\t\t\topacity: '1',\n\t\t\t\t\t\ttransform: 'scale(1)'\n\t\t\t\t\t},\n\t\t\t\t\thiddenStyles: {\n\t\t\t\t\t\topacity: '0',\n\t\t\t\t\t\ttransform: 'scale(0.5)'\n\t\t\t\t\t},\n\n\t\t\t\t\t// Layout\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\tfillGaps: false,\n\t\t\t\t\t\thorizontal: false,\n\t\t\t\t\t\talignRight: false,\n\t\t\t\t\t\talignBottom: false,\n\t\t\t\t\t\trounding: true\n\t\t\t\t\t},\n\t\t\t\t\tlayoutOnResize: 100,\n\t\t\t\t\tlayoutOnInit: true,\n\t\t\t\t\tlayoutDuration: 300,\n\t\t\t\t\tlayoutEasing: 'ease',\n\t\t\t\t\t\n\t\t\t\t\t//// Drag & Drop\n\t\t\t\t\tdragEnabled: false\n\t\t\t\t});\n\n\n\t\t\t\t// When all items have loaded refresh their\n\t\t\t\t// dimensions and layout the grid.\n\t\t\t\t$grid.waitForImages().done(function() {\n\t\t\t\t\tMuuriGrid.refreshItems().layout();\n\t\t\t\t\t// For a little finishing touch, let's fade in\n\t\t\t\t\t// the images after all them have loaded and\n\t\t\t\t\t// they are corrertly positioned.\n\t\t\t\t\t$( 'body' ).addClass( 'images-loaded' );\n\n\t\t\t\t});\n\n\n\t\t\t\t/* \n\t\t\t\t ---------------------------\n\t\t\t\t Function of Filterable and Masonry\n\t\t\t\t ---------------------------\n\t\t\t\t */ \n\t\t\t\tif ( galleryType.indexOf( 'filter' ) >= 0 ) {\n\t\t\t\t\t$filterOptions.find( 'li > a' ).off( 'click' ).on( 'click', function() {\n\t\t\t\t\t\tconst $this       = $( this );\n\t\t\t\t\t\tconst activeClass = 'current-cat',\n\t\t\t\t\t\t\t  isActive    = $this.parent().hasClass( activeClass ),\n\t\t\t\t\t\t\t  group       = isActive ? 'all' : $this.data( 'group' );\n\n\t\t\t\t\t\t// Hide current label, show current label in title\n\t\t\t\t\t\tif ( !isActive ) {\n\t\t\t\t\t\t\t$filterOptions.find( '.' + activeClass ).removeClass( activeClass );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$this.parent().toggleClass( activeClass );\n\n\t\t\t\t\t\t// Filter elements\n\t\t\t\t\t\tconst filterFieldValue = group;\n\t\t\t\t\t\tMuuriGrid.filter( function ( item ) {\n\n\t\t\t\t\t\t\tconst element       = item.getElement(),\n\t\t\t\t\t\t\t\t  curCats       = element.getAttribute( 'data-groups' ).toString().replace(/^\\,|\\,$/g, '').replace(/^\\[|\\]$/g, '') + ',all',\n\t\t\t\t\t\t\t\t  isFilterMatch = !filterFieldValue ? true : ( curCats || '' ).indexOf( filterFieldValue ) > -1;\n\n\t\t\t\t\t\t\treturn isFilterMatch;\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t\treturn false;\t\n\t\t\t\t\t});\t\n\t\t\t\t} else {\n\n\t\t\t\t\t//remove filter button of all\n\t\t\t\t\t$filterOptions.find( '[data-group=\"all\"]' ).parent( 'li' ).remove();\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\n\t\t\t}\n\n\n\t\t} );\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.GALLERY.documentReady );\n\t\n\n\treturn class GALLERY {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n","\n/* \n *************************************\n * <!-- Hybrid Content Slider -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const HYBRID_CONTENT_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.HYBRID_CONTENT_SLIDER === null ) return false;\n\t\n\t\n\t\n    module.HYBRID_CONTENT_SLIDER               = module.HYBRID_CONTENT_SLIDER || {};\n    module.HYBRID_CONTENT_SLIDER.version       = '0.0.95';\n    module.HYBRID_CONTENT_SLIDER.pageLoaded    = function() {\n\n\t\t$( '.uix-hybrid-content-slider' ).each( function()  {\n\n\t\t\tlet $carouselWrapper        = $( this ),\n\t\t\t\t$carousel               = $carouselWrapper.find( '.uix-hybrid-content-slider__items' ),\n\t\t\t\t$carouselItem           = $carouselWrapper.find( '.uix-hybrid-content-slider__items > div' ),\n\t\t\t\titemTotal               = $carouselItem.length,\n\t\t\t\tamountVisible           = 1,\n\t\t\t\tcarouselDir             = $carouselWrapper.data( 'dir' ),\n\t\t\t\tcarouselSpeed           = $carouselWrapper.data( 'speed' ),\n\t\t\t\tcarouselNext            = $carouselWrapper.data( 'next' ),\n\t\t\t\tcarouselPrev            = $carouselWrapper.data( 'prev' ),\n                carouselPagination      = $carouselWrapper.data( 'pagination' ),\n\t\t\t\tcarouseDraggable        = $carouselWrapper.data( 'draggable' ),\n\t\t\t\tcarouseDraggableCursor  = $carouselWrapper.data( 'draggable-cursor' );\n\n\t\t\t\n\t\t\tif ( typeof carouselDir === typeof undefined ) carouselDir = 'horizontal';\n\t\t\tif ( typeof carouselSpeed === typeof undefined ) carouselSpeed = 250;\n\t\t\tif ( typeof carouselNext === typeof undefined ) carouselNext = '#uix-hybrid-content-slider__controls-123 .uix-hybrid-content-slider__controls--next';\n\t\t\tif ( typeof carouselPrev === typeof undefined ) carouselPrev = '#uix-hybrid-content-slider__controls-123 .uix-hybrid-content-slider__controls--prev';\n            if ( typeof carouselPagination === typeof undefined ) carouselPagination = '#uix-hybrid-content-slider__pagination-123';\n\t\t\tif ( typeof carouseDraggable === typeof undefined ) carouseDraggable = false;\n\t\t\tif ( typeof carouseDraggableCursor === typeof undefined ) carouseDraggableCursor = 'move';\n\n            \n            //Autoplay parameters\n            let dataAuto                   = $carouselWrapper.data( 'auto' ),\n                dataTiming                 = $carouselWrapper.data( 'timing' ),\n                dataLoop                   = $carouselWrapper.data( 'loop' );  \n\n            if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n            if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n            if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n\n            \n            \n            //Autoplay times\n            let playTimes;\n            //A function called \"timer\" once every second (like a digital watch).\n            $carouselWrapper[0].animatedSlides;\n            \n            \n            //Store the latest position (X,Y) in a temporary variable\n            let tempItemsPos = [];\n\t\t\t\n            \n            //each item width and height\n            let eachItemNewWidth, eachItemNewHeight = [];\n            \n            \n            // Returns the value of a number rounded to the nearest integer.\n            const midIndex = 0; \n\n\n            \n            // Get the width and height of each item\n            $carouselItem.each( function( index ) {\n                const _height = $( this ).height();\n                eachItemNewHeight.push( _height );\n                $( this ).attr({\n                    'data-height': _height,\n                    'data-index': index\n                });\n            });\n            \n                            \n            //Returns the total height of items\n            let totalItemsHeight = 0;\n            for (let i = 0; i < eachItemNewHeight.length; i++ ) {\n                totalItemsHeight += eachItemNewHeight[i];\n                if ( (i+1) == (itemTotal - amountVisible) ) break;\n            }\n                   \n            //Set target index of the carousel buttons\n            setButtonTargetIndex( $( carouselNext ), $( carouselPrev ), 'init', null );\n            \n\n            \n            //set actived item & initialize the height of container\n            setContainerSize( 0 );    \n            $carouselItem.addClass( 'js-is-ready' ); \n            \n            \n            // Activate the current item from carouse\n            setItemState( 0 );    \n\n\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Initialize carousel\n\t\t\t ---------------------------\n\t\t\t */  \n\t\t\tconst eachItemOldWidth  = $carousel.width()/amountVisible;\n\n            eachItemNewWidth = ( $carouselWrapper.width() / amountVisible );\n            \n            if ( carouselDir == 'horizontal' ) {\n                $carousel.css( 'width', itemTotal * eachItemOldWidth );\n            }\n\n            \n\t\t\t// Re-order all items\n\t\t\tcarouselReOrder();\n\n\n\n\t\t\t//default button status\n\t\t\t$( carouselPrev ).addClass( 'is-disabled' ).data( 'disabled', 1 );\t\n\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Re-order all items\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t\n\t\t\tfunction carouselReOrder() {\n\n\t\t\t\t\n                //Initialize the width and height of each item\n\t\t\t\tif ( carouselDir == 'horizontal' ) {\n                    const boxWidth = eachItemNewWidth;\n                    TweenMax.set($carouselItem, {\n                        width: boxWidth,\n                        height: function(i, target) {\n                            return eachItemNewHeight[i];\n                        },\n                        x: function(i, target) {\n                            return i * boxWidth;\n                        }\n                    });\n\n\t\t\t\t} else {\n                    \n                    TweenMax.set($carouselItem, {\n                        height: function(i, target) {\n                            return eachItemNewHeight[i];\n                        },\n                        y: function(i, target) {\n                            let yIncrement = 0;\n                            for (let k = 0; k < eachItemNewHeight.length; k++ ) {    \n                                const tempY = ( typeof eachItemNewHeight[k-1] === typeof undefined ) ? 0 : eachItemNewHeight[k-1];\n                                yIncrement += tempY;\n                                if ( k == i ) break;\n                            }   \n                            \n                            return yIncrement;\n                        }\n                    });  \n                    \n                }\n   \n\n\t\t\t}\n\n\n\t\t\t\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Move left/up\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t$( carouselNext ).off( 'click' ).on( 'click', $carouselWrapper, function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(carouselSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n                //\n                movePositionWithButton( false, $( this ), e, 'next' );\n\n                //Pause the auto play event\n                clearInterval( $carouselWrapper[0].animatedSlides );\t \n\n                \n\t\t\t});\n\n\t\t\t\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Move right/down\n\t\t\t ---------------------------\n\t\t\t */ \n           \n\t\t\t$( carouselPrev ).off( 'click' ).on( 'click', $carouselWrapper, function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(carouselSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });\n                \n                //\n                movePositionWithButton( false, $( this ), e, 'prev' );\n                \n                //Pause the auto play event\n                clearInterval( $carouselWrapper[0].animatedSlides );\n                \n\t\t\t});\n\t\t\n\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Pagination\n\t\t\t ---------------------------\n\t\t\t */ \n            if ( $( carouselPagination ).length > 0 && $( carouselPagination ).html().length == 0 ) {\n                //Button to add pagination automatically\n                let _dot       = '';\n                _dot += '<ul class=\"uix-hybrid-content-slider__pagination--default\">';\n                for ( let i = 0; i < itemTotal; i++ ) {\n                    _dot += '<li><a data-target-index=\"'+i+'\" href=\"javascript:void(0);\"></a></li>';\n                }\n                _dot += '</ul>';\n\n                $( carouselPagination ).html( _dot ).promise().done( function(){\n                    // Activate the currently selected Pagination\n                    setPaginationState( 0 );\n                });\t\n            } else {\n                // Activate the currently selected Pagination\n                setPaginationState( 0 ); \n            }\n\n            \n\t\t\t$( carouselPagination ).find( 'li a' ).off( 'click' ).on( 'click', $carouselWrapper, function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( carouselPagination ).find( 'li a' ).attr( 'aria-disabled', 'true' );\n                \n                $( carouselPagination ).find( 'li a' )\n                    .delay(carouselSpeed)\n                    .queue(function(next) { $( carouselPagination ).find( 'li a' ).attr( 'aria-disabled', 'false' ); next(); }); \n                \n                \n                //\n                if ( !$( this ).parent().hasClass( 'is-active' ) ) {\n                    \n                    movePositionWithButton( true, $( this ), e, 'next' );\n\n                    //Pause the auto play event\n                    clearInterval( $carouselWrapper[0].animatedSlides );\t\n                }\n\n\t\t\t});\t\t\n            \n            \n\t\t\t//Drag and Drop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $carouselWrapper;\n            let hammerProps      = {};\n\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\tif ( carouseDraggable && carouseDraggableCursor != '' && carouseDraggableCursor != false ) $dragDropTrigger.css( 'cursor', carouseDraggableCursor );\n\n\t\t\tif ( !carouseDraggable ) {\n\t\t\t\thammerProps = {\n\t\t\t\t\tinputClass: Hammer.TouchInput\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//Mouse event\n\t\t\t//Hammer.js pan event only for touch devices and not for desktop computer Click+Drag\n\t\t\tlet direction;\n            const dragDropElement = $dragDropTrigger[0],\n\t\t\t\t  dragDropMC      = new Hammer( dragDropElement, hammerProps );\n\t\t\t\n            let elAnim = true;\n            let targetIndex = 0;\n\n            //Temporarily store arrays as strings\n            //!!!important ///////////////////////////////////////\n            //!!! Prevent dragging events from nesting multiple \n            //!!! times to reduce subscripts.\n            //!!!important ///////////////////////////////////////\n            const allHeightStr = eachItemNewHeight.toString();\n\n\n            // let the pan gesture support all directions.\n            // this will block the vertical scrolling on a touch-device while on the element\n            dragDropMC.get('pan').set({ direction: Hammer.DIRECTION_ALL });\n\t\t\t\n\t\t\tdragDropMC.on( 'press panright panleft panup pandown', function( ev ) {\n\n\t\t\t\t//Set the direction in here\n\t\t\t\tdirection = ev.type;\n\n                \n                \n                //Get the current item index\n                targetIndex = $( ev.target ).data( 'index' );\n                if ( typeof targetIndex === typeof undefined ) targetIndex = $( ev.target ).closest( '.uix-hybrid-content-slider__item' ).data( 'index' );\n                if ( typeof targetIndex === typeof undefined ) targetIndex = $( ev.target ).find( '.uix-hybrid-content-slider__item' ).data( 'index' );\n\n                switch ( direction ) {\n                    case 'panleft':\n                    case 'panup':\n\n                        targetIndex = targetIndex + 1;\n\n                        break;\n\n                    case 'panright':\n                    case 'pandown':\n\n                        targetIndex = targetIndex;\n\n                        break;                 \n\n                }\n                \n                \n                \n                //Determine whether it is the first or the last    \n                let currentIsFirstOrLast = false;\n                const firstItemOffset = ( carouselDir == 'horizontal' ) ? $carousel.find( '[data-index=\"0\"]' )[0]._gsTransform.x : $carousel.find( '[data-index=\"0\"]' )[0]._gsTransform.y;\n                \n                const maxMoveOffset = ( carouselDir == 'horizontal' ) ? -eachItemNewWidth*(itemTotal-amountVisible) : -totalItemsHeight;\n\n                \n                //\n                if ( ( direction == 'panright' || direction == 'pandown' ) && firstItemOffset >= 0 ) { //first item\n                    currentIsFirstOrLast = true;\n                }\n\n                if ( ( direction == 'panleft' || direction == 'panup' ) && firstItemOffset <= maxMoveOffset ) { //last item\n                    currentIsFirstOrLast = true;\n                }   \n                \n                \n                \n                //Rebound effect of drag offset \n                //\n                //!important -> Please do not use multiple case conditions, \n                //otherwise it may cause vertical data problems\n\n                if ( carouselDir == 'horizontal' ) {\n                    switch ( direction ) {\n                        case 'panleft':\n\n                            if ( ev.deltaX > -eachItemNewWidth/4 && ev.deltaX < 0 ) {\n                                elAnim = false;  \n                                \n                                const simulationButtonNext = $( carouselNext );\n                                itemUpdates( $carouselWrapper, simulationButtonNext, ev.deltaX, 0.1, true, targetIndex, allHeightStr );\n                            } else {\n                                elAnim = ( currentIsFirstOrLast ) ? false : true;\n                            }\n\n\n                            break;\n                        case 'panright':\n\n                            if ( ev.deltaX < eachItemNewWidth/4 && ev.deltaX > 0 ) {\n                                elAnim = false;  \n                                \n                                const simulationButtonPrev = $( carouselPrev );\n                                itemUpdates( $carouselWrapper, simulationButtonPrev, ev.deltaX, 0.1, true, targetIndex, allHeightStr );\n                            } else {\n                                elAnim = ( currentIsFirstOrLast ) ? false : true;\n                            }\n\n                            break;  \n          \n\n                    }  \n                } else {\n                    \n                    const draggingItemHeight = ( typeof allHeightStr.split( ',' )[targetIndex-1] === typeof undefined ) ? allHeightStr.split( ',' )[targetIndex] : allHeightStr.split( ',' )[targetIndex-1];\n                    \n                    \n                    \n                    switch ( direction ) {\n                        case 'panup':\n\n                            if ( ev.deltaY > -draggingItemHeight/4 && ev.deltaY < 0 ) {\n                                elAnim = false;  \n                                \n                                const simulationButtonNext = $( carouselNext );\n                                itemUpdates( $carouselWrapper, simulationButtonNext, ev.deltaY, 0.1, true, targetIndex, allHeightStr );\n                            } else {\n                                elAnim = ( currentIsFirstOrLast ) ? false : true;\n                            }\n\n\n                            break;\n\n                        case 'pandown':\n\n                            if ( ev.deltaY < draggingItemHeight/4 && ev.deltaY > 0 ) {\n                                elAnim = false;  \n                                \n                                const simulationButtonPrev = $( carouselPrev );\n                                itemUpdates( $carouselWrapper, simulationButtonPrev, ev.deltaY, 0.1, true, targetIndex, allHeightStr );\n                            } else {\n                                elAnim = ( currentIsFirstOrLast ) ? false : true;\n                            }\n\n\n                            break;            \n\n                    }       \n                    \n                }\n             \n\n\t\t\t});\n\n\t\t\t\n\t\t\tdragDropMC.on( 'panend', function( ev ) {\n                \n                if ( elAnim ) {\n\n                    \n                    //Use the direction in here\n                    //You know the pan has ended\n                    //and you know which action they were taking\n                    //\n                    //!important -> Please do not use multiple case conditions, \n                    //otherwise it may cause vertical data problems\n                    \n                    if ( carouselDir == 'horizontal' ) {\n                        switch ( direction ) {\n                            case 'panleft':\n\n                                const deltaNext = -eachItemNewWidth;\n                                const simulationButtonNext = $( carouselNext );\n                                itemUpdates( $carouselWrapper, simulationButtonNext, deltaNext, null, false, targetIndex, allHeightStr );\n\n                                break;\n\n                            case 'panright':\n\n                                const deltaPrev = eachItemNewWidth;\n                                const simulationButtonPrev = $( carouselPrev );\n                                itemUpdates( $carouselWrapper, simulationButtonPrev, deltaPrev, null, false, targetIndex, allHeightStr );\n\n                                break;                 \n\n                        }  \n                        \n                    } else {\n                        switch ( direction ) {\n                            case 'panup':\n\n                                const deltaNext = -1;\n                                const simulationButtonNext = $( carouselNext );\n                                itemUpdates( $carouselWrapper, simulationButtonNext, deltaNext, null, false, targetIndex, allHeightStr );\n\n                                break;\n\n                            case 'pandown':\n\n                                const deltaPrev = -1;\n                                const simulationButtonPrev = $( carouselPrev );\n                                itemUpdates( $carouselWrapper, simulationButtonPrev, deltaPrev, null, false, targetIndex, allHeightStr );\n\n                                break;                 \n\n                        }     \n                    }\n                    \n                    \t\t    \n                } else {    \n                    \n                    //Rebound effect of drag offset \n                    itemUpdates( $carouselWrapper, null, tempItemsPos, null, false, targetIndex, allHeightStr);\n                }\n                \n                //Pause the auto play event\n                clearInterval( $carouselWrapper[0].animatedSlides );\n\n\t\t\t});\t\n            \n\n                    \n            //Autoplay Slider\n            //-------------------------------------\t\t\n            if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                sliderAutoPlay( playTimes, dataTiming, dataLoop );\n\n                $carouselWrapper.on({\n                    mouseenter: function() {\n                        clearInterval( $carouselWrapper[0].animatedSlides );\n                    },\n                    mouseleave: function() {\n                        sliderAutoPlay( playTimes, dataTiming, dataLoop );\n                    }\n                });\t\n\n            }\n            \n            \n            /*\n             * Trigger slider autoplay\n             *\n             * @param  {Function} playTimes      - Number of times.\n             * @param  {Number} timing           - Autoplay interval.\n             * @param  {Boolean} loop            - Gives the slider a seamless infinite loop.\n             * @return {Void}             \n             */\n            function sliderAutoPlay( playTimes, timing, loop ) {\t\n\n                $carouselWrapper[0].animatedSlides = setInterval( function() {\n\n                    const autoMove = function( indexGo ) {\n\n                        // Retrieve the position (X,Y) of an element \n                        const moveX = eachItemNewWidth * indexGo;\n\n                        let moveYIncrement = 0;\n                        for (let k = 0; k < eachItemNewHeight.length; k++ ) {    \n                            const tempY = ( typeof eachItemNewHeight[k-1] === typeof undefined ) ? 0 : eachItemNewHeight[k-1];\n                            moveYIncrement += tempY;\n                            if ( k == indexGo ) break;\n                        }\n                        const moveY = moveYIncrement;\n\n                        //\n                        const delta = ( carouselDir == 'horizontal' ) ? -moveX : -moveY;\n\n                        //\n                        itemUpdates( $carouselWrapper, 'auto', delta, null, false, indexGo, eachItemNewHeight );    \n                    }; \n                    \n                    playTimes = parseFloat( $carouselItem.filter( '.is-active' ).index() );\n                    playTimes++;\n                    \n                    \n                    if ( !loop ) {\n                        if ( playTimes < itemTotal && playTimes >= 0 ) {\n                            autoMove( playTimes );\n                        }\n                    } else {\n                        if ( playTimes == itemTotal ) playTimes = 0;\n                        if ( playTimes < 0 ) playTimes = itemTotal-1;\t\t\n                        \n                        autoMove( playTimes );\n                    }\n\n                }, timing );\t\n            }\n\n\n            \n\t\t\t\n\t\t\t/*\n\t\t\t * Transition Between Items\n\t\t\t *\n\t\t\t * @param  {Element} wrapper            - Wrapper of carousel.\n\t\t\t * @param  {?Element|String} curBtn     - The button that currently triggers the move.\n             * @param  {Number|Array} delta         - The value returned will need to be adjusted according to the offset rate.\n             * @param  {?Number} speed              - Sliding speed. Please set to 0 when rebounding.\n             * @param  {Boolean} dragging           - Determine if the object is being dragged.\n             * @param  {!Number} indexGo            - The target item index.\n             * @param  {String|Array} itemsHeight   - Return all items height.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction itemUpdates( wrapper, curBtn, delta, speed, dragging, indexGo, itemsHeight ) {\n                \n                if ( speed == null ) speed = carouselSpeed/1000;\n                \n\t\t\t\tlet $curWrapper = wrapper.children( '.uix-hybrid-content-slider__items' ),  //Default: $carousel\n\t\t\t\t\t$curItems   = $curWrapper.find( '> div' ); //Default: $carouselItem\n           \n                \n                //Get height constant\n                const itemsHeightArr = [];\n                const _itemsHeight = itemsHeight.toString().split( ',' );\n                _itemsHeight.forEach( function( element ) {\n                    itemsHeightArr.push( parseFloat(element) );\n                });\n                \n                \n                //Check next or previous event\n                let btnType = 'init';\n                if ( curBtn != null && curBtn != 'auto' ) {\n                    if ( typeof curBtn.attr( 'class' ) !== typeof undefined ) {\n                        btnType = ( curBtn.attr( 'class' ).indexOf( '--next' ) >=0 ) ? 'next' : 'prev';\n                    } else {\n                        btnType = 'next';\n                    }\n                    \n                }\n                \n                //Check next or previous event ( Autoplay )\n                if ( curBtn == 'auto' ) btnType = 'next';;\n\n            \n\t\t\t\t//Clone the first element to the last position\n\t\t\t\tif ( carouselDir == 'horizontal' ) {\n\n                    const boxWidth = eachItemNewWidth;\n                    \n                    TweenMax.to( $curItems, speed, {\n                        x: function(i, target) {\n\n                            let xIncrement = 0;\n\n                            for (let k = 0; k < itemTotal; k++ ) {    \n                                const tempX = ( k == 0 ) ? 0 : boxWidth;\n                                xIncrement += tempX;\n                                if ( k == i ) break;\n                            }   \n \n                            \n                            \n                            if ( Array.isArray( delta ) ) {\n                                \n                                //Rebound effect of drag offset \n                                return ( delta.length == 0 ) ? xIncrement : delta[i];     \n                                \n                            } else {\n                                \n                                if ( !dragging ) {\n                                    //console.log( 'btnType: ' + btnType + ' indexGo: ' + indexGo );\n\n\n                                    let curWidthIncrement = 0;\n                                    \n                                    for (let m= 0; m < itemTotal; m++ ) {    \n                                        const tempW = ( m == 0 ) ? 0 : boxWidth;\n                                        curWidthIncrement += tempW;\n                                        if ( m == ( btnType == 'next' ? indexGo : indexGo-1 ) ) break;\n                                    } \n\n                                    return xIncrement + -curWidthIncrement;  \n                                } else {\n                                    //console.log( 'dragging...' );\n                                    const x = Math.round(target._gsTransform.x / boxWidth ) * boxWidth;\n                                    return x + delta; \n                                }\n                            }\n                            \n                        },\n                        onComplete : function() {\n                            \n                            if ( !dragging && !Array.isArray( delta ) ) {\n                                \n                                //Get index of current element\n                                let currentIndex = 0;\n\t\t\t\t   \n                                \n                                //The state of the control button\n                                setButtonState( Math.round( $curItems.first()[0]._gsTransform.x ), Math.round( ($curItems.length - amountVisible) * boxWidth ) );  \n\n                                //Initialize the height of container\n                                currentIndex = Math.round( $curItems.first()[0]._gsTransform.x/boxWidth );\n                                setContainerSize( currentIndex );  \t \n\n                                //Set target index of the carousel buttons\n                                setButtonTargetIndex( $( carouselNext ), $( carouselPrev ), btnType, ( btnType == 'next' ? Math.abs( currentIndex ) : Math.abs( currentIndex ) + 1 ) );   \n                                \n                                // Activate the currently selected Pagination\n                                setPaginationState( Math.abs( currentIndex ) );\n                                \n                                // Activate the current item from carouse\n                                setItemState( Math.abs( currentIndex ) );     \n                                \n                                //Store the latest position (X,Y) in a temporary variable\n                                tempItemsPos = createStoreLatestPosition();  \n                                \n                            }\n                            \n\n\t\t\t\t\t\t}\n                    });    \n              \n\n\t\t\t\t} else {\n                    \n                    TweenMax.to( $curItems, speed, {\n                        y: function(i, target) {\n                            \n                            let yIncrement = 0;\n\n                            for (let k = 0; k < itemsHeightArr.length; k++ ) {    \n                                const tempY = ( typeof itemsHeightArr[k-1] === typeof undefined ) ? 0 : itemsHeightArr[k-1];\n                                yIncrement += tempY;\n                                if ( k == i ) break;\n                            }  \n                            \n                            if ( Array.isArray( delta ) ) {\n                                \n                                //Rebound effect of drag offset \n                                return ( delta.length == 0 ) ? yIncrement : delta[i];   \n                                \n                            } else {\n                                \n                                if ( !dragging ) {\n                                    //console.log( 'btnType: ' + btnType + ' indexGo: ' + indexGo );\n\n\n                                    let curHeightIncrement = 0;\n\n                                    for (let m = 0; m < itemsHeightArr.length; m++ ) {    \n                                        const tempH = ( typeof itemsHeightArr[m-1] === typeof undefined ) ? 0 : itemsHeightArr[m-1];\n                                        curHeightIncrement += tempH;\n                                        if ( m == ( btnType == 'next' ? indexGo : indexGo-1 ) ) break;\n                                    }   \n                                    \n\n                                    return yIncrement + -curHeightIncrement;  \n                                } else {\n                                    //console.log( 'dragging...' );\n                                    const draggingItemHeight = ( typeof itemsHeightArr[indexGo-1] === typeof undefined ) ? itemsHeightArr[indexGo] : itemsHeightArr[indexGo-1];\n                                 \n                                    const y = Math.round(target._gsTransform.y / draggingItemHeight ) * draggingItemHeight;\n                                    return y + delta; \n                                }\n                            }\n\n                            \n                            \n                        },\n                        onComplete : function() {\n                            \n                            \n                            if ( !dragging && !Array.isArray( delta ) ) {\n                                \n                                //The state of the control button\n                                setButtonState( $curItems.first()[0]._gsTransform.y, totalItemsHeight );   \n\n                                //Set target index of the carousel buttons\n                                setButtonTargetIndex( $( carouselNext ), $( carouselPrev ), btnType, indexGo ); \n\n                                //set actived item & initialize the height of container\n                                setContainerSize( ( btnType == 'next' ? indexGo : indexGo-1 ) );\n                                \n                                // Activate the currently selected Pagination\n                                setPaginationState( ( btnType == 'next' ? indexGo : indexGo-1 ) ); \n                    \n                                // Activate the current item from carouse\n                                setItemState( ( btnType == 'next' ? indexGo : indexGo-1 ) );               \n                 \n                                //Store the latest position (X,Y) in a temporary variable\n                                tempItemsPos = createStoreLatestPosition();   \n                                \n                                \n                            }\n                              \n\n\t\t\t\t\t\t}\n                    });         \n                    \n                }\n\n\n\n\n\t\t\t}\n\n            \n\t\t\n\t\t\t/*\n\t\t\t * Use the button to trigger the transition between the two sliders\n\t\t\t *\n\t\t\t * @param  {Boolean} paginationEnable   - Determine whether it is triggered by pagination\n\t\t\t * @param  {Element} $btn               - The button that currently triggers the move.\n             * @param  {Object} event               - Bind an event handler to the \"click\" JavaScript event,\n             * @param  {String} type                - Move next or previous.\n\t\t\t * @return {Void}\n\t\t\t */\n            function movePositionWithButton( paginationEnable, $btn, event, type ) {\n   \t\t\t\tconst $curWrapper = $( event.data[0] ),\n\t\t\t\t\t  //Protection button is not triggered multiple times.\n                      btnDisabled = $btn.data( 'disabled' ),\n                      \n                      //Get current button index\n                      tIndex      = parseFloat( $btn.attr( 'data-target-index' ) );\n                \n\n                // Retrieve the position (X,Y) of an element \n                let moveX = eachItemNewWidth,\n                    moveY = ( typeof eachItemNewHeight[tIndex-1] === typeof undefined ) ? 0 : eachItemNewHeight[tIndex-1];   \n                \n                if ( paginationEnable ) {\n                    \n                    //--\n                    moveX = eachItemNewWidth * tIndex;\n                    \n                    //--\n                    let moveYIncrement = 0;\n                    for (let k = 0; k < eachItemNewHeight.length; k++ ) {    \n                        const tempY = ( typeof eachItemNewHeight[k-1] === typeof undefined ) ? 0 : eachItemNewHeight[k-1];\n                        moveYIncrement += tempY;\n                        if ( k == tIndex ) break;\n                    }\n                    moveY = moveYIncrement;\n                    \n                }\n                \n\n                \n                //\n                let delta;\n                if ( type == 'next' ) {\n                    delta = ( carouselDir == 'horizontal' ) ? -moveX : -moveY;\n                } else {\n                    delta = ( carouselDir == 'horizontal' ) ? moveX : moveY;\n                }\n                \n               \n\t\t\t\tif ( typeof btnDisabled === typeof undefined ) {\t\n\t\t\t\t\titemUpdates( $curWrapper, $btn, delta, null, false, tIndex, eachItemNewHeight );\n                    \n\t\t\t\t}    \n            }  \n            \n\n\n\t\t\t/*\n\t\t\t * Activate the currently selected Pagination\n\t\t\t *\n             * @param  {Number} index          - Get index of current element.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setPaginationState( index ) {\n                $( carouselPagination ).find( 'li' ).removeClass( 'is-active' );\n                $( carouselPagination ).find( 'li a[data-target-index=\"'+index+'\"]' ).parent().addClass( 'is-active' );   \n            }   \n                 \n\t\t\t/*\n\t\t\t * Activate the current item from carouse\n\t\t\t *\n             * @param  {Number} index          - Get index of current element.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setItemState( index ) {\n                $carouselItem.removeClass( 'is-active' );\n                $carouselItem.eq( index ).addClass( 'is-active' );   \n            }      \n            \n\t\t\t/*\n\t\t\t * Store the latest position (X,Y) in a temporary variable\n\t\t\t *\n\t\t\t * @return {Array}              - Return to a new position.\n\t\t\t */\n            function createStoreLatestPosition() {\n                const pos = [];\n                // Retrieve the temporary variable of each item.\n                $carouselItem.each( function() {\n                    pos.push( ( carouselDir == 'horizontal' ? $( this )[0]._gsTransform.x : $( this )[0]._gsTransform.y ) );\n                }); \n                return pos;\n            }  \n\n     \n\t\t\t/*\n\t\t\t * Initialize the height of container\n\t\t\t *\n             * @param  {Number} index          - Get index of current element.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setContainerSize( index ) {\n                \n                const _h = eachItemNewHeight[Math.abs( index )];\n                if ( typeof _h !== typeof undefined ) {\n                    TweenMax.to( $carousel, 0.2, { \n                        height: eachItemNewHeight[Math.abs( index )]\n                    } );\t    \n                }\n \n            }   \n              \n           \n            \n   \n\t\t\t/*\n\t\t\t * Set target index of the carousel buttons\n\t\t\t *\n\t\t\t * @param  {Element} nextBtn      - The next move button.\n\t\t\t * @param  {Element} prevBtn      - The previous move button.\n             * @param  {String} type          - The type of button is triggered. Values: next, prev, init\n             * @param  {?Number} indexGo      - The target item index.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setButtonTargetIndex( nextBtn, prevBtn, type, indexGo ) {\n                \n                switch ( type ) {\n                    case 'init':\n                        nextBtn.attr({\n                            'data-target-index': 1\n                        });   \n                        prevBtn.attr({\n                            'data-target-index': 0\n                        });   \n                        \n                        break;\n\n                    case 'next':\n                        let nextBtnOldTargetIndex1 = parseFloat( nextBtn.attr( 'data-target-index' ) );\n                        let prevBtnOldTargetIndex1 = parseFloat( prevBtn.attr( 'data-target-index' ) );\n\n                        if ( indexGo != null ) {\n                            nextBtnOldTargetIndex1 = indexGo;\n                            prevBtnOldTargetIndex1 = indexGo-1;\n                        }\n\n                        nextBtn.attr({\n                            'data-target-index': nextBtnOldTargetIndex1+1\n                        });   \n                        prevBtn.attr({\n                            'data-target-index': prevBtnOldTargetIndex1+1\n                        });  \n                        \n                        break;  \n                        \n                    case 'prev':\n                        let nextBtnOldTargetIndex2 = parseFloat( nextBtn.attr( 'data-target-index' ) ) - 1;\n                        let prevBtnOldTargetIndex2 = parseFloat( prevBtn.attr( 'data-target-index' ) ) - 1;\n\n                        if ( indexGo != null ) {\n                            nextBtnOldTargetIndex2 = indexGo;\n                            prevBtnOldTargetIndex2 = indexGo-1;\n                        } \n\n\n                        nextBtn.attr({\n                            'data-target-index': nextBtnOldTargetIndex2\n                        });   \n                        prevBtn.attr({\n                            'data-target-index': prevBtnOldTargetIndex2\n                        });   \n                        \n                        break;  \n                }      \n            }              \n            \n\t\t\t/*\n\t\t\t * The state of the control button\n\t\t\t *\n             * @param  {Number} firstOffset          - Get the computed Translate X or Y values of a given first DOM element.\n             * @param  {Number} lastOffset           - Get the computed Translate X or Y values of a given last DOM element.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setButtonState( firstOffset, lastOffset ) {\n                \n                if ( Math.abs( firstOffset ) == lastOffset ) {\n                    $( carouselNext ).addClass( 'is-disabled' ).data( 'disabled', 1 );\n                    $( carouselPrev ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                } else if ( Math.round( firstOffset ) == 0 ) {\n                    $( carouselNext ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                    $( carouselPrev ).addClass( 'is-disabled' ).data( 'disabled', 1 );\n                } else {\n                    $( carouselNext ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                    $( carouselPrev ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                }\n            }   \n      \n\t\t});\t\t\n\n\t\t\n    };\n\n    \n    module.components.pageLoaded.push( module.HYBRID_CONTENT_SLIDER.pageLoaded );\n\t\n\n\treturn class HYBRID_CONTENT_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Hover Delay Interaction -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const HOVER_DELAY_INTERACTION = ( ( module, $, window, document ) => {\n\tif ( window.HOVER_DELAY_INTERACTION === null ) return false;\n\t\n\t\n    module.HOVER_DELAY_INTERACTION               = module.HOVER_DELAY_INTERACTION || {};\n    module.HOVER_DELAY_INTERACTION.version       = '0.0.1';\n    module.HOVER_DELAY_INTERACTION.documentReady = function( $ ) {\n\n\t\t\n\t\tconst delayTime = 250;\n\t   \n\t\t$( '.uix-hover-delay-el' ).on( 'mouseover', function() {\n\n\t\t\tconst $this = $( this );\n\n\t\t\tif ($this.prop('hoverTimeout' ) ) {\n\t\t\t\t$this.prop('hoverTimeout', clearTimeout($this.prop('hoverTimeout')));\n\t\t\t}\n\n\t\t\t$this.prop( 'hoverIntent', setTimeout( function() {\n\t\t\t\t$this.find( '> div' ).html( 'Okay!' );\n\t\t\t}, delayTime ) );\n\t\t\t\n\t\t}).on( 'mouseleave', function() {\n\t\t\tconst $this = $( this );\n\n\t\t\tif ($this.prop( 'hoverIntent' ) ) {\n\t\t\t\t$this.prop( 'hoverIntent', clearTimeout($this.prop('hoverIntent')));\n\t\t\t}\n\n\t\t\t$this.prop( 'hoverTimeout', setTimeout( function() {\n\t\t\t\t$this.find( '> div' ).html( 'Touch Me' );\n\t\t\t}, delayTime ) );\n\t\t});\n\t\t\n    };\n\n    module.components.documentReady.push( module.HOVER_DELAY_INTERACTION.documentReady );\n\t\n\n\treturn class HOVER_DELAY_INTERACTION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- Image Shapes -->\n *************************************\n */\t\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const IMAGE_SHAPES = ( ( module, $, window, document ) => {\n\tif ( window.IMAGE_SHAPES === null ) return false;\n\t\n\t\n\t\n    module.IMAGE_SHAPES               = module.IMAGE_SHAPES || {};\n    module.IMAGE_SHAPES.version       = '0.0.1';\n    module.IMAGE_SHAPES.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\t//  Initialize\n\t\tshapesInit( windowWidth );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth  = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tshapesInit( windowWidth );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\n\t\t/*\n\t\t * Initialize Shapes\n\t\t *\n\t\t * @param  {Number} w         - Returns width of browser viewport\n\t\t * @param  {Number} h         - Returns height of browser viewport\n\t\t * @return {Void}\n\t\t */\n\t\tfunction shapesInit( w ) {\n\t\t\t\n\t\t\t$( '.uix-shape-img' ).each( function()  {\n\t\t\t\tconst $this          = $( this );\n                \n\t\t\t\tconst ranID          = 'uix-shape-img-' + UixGUID.create(),\n\t\t\t\t\t  svgPath        = $this.data( 'path' ),\n\t\t\t\t\t  svgW           = parseFloat( $this.data( 'svg-const-width' ) ),\n\t\t\t\t\t  svgH           = parseFloat( $this.data( 'svg-const-height' ) ),\n\t\t\t\t\t  svgRatio       = svgW / svgH,\n                      curImgURL      = $this.find( 'img' ).attr( 'src' );\n                \n                let imgW           = parseFloat( $this.data( 'img-width' ) );\n\t\t\t\tlet\timgRatio       = null,\n\t\t\t\t\tbothWidthRatio = null,\n\t\t\t\t\tnewSvgHeight   = null,\t\t\n\t\t\t\t\tnewImgHeight   = null,\t\t\n\t\t\t\t\tsvgOut         = '',\n\t\t\t\t\tcurImgW        = imgW,\n\t\t\t\t\tcurImgH        = null;\n\n\t\t\t\tif ( imgW > w ) {\n\t\t\t\t\timgW = w;\n\t\t\t\t}\n\n\n\t\t\t\t//Check if the picture is loaded on the page\n\t\t\t\tconst img = new Image();\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tcurImgH   = $this.find( 'img' ).height();\n\t\t\t\t\tcurImgW   = $this.find( 'img' ).width();\n\t\t\t\t\timgRatio  = curImgW / curImgH;\t\n\n\t\t\t\t\t//Add a custom shape SVG to the page\n\t\t\t\t\tbothWidthRatio = imgW / svgW;\n\t\t\t\t\tnewSvgHeight   = imgW / svgRatio;\n\t\t\t\t\tnewImgHeight   = svgW / imgRatio;\n\n\t\t\t\t\tsvgOut += '<svg fill-rule=\"evenodd\" clip-rule=\"evenodd\" width=\"'+imgW+'px\" height=\"'+newSvgHeight+'px\" viewBox=\"0 0 '+imgW+' '+newSvgHeight+'\" >';\n\t\t\t\t\tsvgOut += '\t<pattern id=\"'+ranID+'\" patternUnits=\"userSpaceOnUse\" width=\"'+svgW+'\" height=\"'+svgH+'\">';\n\t\t\t\t\tsvgOut += '\t\t  <image xlink:href=\"'+curImgURL+'\" width=\"'+svgW+'px\" height=\"'+newImgHeight+'px\" x=\"0\" y=\"0\" />';\n\t\t\t\t\tsvgOut += '\t</pattern> ';   \n\t\t\t\t\tsvgOut += '\t<path fill=\"url(#'+ranID+')\" transform=\"scale('+bothWidthRatio+')\" d=\"'+svgPath+'\"/>';\n\t\t\t\t\tsvgOut += '</svg>';\t\n\n\n\t\t\t\t\t$this.addClass( 'is-active' ).html( svgOut );\t\t\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\timg.src = curImgURL;\n\n\t\t\t \n\t\n\n\t\t\t});\n\t\t\t\n\t\t}\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.IMAGE_SHAPES.documentReady );\n\t\n\n\treturn class IMAGE_SHAPES {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Infinite Scrolling Element -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const INFINITE_SCROLLING_EL = ( ( module, $, window, document ) => {\n\tif ( window.INFINITE_SCROLLING_EL === null ) return false;\n\t\n\t\n\t\n    module.INFINITE_SCROLLING_EL               = module.INFINITE_SCROLLING_EL || {};\n    module.INFINITE_SCROLLING_EL.version       = '0.0.2';\n    module.INFINITE_SCROLLING_EL.documentReady = function( $ ) {\n\n\t\t$( '.uix-infinite-scrolling' ).each( function() {\n\n\t\t\tconst $this       = $( this );\n            \n\t\t\tlet\tspeed       = $this.data( 'speed' );\n            \n\t\t\tif ( typeof speed === typeof undefined ) {\n\t\t\t\tspeed = 3000;\n\t\t\t}\n\n            \n\t\t\tconst $list = $this.find( '> ul' );\n            const $clonedList = $list.clone();\n            \n            \n            //Calculate the total width\n            let listWidth = $list.find( 'li:first' ).width();\n\n            $list.find( 'li' ).each(function(i) {\n                listWidth += $(this, i).width();\n            });\n            \n            \n            // Set the width of the outer container to match the width of the content\n            $this.css( 'width', listWidth + 'px' );\n        \n            \n            //\n            $list.add( $clonedList );\n\n            $clonedList.addClass( 'cloned' ).appendTo( $this );\n\n            //TimelineMax\n            const tl = new TimelineMax({\n                repeat: -1,\n                paused: true\n            });\n\n            const time = speed/1000;\n\n            tl.fromTo($list, time, {\n                rotation: 0.01,\n                x: 0\n            },{\n                force3D: true,\n                x: -listWidth,\n                ease: Linear.easeNone\n            },0)\n\n            .fromTo($clonedList, time, {\n                rotation: 0.01,\n                x: listWidth\n            },{\n                force3D: true,\n                x: 0,\n                ease: Linear.easeNone\n            },0)\n            \n            .set($list, {\n                force3D: true,\n                rotation: 0.01,\n                x: listWidth\n            })\n            \n            .to($clonedList, time, {\n                force3D: true,\n                rotation: 0.01,\n                x: -listWidth,\n                ease: Linear.easeNone\n            },time)\n            \n            .to($list, time, {\n                force3D: true,\n                rotation: 0.01,\n                x: 0,\n                ease: Linear.easeNone\n            },time)\n            \n            .progress(1)\n            .progress(0)\n            .play();\n\n            //Pause/Play\t\t\n            $this.on( 'mouseenter', function() {\n                tl.pause();\n            }).on( 'mouseleave', function() {\n                tl.play();\n            });  \n\n\t\t\t\n\t\t});\n\t\t\n    };\n\n    module.components.documentReady.push( module.INFINITE_SCROLLING_EL.documentReady );\n\t\n\n\treturn class INFINITE_SCROLLING_EL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Lava-Lamp Style Menu -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const LAVA_LAMP_STYLE_MENU = ( ( module, $, window, document ) => {\n\tif ( window.LAVA_LAMP_STYLE_MENU === null ) return false;\n\t\n\t\n\t\n    module.LAVA_LAMP_STYLE_MENU               = module.LAVA_LAMP_STYLE_MENU || {};\n    module.LAVA_LAMP_STYLE_MENU.version       = '0.0.3';\n    module.LAVA_LAMP_STYLE_MENU.documentReady = function( $ ) {\n\n\n\t\t\n\t\tconst $menuContainer = $( '.uix-lavalamp-menu__container' ),\n\t\t      menu           = 'ul.uix-lavalamp-menu',\n\t\t\t  followEl       = menu + ' .uix-lavalamp-menu__slide-line';\n\t\t\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $menuContainer.length == 0 ) return false;\n\t\t\n\n\t\t\n\t\t// adds sliding underline HTML\n\t\t$( menu ).append('<span class=\"uix-lavalamp-menu__slide-line\"></span>');\n\n\t\t// set initial position of element\n\t\tTweenMax.set( followEl, {\n\t\t\tcss: {\n\t\t\t\twidth: 0,\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\tfunction mouseFollowEv( index ) {\n\t\t\t\n\t\t\tconst $this      = $( menu + ' > li' ).eq( index ).find( 'a' ),\n\t\t\t      offset     = $this.offset(),\n                  offsetBody = $( '.uix-lavalamp-menu__container' ).offset(); //find the offset of the wrapping div  \n\n\t\t\t\n\t\t\t//Activate navigation style\n\t\t\t$( menu + ' > li' ).removeClass( 'is-active' );\n\t\t\t$this.parent().addClass( 'is-active' );\n\t\t\t\n\t\t\t// GSAP animate to clicked menu item\n\t\t\tTweenMax.to( followEl, 1, {\n\t\t\t\tcss: {\n\t\t\t\t\twidth  : parseFloat( $this.outerWidth() + 0 ) + 'px',\n\t\t\t\t\tx      : ( offset.left - offsetBody.left ) + 'px'\n\t\t\t\t},\n\t\t\t\tease: Elastic.easeOut.config(1, 0.5)\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t\n\t\n\t\t}\n\n\t\t\n\t\t//!import: Please do not try `$( document ).on( MOUSE_EVENT )` to improve performance\n\t\t$( menu + ' > li a' ).on( 'mouseover', function() {\n\t\t\tmouseFollowEv( $( this ).parent().index() );\n\t\t});\n\t\t\n\n\t\t\n\t\tmouseFollowEv( 0 );\n\t\t\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.LAVA_LAMP_STYLE_MENU.documentReady );\n\n\treturn class LAVA_LAMP_STYLE_MENU {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Custom Lightbox -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixApplyAsyncScripts from '@uixkit/core/_global/js/fn/UixApplyAsyncScripts';\nimport '@uixkit/plugins/Miscellaneous/scrollLock';\n\n\nimport '../scss/_style.scss';\n\n\nexport const LIGHTBOX = ( ( module, $, window, document ) => {\n\tif ( window.LIGHTBOX === null ) return false;\n\t\n\t\n\t\n    module.LIGHTBOX               = module.LIGHTBOX || {};\n    module.LIGHTBOX.version       = '0.2.2';\n    module.LIGHTBOX.pageLoaded    = function() {\n\n\t\tif ( $( '.uix-lightbox__container' ).length == 0 ) {\n\t\t\t$( 'body' ).prepend( '<div class=\"uix-lightbox__loading is-loaded uix-t-c\"><i class=\"fa fa-spinner fa-spin\"></i> Loading...</div><a class=\"uix-lightbox__original__close\" href=\"javascript:void(0);\"></a><div class=\"uix-lightbox__container\"><div class=\"uix-lightbox__inner\"><div class=\"uix-lightbox__html\"></div><p class=\"title\"></p></div></div><div class=\"uix-lightbox__container-mask\"></div><div class=\"uix-lightbox__close\"><button type=\"button\"></button></div>' );\n\t\t}\n\t\t\n    \n        \n        // To display the template tag content.\n        $( 'template' ).each( function()  {\n            \n            const _content = $( this ).html( function( index,html ) {\n                                        return html.replace(/[\\r\\n]/g, '' );\n                                    }).context.innerHTML,\n                _id = $( this ).attr( 'id' );\n            \n            //If it is dialog, clone the contents of the <template> into the body\n            if ( \n                typeof _id !== typeof undefined && \n                ! $( 'body' ).hasClass( _id ) && \n                $( '<div>' + _content + '</div>' ).find( '[role=\"dialog\"]' ).length > 0 \n            ) {\n                \n                //reset id\n                $( this ).removeAttr( 'id' );\n                $( 'body' ).addClass( _id );\n                \n                //append content to body\n                $( _content.replace(/role=[\\'\\\"]dialog[\\'\\\"]/, 'role=\"dialog\" id=\"'+_id+'\"' ) ).appendTo( 'body' );\n                \n            }\n\n        });\n        \n  \n\t\t\n\t\tconst innerEl         = '.uix-lightbox__inner',\n\t\t\t  wrapperEl       = '.uix-lightbox__container',\n\t\t\t  loaderEl        = '.uix-lightbox__loading',\n\t\t\t  maskEl          = '.uix-lightbox__container-mask',\n\t\t\t  closeEl         = '.uix-lightbox__close',\n\t\t\t  largeImgCloseEl = '.uix-lightbox__original__close',\n\t\t\t  triggerEl       = '.uix-lightbox__trigger',\n\t\t\t  docURL          = window.location.href,\n\t\t\t  $content        = $( innerEl ).find( '.uix-lightbox__html' ),\n\t\t\t  customWidth     = 1000; //Match the width in the css file;\n\t\t\n\n\t\t//Detect URL change & Fire click event\n\t\twindow.addEventListener( 'popstate', function( e ) {\n\t\t\n\t\t\tlet eleTarget = null;\n\t\t\t\n\t\t\t$( '[data-lb-ajax]' ).each( function() {\n\t\t\t\t\n\t\t\t\tlet prevURL = decodeURIComponent(document.cookie.replace(new RegExp(\"(?:(?:^|.*;)\\\\s*\" + encodeURIComponent( 'uix-lightbox-ajaxURL' ).replace(/[\\-\\.\\+\\*]/g, \"\\\\$&\") + \"\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$\"), \"$1\")) || null;\n\n\t\t\t\tif ( $( this ).attr( 'href' ) === prevURL ) {\n\t\t\t\t\teleTarget = this;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tconst backURL = $( eleTarget ).data( 'lb-ajax-doc-url' );\n\t\t\tif ( typeof backURL != typeof undefined ) {\n\t\t\t\tlightboxClose( backURL );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t$( document ).off( 'click.LIGHTBOX_TRIGGER' ).on( 'click.LIGHTBOX_TRIGGER', triggerEl, function() { \n\n\t\t\tconst $this         = $( this );\n            \n\t\t\tlet\tdataPhoto     = $this.data( 'lb-src' ),\n\t\t\t\tdataHtmlID    = $this.data( 'lb-html' ),\n\t\t\t\tdataFixed     = $this.data( 'lb-fixed' ),\n\t\t\t\tdataMaskClose = $this.data( 'lb-mask-close' ),\n\t\t\t\tdataAjax      = $this.data( 'lb-ajax' ),\n\t\t\t\thtmlContent   = '',\n\t\t\t\timgSrcStr     = '',\n\t\t\t\timgSrcStrToW  = '';\n\t\t\t\n\t\t\n\t\t\tif ( typeof dataFixed === typeof undefined ) {\n\t\t\t\tdataFixed = true;\n\t\t\t}\n\t\t\tif ( typeof dataMaskClose === typeof undefined ) {\n\t\t\t\tdataMaskClose = false;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof dataAjax === typeof undefined ) {\n\t\t\t\tdataAjax = false;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( dataAjax ) {\n\t\t\t\t$( wrapperEl ).addClass( 'js-uix-ajax' );\n\t\t\t\t\n\t\t\t\t//Record current page URL for history\n\t\t\t\tif ( typeof $this.data( 'lb-ajax-doc-url' ) === typeof undefined ) $this.data( 'lb-ajax-doc-url', docURL );\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\t\t\n\t\t\t\n\t\t\t//Display loading\n\t\t\t$( loaderEl ).removeClass( 'is-loaded' );\t\n\t\n\t\t\t//Reset the wrapper position\n\t\t\t$( wrapperEl ).css( 'margin-top', 0 );\t\n\t\t\t\n\n\t\t\tif ( !dataFixed ) {\n\t\t\t\t$( wrapperEl ).addClass( 'js-uix-no-fixed' );\n\t\t\t\t$( closeEl ).addClass( 'is-active' );\n\t\t\t\t\n\t\t\t\t//Initialize the wrapper position\n\t\t\t\t$( wrapperEl ).css( 'margin-top', $( window ).scrollTop() + 'px' );\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//Reset current container type\n\t\t\t$( innerEl ).removeClass( 'js-uix-custom js-uix-pure-image' );\n\t\t\t\n\t\t\n\t\t\t// Locks the page\n\t\t\tif ( !$( wrapperEl ).hasClass( 'js-uix-no-fixed' ) ) {\n\t\t\t\t$.scrollLock( true );\n\t\t\t\t\n\t\t\t\t//Add class for body\n\t\t\t\t//When scrollLock is used, scrollTop value will change\n\t\t\t\t$( 'body' ).addClass( 'scrollLock' );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// Show the lightbox\n\t\t\tconst showLightbox = function() {\n\t\t\t\t$( closeEl ).addClass( 'is-active' );\n\t\t\t\t$( wrapperEl ).show();\n\t\t\t\t$( maskEl ).show();\n\t\t\t\t$( innerEl ).show();\t\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\t// hide the content container\n\t\t\tconst hideLightboxContent = function() {\n\t\t\t\tTweenMax.set( $content, {\n\t\t\t\t\tcss         : {\n\t\t\t\t\t\t'display' : 'none'\n\t\t\t\t\t}\n\t\t\t\t});\t\t\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\t// show the content container\n\t\t\tconst showLightboxContent = function() {\n\t\t\t\tTweenMax.set( $content, {\n\t\t\t\t\tcss         : {\n\t\t\t\t\t\t'display' : 'block'\n\t\t\t\t\t},\n\t\t\t\t\tonComplete  : function() {\n\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\t\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\thideLightboxContent();\n\t\t\t\n\t\t\t\n            ////////////////////////\n            //////// PHOTOS ///////\n            ////////////////////////  \n\t\t\tif ( typeof dataPhoto != typeof undefined && dataPhoto != '' ) {\n\t\t\t\t\n\t\t\t\t//show the lightbox\n\t\t\t\tshowLightbox();\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( dataPhoto.indexOf( '[' ) >= 0 &&  dataPhoto.indexOf( ']' ) >= 0 ) {\n\t\t\t\t\timgSrcStr = JSON.parse( dataPhoto.replace(/([a-zA-Z0-9]+?):/g, '\"$1\":').replace(/'/g,'\"') );\n\t\t\t\t} else {\n\t\t\t\t\timgSrcStr = dataPhoto;\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//Judging whether multiple image sets\n\t\t\t\tif ( Object.prototype.toString.call( imgSrcStr ) =='[object Array]' ) {\n\t\t\t\t\t\n\t\t\t\t\tlet largePhotos = '',\n\t\t\t\t\t\tthumbs      = '';\n\t\t\t\t\t\n\t\t\t\t\timgSrcStrToW = imgSrcStr[0].large;\n\t\t\t\t\t\n\t\t\t\t\t//push the large photos\n\t\t\t\t\tlargePhotos += '<div class=\"uix-lightbox__photo-container uix-lightbox__photo-sets-container\"><a href=\"javascript:\" class=\"uix-lightbox__photo-sets__prev\"></a><a href=\"javascript:\" class=\"uix-lightbox__photo-sets__next\"></a><ul>';\n\t\t\t\t\tfor ( let i = 0; i < imgSrcStr.length; i++ ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst tempID = 'lightbox-' + UixGUID.create();\n\t\t\t\t\t\t\n\t\t\t\t\t\tlargePhotos += '<li>';\n\t\t\t\t\t\tlargePhotos += '\t<a class=\"uix-lightbox__original__link\" data-target-id=\"'+tempID+'-sets-'+i+'\" href=\"javascript:void(0);\">';\n\t\t\t\t\t\tlargePhotos += '\t   <img src=\"'+ imgSrcStr[i].large +'\" alt=\"\">';\n\t\t\t\t\t\tlargePhotos += '\t</a>';\n\t\t\t\t\t\tlargePhotos += '\t<div class=\"uix-lightbox__original__target\" id=\"'+tempID+'-sets-'+i+'\">';\n\t\t\t\t\t\tlargePhotos += '\t   <img src=\"'+ imgSrcStr[i].large +'\" alt=\"\">';\n\t\t\t\t\t\tlargePhotos += '\t</div>';\n\t\t\t\t\t\tlargePhotos += '</li>'; \n\n\t\t\t\t\t}\n\t\t\t\t\tlargePhotos += '</ul></div>';\n\t\t\t\t\t\n\t\t\t\t\t//push the thumbs\n\t\t\t\t\tthumbs += '<div class=\"uix-lightbox__thumb-container\"><ul>';\n\t\t\t\t\tfor ( let k = 0; k < imgSrcStr.length; k++ ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst active = ( k == 0 ) ? 'class=\"is-active\"' : '';\n\t\t\t\t\t\t\n\t\t\t\t\t\tthumbs += '<li '+active+'><img src=\"'+ imgSrcStr[k].thumb +'\" alt=\"\"></li>';\n\t\t\t\t\t}\n\t\t\t\t\tthumbs += '</ul></div>';\n\t\t\t\t\t\n\t\t\t\t\thtmlContent = largePhotos + thumbs;\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t} else {\n\n\t\t\t\t\tconst tempID = 'lightbox-' + UixGUID.create();\n\t\t\t\t\t\n\t\t\t\t\t//Only one image\n\t\t\t\t\timgSrcStrToW = imgSrcStr;\n\t\t\t\t\thtmlContent += '<div class=\"uix-lightbox__photo-container\">';\n\t\t\t\t\thtmlContent += '\t<a class=\"uix-lightbox__original__link\" data-target-id=\"'+tempID+'\" href=\"javascript:void(0);\">';\n\t\t\t\t\thtmlContent += '\t   <img src=\"'+ imgSrcStr +'\" alt=\"\">';\n\t\t\t\t\thtmlContent += '\t</a>';\n\t\t\t\t\thtmlContent += '\t<div class=\"uix-lightbox__original__target\" id=\"'+tempID+'\">';\n\t\t\t\t\thtmlContent += '\t   <img src=\"'+ imgSrcStr +'\" alt=\"\">';\n\t\t\t\t\thtmlContent += '\t</div>';\n\t\t\t\t\thtmlContent += '</div>'; \n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t$content.html( htmlContent ).promise().done( function(){\n\n\t\t\t\t\t//Set current container type\n\t\t\t\t\t$( innerEl ).addClass( 'js-uix-pure-image' );\n\n\t\t\t\t\t//Set container width\n\t\t\t\t\tconst img = new Image();\n\t\t\t\t\timg.src = imgSrcStrToW;\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\t//remove loading\n\t\t\t\t\t\t$( loaderEl ).addClass( 'is-loaded' );\n\n\t\t\t\t\t\t// show the content container\n\t\t\t\t\t\tshowLightboxContent();\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet sw     = window.innerWidth - 30,\n\t\t\t\t\t\t\tow     = this.width,\n\t\t\t\t\t\t\toh     = this.height,\n\t\t\t\t\t\t\tratioH = oh/ow,\n\t\t\t\t\t\t\tratioW = ow/oh,\n\t\t\t\t\t\t\tw      = ( ow > customWidth ) ? customWidth : ow,\n\t\t\t\t\t\t\th;\n\t\t\t\t\n\t\t\t\t\t\tif ( w > sw ) w = sw;\n\t\t\t\t\t\t\n\t\t\t\t\t\th = w * ratioH;\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t//Prevent height overflow\n\t\t\t\t\t\tif ( h > window.innerHeight ) h = window.innerHeight * 0.95;\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t$( innerEl ).css( {\n\t\t\t\t\t\t\t'width': w + 'px'\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t//Don't write variables outside\n\t\t\t\t\t\tconst $lbSetsContainer = $( '.uix-lightbox__photo-container.uix-lightbox__photo-sets-container' );\n\t\t\t\t\t\t$lbSetsContainer.css( {\n\t\t\t\t\t\t\t'height': h + 'px'\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Set a new height & width of inside images\n\t\t\t\t\t\t$content.find( '.uix-lightbox__photo-sets-container ul > li img' ).css( {\n\t\t\t\t\t\t\t'height': h + 'px'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( ! $( 'body' ).hasClass( 'rtl' ) ) {\n\t\t\t\t\t\t\t$content.find( '.uix-lightbox__photo-sets-container' ).css( {\n\t\t\t\t\t\t\t\t'width': 'calc('+ h*ratioW +'px + 6rem)',\n\t\t\t\t\t\t\t\t'margin-left': '-3rem'\n\t\t\t\t\t\t\t} );\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$content.find( '.uix-lightbox__photo-sets-container' ).css( {\n\t\t\t\t\t\t\t\t'width': 'calc('+ h*ratioW +'px + 6rem)',\n\t\t\t\t\t\t\t\t'margin-right': '-3rem'\n\t\t\t\t\t\t\t} );\n\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//If the image is larger than the current window, it will display at the top.\n\t\t\t\t\t\t//Don't write variables outside\n\t\t\t\t\t\tconst $lbTarImg = $( '.uix-lightbox__photo-container > .uix-lightbox__original__target' );\n\t\t\t\t\t\tif ( oh > window.innerHeight ) {\n\t\t\t\t\t\t\t$lbTarImg.addClass( 'uix-lightbox__original__target--imgfull' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$lbTarImg.removeClass( 'uix-lightbox__original__target--imgfull' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t$( innerEl ).find( '> .uix-lightbox__html' ).removeClass( 'js-uix-no-img' );\n\n\t\t\t\t});\t\t\n\n\t\t\t\t\n\t\t\t}\t\n\t\t\t\n\t\t\t\n\t\t\t \n            ////////////////////////\n            //////// HTML /////////\n            ////////////////////////  \n\t\t\tif ( typeof dataHtmlID != typeof undefined && dataHtmlID != '' ) {\n\t\t\t\tdataHtmlID = dataHtmlID.replace( '#', '' );\n\n                \n\t\t\t\tconst $htmlAjaxContainer = $( '#' + dataHtmlID ).find( '.uix-lightbox__content > div' );\n\t\t\n\t\t\t\t//show the lightbox\n\t\t\t\tshowLightbox();\n\t\t\t\t\n\t\t\t\t// Content pushing completed\n\t\t\t\tconst htmlContentLoaded = function() {\n\t\t\t\t\t//remove loading\n\t\t\t\t\t$( loaderEl ).addClass( 'is-loaded' );\n\t\t\t\t\t\n\t\t\t\t\t//Set current container type\n\t\t\t\t\t$( innerEl ).addClass( 'js-uix-custom' );\n\t\t\t\t\t\n\t\t\t\t\t//Set container width\n\t\t\t\t\tif ( $( innerEl ).find( '> .uix-lightbox__html .uix-lightbox__content' ).length > 0 ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( window.innerWidth <= 768 ) {\n\t\t\t\t\t\t\t$( innerEl ).css( 'width', window.innerWidth - 10 + 'px' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$( innerEl ).css( 'width', $( innerEl ).find( '> .uix-lightbox__html .uix-lightbox__content' ).width() + 'px' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t$( innerEl ).find( '> .uix-lightbox__html' ).addClass( 'js-uix-no-img' );\n\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( $( wrapperEl ).hasClass( 'js-uix-ajax' ) ) {\n\n\t\t\t\t\t//Add content to the dynamic AJAX container\n\t\t\t\t\tconst ajaxURL               = $this.attr( 'href' ),\n\t\t\t\t\t\t  ajaxConfig            = dataAjax;\n\n\n\t\t\t\t\t// Modify the URL without reloading the page\n\t\t\t\t\tif( history.pushState ) {\n\t\t\t\t\t\thistory.pushState( null, null, ajaxURL );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocation.hash = ajaxURL;\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.cookie = 'uix-lightbox-ajaxURL=' + ajaxURL;\n\n                    \n                    // Add a request or response interceptor\n                    const axiosInterceptor = axios.interceptors.request.use(function(config) {\n                        // Do something before request is sent\n\n\n                        //\n                        return config;\n                    },\n                    function(error) {\n                        return Promise.reject(error);\n                    });\n\n                    // To send data in the application/x-www-form-urlencoded format instead\n                    const formData = new FormData();\n                    const defaultPostData = {\n                        action  : 'load_singlepages_ajax_content'\n                    };\n                    for(let k in defaultPostData) {\n                        formData.append(k, defaultPostData[k]);\n                    }\n\n                    // Create a request event\n                    axios({\n                        timeout: 15000,\n                        method: ajaxConfig.method,\n                        url: ajaxURL,\n                        data: formData,\n                        responseType: 'text',\n                    })\n                    .then(function (response) {\n\n                        const htmlCode = response.data;\n\n                        $htmlAjaxContainer.html( $( htmlCode ).find( dataAjax.target ).html() ).promise().done( function(){\n\n\n                            $content.html( $( '#' + dataHtmlID ).html() ).promise().done( function(){\n\n                                // Apply some asynchronism scripts\n                                $( document ).UixApplyAsyncScripts({\n                                    lightBox : false,\n                                    ajaxPostList : false\n                                });\n\n\n                                // show the content container\n                                showLightboxContent();\t\n\n                                // Content pushing completed\n                                htmlContentLoaded();\n                            });\t\n\n\n                        });\n\n\n\n                    })  \n                    .catch(function (error) {\n\n                        if (error.response) {\n                            // The request was made and the server responded with a status code\n                            // that falls out of the range of 2xx\n                            const status = error.response.status;\n                            console.log(status);\n                            \n                            if ( status == 404 || status == 405 ) window.location.href = ajaxURL;\n\n\n                        } else if (error.request) {\n                            // The request was made but no response was received\n                            // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n                            // http.ClientRequest in node.js\n                            console.log(error.request);\n\n                            //\n                            window.location.href = ajaxURL;\n\n                        } else {\n                            // If there was a problem, we need to\n                            // dispatch the error condition\n                            console.log(error.message);\n                        }\n                    });\n\n\n                    // Remove an interceptor later\n                    axios.interceptors.request.eject(axiosInterceptor);\n\n\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\t// show the content container\n\t\t\t\t\tshowLightboxContent();\t\n                \n\t\t\t\t\t$content.html( $( '#' + dataHtmlID ).html() ).promise().done( function(){\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Content pushing completed\n\t\t\t\t\t\thtmlContentLoaded();\n\t\t\t\t\t});\t\n\t\t\t\t}//endif $( wrapperEl ).hasClass( 'js-uix-ajax' )\n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t}\t\n\t\t\t\n\t\t\t\n\t\t\treturn false;\n\t\t\t\n\n\t\t}); /* end click event for triggerEl */\n\t\t\n\t\t\n\n        ////////////////////////\n        // Close the lightbox //\n        ////////////////////////   \t\n\t\t$( document ).off( 'click.LIGHTBOX_CLOSE' ).on( 'click.LIGHTBOX_CLOSE', closeEl + ',' + maskEl, function() {\n\t\t\tlightboxClose( docURL );\n\t\t});\t\n\t\t\n\n\t\t\n\t\t$( document ).off( 'click.LIGHTBOX_THUMB' ).on( 'click.LIGHTBOX_THUMB', '.uix-lightbox__thumb-container li', function() {\n\t\t\tlightboxThumbSwitch( $( this ).index(), $( this ) );\n\t\t\t\n\t\t});\t\t\n\t\t\n\t\t\n\t\t\n\t\t$( document ).off( 'click.LIGHTBOX_PHOTO_SETS' ).on( 'click.LIGHTBOX_PHOTO_SETS', '.uix-lightbox__photo-sets-container > a', function() {\n\t\t\tconst $largePhoto = $( this ).closest( '.uix-lightbox__html' ).find( '.uix-lightbox__photo-container.uix-lightbox__photo-sets-container' ),\n\t\t\t\t$thumb      = $( this ).closest( '.uix-lightbox__html' ).find( '.uix-lightbox__thumb-container li' ),\n\t\t\t\ttotal       = $thumb.length,\n\t\t\t\tcurIndex    = $thumb.filter( '.is-active' ).index();\n            \n            let prevIndex   = curIndex - 1,\n\t\t\t\tnextIndex   = curIndex + 1;\n\t\t\t\n\t\t\t\n\t\t\tif ( prevIndex < 0 ) prevIndex = total - 1;\n\t\t\tif ( nextIndex > total - 1 ) nextIndex = 0;\n\t\t\t\n\t\t\t\n\t\t\tif ( $( this ).hasClass( 'uix-lightbox__photo-sets__prev' ) ) {\n\t\t\t\tlightboxThumbSwitch( prevIndex, $thumb.eq( prevIndex ) );\n\t\t\t}\n\t\t\t\n\t\t\tif ( $( this ).hasClass( 'uix-lightbox__photo-sets__next' ) ) {\n\t\t\t\tlightboxThumbSwitch( nextIndex, $thumb.eq( nextIndex ) );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t});\t\t\n\t\t\n        ////////////////////////////////\n        // Close/Open enlarge image //\n        ///////////////////////////////\t\n\t\tif ( window.innerWidth > 768 ) {\n\n\t\t\t$( document ).off( 'click.LIGHTBOX_ORGINAL_LINK' ).on( 'click.LIGHTBOX_ORGINAL_LINK', '.uix-lightbox__original__link', function( e ) {\n\n\t\t\t\t$( '.uix-lightbox__original__target#' + $( this ).data( 'target-id' ) ).addClass( 'is-active' );\n\n\n\t\t\t\tif ( $( this ).closest( '.uix-lightbox__container.js-uix-no-fixed' ).length > 0 ) {\n\t\t\t\t\t$( '.uix-lightbox__container.js-uix-no-fixed, .uix-lightbox__original__target--imgfull' ).addClass( 'no-fixed-imgEnlarged' );\n\t\t\t\t}\n\n\n\t\t\t\t//---\n\t\t\t\t$( 'html' ).css( 'overflow-y', 'hidden' );\n\t\t\t\t$( largeImgCloseEl ).addClass( 'is-active' );\n\n\t\t\t});\t\n\n\t\t\t$( document ).off( 'click.LIGHTBOX_LARGE_IMG_CLOSE' ).on( 'click.LIGHTBOX_LARGE_IMG_CLOSE', largeImgCloseEl, function( e ) {\n\n\t\t\t\t$( '.uix-lightbox__original__target' ).removeClass( 'is-active' );\n\t\t\t\t$( '.uix-lightbox__container.js-uix-no-fixed, .uix-lightbox__original__target--imgfull' ).removeClass( 'no-fixed-imgEnlarged' );\n\n\n\t\t\t\t//---\n\t\t\t\t$( this ).removeClass( 'is-active' );\n\t\t\t\t$( 'html' ).css( 'overflow-y', 'auto' );\n\n\t\t\t});\t\n\t\t}\n\n\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Click thumbnail to show large photo\n\t\t *\n\t\t * @param  {Number} index           - The target index of large photo.\n\t\t * @param  {Element} obj             - Target large image <li>.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction lightboxThumbSwitch( index, obj ) {\n\t\t\tconst $largePhoto = obj.closest( '.uix-lightbox__html' ).find( '.uix-lightbox__photo-container.uix-lightbox__photo-sets-container' ),\n\t\t\t\t  $thumb      = obj.closest( '.uix-lightbox__html' ).find( '.uix-lightbox__thumb-container li' );\n\n\t\t\t// show the content container\n\t\t\tconst showLightboxContent = function() {\n\t\t\t\tTweenMax.set( obj.closest( '.uix-lightbox__html' ), {\n\t\t\t\t\tcss         : {\n\t\t\t\t\t\t'display' : 'block'\n\t\t\t\t\t},\n\t\t\t\t\tonComplete  : function() {\n\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\t\n\t\t\t};\n\t\t\t\n\t\t\t$thumb.removeClass( 'is-active' );\n\t\t\tobj.addClass( 'is-active' );\n\t\t\t\n\t\t\n            //all items\n            TweenMax.set( $largePhoto.find( 'li' ),  {\n                css         : {\n                    'display' : 'none',\n                    'opacity' : 0\n                },\n                onComplete  : function() {\n                    $( this.target ).removeClass( 'is-active' );\n                }\n            });\n            \n            \n            //current item\n            TweenMax.set( $largePhoto.find( 'li' ).eq( index ), {\n                css         : {\n                    'display' : 'block',\n                    'opacity' : 0\n                },\n                onComplete  : function() {\n                    \n                    const _cur = this.target;\n                    \n                    $( _cur ).addClass( 'is-active' );\n                    //\n                    //Reset the container height\n                    const imgClick = new Image();\n                    imgClick.src = $largePhoto.find( 'li' ).eq( index ).find( 'img' ).attr( 'src' );\n                    imgClick.onload = function() {\n\n                        //remove loading\n                        $( loaderEl ).addClass( 'is-loaded' );\n\n                        // show the content container\n                        showLightboxContent();\t\n\n\n\n                        let sw     = window.innerWidth - 30,\n                            ow     = this.width,\n                            oh     = this.height,\n                            ratioH = oh/ow,\n                            w      = ( ow > customWidth ) ? customWidth : ow,\n                            h;\n\n\n                        if ( w > sw ) w = sw;\n\n                        h = w * ratioH;\n\n\n                        //Prevent height overflow\n                        if ( h > window.innerHeight ) h = window.innerHeight * 0.95;\n\n\n                        $largePhoto.css( {\n                            'height': h + 'px'\n                        } )\n                        .find( 'img' ).css( {\n                            'height': h + 'px'\n                        } );\t\n\n\n                        //If the image is larger than the current window, it will display at the top.\n                        //Don't write variables outside\n                        const $lbTarImg = $largePhoto.find( 'li' ).eq( index ).find( '.uix-lightbox__original__target' );\n                        if ( oh > window.innerHeight ) {\n                            $lbTarImg.addClass( 'uix-lightbox__original__target--imgfull' );\n                        } else {\n                            $lbTarImg.removeClass( 'uix-lightbox__original__target--imgfull' );\n                        }\n\n                        TweenMax.to( _cur, 0.5, {\n                            alpha : 1\n                        });\n\n                    };//imgClick.onload       \n                    \n                    \n\n                }\n            });\t\n          \n\t\t}\n\t\t\n\t\t\n\t\t/*\n\t\t * Close the lightbox\n\t\t *\n\t\t * @param  {String} url             - The current page URL for history.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction lightboxClose( url ) {\n\t\t\t\n\t\t\t//Detect URL change when AJAX calls are done\n\t\t\tif ( $( wrapperEl ).hasClass( 'js-uix-ajax' ) ) {\n\t\t\t\thistory.pushState( null, null, url );\n\t\t\t}\n\n\t\t\t//Remove all dynamic classes\n\t\t\t$( wrapperEl ).removeClass( 'js-uix-no-fixed js-uix-ajax' );\n\t\t\t$( closeEl ).removeClass( 'is-active' );\n\t\t\t\n\t\t\t//Add a scroll bar.\n\t\t\t$( 'html' ).css( 'overflow-y', 'auto' );\n\t\t\t\n\t\t\t//Reset current container type\n\t\t\t$( innerEl ).removeClass( 'js-uix-custom js-uix-pure-image' );\n\t\t\t\n\t\t\t\n\t\t\t//close windows\n\t\t\t$( wrapperEl ).hide();\n\t\t\t$( maskEl ).hide();\n\t\t\t\n\t\t\t\n\t\t\t// Unlocks the page\n\t\t\t$.scrollLock( false );\n\t\t\t\n\t\t\t//Remove class for body\n\t\t\t//When scrollLock is used, scrollTop value will change\n\t\t\t$( 'body' ).removeClass( 'scrollLock' );\t\n\t\n\t\t\t\n\t\t}\n\t\n\t\t\n\t\t\n\t\t    \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.LIGHTBOX.pageLoaded );\n\t\n\n\treturn class LIGHTBOX {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Bulleted List -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const BULLETED_LIST = ( ( module, $, window, document ) => {\n\tif ( window.BULLETED_LIST === null ) return false;\n\t\n\t\n\t\n    module.BULLETED_LIST               = module.BULLETED_LIST || {};\n    module.BULLETED_LIST.version       = '0.0.1';\n    module.BULLETED_LIST.documentReady = function( $ ) {\n\n\n\t\t// Icon bulleted lists\n\t\t$( '[data-list-bullet]' ).each( function() {\n\t\t\tconst bullet = $( this ).attr( 'data-list-bullet' );\n\t\t\t$( this ).find( 'li' ).prepend( '<i class=\"'+bullet+'\" aria-hidden=\"true\"></i>' );\n\t\t});\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.BULLETED_LIST.documentReady );\n\t\n\n\treturn class BULLETED_LIST {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Posts List With Ajax -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixApplyAsyncScripts from '@uixkit/core/_global/js/fn/UixApplyAsyncScripts';\nimport '@uixkit/plugins/Miscellaneous/attrExt';\n\nimport '../scss/_basic.scss';\nimport '../scss/_split.scss';\n\n\nexport const POST_LIST_AJAX = ( ( module, $, window, document ) => {\n\tif ( window.POST_LIST_AJAX === null ) return false;\n\t\n\t\n\t\n    module.POST_LIST_AJAX               = module.POST_LIST_AJAX || {};\n    module.POST_LIST_AJAX.version       = '0.1.7';\n    module.POST_LIST_AJAX.documentReady = function( $ ) {\n        \n        \n        $( window ).off( 'scroll.POST_LIST_AJAX touchmove.POST_LIST_AJAX' );\n        \n\t\t$( '[data-ajax-list-json]' ).each( function() {\n\t\t\tconst $this            = $( this );\n            \n\t\t\tconst wrapperID        = 'refresh-all-waypoint-' + UixGUID.create();\n            \n\t\t\tlet curPage          = $this.data( 'ajax-list-page-now' ),\n\t\t\t\tinitCurPage      = curPage,\n\t\t\t\tperShow          = $this.data( 'ajax-list-page-per' ),\n\t\t\t\ttotalPage        = $this.data( 'ajax-list-page-total' ),\n\t\t\t\tmethod           = $this.data( 'ajax-list-method' ),\n\t\t\t\ttrigger          = $this.data( 'ajax-list-trigger' ),\n\t\t\t\tinfinitescroll   = $this.data( 'ajax-list-infinitescroll' ),\n\t\t\t\tjsonFile         = $this.data( 'ajax-list-json' ),\n\t\t\t\trender           = $this.data( 'ajax-list-render' ),\n\t\t\t\ttemplate7ID      = $this.data( 'ajax-list-temp-id' ),\n\t\t\t\tpushContainer    = $this.data( 'ajax-list-push-container-class' ),\n\t\t\t\ttriggerActive    = $this.data( 'ajax-list-trigger-active-class' ),\n\t\t\t\tpageParmStr      = $this.data( 'ajax-list-page-parm-str' ),\n\t\t\t\tnoneInfo         = $this.data( 'ajax-list-none-info' );\n\t\n\t\t\t\n\t\t\t\n\n\t\t\t$this.attr( 'id', wrapperID );\n\t\t\t\n\t\t\t\n\n\t\t\tif( typeof pageParmStr === typeof undefined ) {\n\t\t\t\tpageParmStr = {\n\t\t\t\t\t'totalPage'     : 'total',\n\t\t\t\t\t'currentPage'   : 'page',\n\t\t\t\t\t'displayPerPage': 'per'\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof curPage === typeof undefined ) {\n\t\t\t\tcurPage = 1;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif( typeof perShow === typeof undefined ) {\n\t\t\t\tperShow = 8;\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof totalPage === typeof undefined ) {\n\t\t\t\ttotalPage = 3;\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof totalPage != typeof undefined && totalPage == '-1' ) {\n\t\t\t\ttotalPage = 9999;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif( typeof trigger === typeof undefined ) {\n\t\t\t\ttrigger = '.uix-load-more';\n\t\t\t}\n\t\t\t\n\t\t\tif( typeof infinitescroll === typeof undefined ) {\n\t\t\t\tinfinitescroll = false;\n\t\t\t}\t\n\t\t\t\n\t\t\tif( typeof render === typeof undefined ) {\n\t\t\t\trender = 'before';\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif( typeof jsonFile === typeof undefined ) {\n\t\t\t\tjsonFile = '';\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif( typeof template7ID === typeof undefined ) {\n\t\t\t\ttemplate7ID = '';\n\t\t\t}\t\n\t\t\tif( typeof triggerActive === typeof undefined ) {\n\t\t\t\ttriggerActive = 'wait';\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif( typeof method === typeof undefined ) {\n\t\t\t\tmethod = 'POST';\n\t\t\t}\t\t\n\t\t\tif( typeof noneInfo === typeof undefined ) {\n\t\t\t\tnoneInfo = '{\"none\":\"\",\"error\":\"\"}';\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\ttriggerActive = triggerActive.replace( '.', '' );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif( typeof pushContainer === typeof undefined ) {\n\t\t\t\tpushContainer = '.uix-ajax-items__container';\n\t\t\t\t\n\t\t\t\tif ( $this.find( pushContainer ).length == 0 ) {\n\t\t\t\t\t$( '#' + template7ID ).after( '<div class=\"uix-ajax-items__container\"></div>' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Get all attributes of an element and push the new attributes like \"data-*\"\n\t\t\tlet curAttrs        = $this.attr(),\n\t\t\t\tdefaultPostData = '',\n\t\t\t\tcustomPostData  = '';\n\t\t\t\n\t\t\t$.each( curAttrs, function( i, val ) {\n\t\t\t\tif ( i.indexOf( 'data-ajax-list-field-' ) >= 0 ) {\n\t\t\t\t\tcustomPostData += '\"' + i.replace( 'data-ajax-list-field-', '' ) + '\": ' + '\"' + val + '\", ';\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\tcustomPostData  = customPostData.replace(/,\\s*$/, '' );\n\t\t\t\n\n\t\t\n\t\t\t\n\t\t\t//Parse the JSON data\n\t\t\tif ( jsonFile != '' && template7ID != '' ) {\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Default output of the first page\n\t\t\t\tif ( curPage == 2 ) {\n\n\t\t\t\t\t//Perform dynamic loading\n\t\t\t\t\tif ( customPostData != '' ) {\n\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": 1, '+customPostData+' }' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": 1 }' );\n\t\t\t\t\t}\n\n\n\t\t\t\t\tajaxLoadInit( $this, defaultPostData, $( trigger ), curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( infinitescroll ) {\n\t\t\t\t\t/* \n\t\t\t\t\t ---------------------------\n\t\t\t\t\t Infinite scroll\n\t\t\t\t\t ---------------------------\n\t\t\t\t\t */ \t\n\t\t\t\t\tconst $button = $( trigger ),\n\t\t\t\t\t\t  btnTop  = $button.offset().top;\n\t\t\t\t\t\n\t\t\t\t\t//Add default page number to the button\n\t\t\t\t\t$button.attr( 'data-cur-page', initCurPage );\n\n\t\t\t\t\t\n\t\t\t\t\t//Hide the next button \n\t\t\t\t\tif ( totalPage == 1 ) {\n\t\t\t\t\t\t$button.addClass( 'is-hide' );\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n                    // Please do not use scroll's off method in each\n\t\t\t\t\t$( window ).on( 'scroll.POST_LIST_AJAX touchmove.POST_LIST_AJAX', function() {\n\t\t\t\t\t\t\n                        \n                        const spyTop = parseFloat( $button[0].getBoundingClientRect().top + $button.outerHeight( true ) );\n\t\t\t\t\t\n                        if ( spyTop < window.innerHeight && !$button.hasClass( triggerActive ) ) {\n                            \n\t\t\t\t\t\t\t\t// Active this button\n\t\t\t\t\t\t\t\t$button.addClass( triggerActive );\t\t\t\t\t    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlet curPage = $button.attr( 'data-cur-page' );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//Add next page number to the button\n\t\t\t\t\t\t\t\tcurPage = parseFloat( curPage ) + 1;\n\t\t\t\t\t\t\t\t$button.attr( 'data-cur-page', curPage );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t    //Avoid touching the same button multiple times\n\t\t\t\t\t\t\t    if ( curPage == totalPage + 1 ) return false;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//Perform dynamic loading\n\t\t\t\t\t\t\t\tif ( customPostData != '' ) {\n\t\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+', '+customPostData+' }' );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+' }' );\n\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\tajaxLoadInit( $this, defaultPostData, $button, curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo );\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t});\t\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t/* \n\t\t\t\t\t ---------------------------\n\t\t\t\t\t Ajax with JSON data\n\t\t\t\t\t ---------------------------\n\t\t\t\t\t */\n\t\t\t\t\t\n\t\t\t\t\tlet triggerStr = '';\n\t\t\t\t\t\n\t\t\t\t\tif ( trigger.indexOf( '[' ) >= 0 &&  trigger.indexOf( ']' ) >= 0 ) {\n\t\t\t\t\t\ttriggerStr = JSON.parse( trigger.replace(/([a-zA-Z0-9]+?):/g, '\"$1\":').replace(/'/g,'\"') );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttriggerStr = trigger;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//Whether there are two flip buttons \"Previous\" and \"Next\"\n\t\t\t\t\tif ( Object.prototype.toString.call( triggerStr ) =='[object Array]' ) {\n\n\t\t\t\t\t\tconst prevTrigger = triggerStr[0].prev,\n\t\t\t\t\t\t\t  nextTrigger = triggerStr[1].next;\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Add default page number to the button\n\t\t\t\t\t\t$( nextTrigger ).parent().attr( 'data-cur-page', initCurPage );\n\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--------------- Next Button ------------------\n\t\t\t\t\t\t//Hide the next button \n\t\t\t\t\t\tif ( totalPage == 1 ) {\n\t\t\t\t\t\t\t$( nextTrigger ).addClass( 'is-hide' );\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Avoid using $( document ) to cause an asynchronous load without counting from 1\n\t\t\t\t\t\t$( nextTrigger ).off( 'click' ).on( 'click', function( e ) {\n\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tconst $button = $( this );\n                            let curPage = $button.parent().attr( 'data-cur-page' );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Add next page number to the button\n\t\t\t\t\t\t\tcurPage = parseFloat( curPage ) + 1;\n\t\t\t\t\t\t\t$button.parent().attr( 'data-cur-page', curPage );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Init button status\n\t\t\t\t\t\t\t$( prevTrigger ).removeClass( triggerActive );\n\t\t\t\t\t\t\t$( nextTrigger ).removeClass( triggerActive );\n\t\t\t\t\t\t\t$( prevTrigger ).removeClass( 'is-hide' );\n\t\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\t// Active this button\n\t\t\t\t\t\t\t$button.addClass( triggerActive );\t\t\n\n\n\t\t\t\t\t\t\t//Perform dynamic loading\n\t\t\t\t\t\t\tif ( customPostData != '' ) {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+', '+customPostData+' }' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+' }' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tajaxLoadInit( $this, defaultPostData, $button, curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\n\n\t\t\t\t\t\t});\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//----------------- Previous Button ----------------\n\t\t\t\t\t\t//Hide the prev button \n\t\t\t\t\t\t$( prevTrigger ).addClass( 'is-hide' );\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Avoid using $( document ) to cause an asynchronous load without counting from 1\n\t\t\t\t\t\t$( prevTrigger ).off( 'click' ).on( 'click', function( e ) {\n\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tconst $button = $( this );\n                            let curPage = $button.parent().attr( 'data-cur-page' );\n\t\t\t\t\n\t\t\t\t\t\t\t//Add next page number to the button\n\t\t\t\t\t\t\tcurPage = parseFloat( curPage ) - 1;\n\t\t\t\t\t\t\t$button.parent().attr( 'data-cur-page', curPage );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Init button status\n\t\t\t\t\t\t\t$( prevTrigger ).removeClass( triggerActive );\n\t\t\t\t\t\t\t$( nextTrigger ).removeClass( triggerActive );\n\t\t\t\t\t\t\t$( nextTrigger ).removeClass( 'is-hide' );\n\t\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\t// Active this button\n\t\t\t\t\t\t\t$button.addClass( triggerActive );\t\t\n\n\n\t\t\t\t\t\t\t//Perform dynamic loading\n\t\t\t\t\t\t\tif ( customPostData != '' ) {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+', '+customPostData+' }' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+' }' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tajaxLoadInit( $this, defaultPostData, $button, curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo );\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\n\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//----------------- More Button ----------------\n\t\t\t\t\t\t//Add default page number to the button\n\t\t\t\t\t\t$( trigger ).attr( 'data-cur-page', initCurPage );\n\n\t\t\t\t\t\t//Hide the next button \n\t\t\t\t\t\tif ( totalPage == 1 ) {\n\t\t\t\t\t\t\t$( trigger ).addClass( 'is-hide' );\t\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Avoid using $( document ) to cause an asynchronous load without counting from 1\n\t\t\t\t\t\t$( trigger ).off( 'click.POST_LIST_AJAX' ).on( 'click.POST_LIST_AJAX', function( e ) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconst $button = $( this );\n                            \n                            let curPage = $button.attr( 'data-cur-page' );\n\n\t\t\t\t\t\t\t//Add next page number to the button\n\t\t\t\t\t\t\tcurPage = parseFloat( curPage ) + 1;\n\t\t\t\t\t\t\t$button.attr( 'data-cur-page', curPage );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Active this button\n\t\t\t\t\t\t\t$button.addClass( triggerActive );\t\t\n\n\n\t\t\t\t\t\t\t//Perform dynamic loading\n\t\t\t\t\t\t\tif ( customPostData != '' ) {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+', '+customPostData+' }' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultPostData = JSON.parse( '{ \"'+pageParmStr.totalPage+'\": '+totalPage+', \"'+pageParmStr.displayPerPage+'\": '+perShow+', \"'+pageParmStr.currentPage+'\": '+curPage+' }' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tajaxLoadInit( $this, defaultPostData, $button, curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo );\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\n\n\t\t\t\t\t\t});\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}//end if\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\t\n\t\t\t\n\t\t/*\n\t\t * Ajax with JSON data\n\t\t *\n\t\t * @param  {Element} ajaxWrapper     - The outermost container of list.\n\t\t * @param  {Object} defaultPostData - Data to be sent to the server which is custom JSON fields.\n\t\t * @param  {String} trigger         - Trigger ajax loaded button object.\n\t\t * @param  {Number} curPage         - The current page to load.\n\t\t * @param  {Number} perShow         - The amount to load each time.\n\t\t * @param  {Number} totalPage       - The total page to load.\n\t\t * @param  {String} template7ID     - HTML template ID\n\t\t * @param  {String} jsonFile        - JSON file path to docking data\n\t\t * @param  {String} triggerActive   - The class name of trigger button actived.\n\t\t * @param  {String} pushContainer   - This container is used to display the loaded dynamic data.\n\t\t * @param  {String} method          - The type of request to make, which can be either \"POST\" or \"GET\".\n\t\t * @param  {String} render          - Rendering mode of display information. ==> before | html | append\n\t\t * @param  {String} noneInfo        - Returns information of ajax asynchronous callback when the content is empty.\n\t\t * @return {Void}\n\t\t */\n\t\t\n\t\tfunction ajaxLoadInit( ajaxWrapper, defaultPostData, trigger, curPage, totalPage, perShow, template7ID, jsonFile, triggerActive, pushContainer, method, render, noneInfo ) {\n\n\t\t\tconst $divRoot         = ajaxWrapper,\n\t\t\t\t  template         = document.getElementById( template7ID ).innerHTML,\n\t\t\t\t  compiledTemplate = Template7.compile( template ),\n\t\t\t\t  $button          = $( trigger );\n\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//hide the button and callback the information\n\t\t\tconst returnEmptyInfo = function() {\n\t\t\t\t$button.addClass( 'is-hide' );\n\t\t\t\t$divRoot.after( noneInfo.none );\t\t\n\t\t\t};\n\t\t\t\n\t\t\tconst returnDataError = function() {\n\t\t\t\t$button.addClass( 'is-hide' );\n\t\t\t\t$divRoot.after( noneInfo.error );\t\n\t\t\t};\n\t\t\t\n\t\t\t\t\n            \n            // Add a request or response interceptor\n            const axiosInterceptor = axios.interceptors.request.use(function(config) {\n                // Do something before request is sent\n\n          \n                //\n                return config;\n            },\n            function(error) {\n                return Promise.reject(error);\n            });\n     \n            \n            \n            // To send data in the application/x-www-form-urlencoded format instead\n            const formData = new FormData();\n            for(let k in defaultPostData) {\n                formData.append(k, defaultPostData[k]);\n            }\n            \n            // Create a request event\n            axios({\n                timeout: 15000,\n                method: method,\n                url: jsonFile,\n                data: formData,\n                responseType: 'json',\n            })\n            .then(function (response) {\n                \n                const jsonData = response.data;\n         \n\n                //If the data is empty\n                if ( jsonData && ( jsonData == null || Object.prototype.toString.call( jsonData.items )=='[object String]' ) ) {\n                    returnEmptyInfo();\n                }\n\n\n                //Check if a key exists inside a json object\n                if ( jsonData && jsonData.hasOwnProperty( 'items' ) && Object.prototype.toString.call( jsonData.items )=='[object Array]' ) {\n\n\n                    //Data overflow may occur when the total number of pages is not posted\n                    try {\n\n                        const html          = compiledTemplate( jsonData ),\n                              curHtml       = $divRoot.find( pushContainer ).html();\n                        \n                        let result        = null,\n                            htmlEl        = null;\n\n\n\n\n                        //--------- Do or not append to the original content\n                        if ( render == 'before' ) {\n                            result = curHtml + html;\n                            htmlEl = $( result );\n                            $divRoot.find( pushContainer ).before( htmlEl );\t\n                        }\n\n                        if ( render == 'html' ) {\n                            result = html;\n                            htmlEl = $( result );\n                            $divRoot.find( pushContainer ).html( htmlEl );\n                        }\t\t\n\n                        if ( render == 'append' ) {\n                            $divRoot.find( pushContainer ).append( html );\n\n                        }\t\n\n\n\n                        //--------- Apply some asynchronism scripts\n                        $( document ).UixApplyAsyncScripts({\n                            ajaxPostList : false\n                        });\n\n\n                        //--------- Remove this button\n                        $button.removeClass( triggerActive );\t\n\n                        //--------- Hidden button when the page total number is set and does not equal -1 or 9999\n                        if ( \n                            curPage == totalPage && \n                            totalPage != 9999 && \n                            totalPage != -1 &&\n                            totalPage != 1\n                        ) {\n                            returnEmptyInfo();\n\n                        }\t\t\n\n\n                    } catch ( err ) {\n                        console.log( err.message );\n                        returnDataError();\n\n                    }\n\n\n\n                } else {\n                    //if not array\n                    returnEmptyInfo();\n                }\n                \n                \n            })  \n            .catch(function (error) {\n                \n                if (error.response) {\n                    // The request was made and the server responded with a status code\n                    // that falls out of the range of 2xx\n                    const status = error.response.status;\n                    console.log(status);\n                    \n                    \n                } else if (error.request) {\n                    // The request was made but no response was received\n                    // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n                    // http.ClientRequest in node.js\n                    console.log(error.request);\n                    \n                    //\n                    returnEmptyInfo();\n                    \n                    \n                } else {\n                    // If there was a problem, we need to\n                    // dispatch the error condition\n                    console.log(error.message);\n                }\n            });\n\n\n            // Remove an interceptor later\n            axios.interceptors.request.eject(axiosInterceptor);\n\n\n\n\t\t}\n\n\t\n\t   \t\n\t\t\n    };\n\n    module.components.documentReady.push( module.POST_LIST_AJAX.documentReady );\n\t\n\n\treturn class POST_LIST_AJAX {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t\n\n","\n/* \n *************************************\n * <!-- Full Width Column to Edge -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\n\nexport const FULL_WIDTH_COLUMN_TO_EDGE = ( ( module, $, window, document ) => {\n\tif ( window.FULL_WIDTH_COLUMN_TO_EDGE === null ) return false;\n\t\n\t\n    module.FULL_WIDTH_COLUMN_TO_EDGE               = module.FULL_WIDTH_COLUMN_TO_EDGE || {};\n    module.FULL_WIDTH_COLUMN_TO_EDGE.version       = '0.0.2';\n    module.FULL_WIDTH_COLUMN_TO_EDGE.pageLoaded    = function() {\n\n\t\t$( '.js-uix-fullwidth-column-to-edge--extend-right' ).each( function()  {\n\t\t\tconst $el = $( this );\n\t\t\tconst actived = $el.data( 'activated' );\n\t\t\tif( typeof actived === typeof undefined ) {\n\n\t\t\t\tfullwidthToDir( $( this ), 'right', window.innerWidth );\n\n\t\t\t\t//Prevents front-end javascripts that are activated in the background to repeat loading.\n\t\t\t\t$el.data( 'activated', 1 );\n\t\t\t}//endif actived\n\t\t});\n\n\t\t$( '.js-uix-fullwidth-column-to-edge--extend-left' ).each( function()  {\n\t\t\tconst $el = $( this );\n\t\t\tconst actived = $el.data( 'activated' );\n\t\t\tif( typeof actived === typeof undefined ) {\n\n\t\t\t\tfullwidthToDir( $( this ), 'left', window.innerWidth );\n\n\t\t\t\t//Prevents front-end javascripts that are activated in the background to repeat loading.\n\t\t\t\t$el.data( 'activated', 1 );\n\n\t\t\t}//endif actived\n\n\n\t\t});\n\t\t\n\t\t\n        function fullwidthToDir( obj, dir, w ) {\n            const dividerPosition = obj.offset();\n            const dividerWidth = $( window ).width() - dividerPosition.left;\n            const bsGridGutter = 15;\n        \n        \n            if ( w > 768 ) {\n                obj.css( 'width', dividerWidth + bsGridGutter );\n                \n                if ( dir == 'left' ) {\n                    const _dis = -(dividerPosition.left + bsGridGutter*2 );\n                    obj.css( 'margin-left', _dis+'px' );\n                }  \n\n            } else {\n                obj.css( 'width', 'inherit' );\n                \n                if ( dir == 'left' ) {\n                    obj.css( 'margin-left', -bsGridGutter + 'px' );\n                }    \n                \n                \n            }\n        }\n        \n\n\t\t\n\t\t\n    };\n\n    module.components.pageLoaded.push( module.FULL_WIDTH_COLUMN_TO_EDGE.pageLoaded );\n\n\treturn class FULL_WIDTH_COLUMN_TO_EDGE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n","\n/* \n *************************************\n * <!-- Login Templates -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const LOGIN_UI = ( ( module, $, window, document ) => {\n\tif ( window.LOGIN_UI === null ) return false;\n\t\n\t\n\t\n    module.LOGIN_UI               = module.LOGIN_UI || {};\n    module.LOGIN_UI.version       = '0.0.2';\n    module.LOGIN_UI.documentReady = function( $ ) {\n\n\t\t\n\t\t\n\t\tconst $loginToggle = $( '.uix-special-login__toggle' ),\n\t\t\t  $loginForms  = $( '.uix-special-login__form' );\n\n\t\t$loginToggle.data( 'switched', true ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tconst $form1 = $loginForms.eq(0),\n\t\t\t      $form2 = $loginForms.eq(1);\n\n\t\t\n\t\t\tif ( $( this ).data( 'switched' ) ) {\n\t\t\t\t$( this ).data( 'switched', false );\n\n\t\t\t\tTweenMax.set( $form2, {\n\t\t\t\t\theight: 'auto'\n\t\t\t\t});\n\t\t\t\tTweenMax.from( $form2, 0.5, {\n\t\t\t\t\theight: 0\n\t\t\t\t});\n\n\t\t\t\tTweenMax.to( $form1, 0.5, {\n\t\t\t\t\theight: 0\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// Switches the Icon\n\t\t\t\t$( this ).find( '> span i' ).eq(0).hide();\n\t\t\t\t$( this ).find( '> span i' ).eq(1).show();\n\n\n\t\t\t} else {\n\t\t\t\t$( this ).data( 'switched', true );\n\n\t\t\t\tTweenMax.set( $form1, {\n\t\t\t\t\theight: 'auto'\n\t\t\t\t});\n\t\t\t\tTweenMax.from( $form1, 0.5, {\n\t\t\t\t\theight: 0\n\t\t\t\t});\n\n\t\t\t\tTweenMax.to( $form2, 0.5, {\n\t\t\t\t\theight: 0\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// Switches the Icon\n\t\t\t\t$( this ).find( '> span i' ).eq(1).hide();\n\t\t\t\t$( this ).find( '> span i' ).eq(0).show();\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\n\t\t});\n\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.LOGIN_UI.documentReady );\n\n\treturn class LOGIN_UI {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/*\n * Fire Modal Dialog\n *\n * @param  {String} id                   - Modal's unique identifier.\n * @param  {Number|Boolean} height       - Custom modal height whick need a unit string. \n\t\t\t\t\t\t\t\t\t\t   This attribute \"data-modal-height\" may not exist. Such as: 200px\n * @param  {Number|Boolean} width        - Custom modal width whick need a unit string. \n\t\t\t\t\t\t\t\t\t\t   This attribute \"data-modal-height\" may not exist. Such as: 200px\n * @param  {Number} speed                - Delay Time when Full Screen Effect is fired.   \n * @param  {?Element|Boolean} btn          - Link or button that fires an event.\n * @param  {Boolean} lightbox            - Whether to enable the lightbox effect.\n * @param  {Number|Boolean} autoClose    - Specify auto-close time. This function is not enabled when this value is false.\n * @param  {Boolean} closeOnlyBtn        - Disable mask to close the window.\n * @return {Void}\n */\t\n\nimport '@uixkit/plugins/Miscellaneous/scrollLock';\n\n( function ( $ ) {\n    'use strict';\n    $.fn.UixFireModalDialog = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\tid           : 'demo',\n\t\t\theight       : false,\n\t\t\twidth        : false,\n\t\t\tspeed        : 500,\n\t\t\tbtn          : false,\n\t\t\tlightbox     : true,\n\t\t\tautoClose    : false,\n\t\t\tcloseOnlyBtn : false\n        }, options );\n\t\t\n \n        this.each( function() {\n\n\t\t\tif ( settings.id == '' ) return false;\n\n\t\t\t\n\t\t\t//Add modal mask to stage\n\t\t\tif ( $( '.uix-modal-mask' ).length == 0 ) {\n\t\t\t\t$( 'body' ).prepend( '<div class=\"uix-modal-mask\"></div>' );\n\t\t\t}\n\t\t\t$.when( $( '.uix-modal-mask' ).length > 0 ).then( function() {\n\t\t\t\t\n\t\t\t\tif ( settings.closeOnlyBtn ) {\n\t\t\t\t\t$( '.uix-modal-mask' ).addClass( 'js-uix-disabled' );\n\t\t\t\t} else {\n\t\t\t\t\t$( '.uix-modal-mask' ).removeClass( 'js-uix-disabled' );\n\t\t\t\t}\n\n\t\t\t\tconst dataID        = settings.id,\n\t\t\t\t\t  dataH         = settings.height,\n\t\t\t\t\t  dataW         = settings.width,\n\t\t\t\t\t  linkBtn       = settings.btn,\n\t\t\t\t\t  closeTime     = settings.autoClose,\n\t\t\t\t\t  $obj          = $( '.uix-modal-box#'+dataID );\n\n\t\t\t\t// Initializate modal\n\t\t\t\tif ( linkBtn ) {\n\t\t\t\t\tlinkBtn.attr( 'href', 'javascript:void(0)' );\n\t\t\t\t\t$obj.find( '.uix-modal-box__content' ).addClass( 'js-uix-no-fullscreen' );\n\n\n\t\t\t\t\tif ( linkBtn.data( 'video-win' ) ) {\n\t\t\t\t\t\t$obj.find( '.uix-modal-box__content > .uix-modal-box__body' ).css( 'overflow-y', 'hidden' );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\n\t\t\t\tif ( $obj.length > 0 ) {\n\n\n\t\t\t\t\t// Locks the page\n\t\t\t\t\t$.scrollLock( true );\n\n\t\t\t\n\t\t\t\t\t//Add class for body\n\t\t\t\t\t//When scrollLock is used, scrollTop value will change\n\t\t\t\t\t$( 'body' ).addClass( 'scrollLock' );\n\t\t\t\t\t\n\n\t\t\t\t\tif ( typeof dataH != typeof undefined && dataH != '' && dataH ) {\n\t\t\t\t\t\t$obj.css( {'height': dataH } );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof dataW != typeof undefined && dataW != '' && dataW ) {\n\t\t\t\t\t\t$obj.css( {'width': dataW } );\n\t\t\t\t\t}\n\n\t\t\t\t\t\n\t\t\t\t\t//Enable the lightbox effect.\n\t\t\t\t\tif ( settings.lightbox ) {\n\t\t\t\t\t\tTweenMax.set( '.uix-modal-mask', {\n\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\topacity : 0,\n\t\t\t\t\t\t\t\tdisplay : 'none'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\t\t\tTweenMax.to( this.target, 0.3, {\n\t\t\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\t\t\topacity    : 1,\n\t\t\t\t\t\t\t\t\t\tdisplay    : 'block'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\t\t\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t}\n\n\t\t\t\t\t$obj.addClass( 'is-active' );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//auto close\n\t\t\t\t\tif ( closeTime && !isNaN( closeTime ) ) {\n\t\t\t\t\t\twindow.setCloseModalDialog = setTimeout( function() {\n\t\t\t\t\t\t\t$( document ).closeModalDialog();\n\t\t\t\t\t\t}, closeTime );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\tif ( $obj.hasClass( 'is-fullscreen' ) ) {\n\t\t\t\t\tsetTimeout( function() {\n\n\t\t\t\t\t\tif ( !$obj.hasClass( 'is-video' ) ) {\n\t\t\t\t\t\t\t$obj.find( '.uix-modal-box__content > .uix-modal-box__body' ).css( 'overflow-y', 'scroll' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$obj.find( '.uix-modal-box__content > .uix-modal-box__body' ).css( 'overflow-y', 'hidden' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, settings.speed );\n\n\t\t\t\t}\t\n\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));\n","\n/*\n * Close Modal Dialog\n *\n * @return {Void}\n */\t\n\nimport '@uixkit/plugins/Miscellaneous/scrollLock';\n\n( function ( $ ) {\n    'use strict';\n    $.fn.UixCloseModalDialog = function( options ) {\n \n        // This is the easiest way to have default options.\n        const settings = $.extend({\n\t\t\ttarget  : '.uix-modal-box'\n        }, options );\n\t\t\n \n        this.each( function() {\n\t\t\n\n\t\t\t//Enable mask to close the window.\n\t\t\t$( '.uix-modal-mask' ).removeClass( 'js-uix-disabled' );\n\t\t\t\n\t\t\t$( settings.target ).removeClass( 'is-active' );\n\t\t\tTweenMax.to( '.uix-modal-mask', 0.3, {\n\t\t\t\tcss: {\n\t\t\t\t\topacity : 0,\n\t\t\t\t\tdisplay : 'none'\n\t\t\t\t}\n\t\t\t});\n\t\t\t\t\n\t\t\t$( settings.target ).find( '.uix-modal-box__content' ).removeClass( 'js-uix-no-fullscreen' );\n\t\t\t\n\t\t\t\n\t\t\t// Unlocks the page\n\t\t\t$.scrollLock( false );\n\t\t\t\n\t\t\t//Remove class for body\n\t\t\t//When scrollLock is used, scrollTop value will change\n\t\t\t$( 'body' ).removeClass( 'scrollLock' );\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Prevent automatic close from affecting new fire effects\n\t\t\tclearTimeout( window.setCloseModalDialog );\n\t\t\t\n\t\t\t\n\t\t});\n \n    };\n \n}( jQuery ));","\n/* \n *************************************\n * <!-- Modal Dialog -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixFireModalDialog from '@uixkit/core/modal-dialog/js/fn/fire-modal-dialog';\nimport UixCloseModalDialog from '@uixkit/core/modal-dialog/js/fn/close-modal-dialog';\n\nimport '../scss/_style.scss';\n\n\nexport const MODAL_DIALOG = ( ( module, $, window, document ) => {\n\tif ( window.MODAL_DIALOG === null ) return false;\n\t\n\t\n    module.MODAL_DIALOG               = module.MODAL_DIALOG || {};\n    module.MODAL_DIALOG.version       = '0.1.7';\n    module.MODAL_DIALOG.documentReady = function( $ ) {\n\n\t\t\n\t\t//Delay Time when Full Screen Effect is fired.\n\t\tconst modalSpeed = UixCssProperty.getTransitionDuration( $( '.uix-modal-box:first' )[0] );\n        \n        \n        // To display the template tag content.\n        $( 'template' ).each( function()  {\n            \n            const _content = $( this ).html( function( index,html ) {\n                                        return html.replace(/[\\r\\n]/g, '' );\n                                    }).context.innerHTML,\n                _id = $( this ).attr( 'id' );\n            \n            \n            //If it is dialog, clone the contents of the <template> into the body\n            if ( \n                typeof _id !== typeof undefined && \n                ! $( 'body' ).hasClass( _id ) && \n                $( '<div>' + _content + '</div>' ).find( '[role=\"dialog\"]' ).length > 0 \n            ) {\n\n                \n                //reset id\n                $( this ).removeAttr( 'id' );\n                $( 'body' ).addClass( _id );\n                \n                //append content to body\n                $( _content.replace(/role=[\\'\\\"]dialog[\\'\\\"]/, 'role=\"dialog\" id=\"'+_id+'\"' ) ).appendTo( 'body' );\n                \n            }\n\n        });\n        \n        \n        \n        \n\t\t\n\t\t/*\n\t\t  * Unbind that one in a safe way that won't accidentally unbind other click handlers.\n\t\t  * In order to trigger other custom Modal Dialog events.\n\t\t\t\n\t\t\t$( '#element' ).off( 'click.MODAL_DIALOG' );\n\t\t\t$( '#element' ).off( 'click.MODAL_DIALOG_CLOSE' );\n\t\t\t\n\t\t*/\n\t\t\n\t\n\t\t//Add modal mask to stage\n\t\tif ( $( '.uix-modal-mask' ).length == 0 ) {\n\t\t\t$( 'body' ).prepend( '<div class=\"uix-modal-mask\"></div>' );\n\t\t}\n\t\t\n\t    \n\t\t$( document ).off( 'click.MODAL_DIALOG' ).on( 'click.MODAL_DIALOG', '[data-modal-id]', function() {\n\n\t\t\tlet dataH         = $( this ).data( 'modal-height' ),\n\t\t\t\tdataW         = $( this ).data( 'modal-width' ),\n\t\t\t\tlightbox      = $( this ).data( 'modal-lightbox' ),\n\t\t\t\tcloseTime     = $( this ).data( 'modal-close-time' ),\n\t\t\t\tcloseOnlyBtn  = $( this ).data( 'modal-close-onlybtn' );\n\t\t\t\n\t\t\tif ( typeof dataH === typeof undefined ) {\n\t\t\t\tdataH = false;\n\t\t\t}\n\n\t\t\tif ( typeof dataW === typeof undefined ) {\n\t\t\t\tdataW = false;\n\t\t\t}\n\t\t\tif ( typeof lightbox === typeof undefined ) {\n\t\t\t\tlightbox = true;\n\t\t\t}\n\t\t\tif ( typeof closeTime === typeof undefined ) {\n\t\t\t\tcloseTime = false;\n\t\t\t}\t\n\t\t\tif ( typeof closeOnlyBtn === typeof undefined ) {\n\t\t\t\tcloseOnlyBtn = false;\n\t\t\t}\t\t\n\n            \n\t\t\t\n\t\t\t$( document ).UixFireModalDialog( {\n\t\t\t\tid           : $( this ).data( 'modal-id' ),\n\t\t\t\theight       : dataH,\n\t\t\t\twidth        : dataW,\n\t\t\t\tspeed        : modalSpeed,\n\t\t\t\tbtn          : $( this ),\n\t\t\t\tlightbox     : lightbox,\n\t\t\t\tautoClose    : closeTime,\n\t\t\t\tcloseOnlyBtn : closeOnlyBtn\n\t\t\t});\n\n\t\t\treturn false;\n\t\t\n\t\t});\n\t\n\t\t$( document ).off( 'click.MODAL_DIALOG_CLOSE' ).on( 'click.MODAL_DIALOG_CLOSE', '.uix-modal-box [data-modal-close-trigger], .uix-modal-mask:not(.js-uix-disabled)', function() {\n\t\t\t\n\t\t\t//btn\n\t\t\tif ( $( this ).hasClass( 'uix-modal-box__close' ) ) {\n\t\t\t\t$( this ).parent().removeClass( 'is-active' );\n\t\t\t}\n\t\t\t\n\t\t\t$( document ).UixCloseModalDialog();\n\t\t\t\n\t\t\t\n\t\t\treturn false;\n\t\t\t\n\t\t});\n\t\t\n    };\n\n    module.components.documentReady.push( module.MODAL_DIALOG.documentReady );\n\t\n\n\treturn class MODAL_DIALOG {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t\t\n\n","\n/* \n *************************************\n * <!-- Mousewheel Interaction -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const MOUSEWHEEL_INTERACTION = ( ( module, $, window, document ) => {\n\tif ( window.MOUSEWHEEL_INTERACTION === null ) return false;\n\t\n\t\n\t\n    module.MOUSEWHEEL_INTERACTION               = module.MOUSEWHEEL_INTERACTION || {};\n    module.MOUSEWHEEL_INTERACTION.version       = '0.0.3';\n    module.MOUSEWHEEL_INTERACTION.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( !$( 'body' ).hasClass( 'mousewheel-interaction' ) ) return false;\n\t\t\n\t\t\n\t    //Determine the direction of a jQuery scroll event\n\t\t//Fix an issue for mousewheel event is too fast.\n\t\tconst quietPeriod       = 500, //Do not change it\n\t\t\t  animationTime     = 1000;//According to page transition animation changes\n\n        \n        let lastAnimation = 0;\n        let scrollCount = 0;\n\t\tlet startY = 0;\n        \n\t\tconst onTouchStart = function ( e ) {\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tstartY = touches[0].pageY;\n\t\t\t\t\n\t\t\t}\n\t\t};\n\n\t\t\n\t\tconst onDeviceWheel = function ( e ) {\n\t\t\t\n\t\t\t//Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t\tlet dir, delta, mobileDeltaY = null;\n\t\t\t\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tmobileDeltaY = startY - touches[0].pageY;\n\t\t\t} else {\n\t\t\t\tdelta = Math.max(-1, Math.min(1, (-e.deltaY)));\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\tif ( mobileDeltaY != null ) {\n\t\t\t\t\n\t\t\t\tif ( mobileDeltaY >= 50 ) {\n\t\t\t\t\t//--- swipe up\n\t\t\t\t    dir = 'up';\n\t\t\t\t}\n\t\t\t\tif ( mobileDeltaY <= -50 ) {\n\t\t\t\t\t//--- swipe down\n\t\t\t\t\tdir = 'down';\n\t\t\t\t\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\tif( delta < 0 ) { \n\t\t\t\t\t//scroll down\n\t\t\t\t\tdir = 'down';\n\n\t\t\t\t} else {\n\t\t\t\t\t//scroll up\n\t\t\t\t\tdir = 'up';\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\tscrollMoveInit( e, dir );\n\n\t\t\t\n\t\t};\n\t\t\n\t\n\t\twindow.addEventListener( 'wheel', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchstart', onTouchStart, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchmove', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Scroll initialize\n\t\t *\n\t\t * @param  {Event} event        - The wheel event is fired when a wheel button of a pointing device (usually a mouse) is rotated. \n\t\t * @param  {String} dir          - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction scrollMoveInit( event, dir ) {\n\t\n\t\t\tconst timeNow = new Date().getTime();\n\t\t\t// Cancel scroll if currently animating or within quiet period\n\t\t\tif( timeNow - lastAnimation < quietPeriod + animationTime) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( dir == 'down' ) {\n\t\t\t\t//scroll down\n\t\t\t\t$( '#demo-mousewheel-interaction-status' ).html( 'Direction: down, Total: ' + scrollCount );\n\n\t\t\t\tscrollCount++;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t//scroll up\n\t\t\t\t$( '#demo-mousewheel-interaction-status' ).html( 'Direction: up, Total: ' + scrollCount );\n\n\t\t\t\tscrollCount++;\n\t\t\t  \n\t\t\t}\n\t\t\tlastAnimation = timeNow;\n\t\t}\n\t\t\n    };\n\n    module.components.documentReady.push( module.MOUSEWHEEL_INTERACTION.documentReady );\n\n\treturn class MOUSEWHEEL_INTERACTION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","/*!\n * VERSION: 0.0.4\n * DATE: 2018-05-30\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\n\n\t\tvar _cssRatioSetter = function(pt, cssp, mod) { //Takes an individual CSSPropTween and converts it into a type:2 that has a setRatio that does everything the regular CSSPlugin.setRatio() method does but applying the mod() too. We do this to keep the main CSSPlugin.setRatio() as fast as possible (the vast majority of times, no mod() will be necessary)\n\t\t\t\tvar type = pt.type,\n\t\t\t\t\toldSetRatio = pt.setRatio,\n\t\t\t\t\ttween = cssp._tween,\n\t\t\t\t\ttarget = cssp._target;\n\t\t\t\tpt.type = 2;\n\t\t\t\tpt.m = mod;\n\t\t\t\tpt.setRatio = function(v) {\n\t\t\t\t\tvar min = 0.000001,\n\t\t\t\t\t\tval, str, i;\n\t\t\t\t\tif (v === 1 && (tween._time === tween._duration || tween._time === 0)) {\n\n\t\t\t\t\t\tif (type !== 2) {\n\t\t\t\t\t\t\tif (pt.r && type !== -1) {\n\t\t\t\t\t\t\t\tval = Math.round(pt.s + pt.c);\n\t\t\t\t\t\t\t\tif (!type) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, val + pt.xs0, target, tween);\n\t\t\t\t\t\t\t\t} else if (type === 1) {\n\t\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, str, target, tween);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, pt.e, target, tween);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toldSetRatio.call(pt, v);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (v || !(tween._time === tween._duration || tween._time === 0) || tween._rawPrevTime === -0.000001) {\n\t\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\t\tval = Math.round(val);\n\t\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\t\tval = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!type) {\n\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, val + pt.xs0, target, tween);\n\t\t\t\t\t\t} else if (type === 1) {\n\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, str, target, tween);\n\n\t\t\t\t\t\t} else if (type === -1) { //non-tweening value\n\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, pt.xs0, target, tween);\n\n\t\t\t\t\t\t} else if (oldSetRatio) {\n\t\t\t\t\t\t\toldSetRatio.call(pt, v);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (type !== 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = mod.call(tween, pt.b, target, tween);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toldSetRatio.call(pt, v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t_modCSS = function(lookup, cssp) {\n\t\t\t\tvar pt = cssp._firstPT,\n\t\t\t\t\thasBezier = (lookup.rotation && cssp._overwriteProps.join(\"\").indexOf(\"bezier\") !== -1); //when a Bezier tween is applying autoRotation, it's a very special case we need to handle differently.\n\t\t\t\tif (lookup.scale) {\n\t\t\t\t\tlookup.scaleX = lookup.scaleY = lookup.scale;\n\t\t\t\t} else if (lookup.rotationZ) {\n\t\t\t\t\tlookup.rotation = lookup.rotationZ;\n\t\t\t\t}\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (typeof(lookup[pt.p]) === \"function\") {\n\t\t\t\t\t\t_cssRatioSetter(pt, cssp, lookup[pt.p]);\n\t\t\t\t\t} else if (hasBezier && pt.n === \"bezier\" && pt.plugin._overwriteProps.join(\"\").indexOf(\"rotation\") !== -1) {\n\t\t\t\t\t\tpt.data.mod = lookup.rotation;\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tModifiersPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"modifiers\",\n\t\t\t\tversion: \"0.0.4\",\n\t\t\t\tAPI: 2,\n\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\tthis._vars = value;\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tinitAll: function() {\n\t\t\t\t\tvar tween = this._tween,\n\t\t\t\t\t\tlookup = this._vars,\n\t\t\t\t\t\tmpt = this,\n\t\t\t\t\t\tpt = tween._firstPT,\n\t\t\t\t\t\tval, next;\n\t\t\t\t\t//initAll() gets called for each and every ModifiersPlugin instance in a tween, so if there are multiple targets, there will be multiple instances. Since we're ripping through the whole tween (and all the PropTweens), we only need to run this code ONCE. So we're setting a toggle on the first PropTween that just tells us if we've done it already. We don't set it on the tween instance because if it gets invalidated, we don't want to have to track this property and reset it. PropTweens get blown away when a tween is invalidated.\n\t\t\t\t\tif (pt._modInitted) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt._modInitted = 1;\n\t\t\t\t\t}\n\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\t\tval = lookup[pt.n];\n\t\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\t\tif (pt.t._propName === \"css\") { //handle CSSPlugin uniquely (for performance, due to the fact that the values almost always are a concatenation of numbers and strings, like suffixes, and we don't want to slow down the regular CSSPlugin setRatio() performance with conditional checks for if the value needs to be modded, so we pull any modding prop out and change it to a type:2 one that simply calls a setRatio() method where we encapsulate the modding and update all together. That way, it says in the main CSSProp linked list and just has some custom logic applied to it inside its setRatio())\n\t\t\t\t\t\t\t\t_modCSS(lookup, pt.t);\n\t\t\t\t\t\t\t} else if (pt.t !== mpt) { //don't run modProps on modProps :)\n\t\t\t\t\t\t\t\tval = lookup[pt.t._propName];\n\t\t\t\t\t\t\t\tpt.t._tween = tween;\n\t\t\t\t\t\t\t\tpt.t._mod((typeof(val) === \"object\") ? val : lookup);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (typeof(val) === \"function\") {\n\t\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t\t\t\tpt.t._tween = tween;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._add(pt.t, pt.p, pt.s, pt.c, val);\n\t\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t\ttween._propLookup[pt.n] = mpt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = next;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t}),\n\t\t\tp = ModifiersPlugin.prototype;\n\n\t\tp._add = function(target, p, s, c, mod) {\n\t\t\tthis._addTween(target, p, s, s + c, p, mod);\n\t\t\tthis._overwriteProps.push(p);\n\t\t};\n\n\tp = _gsScope._gsDefine.globals.TweenLite.version.split(\".\");\n\tif (Number(p[0]) <= 1 && Number(p[1]) < 19 && _gsScope.console) {\n\t\tconsole.log(\"ModifiersPlugin requires GSAP 1.19.0 or later.\");\n\t}\n\nexport { ModifiersPlugin, ModifiersPlugin as default };","/* \n *************************************\n * <!-- Multiple Items Carousel -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport ModifiersPlugin from '@uixkit/plugins/GSAP/ModifiersPlugin';\n\nimport '../scss/_style.scss';\n\n\nexport const MULTI_ITEMS_CAROUSEL = ( ( module, $, window, document ) => {\n\tif ( window.MULTI_ITEMS_CAROUSEL === null ) return false;\n\t\n\t\n\t\n    module.MULTI_ITEMS_CAROUSEL               = module.MULTI_ITEMS_CAROUSEL || {};\n    module.MULTI_ITEMS_CAROUSEL.version       = '0.0.5';\n    module.MULTI_ITEMS_CAROUSEL.documentReady = function( $ ) {\n\n\t\t$( '.uix-multi-carousel' ).each( function()  {\n\n\t\t\tlet $carouselWrapper        = $( this ),\n\t\t\t\t$carousel               = $carouselWrapper.find( '.uix-multi-carousel__items' ),\n\t\t\t\t$carouselItem           = $carouselWrapper.find( '.uix-multi-carousel__items > div' ),\n\t\t\t\titemTotal               = $carouselItem.length,\n\t\t\t\tamountVisible           = $carouselWrapper.data( 'show' ),\n\t\t\t\tcarouselDir             = $carouselWrapper.data( 'dir' ),\n\t\t\t\tcarouselLoop            = $carouselWrapper.data( 'loop' ),\n\t\t\t\tcarouselSpeed           = $carouselWrapper.data( 'speed' ),\n\t\t\t\tcarouselNext            = $carouselWrapper.data( 'next' ),\n\t\t\t\tcarouselPrev            = $carouselWrapper.data( 'prev' ),\n\t\t\t\tcarouseDraggable        = $carouselWrapper.data( 'draggable' ),\n\t\t\t\tcarouseDraggableCursor  = $carouselWrapper.data( 'draggable-cursor' );\n\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof carouselDir === typeof undefined ) carouselDir = 'horizontal';\n\t\t\tif ( typeof carouselLoop === typeof undefined ) carouselLoop = false;\n\t\t\tif ( typeof amountVisible === typeof undefined ) amountVisible = 3;\n\t\t\tif ( typeof carouselSpeed === typeof undefined ) carouselSpeed = 250;\n\t\t\tif ( typeof carouselNext === typeof undefined ) carouselNext = '.uix-multi-carousel__controls--next';\n\t\t\tif ( typeof carouselPrev === typeof undefined ) carouselPrev = '.uix-multi-carousel__controls--prev';\n\t\t\tif ( typeof carouseDraggable === typeof undefined ) carouseDraggable = false;\n\t\t\tif ( typeof carouseDraggableCursor === typeof undefined ) carouseDraggableCursor = 'move';\n\n\t\t\t\n\t\t\t\n\t\t\tif ( window.innerWidth <= 768 ) amountVisible = 3;\n            \n            // Returns the value of a number rounded to the nearest integer.\n            const midIndex = Math.round( amountVisible/2 ) - 1; \n\n\n\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Initialize carousel\n\t\t\t ---------------------------\n\t\t\t */  \n\t\t\tlet eachItemNewWidth, eachItemNewHeight;\n\t\t\tconst eachItemOldWidth  = $carousel.width()/amountVisible;\n\t\t\tconst eachItemOldHeight = $carousel.height()/amountVisible;\n\n\t\t\tif ( carouselDir == 'horizontal' ) { \n\t\t\t\teachItemNewWidth = ( $carouselWrapper.width() / amountVisible );\n\t\t\t\t$carousel.css( 'width', itemTotal * eachItemOldWidth );\n\t\t\t} else {\n\t\t\t\teachItemNewHeight = ( $carouselWrapper.height() / amountVisible );\n\t\t\t\t$carousel.css( 'height', itemTotal * eachItemOldHeight );\n\t\t\t}\n\n\n\t\t\t// Re-order all items\n\t\t\tcarouselReOrder();\n\n\n\n\t\t\t//default button status\n\t\t\tif ( !carouselLoop ) {\n\t\t\t\t$( carouselPrev ).addClass( 'is-disabled' ).data( 'disabled', 1 );\n\t\t\t}\t\n\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Re-order all items\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t\n\t\t\tfunction carouselReOrder() {\n\t\t\t\t\n\t\t\t\tif ( carouselDir == 'horizontal' ) {\n                    const boxWidth = eachItemNewWidth;\n                    TweenMax.set($carouselItem, {\n                        width: boxWidth,\n                        x: function(i, target) {\n\n                            //Active the center item\n                            if( i === midIndex && carouselLoop ) {\n                                TweenMax.set( target, {className:\"+=is-active\"});\n                            }\n                            \n                            //Add index to each item\n                            $carouselItem.eq(i).attr( 'data-index', i );\n\n                            return i * boxWidth;\n                        }\n                    });\n\n\t\t\t\t} else {\n                    \n                    const boxHeight = eachItemNewHeight;\n                    TweenMax.set($carouselItem, {\n                        height: boxHeight,\n                        y: function(i, target) {\n\n                            //Active the center item\n                            if( i === midIndex && carouselLoop ) {\n                                TweenMax.set( target, {className:\"+=is-active\"});\n                            }\n                            \n                            //Add index to each item\n                            $carouselItem.eq(i).attr( 'data-index', i );   \n\n                            return i * boxHeight;\n                        }\n                    });  \n                    \n                }\n   \n\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Move left/up\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t$( carouselNext ).off( 'click' ).on( 'click', $carouselWrapper, function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n                $( this )\n                    .delay(carouselSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });\n \n                \n                //\n                movePositionWithButton( $( this ), e, 'next' );\n\t\t\t});\n\n\t\t\t\n            \n\t\t\t/* \n\t\t\t ---------------------------\n\t\t\t Move right/down\n\t\t\t ---------------------------\n\t\t\t */ \n\t\t\t$( carouselPrev ).off( 'click' ).on( 'click', $carouselWrapper, function( e ) {\n\t\t\t\te.preventDefault();\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n                $( this )\n                    .delay(carouselSpeed)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });  \n                \n                //\n                movePositionWithButton( $( this ), e, 'prev' );\n\t\t\t});\n\t\t\n\n            \t\n\t\t\t\n\t\t\t//Drag and Drop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $carouselWrapper;\n            let hammerProps      = {};\n\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\tif ( carouseDraggable && carouseDraggableCursor != '' && carouseDraggableCursor != false ) $dragDropTrigger.css( 'cursor', carouseDraggableCursor );\n\n\t\t\tif ( !carouseDraggable ) {\n\t\t\t\thammerProps = {\n\t\t\t\t\tinputClass: Hammer.TouchInput\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//Mouse event\n\t\t\t//Hammer.js pan event only for touch devices and not for desktop computer Click+Drag\n\t\t\tlet direction;\n            const dragDropElement = $dragDropTrigger[0],\n\t\t\t\t  dragDropMC      = new Hammer( dragDropElement, hammerProps );\n\t\t\t\n            let elAnim = true;\n            \n            // let the pan gesture support all directions.\n            // this will block the vertical scrolling on a touch-device while on the element\n            dragDropMC.get('pan').set({ direction: Hammer.DIRECTION_ALL });\n\t\t\t\n\t\t\tdragDropMC.on( 'press panright panleft panup pandown', function( ev ) {\n\n\t\t\t\t//Set the direction in here\n\t\t\t\tdirection = ev.type;\n                \n                //Determine whether it is the first or the last    \n                let currentIsFirstOrLast = false;\n                if ( ! carouselLoop ) {\n                    const firstItemOffset = ( carouselDir == 'horizontal' ) ? $carousel.find( '[data-index=\"0\"]' )[0]._gsTransform.x : $carousel.find( '[data-index=\"0\"]' )[0]._gsTransform.y;\n                    \n                    const maxMoveOffset = ( carouselDir == 'horizontal' ) ? -eachItemNewWidth*(itemTotal-amountVisible) : -eachItemNewHeight*(itemTotal-amountVisible);\n                    \n                    if ( ( direction == 'panright' || direction == 'pandown' ) && firstItemOffset >= 0 ) { //first item\n                        currentIsFirstOrLast = true;\n                    }\n\n                    if ( ( direction == 'panleft' || direction == 'panup' ) && firstItemOffset <= maxMoveOffset ) { //last item\n                        currentIsFirstOrLast = true;\n                    }      \n                }\n                \n\n                \n                //Rebound effect of drag offset \n                switch ( direction ) {\n                    case 'panleft':\n                        \n                        if ( ev.deltaX > -eachItemNewWidth/4 && ev.deltaX < 0 ) {\n                            elAnim = false;  \n                            itemUpdates( $carouselWrapper, ev.deltaX, 0.1, true );\n                        } else {\n                            elAnim = ( currentIsFirstOrLast ) ? false : true;\n                        }\n                        \n                        \n                        break;\n                        \n                    case 'panup':\n                        \n                        if ( ev.deltaY > -eachItemNewHeight/4 && ev.deltaY < 0 ) {\n                            elAnim = false;  \n                            itemUpdates( $carouselWrapper, ev.deltaY, 0.1, true );\n                        } else {\n                            elAnim = ( currentIsFirstOrLast ) ? false : true;\n                        }\n                        \n                        \n                        break;\n                        \n                    case 'panright':\n                        \n                        if ( ev.deltaX < eachItemNewWidth/4 && ev.deltaX > 0 ) {\n                            elAnim = false;  \n                            itemUpdates( $carouselWrapper, ev.deltaX, 0.1, true );\n                        } else {\n                            elAnim = ( currentIsFirstOrLast ) ? false : true;\n                        }\n                        \n                        \n                        break;  \n                        \n                    case 'pandown':\n                        if ( ev.deltaY < eachItemNewHeight/4 && ev.deltaY > 0 ) {\n                            elAnim = false;  \n                            itemUpdates( $carouselWrapper, ev.deltaY, 0.1, true );\n                        } else {\n                            elAnim = ( currentIsFirstOrLast ) ? false : true;\n                        }\n                        \n                        \n                        break;            \n                        \n                }\n                \n\n\t\t\t});\n\n\t\t\t\n\n\n\t\t\tdragDropMC.on( 'panend', function( ev ) {\n\n                if ( elAnim ) {\n\n                    \n                    //Use the direction in here\n                    //You know the pan has ended\n                    //and you know which action they were taking\n                    switch ( direction ) {\n                        case 'panleft':\n                        case 'panup':\n\n                            const delta1 = ( carouselDir == 'horizontal' ) ? -eachItemNewWidth : -eachItemNewHeight;\n                            itemUpdates( $carouselWrapper, delta1, null, false );\n                            \n                            break;\n\n                        case 'panright':\n                        case 'pandown':\n                          \n                            const delta2 = ( carouselDir == 'horizontal' ) ? eachItemNewWidth : eachItemNewHeight;\n                            itemUpdates( $carouselWrapper, delta2, null, false );\n                            \n                            break;                 \n                            \n                    }\n                    \t\t    \n                } else {    \n                    itemUpdates( $carouselWrapper, 0, null, false );\n                }\n\n\t\t\t});\t\n            \n\t\t\t\n\t\t\t/*\n\t\t\t * Transition Between Items\n\t\t\t *\n\t\t\t * @param  {Element} wrapper        - Wrapper of carousel.\n             * @param  {Number} delta           - The value returned will need to be adjusted according to the offset rate.\n             * @param  {?Number} speed          - Sliding speed. Please set to 0 when rebounding.\n             * @param  {Boolean} dragging       - Determine if the object is being dragged.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction itemUpdates( wrapper, delta, speed, dragging ) {\n\n                if ( speed == null ) speed = carouselSpeed/1000;\n             \n                \n\t\t\t\tlet $curWrapper = wrapper.children( '.uix-multi-carousel__items' ),  //Default: $carousel\n\t\t\t\t\t$curItems   = $curWrapper.find( '> div' ); //Default: $carouselItem\n\t\t\n\n            \n\t\t\t\t//Clone the first element to the last position\n\t\t\t\tif ( carouselDir == 'horizontal' ) {\n\n                    const boxWidth = eachItemNewWidth;\n                    const wrapWidth = ($curItems.length - 1) * boxWidth; \n                    \n                    TweenMax.to( $curItems, speed, {\n                        x: function(i, target) {\n                            const x = Math.round(target._gsTransform.x / boxWidth ) * boxWidth;\n                            return x + delta;\n                        },\n                        modifiers: {\n                            x: function(x, target) {\n                                \n                                if ( carouselLoop ) {\n                                    //Active the center item\n                                    if( x === midIndex*boxWidth ) {\n                                        TweenMax.set( target, {className:\"+=is-active\"});\n                                    } else {\n                                        TweenMax.set( target, {className:\"-=is-active\"});\n                                    }\n\n\n                                    return wrap(x, -boxWidth, wrapWidth);  \n                                } else {\n                                    return x;\n                                }\n                                \n\n                            }\n                        },\n                        onComplete : function() {\n                            \n                            if ( !dragging && delta != 0 ) {\n                                //The state of the control button\n                                setButtonState( Math.round( $curItems.first()[0]._gsTransform.x ), Math.round( ($curItems.length - amountVisible) * boxWidth ) );  \n\n                            }\n\n\n\t\t\t\t\t\t}\n                    });    \n              \n\n                    \n\t\t\t\t} else {\n                    \n                    const boxHeight = eachItemNewHeight;\n                    const wrapHeight = ($curItems.length - 1) * boxHeight; \n                    \n                    TweenMax.to( $curItems, speed, {\n                        y: function(i, target) {\n                            const y = Math.round(target._gsTransform.y / boxHeight) * boxHeight;\n                            return y + delta;\n                        },\n                        modifiers: {\n                            y: function(y, target) {\n                                \n                                \n                                if ( carouselLoop ) {\n                                    //Active the center item\n                                    if( y === midIndex*boxHeight ) {\n                                        TweenMax.set( target, {className:\"+=is-active\"});\n                                    } else {\n                                        TweenMax.set( target, {className:\"-=is-active\"});\n                                    }\n\n                                    return wrap(y, -boxHeight, wrapHeight)\n                                } else {\n                                    return y;\n                                }\n\n                            }\n                        },\n                        onComplete : function() {\n                            \n                            if ( !dragging && delta != 0 ) {\n                                //The state of the control button\n                                setButtonState( Math.round( $curItems.first()[0]._gsTransform.y ), Math.round( ($curItems.length - amountVisible) * boxHeight ) );   \n   \n                            }\n                         \n\t\t\t\t\t\t}\n                    });         \n                    \n                }\n\n\t\t\t\n\t\t\t\t\t\n\n\t\t\t}\n     \n            \n\t\t\t/*\n\t\t\t * Move function with buttons\n\t\t\t *\n\t\t\t * @param  {Element} $btn               - The button that currently triggers the move.\n             * @param  {Object} event               - Bind an event handler to the \"click\" JavaScript event,\n             * @param  {String} type                - Move next or previous.\n\t\t\t * @return {Void}\n\t\t\t */\n            function movePositionWithButton( $btn, event, type ) {\n   \t\t\t\tconst $curWrapper = $( event.data[0] ),\n\t\t\t\t\t  //Protection button is not triggered multiple times.\n                      btnDisabled = $btn.data( 'disabled' );\n                \n                let delta;\n                if ( type == 'next' ) {\n                    delta = ( carouselDir == 'horizontal' ) ? -eachItemNewWidth : -eachItemNewHeight;\n                } else {\n                    delta = ( carouselDir == 'horizontal' ) ? eachItemNewWidth : eachItemNewHeight;\n                }\n                \n\t\t\t\tif ( typeof btnDisabled === typeof undefined ) {\t\n\t\t\t\t\titemUpdates( $curWrapper, delta, null, false );\n\t\t\t\t} \n            }  \n            \n            \n\t\t\t/*\n\t\t\t * The state of the control button\n\t\t\t *\n             * @param  {Number} firstOffset          - Get the computed Translate X or Y values of a given first DOM element.\n             * @param  {Number} lastOffset           - Get the computed Translate X or Y values of a given last DOM element.\n\t\t\t * @return {Void}\n\t\t\t */\n            function setButtonState( firstOffset, lastOffset ) {\n                \n                if ( carouselLoop ) return false;\n               \n                if ( Math.abs( firstOffset ) == lastOffset ) {\n                    $( carouselNext ).addClass( 'is-disabled' ).data( 'disabled', 1 );\n                    $( carouselPrev ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                } else if ( Math.round( firstOffset ) == 0 ) {\n                    $( carouselNext ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                    $( carouselPrev ).addClass( 'is-disabled' ).data( 'disabled', 1 );\n                } else {\n                    $( carouselNext ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                    $( carouselPrev ).removeClass( 'is-disabled' ).removeData( 'disabled' );\n                }\n            }   \n            \n\t\n\t\t\t/*\n\t\t\t * Tweens each box to a relative x/y position of \"+={number}\"\n\t\t\t *\n\t\t\t * @param  {Number} value           - Current position of the element, x or y coordinates.\n\t\t\t * @param  {Number} min             - The minimum value, used to mark the width or height of each element.\n\t\t\t * @param  {Number} max             - The maximum value, used to mark the width or height of the entire container.\n\t\t\t * @return {Number}                 - The about-to-be-applied value from the regular tween.\n\t\t\t */\n            function wrap(value, min, max) {\n                const v = value - min;\n                const r = max - min;\n\n                // force x/y value to be between {min} and {max} using modulus\n                return ((r + v % r) % r) + min;\n            }\n\n\n\n\n\t\t});\t\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.MULTI_ITEMS_CAROUSEL.documentReady );\n\n\treturn class MULTI_ITEMS_CAROUSEL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n","/* \n *************************************\n * <!-- Full Page/One Page Transition -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport ScrollToPlugin from '@uixkit/plugins/GSAP/ScrollToPlugin';\nimport '@uixkit/plugins/Miscellaneous/hashchange';\n\n\nexport const ONEPAGE = ( ( module, $, window, document ) => {\n\tif ( window.ONEPAGE === null ) return false;\n\t\n\t\n    module.ONEPAGE               = module.ONEPAGE || {};\n    module.ONEPAGE.version       = '0.0.9';\n    module.ONEPAGE.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\t\t\n\n\t    //Determine the direction of a jQuery scroll event\n\t\t//Fix an issue for mousewheel event is too fast.\n\t\tconst quietPeriod        = 500, //Do not change it\n\t\t\t  animationTime      = 1000,//According to page transition animation changes\n\t\t\t  $sectionsContainer = $( '.uix-normal-load__onepage-container' ),\n\t\t\t  $sections          = $sectionsContainer.find( '[data-highlight-section]' ),\n\t\t\t  sectionTotal       = $sections.length,\n              /* topSpacing         = ( window.innerWidth <= 768 ) ? 0 : $( '.uix-header__container' ).outerHeight( true ), //with margin */\n\t\t\t  topSpacing         = 0,\n\t\t\t  $primaryMenu       = $( '.uix-menu' ),\n\t\t\t  $sidefixedMenu     = $( '.uix-menu-sidefixed' );\n\t\t\n        let lastAnimation = 0;\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $sectionsContainer.length == 0 ) return false;\n\t\t\n\n\n\t\t// Prepare everything before binding wheel scroll\n\t\t$.each( $sections, function( i ) {\n\t\t\t$( this ).attr( 'data-index', i );\n\t\t\tif ( i == 0 ) {\n\t\t\t\t$( this ).addClass( 'is-active' );\n\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\n\t\t\n\t\t//Init the section location\n\t\tsectionStart();\n\t\t\n\t\t//Detect URL change\n\t\t$( window ).on( 'hashchange', function(){\n\t\t\tlet hash = window.location.hash,\n\t\t\t\tlocArr,\n\t\t\t\tloc;\n\n\t\t\tif ( hash ) {\n\n\t\t\t\t//Add hashchange event\n\t\t\t\tlocArr = hash.split( 'section-' );\n\t\t\t\tloc    = locArr[1];\n\t\t\t\tmoveTo( $sectionsContainer, false, loc );\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t\n\n\t\t\n\t\t/*\n\t\t * Init the section location\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction sectionStart() {\n\t\n\t\t\tsetTimeout( function() {\n\t\t\t\tlet hash = window.location.hash,\n\t\t\t\t\tlocArr,\n\t\t\t\t\tloc, \n\t\t\t\t\tcurTab;\n\n\t\t\t\tif ( hash ) {\n\t\t\t\t\t\n\t\t\t\t\t//Add hashchange event\n\t\t\t\t\tlocArr = hash.split( 'section-' );\n\t\t\t\t\tloc    = locArr[1];\n\t\t\t\t\tmoveTo( $sectionsContainer, false, loc );\n\t\t\t\t} else {\n\t\t\t\t\tmoveTo( $sectionsContainer, false, 1 );\n\t\t\t\t}\n\n\t\t\t}, quietPeriod );\n\n\t\t}\n\t\t\t\n\t\t\n\t\t/*\n\t\t * Scroll initialize\n\t\t *\n\t\t * @param  {Event} event        - The wheel event is fired when a wheel button of a pointing device (usually a mouse) is rotated. \n\t\t * @param  {String} dir          - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction scrollMoveInit( event, dir ) {\n\t\n\t\t\tconst timeNow = new Date().getTime();\n\t\t\t// Cancel scroll if currently animating or within quiet period\n\t\t\tif( timeNow - lastAnimation < quietPeriod + animationTime) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( dir == 'down' ) {\n\t\t\t\t//scroll down\n\t\t\t\tmoveTo( $sectionsContainer, 'down', false );\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t//scroll up\n\t\t\t\tmoveTo( $sectionsContainer, 'up', false );\n\t\t\t\t\n\t\t\t  \n\t\t\t}\n\t\t\tlastAnimation = timeNow;\n\t\t}\n\t\t\n      \n\t\t\n\t\t/*\n\t\t * Move Animation\n\t\t *\n\t\t * @param  {Element} el           - The container of each sections.\n\t\t * @param  {String} dir          - Rolling direction indicator.\n\t\t * @param  {Number} hashID       - ID of custom hashchange event.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction moveTo( el, dir, hashID ) {\n\t\t\tconst index     = parseFloat( $sections.filter( '.is-active' ).attr( 'data-index' ) ),\n\t\t\t\t  isNumeric = /^[-+]?(\\d+|\\d+\\.\\d*|\\d*\\.\\d+)$/;\n            \n\t\t\tlet\tnextIndex = null,\n\t\t\t\t$next     = null;\n\t\t\t \n\t\t\tif ( dir == 'down' || dir === false ) {\n\t\t\t\tnextIndex = index + 1;\n\t\t\t} else {\n\t\t\t\tnextIndex = index - 1;\n\t\t\t}\n\t\t\t\n\n\t\t\t//ID of custom hashchange event\n\t\t\tif ( isNumeric.test( hashID ) ) nextIndex = parseFloat( hashID - 1 );\n\t\t\t\n\t\t\t\n\t\t\tif ( nextIndex <= parseFloat( sectionTotal-1 ) && nextIndex >= 0 ) {\n\t\t\t\t\n\t\t\t\tif ( nextIndex > parseFloat( sectionTotal-1 ) ) nextIndex = parseFloat( sectionTotal-1 );\n\t\t\t\tif ( nextIndex < 0 ) nextIndex = 0;\n\n\n\t\t\t\t//Returns the target section\n\t\t\t\t$next = $sections.eq( nextIndex );\n\n\t\t\t\t//Smooth scroll to content\n\t\t\t\tif ( $next.length > 0 ) {\n\t\t\t\t\tTweenMax.to( window, animationTime/1000, {\n\t\t\t\t\t\tscrollTo: {\n\t\t\t\t\t\t\ty: $next.offset().top - topSpacing,\n\t\t\t\t\t\t\tautoKill : false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tease: Power2.easeOut,\n\t\t\t\t\t\tonComplete: function() {\n\n\t\t\t\t\t\t\t$sections.removeClass( 'leave' );\n\t\t\t\t\t\t\t$sections.eq( index ).addClass( 'leave' );\n\n\t\t\t\t\t\t\t$sections.removeClass( 'is-active' );\n\t\t\t\t\t\t\t$next.addClass( 'is-active' ).removeClass( 'leave' );\n\n\n\n\t\t\t\t\t\t\t//Changing The Site URL\n\t\t\t\t\t\t\tconst curSectionIndex = $sections.filter( '.is-active' ).index() + 1,\n\t\t\t\t\t\t\t\t  href            = window.location.href.substr( 0, window.location.href.indexOf( '#' ) ) + '#' + $sections.filter( '.is-active' ).attr( 'id' );\n\n\t\t\t\t\t\t\t// Save state on history stack\n\t\t\t\t\t\t\t// - First argument is any object that will let you restore state\n\t\t\t\t\t\t\t// - Second argument is a title (not the page title, and not currently used)\n\t\t\t\t\t\t\t// - Third argument is the URL - this will appear in the browser address bar\n\t\t\t\t\t\t\thistory.pushState( {}, document.title, href );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconsole.log( 'Section ' + curSectionIndex + ' loaded!' );\n\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\t\t\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\n\t\n\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\n\t\t/* \n\t\t ====================================================\n\t\t *  Navigation Interaction\n\t\t ====================================================\n\t\t */\n\t\tgoPageSection( $primaryMenu );\n\t\tgoPageSection( $sidefixedMenu );\n\n        \n\t\n\t\t//Activate the first item\n\t\t$primaryMenu.find( 'li:first' ).addClass( 'is-active' );\n\t\t$sidefixedMenu.find( 'li:first' ).addClass( 'is-active' );\n\t\t\n\t\t\n\t\t/*\n\t\t * Get section or article by href\n\t\t *\n\t\t * @param  {String|Object} el  - The current selector or selector ID\n\t\t * @return {Object}             - A new selector.\n\t\t */\n        function getRelatedContent( el ) {\n            return $( $( el ).attr( 'href' ) );\n        }\n\t\t\n\t\t\n\t\t/*\n\t\t * Get link by section or article id\n\t\t *\n\t\t * @param  {String|Element} el    - The current selector or selector ID\n\t\t * @param  {Element} menuObj       - Returns the menu element within the document.\n\t\t * @param  {Boolean} echoIndex    - Whether to return the current index.\n\t\t * @return {Object}               - A new selector.\n\t\t */\n        function getRelatedNavigation( el, menuObj, echoIndex ) {\n\t\t\t\n\t\t\tif ( echoIndex ) {\n\t\t\t\treturn menuObj.find( 'li > a[href=#' + $( el ).attr( 'id' ) + ']' ).parent( 'li' ).index();\n\t\t\t} else {\n\t\t\t    return menuObj.find( 'li > a[href=#' + $( el ).attr( 'id' ) + ']' ).parent( 'li' );\t\n\t\t\t}\n            \n        } \n\t\t\n\t\t/*\n\t\t * Get all links by section or article\n\t\t *\n\t\t * @param  {Element} menuObj     - Returns the menu element within the document.\n\t\t * @return {Element}             - A new selector.\n\t\t */\n        function getAllNavigation( menuObj ) {\n            return menuObj.find( 'li' );\n        } \t\n\t\t\n\t\t\n\t\t/*\n\t\t * Smooth scroll to content\n\t\t *\n\t\t * @param  {Element} menuObj     - Returns the menu element within the document.\n\t\t * @return {Void}\n\t\t */\n        function goPageSection( menuObj ) {\n\t\t\tmenuObj.find( 'li > a' ).off( 'click.ONEPAGE' ).on( 'click.ONEPAGE', function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( $( this ).parent().hasClass( 'is-active' ) ) return false;\n\t\t\t\t\n\t\t\t\tmoveTo( $sectionsContainer, false, $( this ).parent( 'li' ).index() + 1 );\n\t\t\t});\t\n\t\n        } \t\n\n\n\n\t\tconst navMinTop      = ( $sidefixedMenu.length > 0 ) ? $sidefixedMenu.offset().top : 0,\n\t\t\t  navMaxTop      = parseFloat( $( document ).height() - $( '.uix-footer__container' ).height() ) - windowHeight/3;\n\n\t\t$window.off( 'scroll.ONEPAGE touchmove.ONEPAGE' ).on( 'scroll.ONEPAGE touchmove.ONEPAGE', function() {\n\t\t\tconst scrolled  = $( this ).scrollTop(),\n\t\t\t\t  spyTop    = parseFloat( scrolled + topSpacing ),\n\t\t\t\t  minTop    = $( '[data-highlight-section=\"true\"]' ).first().offset().top,\n\t\t\t\t  maxTop    = $( '[data-highlight-section=\"true\"]' ).last().offset().top + $( '[data-highlight-section=\"true\"]' ).last().height();\n\n\t\t\t$( '[data-highlight-section=\"true\"]' ).each( function()  {\n\t\t\t\tconst $block    = $( this ),\n\t\t\t\t\t  eleTop    = $block.offset().top;\n\t\t\t\t\n\n\t\t\t\t// The 1 pixel in order to solve inaccurate value of outerHeight() \n\t\t\t\t// in Safari and Firefox browsers.\n\t\t\t\tif ( eleTop < spyTop + 1 ) {\n\n\t\t\t\t\t// Highlight element when related content\n\t\t\t\t\tgetAllNavigation( $primaryMenu ).removeClass( 'is-active' );\n\t\t\t\t\tgetAllNavigation( $sidefixedMenu ).removeClass( 'is-active' );\n\t\t\t\t\tgetRelatedNavigation( $block, $primaryMenu, false ).addClass( 'is-active' );\n\t\t\t\t\tgetRelatedNavigation( $block, $sidefixedMenu, false ).addClass( 'is-active' );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t} \n\t\t\t});\n\n\n\n\t\t\t//Cancel the current highlight element\n\t\t\t// The 1 pixel in order to solve inaccurate value of outerHeight() \n\t\t\t// in Safari and Firefox browsers.\n\t\t\tif ( spyTop > maxTop || spyTop < minTop - 1 ) {\n\t\t\t\tgetAllNavigation( $primaryMenu ).removeClass( 'is-active' );\n\t\t\t\tgetAllNavigation( $sidefixedMenu ).removeClass( 'is-active' );\n\t\t\t}\n\n\n\t\t\t//Detecting when user scrolls to bottom of div\n\t\t\tif ( spyTop > navMaxTop || spyTop < navMinTop ) {\n\t\t\t\t$sidefixedMenu.removeClass( 'is-fixed' );\n\t\t\t} else {\n\t\t\t\t$sidefixedMenu.addClass( 'is-fixed' );\n\t\t\t}\t\n\n\n\t\t});\t\n\t\n\t\t\n\n\t\t/* \n\t\t ====================================================\n\t\t *  Mouse Wheel & Touch Method\n\t\t ====================================================\n\t\t */\n\t\tlet startY = 0;\n\t\tconst onTouchStart = function ( e ) {\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tstartY = touches[0].pageY;\n\t\t\t\t\n\t\t\t}\n\t\t};\n\n\t\t\n\t\tconst onDeviceWheel = function ( e ) {\n\t\t\t\n\t\t\t//Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t\tlet dir, delta, mobileDeltaY = null;\n\t\t\t\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tmobileDeltaY = startY - touches[0].pageY;\n\t\t\t} else {\n\t\t\t\tdelta = Math.max(-1, Math.min(1, (-e.deltaY)));\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\tif ( mobileDeltaY != null ) {\n\t\t\t\t\n\t\t\t\tif ( mobileDeltaY >= 50 ) {\n\t\t\t\t\t//--- swipe up\n\t\t\t\t    dir = 'up';\n\t\t\t\t}\n\t\t\t\tif ( mobileDeltaY <= -50 ) {\n\t\t\t\t\t//--- swipe down\n\t\t\t\t\tdir = 'down';\n\t\t\t\t\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\tif( delta < 0 ) { \n\t\t\t\t\t//scroll down\n\t\t\t\t\tdir = 'down';\n\n\t\t\t\t} else {\n\t\t\t\t\t//scroll up\n\t\t\t\t\tdir = 'up';\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\t\n\t\t\tscrollMoveInit( e, dir );\n\t\t\t\n\t\t};\n\t\t\n\n\n\t\twindow.addEventListener( 'wheel', onDeviceWheel, { passive: true } );\n\t\twindow.addEventListener( 'touchstart', onTouchStart, { passive: true } );\n\t\twindow.addEventListener( 'touchmove', onDeviceWheel, { passive: true } );\n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.ONEPAGE.documentReady );\n\n\treturn class ONEPAGE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t","/* \n *************************************\n * <!-- Full Page/One Page Transition 2 -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport '@uixkit/plugins/Miscellaneous/hashchange';\n\n\nexport const ONEPAGE2 = ( ( module, $, window, document ) => {\n\tif ( window.ONEPAGE2 === null ) return false;\n\t\n\t\n\t\n    module.ONEPAGE2               = module.ONEPAGE2 || {};\n    module.ONEPAGE2.version       = '0.0.7';\n    module.ONEPAGE2.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\n\t\t\n\t    //Determine the direction of a jQuery scroll event\n\t\t//Fix an issue for mousewheel event is too fast.\n\t\tconst quietPeriod        = 500, //Do not change it\n\t\t\t  animationTime      = 1000,//According to page transition animation changes\n\t\t\t  $sectionsContainer = $( '.uix-normal-load__onepage-container2' ),\n\t\t\t  $sections          = $sectionsContainer.find( '[data-highlight-section]' ),\n\t\t\t  sectionTotal       = $sections.length,\n\t\t\t  $primaryMenu       = $( '.uix-menu' ),\n\t\t\t  $sidefixedMenu     = $( '.uix-menu-sidefixed' );\n        \n        let lastAnimation = 0;\n\t\t\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $sectionsContainer.length == 0 ) return false;\n\t\t\n\t\t\n\t\t//Init the sections style\n\t\t$sectionsContainer.css({\n\t\t\t'position' : 'relative'\n\t\t});\n\t\t\n\t\tlet secIndex = 10;\n\t\tfor ( let i = 0; i < sectionTotal; i++ ) {\n\t\t\t\n\t\t\t$sections.eq( i ).css({\n\t\t\t\t'position' : 'absolute',\n\t\t\t\t'width'    : '100%',\n\t\t\t\t'z-index'  : secIndex,\n\t\t\t\t'top'      : 0,\n\t\t\t\t'left'     : 0\n\t\t\t});\t\t\n\t\t\t\n\t\t\tsecIndex--;\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\n\n\t\t// Prepare everything before binding wheel scroll\n\t\t$.each( $sections, function( i ) {\n\t\t\t$( this ).attr( 'data-index', i );\n\t\t\tif ( i == 0 ) {\n\t\t\t\t$( this ).addClass( 'is-active' );\n\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\n\t\t//Init the section location\n\t\tsectionStart();\n\n\t\t//Detect URL change\n\t\t$( window ).on( 'hashchange', function(){\n\t\t\tlet hash = window.location.hash,\n\t\t\t\tlocArr,\n\t\t\t\tloc;\n\n\t\t\tif ( hash ) {\n\n\t\t\t\t//Add hashchange event\n\t\t\t\tlocArr = hash.split( 'section-' );\n\t\t\t\tloc    = locArr[1];\n\t\t\t\tmoveTo( $sectionsContainer, false, loc );\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Init the section location\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction sectionStart() {\n\t\n\t\t\tsetTimeout( function() {\n\t\t\t\tlet hash = window.location.hash,\n\t\t\t\t\tlocArr,\n\t\t\t\t\tloc, \n\t\t\t\t\tcurTab;\n\n\t\t\t\tif ( hash ) {\n\t\t\t\t\t\n\t\t\t\t\t//Add hashchange event\n\t\t\t\t\tlocArr = hash.split( 'section-' );\n\t\t\t\t\tloc    = locArr[1];\n\t\t\t\t\tmoveTo( $sectionsContainer, false, loc );\n\t\t\t\t} else {\n\t\t\t\t\tmoveTo( $sectionsContainer, false, 1 );\n\t\t\t\t}\n\n\t\t\t}, quietPeriod );\n\n\t\t}\n\t\t\t\n\t\t\n\n\t\t/*\n\t\t * Initialize the depth of all sections\n\t\t *\n\t\t * @param  {Number} nextIndex        - Index of next section.\n\t\t * @param  {Number} currentIndex     - Index of current section.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction sectionsDepthInit( nextIndex, currentIndex ) {\n\t\n\t\t\tlet secIndex = 10;\n\t\t\t\n\t\t\tfor ( let i = 0; i < sectionTotal; i++ ) {\n\n\t\t\t\tif ( nextIndex && i != nextIndex && i != currentIndex ) {\n\t\t\t\t\t$sections.eq( i ).css( 'z-index', secIndex );\n\t\t\t\t}\n\t\t\t\t \n\t\t\t\tsecIndex--;\n\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Scroll initialize\n\t\t *\n\t\t * @param  {Event} event        - The wheel event is fired when a wheel button of a pointing device (usually a mouse) is rotated. \n\t\t * @param  {String} dir          - Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction scrollMoveInit( event, dir ) {\n\t\n\t\t\tconst timeNow = new Date().getTime();\n\t\t\t// Cancel scroll if currently animating or within quiet period\n\t\t\tif( timeNow - lastAnimation < quietPeriod + animationTime) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( dir == 'down' ) {\n\t\t\t\t//scroll down\n\t\t\t\tmoveTo( $sectionsContainer, 'down', false );\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t//scroll up\n\t\t\t\tmoveTo( $sectionsContainer, 'up', false );\n\t\t\t\t\n\t\t\t  \n\t\t\t}\n\t\t\tlastAnimation = timeNow;\n\t\t}\n\t\t\n      \n\t\t\n\t\t/*\n\t\t * Move Animation\n\t\t *\n\t\t * @param  {Element} el           - The container of each sections.\n\t\t * @param  {String} dir          - Rolling direction indicator.\n\t\t * @param  {Number} hashID       - ID of custom hashchange event.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction moveTo( el, dir, hashID ) {\n\t\t\tconst index     = parseFloat( $sections.filter( '.is-active' ).attr( 'data-index' ) ),\n\t\t\t\t  isNumeric = /^[-+]?(\\d+|\\d+\\.\\d*|\\d*\\.\\d+)$/;\n\t\t\t\n\t\t\tlet\tnextIndex = null,\n\t\t\t\t$next     = null;\n            \n            \n\t\t\tif ( dir == 'down' || dir === false ) {\n\t\t\t\tnextIndex = index + 1;\n\t\t\t} else {\n\t\t\t\tnextIndex = index - 1;\n\t\t\t}\n\t\t\t\n\t\t\t//ID of custom hashchange event\n\t\t\tif ( isNumeric.test( hashID ) ) nextIndex = parseFloat( hashID - 1 );\n\t\t\t\n\t\t\t\n\t\t\tif ( nextIndex <= parseFloat( sectionTotal-1 ) && nextIndex >= 0 ) {\n\t\t\t\t\n\t\t\t\tif ( nextIndex > parseFloat( sectionTotal-1 ) ) nextIndex = parseFloat( sectionTotal-1 );\n\t\t\t\tif ( nextIndex < 0 ) nextIndex = 0;\n\n\n\t\t\t\t//Returns the target section\n\t\t\t\t$next = $sections.eq( nextIndex );\n\n\t\t\t\tif ( $next.length > 0 ) {\n\n\t\t\t\t\tTweenMax.set( $next, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t'z-index' : 12,\n\t\t\t\t\t\t\t'top'     : ( dir == 'down' || dir === false ) ? windowHeight : -windowHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonComplete: function() {\n\n\t\t\t\t\t\t\t//Reset sections z-index\n\t\t\t\t\t\t\t$sections.eq( index ).css( 'z-index', 11 );\n\t\t\t\t\t\t\tsectionsDepthInit( nextIndex, index );\n\n\n\t\t\t\t\t\t\tTweenMax.to( $sections.eq( index ), animationTime/1000, {\n\t\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\t\t'top'     : ( dir == 'down' || dir === false ) ? -windowHeight/2 : windowHeight/2\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tease: Power2.easeOut\n\t\t\t\t\t\t\t});\t\t\n\n\n\n\t\t\t\t\t\t\tTweenMax.to( this.target, animationTime/2000, {\n\t\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\t\t'top'     : 0\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tease: Power2.easeOut,\n\t\t\t\t\t\t\t\tonComplete: function() {\n\n\n\t\t\t\t\t\t\t\t\t$sections.removeClass( 'leave' );\n\t\t\t\t\t\t\t\t\t$sections.eq( index ).addClass( 'leave' );\n\n\t\t\t\t\t\t\t\t\t$sections.removeClass( 'is-active' );\n\t\t\t\t\t\t\t\t\t$next.addClass( 'is-active' ).removeClass( 'leave' );\n\n\n\n\t\t\t\t\t\t\t\t\t//Changing The Site URL\n\t\t\t\t\t\t\t\t\tconst curSectionIndex = $sections.filter( '.is-active' ).index() + 1,\n\t\t\t\t\t\t\t\t\t\t  href            = window.location.href.substr( 0, window.location.href.indexOf( '#' ) ) + '#' + $sections.filter( '.is-active' ).attr( 'id' );\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Save state on history stack\n\t\t\t\t\t\t\t\t\t// - First argument is any object that will let you restore state\n\t\t\t\t\t\t\t\t\t// - Second argument is a title (not the page title, and not currently used)\n\t\t\t\t\t\t\t\t\t// - Third argument is the URL - this will appear in the browser address bar\n\t\t\t\t\t\t\t\t\thistory.pushState( {}, document.title, href );\n\t\t\t\t\t\t\t\t\tconsole.log( 'Section ' + curSectionIndex + ' loaded!' );\n\n\t\t\t\t\t\t\t\t\t// Highlight element when related content\n\t\t\t\t\t\t\t\t\tgetAllNavigation( $primaryMenu ).removeClass( 'is-active' );\n\t\t\t\t\t\t\t\t\tgetAllNavigation( $sidefixedMenu ).removeClass( 'is-active' );\n\t\t\t\t\t\t\t\t\t$primaryMenu.find( 'li' ).eq( nextIndex ).addClass( 'is-active' );\n\t\t\t\t\t\t\t\t\t$sidefixedMenu.find( 'li' ).eq( nextIndex ).addClass( 'is-active' );\n\n\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\n\n\t\t\t\t}\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\n\n\t\t\t\n\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t/* \n\t\t ====================================================\n\t\t *  Navigation Interaction\n\t\t ====================================================\n\t\t */\n\t\tgoPageSection( $primaryMenu );\n\t\tgoPageSection( $sidefixedMenu );\n\n\t\n\t\t//Activate the first item\n\t\t$primaryMenu.find( 'li:first' ).addClass( 'is-active' );\n\t\t$sidefixedMenu.find( 'li:first' ).addClass( 'is-active' );\n\n\t\t\n\t\t/*\n\t\t * Get section or article by href\n\t\t *\n\t\t * @param  {String|Object} el  - The current selector or selector ID\n\t\t * @return {Object}             - A new selector.\n\t\t */\n        function getRelatedContent( el ) {\n            return $( $( el ).attr( 'href' ) );\n        }\n\n\t\t\n\t\t/*\n\t\t * Get all links by section or article\n\t\t *\n\t\t * @param  {Element} menuObj     - Returns the menu element within the document.\n\t\t * @return {Element}             - A new selector.\n\t\t */\n        function getAllNavigation( menuObj ) {\n            return menuObj.find( 'li' );\n        } \t\n\t\t\n\t\t\n\t\t/*\n\t\t * Smooth scroll to content\n\t\t *\n\t\t * @param  {Element} menuObj     - Returns the menu element within the document.\n\t\t * @return {Void}\n\t\t */\n        function goPageSection( menuObj ) {\n\t\t\tmenuObj.find( 'li > a' ).off( 'click.ONEPAGE2' ).on( 'click.ONEPAGE2', function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( $( this ).parent().hasClass( 'is-active' ) ) return false;\n\t\t\t\t\n\t\t\t\n\t\t\t\tlet dir = 'down';\n\t\t\t\t\n\t\t\t\tif ( $sections.filter( '.is-active' ).index() > $( this ).parent().index() ) {\n\t\t\t\t\tdir = 'up';\n\t\t\t\t}\n\t\t\t\tmoveTo( $sectionsContainer, dir, $( this ).parent( 'li' ).index() + 1 );\n\t\t\t\t\n\t\t\t\t\n\t\t\t});\t\n\t\n        } \t\n        \n\t\n\t\t\n\t\t/* \n\t\t ====================================================\n\t\t *  Mouse Wheel & Touch Method\n\t\t ====================================================\n\t\t */\n\t\tlet startY = 0;\n\t\tconst onTouchStart = function ( e ) {\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tstartY = touches[0].pageY;\n\t\t\t\t\n\t\t\t}\n\t\t};\n\n\t\t\n\t\tconst onDeviceWheel = function ( e ) {\n\t\t\t\n\t\t\t//Gets a value that indicates the amount that the mouse wheel has changed.\n\t\t\tlet dir, delta, mobileDeltaY = null;\n\t\t\t\n\t\t\tconst touches = e.touches;\n\t\t\tif ( touches && touches.length ) {\n\t\t\t\tmobileDeltaY = startY - touches[0].pageY;\n\t\t\t} else {\n\t\t\t\tdelta = Math.max(-1, Math.min(1, (-e.deltaY)));\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\tif ( mobileDeltaY != null ) {\n\t\t\t\t\n\t\t\t\tif ( mobileDeltaY >= 50 ) {\n\t\t\t\t\t//--- swipe up\n\t\t\t\t    dir = 'up';\n\t\t\t\t}\n\t\t\t\tif ( mobileDeltaY <= -50 ) {\n\t\t\t\t\t//--- swipe down\n\t\t\t\t\tdir = 'down';\n\t\t\t\t\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\tif( delta < 0 ) { \n\t\t\t\t\t//scroll down\n\t\t\t\t\tdir = 'down';\n\n\t\t\t\t} else {\n\t\t\t\t\t//scroll up\n\t\t\t\t\tdir = 'up';\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\t\n\t\t\tscrollMoveInit( e, dir );\n\t\t\t\n\t\t};\n\t\t\n\n\t\twindow.addEventListener( 'wheel', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchstart', onTouchStart, browser.supportsPassive ? { passive: true } : false );\n\t\twindow.addEventListener( 'touchmove', onDeviceWheel, browser.supportsPassive ? { passive: true } : false );\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.ONEPAGE2.documentReady );\n\n\treturn class ONEPAGE2 {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Parallax -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixParallax from '@uixkit/core/_global/js/fn/UixParallax';\n\nimport '../scss/_style.scss';\n\n\nexport const PARALLAX = ( ( module, $, window, document ) => {\n\tif ( window.PARALLAX === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.PARALLAX               = module.PARALLAX || {};\n    module.PARALLAX.version       = '0.0.7';\n\tmodule.PARALLAX.documentReady = function( $ ) {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\n      \n\t\t//  Initialize\n\t\tparallaxInit( windowWidth, windowHeight );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth  = window.innerWidth;\n\t\t\t\twindowHeight = window.innerHeight;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tparallaxInit( windowWidth, windowHeight );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\n\t\t/*\n\t\t * Initialize parallx settings\n\t\t *\n\t\t * @param  {Number} w         - Returns width of browser viewport\n\t\t * @param  {Number} h         - Returns height of browser viewport\n\t\t * @return {Void}\n\t\t */\n\t\tfunction parallaxInit( w, h ) {\n\t\t\t\n\t\t\t/* Pure parallax scrolling effect without other embedded HTML elements */\n\t\t\t$( '.uix-parallax--el' ).each( function() {\n\t\t\t\tconst $this       = $( this );\n                \n\t\t\t\tlet\tdataSpeed   = $this.data( 'speed' ),\n                    dataEasing  = $this.data( 'transition' );\n\t\t\t\t\n\t\t\t\tif ( typeof dataSpeed === typeof undefined ) {\n\t\t\t\t\tdataSpeed = 0;\n\t\t\t\t}\n\t\t\t\tif ( typeof dataEasing === typeof undefined ) {\n\t\t\t\t\tdataEasing = 'none 0s ease 0s';\n\t\t\t\t} \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t$this.UixParallax( { 'speed': dataSpeed, 'bg': false, transition : dataEasing } );\t\n\t\t\t\t\n\t\t\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t/* Parallax scrolling effect with embedded HTML elements */\n\t\t\t$( '.uix-parallax' ).each( function() {\n\t\t\t\tconst $this            = $( this );\n                \n\t\t\t\tconst $curImg          = $this.find( '.uix-parallax__img' ),\n\t\t\t\t\t  dataImg          = $curImg.attr( 'src' );\n                      \n\t\t\t\tlet\tdataSkew         = $this.data( 'skew' ),\n\t\t\t\t\tdataSpeed        = $this.data( 'speed' ),\n                    dataEasing       = $this.data( 'transition' ),\n\t\t\t\t\tdataOverlay      = $this.data( 'overlay-bg' ),\n\t\t\t\t\tdataFullyVisible = $this.data( 'fully-visible' ),\n                    dataXPos         = $this.data( 'xpos' ),\n\t\t\t\t\tdataOffsetTop    = parseFloat( $this.data( 'offset-top' ) ),\n\t\t\t\t\tcurImgH          = null,\n\t\t\t\t\tcurImgW          = null,\n\t\t\t\t\tcurSize          = 'cover';\n\t\t\t\t\n\t\t\t\n\t\t\t\tif( \n\t\t\t\t\ttypeof dataOverlay === typeof undefined ||\n\t\t\t\t\tdataOverlay == 'none' ||\n\t\t\t\t\tdataOverlay == 0 ||\n\t\t\t\t\tdataOverlay == false\n\t\t\t\t  ) {\n\t\t\t\t\tdataOverlay = 'rgba(0, 0, 0, 0)';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( typeof dataSpeed === typeof undefined ) { // If there is no data-xxx, save current source to it\n\t\t\t\t\tdataSpeed = 0;\n\t\t\t\t}\t\n\t\t\t\tif ( typeof dataEasing === typeof undefined ) {\n\t\t\t\t\tdataEasing = 'none 0s ease 0s';\n\t\t\t\t} \n                \n\t\t\t\tif ( typeof dataXPos === typeof undefined ) {\n\t\t\t\t\tdataXPos = '50%';\n\t\t\t\t} \t\n\t\t\t\t\n\t\t\t\tif ( typeof dataOffsetTop === typeof undefined ) {\n\t\t\t\t\tdataOffsetTop = 0;\n\t\t\t\t} \t\n\t\t\t\t\n\t\t\t\tif ( typeof dataFullyVisible === typeof undefined ) {\n\t\t\t\t\tdataFullyVisible = false;\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\t//Trigger a callback when the selected images are loaded\n\t\t\t\t//Check if the picture is loaded on the page\n\t\t\t\tconst img    = new Image();\n\t\t\t\timg.onload = function() {\n\t\t\t\t\t\n\t\t\t\t\tcurImgH = $curImg.height();\n\t\t\t\t\tcurImgW = $curImg.width();\n\t\t\t\t\t\n\t\t\t\t\t//Custom height for parallax container\n\t\t\t\t\tif ( \n\t\t\t\t\t\t$this.hasClass( 'uix-height--10' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--20' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--30' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--40' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--50' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--60' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--70' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--80' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--90' ) || \n\t\t\t\t\t\t$this.hasClass( 'uix-height--100' )\n\t\t\t\t\t ) {\t\t\n\n\t\t\t\t\t\tconst newH = $this.height();\n\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t'height': newH + 'px'\n\t\t\t\t\t\t} );\t\n\t\t\t\t\t\t$curImg.css( 'max-height', newH + 'px' );\t\n\t\t\t\t\t } else {\n\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t'height': $this.height() + 'px'\n\t\t\t\t\t\t} );\t\n\t\t\t\t\t }\n\n\n\t\t\t\t\t//If the \".uix-v-align--absolute\" has more content\n\t\t\t\t\tif ( w <= 768 ) {\n\n\t\t\t\t\t\tif ( $this.find( '.uix-v-align--absolute' ).height() >= curImgH ) {\n\t\t\t\t\t\t\t$this.find( '.uix-v-align--absolute' ).addClass( 'uix-v-align--relative' );\n\t\t\t\t\t\t\t$curImg.hide();\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t//Resize the background image to cover the entire container and\n\t\t\t\t\t//Resize the background image to make sure the image is fully visible\n\t\t\t\t\tif ( curImgW > w ) {\n\t\t\t\t\t\tcurSize = 'contain';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurSize = 'cover';\n\t\t\t\t\t}\n\n\t\t\t\t\t\n\t\t\t\t\t//Determine image height and parallax container height\n\t\t\t\t\t//If the height is the same, higher or lower than the height of the container height, \n\t\t\t\t\t//be sure to use the cover attribute\n\t\t\t\t\t//*** Must be placed before the \"dataFullyVisible\" condition\n\t\t\t\t\tif ( curImgH <= $this.height() ) {\n\t\t\t\t\t\tcurSize = 'cover';\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Whether to display all pictures, including the edges\n\t\t\t\t\tif ( dataFullyVisible ) {\n\n\t\t\t\t\t\tif ( curImgW < w ) {\n\t\t\t\t\t\t\tcurSize = 'cover';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurSize = 'contain';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\n\t\t\t\t\t//console.log( 'Height: ' +curImgH + '===' + $this.height() + ' | Width: ' + curImgW + '===' + w + ' | ' + curSize );\n\n\t\t\t\t\t//Add background image to parallax container\n\t\t\t\t\tif ( typeof dataImg != typeof undefined ) {\n\n\t\t\t\t\t\tif ( Modernizr.cssanimations ) {\n\t\t\t\t\t\t\t// supported\n\n\t\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t\t'background' : 'linear-gradient('+dataOverlay+', '+dataOverlay+'), url(' + dataImg + ') '+dataXPos+' '+dataOffsetTop+'px/'+curSize+' no-repeat fixed'\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// not-supported\n\n\t\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t\t'background' : 'url(' + dataImg + ') '+dataXPos+' '+dataOffsetTop+'px/'+curSize+' no-repeat fixed'\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\t//Apply tilt effect\n\t\t\t\t\tif ( typeof dataSkew != typeof undefined && dataSkew != 0 ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Firefox browser will affect parallax effect due to transform\n\t\t\t\t\t\t$this.css( {\n\t\t\t\t\t\t\t'transform'  : 'skew(0deg, '+dataSkew+'deg)'\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\n\t\t\t\t\t//Use parallax to background\n\t\t\t\t\t$this.UixParallax( { 'speed': dataSpeed, 'transition' : dataEasing, 'offsetTop': dataOffsetTop, 'bg': { enable: true, xPos: dataXPos } } );\n\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\timg.src = dataImg;\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\t});\n\t\t\t\n\t\t\n\t\n\t\t}\t\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.PARALLAX.documentReady );\n\n\treturn class PARALLAX {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n\n","/* \n *************************************\n * <!-- Periodical Scroll -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const PERIODICAL_SCROLL = ( ( module, $, window, document ) => {\n\tif ( window.PERIODICAL_SCROLL === null ) return false;\n\t\n\t\n\t\n    module.PERIODICAL_SCROLL               = module.PERIODICAL_SCROLL || {};\n    module.PERIODICAL_SCROLL.version       = '0.0.5';\n    module.PERIODICAL_SCROLL.documentReady = function( $ ) {\n\n\t\t$( '.uix-periodical-scroll' ).each( function() {\n\n\t\t\tconst $this       = $( this );\n            \n\t\t\tlet speed       = $this.data( 'speed' ),\n\t\t\t\ttiming      = $this.data( 'timing' );\n            \n\t\t\tconst $list       = $this.find( '> ul' );\n\t\t\tconst itemHeight  = $list.find( 'li:first' ).height();\n\n\t\t\t$this.css({\n\t\t\t\t'height': itemHeight + 'px',\n\t\t\t\t'overflow': 'hidden'\n\t\t\t\t\n\t\t\t})\n\n\t\t\tif ( typeof speed === typeof undefined ) {\n\t\t\t\tspeed = 600;\n\t\t\t}\n\n\t\t\tif ( typeof timing === typeof undefined ) {\n\t\t\t\ttiming = 2000;\n\t\t\t}\t\n\t\t\t\n\t\t\t\n\t\t\t//If there is only one item, add one to complete the seamless loop effect\n\t\t\tif ( $list.find( 'li' ).length == 1 ) {\n\t\t\t\t$list.prepend( $list.find( 'li:first' ).clone() );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//\n\t\t\tconst eachItemAnimOKDelay = 150;\n\t\t\tconst $item = $list.find( '> li' );\n\t\t\tconst moveY = itemHeight*2;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t//Prevent repetition of animation events\n\t\t\tTweenMax.killTweensOf( $item );\n\t\t\t\n\t\t\t\n\t\t\t//\n\t\t\tconst tl = new TimelineMax({\n\t\t\t\t              repeat      : -1,\n\t\t\t\t              repeatDelay : eachItemAnimOKDelay/1000\n\n                           });\n            \n\t\t\t\n\t\t\t//pauses wherever the playhead currently is:\n\t\t\ttl.pause();\n\t\t\tsetTimeout( function() {\n\t\t\t\ttl.play();\n\t\t\t}, speed );\n            \n\n\t\t\ttl\n            .add( TweenMax.staggerFromTo( $item, speed/1000, {\n                opacity : 0,\n                y       : moveY\n            },{\n                opacity : 1,\n                y       : 0\n            }, timing/1000 ) )\n\n            .add( TweenMax.staggerTo( $item, speed/1000, {\n                delay    : timing/1000,\n                opacity  : 0,\n                y        : -moveY,\n\t\t\t\tonComplete: function() {\n\t\t\t\t\tTweenMax.set( this.target, {\n\t\t\t\t\t\tdelay    : eachItemAnimOKDelay/1000,\n\t\t\t\t\t\topacity : 0,\n\t\t\t\t\t\ty       : moveY\n\t\t\t\t\t});\n\t\t\t\t\t\t\t\t  \n\t\t\t\t}\n            }, timing/1000 ), 0 );\n            \n            \n\t\t\t\n\t\t\t$item.on( 'mouseenter', function() { \n\t\t\t\ttl.pause();\n\t\t\t} )\n\t\t    .on( 'mouseleave', function() { \n\t\t\t\ttl.play();\n\t\t\t\t\n\t\t\t\tif ( $( this ).index() > 0 ) {\n\t\t\t\t\tTweenMax.set( $item.first(), {\n\t\t\t\t\t\topacity : 0,\n\t\t\t\t\t\ty       : moveY\n\t\t\t\t\t});\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t} );\n\t\t\t\n\n\t\t\t\n\t\t});\n\t\t\n    };\n\t\n\t\n    module.components.documentReady.push( module.PERIODICAL_SCROLL.documentReady );\n\t\n\n\treturn class PERIODICAL_SCROLL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Pricing -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const PRICING = ( ( module, $, window, document ) => {\n\tif ( window.PRICING === null ) return false;\n\t\n\t\n\t\n    module.PRICING               = module.PRICING || {};\n    module.PRICING.version       = '0.0.2';\n    module.PRICING.documentReady = function( $ ) {\n\n\t\t\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n\n\t\t\n\t\t//-------- Pricing initialize\n\t\tpricingInit( windowWidth );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tpricingInit( windowWidth );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\tfunction pricingInit( w ) {\n\t\t\t//Initialize the height\n\t\t\t$( '.uix-price' ).each( function(){\n\n\n\t\t\t\t\t//returns new id\n\t\t\t\t\tconst $this            = $( this );\n                \n                    const $initHeight      = $this.find( '.js-uix-init-height' );\n                \n\t\t\t\t\tlet\tpriceBGH         = [],\n\t\t\t\t\t\tpriceBGH_excerpt = [];\n\n\t\t\t\t\t$initHeight.each( function( index ) {\n\t\t\t\t\t\t//Screen protection of height\n\t\t\t\t\t\t$( this ).find( '.uix-price__outline, .uix-price__excerpt' ).css( 'height', 'auto' );\n\n\t\t\t\t\t\tconst tempheight = $( this ).height();\n\t\t\t\t\t\tconst tempheight_excerpt = $( this ).find( '.uix-price__excerpt' ).height();\n\t\t\t\t\t\tpriceBGH.push( tempheight );\n\t\t\t\t\t\tpriceBGH_excerpt.push( tempheight_excerpt );\n\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst priceBGH_Max = Math.max.apply( Math, priceBGH );\n\n\n\t\t\t\t\tif ( priceBGH_Max > 0 ) {\n\t\t\t\t\t\tif ( w > 768 ){\n\n\t\t\t\t\t\t\t// Initialize the height of all columns\n\t\t\t\t\t\t\t$initHeight.find( '.uix-price__outline' ).css( 'height', priceBGH_Max + 'px' );\n\n\t\t\t\t\t\t\t// Actived columns\n\t\t\t\t\t\t\t$initHeight.find( '.uix-price__outline.is-active' ).each( function() {\n\n\t\t\t\t\t\t\t\tconst ty = Math.abs( parseInt( $( this ).css('transform').split(',')[5]));\n\t\t\t\t\t\t\t\tif ( !isNaN(ty) ) {\n\t\t\t\t\t\t\t\t\t$( this ).css( 'height', priceBGH_Max + ty*2 + 'px' );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t});\t\n\n\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$initHeight.find( '.uix-price__outline' ).css( 'height', 'auto' );\n\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Actived columns\n\t\t\t\t\t\t$initHeight.find( '.uix-price__outline.is-active' ).each( function() {\n\n\t\t\t\t\t\t\tconst textColor = $( this ).closest( '.uix-price__outline--hover' ).data( 'tcolor' ),\n\t\t\t\t\t\t\t\t  btnColor  = $( this ).closest( '.uix-price__outline--hover' ).data( 'bcolor' );\n\n\t\t\t\t\t\t\t$( this ).css( 'background-color', btnColor );\n\t\t\t\t\t\t\t$( this ).find( '.uix-btn' ).removeClass( 'uix-btn__bg--primary' ).addClass( 'uix-btn__bg--secondary' );\n\n\n\t\t\t\t\t\t});\t\n\n\n\n\t\t\t\t\t}\n\n\n\t\t\t});\n\t\t}\n\t\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.PRICING.documentReady );\n\t\n\n\treturn class PRICING {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- Progress Bar -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const PROGRESS_BAR = ( ( module, $, window, document ) => {\n\tif ( window.PROGRESS_BAR === null ) return false;\n\t\n\t\n\t\n    module.PROGRESS_BAR               = module.PROGRESS_BAR || {};\n    module.PROGRESS_BAR.version       = '0.0.6';\n    module.PROGRESS_BAR.documentReady = function( $ ) {\n\n\t\t\n\t\tconst $scrollElements = $( '[data-progressbar-percent]' );\n       \n        $( window ).off( 'scroll.PROGRESS_BAR touchmove.PROGRESS_BAR' );\n        \n        $scrollElements.each( function()  {\n\n            \n            const viewport = 1;\n            const $el = $( this );\n           \n\n            //\n            const scrollUpdate = function() {\n                \n                const spyTop = $el[0].getBoundingClientRect().top;\n                \n                //Prevent asynchronous loading of repeated calls\n                const actived = $el.data( 'activated' );\n\n\n                if ( spyTop < ( window.innerHeight * viewport ) ) {\n\n                    if( typeof actived === typeof undefined ) {\n\n                        let\tpercent      = $el.data( 'progressbar-percent' ),\n                            unit         = $el.data( 'progressbar-unit' );\n\n                        if ( typeof percent === typeof undefined ) {\n                            percent = 0;\n                        }\n\n                        if ( typeof unit === typeof undefined ) {\n                            unit = '%';\n                        }\t\n\n\n                        //Radial Progress Bar\n                        if ( $el.hasClass( 'uix-progressbar--circle' ) ) {\n                            $el.find( '.uix-progressbar__track' ).html( '<span>'+percent+'<em class=\"uix-progressbar__unit\">'+unit+'</em></span>' );\n                            $el.addClass( 'uix-progressbar--progress-' + percent );\t\n                        } \n\n\n                        //Rectangle Progress Bar\n                        if ( $el.hasClass( 'uix-progressbar--rectangle' ) ) {\n                            $el.find( '.uix-progressbar__bar > span' ).html( ''+percent+'<em class=\"uix-progressbar__unit\">'+unit+'</em>' );\n                            $el.addClass( 'uix-progressbar--progress-' + percent );\t\n                        } \n                        \n                        \n                        //Prevents front-end javascripts that are activated in the background to repeat loading.\n                        $el.data( 'activated', 1 );\n\n\n\n                    }//endif actived\n\n\n                }\n            };\n            \n            \n            scrollUpdate();\n            \n            // Please do not use scroll's off method in each\n            $( window ).on( 'scroll.PROGRESS_BAR touchmove.PROGRESS_BAR', function( event ) {\n                 scrollUpdate();\n            });\n\n\n\n        });//end each        \n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.PROGRESS_BAR.documentReady );\n\t\n\n\treturn class PROGRESS_BAR {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Progress Line -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const PROGRESS_LINE = ( ( module, $, window, document ) => {\n\tif ( window.PROGRESS_LINE === null ) return false;\n\t\n\t\n\t\n    module.PROGRESS_LINE               = module.PROGRESS_LINE || {};\n    module.PROGRESS_LINE.version       = '0.0.3';\n    module.PROGRESS_LINE.documentReady = function( $ ) {\n\n\t\tconst $obj                = $( '.uix-progress-line' ),\n\t\t\t  $progressLineCircle = $obj.find( '.uix-progress-line__circle' ),\n\t\t\t  progressLineRestore = function() {\n\t\t\t\tlet k = 0;\n\t\t\t\tconst progressLineAnimGo = setInterval( function() {\n\t\t\t\t\t$progressLineCircle.eq( k ).addClass( 'is-active' );\n\t\t\t\t\t$progressLineCircle.eq( k ).next( '.uix-progress-line__bar' ).addClass( 'is-active' );\n\t\t\t\t\tk++;\n\n\n\t\t\t\t\tif ( k == 10 ) {\n\t\t\t\t\t\tclearInterval( progressLineAnimGo );\n\t\t\t\t\t}\n\n\n\t\t\t\t}, 50 );\n\t\t\t};\n\t\t\n        \n        //\n\t\t$progressLineCircle.on( 'mouseenter', function() {\n\t\t\n\t\t\tconst curIndex = $( this ).index()/2;\n\t\t\t\n\t\t\t$progressLineCircle.removeClass( 'is-active' );\t\n\t\t\t$progressLineCircle.next( '.uix-progress-line__bar' ).removeClass( 'is-active' );\t\n\t\t\tfor ( let i = curIndex; i >= 0; i-- ) {\n\t\t\t\t$progressLineCircle.eq( i ).addClass('is-active');\t\n\t\t\t\t$progressLineCircle.eq( i ).next( '.uix-progress-line__bar' ).addClass( 'is-active' );\t\n\t\t\t}\n\n\n\n\t\t} );\n\n\t\t\n\t\t$progressLineCircle.parent().on( 'mouseleave', function() {\n\t\t\tprogressLineRestore();\n\t\t} );\n\t\t\n\t\t\n\t\t//Adapt line width for different resolution\n//\t\tconst plLength     = $progressLineCircle.length,\n//\t\t\t  newPlW       = $obj.find( '.uix-progress-line__circle' ).first().width(),\n//\t\t\t  plWrapperW   = $obj.width();\n//\n//\t\t$obj.find( '.uix-progress-line__bar' ).css( 'width', parseFloat( plWrapperW - newPlW*plLength )/(plLength-1) + 'px' );\n//\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.PROGRESS_LINE.documentReady );\n\t\n\n\treturn class PROGRESS_LINE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Retina Graphics for Website -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const RETINA = ( ( module, $, window, document ) => {\n\tif ( window.RETINA === null ) return false;\n\t\n\t\n    module.RETINA               = module.RETINA || {};\n    module.RETINA.version       = '0.0.1';\n    module.RETINA.documentReady = function( $ ) {\n\n\t\t//Determine if you have retinal display\n\t\tlet hasRetina  = false,\n\t\t\trootRetina = (typeof exports === 'undefined' ? window : exports),\n\t\t\tmediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)';\n\t\t\n\t\n\t\tif ( rootRetina.devicePixelRatio > 1 || rootRetina.matchMedia && rootRetina.matchMedia( mediaQuery ).matches ) {\n\t\t\thasRetina = true;\n\t\t} \n\n\t\tif ( hasRetina ) {\n\t\t\t//do something\n\t\t\t$( '[data-retina]' ).each( function() {\n\t\t\t\t$( this ).attr( {\n\t\t\t\t\t'src'     : $( this ).data( 'retina' ),\n\t\t\t\t} );\n\t\t\t});\n\t\t\n\t\t} \n\t\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.RETINA.documentReady );\n\n\treturn class RETINA {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- Rotating Elements -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const ROTATING_EL = ( ( module, $, window, document ) => {\n\tif ( window.ROTATING_EL === null ) return false;\n\t\n\t\n\t\n    module.ROTATING_EL               = module.ROTATING_EL || {};\n    module.ROTATING_EL.version       = '0.0.2';\n    module.ROTATING_EL.documentReady = function( $ ) {\n\n\n\t\t$( '[data-pointer-to-deg]' ).each( function()  {\n\n\t\t\tconst $this  = $( this );\n            \n\t\t\tlet\tconfig = $this.data( 'pointer-to-deg' );\n\n\n\t\t\tif ( typeof config === typeof undefined ) {\n\t\t\t\tconfig = false;\n\t\t\t}\n\n\t\t\tif ( config ) {\n\n\t\t\t\tif ( $( config.target ).length == 0 ) return false;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tconst pointer      = $( config.target )[0],\n\t\t\t\t\t  pointerBox   = pointer.getBoundingClientRect(),\n\t\t\t\t\t  centerPoint  = window.getComputedStyle( pointer ).transformOrigin,\n\t\t\t\t\t  centers      = centerPoint.split( ' ' );\n                \n                let mouseX, mouseY;\n\n\n\t\t\t\tif ( config.mouseSpy ) {\n\t\t\t\t\t$( document ).on( 'mousemove touchstart touchmove', function( e ) {\n\t\t\t\t\t\tlet pointerEvent = e;\n\t\t\t\t\t\tif ( e.targetTouches && e.targetTouches[0] ) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tpointerEvent = e.targetTouches[0];\n\t\t\t\t\t\t\tmouseX = pointerEvent.pageX;\n\t\t\t\t\t\t\tmouseY = pointerEvent.pageY;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmouseX = e.clientX;\n\t\t\t\t\t\t\tmouseY = e.clientY;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tconst centerY = pointerBox.top + parseInt(centers[1]) - window.pageYOffset,\n\t\t\t\t\t\t\t  centerX = pointerBox.left + parseInt(centers[0]) - window.pageXOffset,\n\t\t\t\t\t\t\t  radians = Math.atan2(mouseX - centerX, mouseY - centerY),\n\t\t\t\t\t\t\t  degrees = (radians * (180 / Math.PI) * -1) + 180;\n\n\n\t\t\t\t\t\tpointer.style.transform = 'rotate(' + degrees + 'deg)';\n\n\t\t\t\t\t});\n\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t$this.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tpointer.style.transform = 'rotate(' + config.deg + 'deg)';\n\n\t\t\t\t});\n\t\t\t\t\n\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\n\t\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.ROTATING_EL.documentReady );\n\t\n\n\treturn class ROTATING_EL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Scroll Reveal -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const SCROLL_REVEAL = ( ( module, $, window, document ) => {\n\tif ( window.SCROLL_REVEAL === null ) return false;\n\t\n\t\n    module.SCROLL_REVEAL               = module.SCROLL_REVEAL || {};\n    module.SCROLL_REVEAL.version       = '0.1.5';\n    module.SCROLL_REVEAL.documentReady = function( $ ) {\n\n\t\t\n\t\t//From JSON config in data attribute in HTML\n\t\tconst $scrollElements = $( '[data-uix-anim]' );\n    \n        $( window ).off( 'scroll.SCROLL_REVEAL touchmove.SCROLL_REVEAL' );\n        \n        $scrollElements.each( function()  {\n\n            \n            let viewport;\n            \n            \n            const $el = $( this );\n            const tl = new TimelineMax({paused: true});\n            \n            \n            //\n            let config = $el.data( 'uix-anim' );\n\n            if( typeof config === typeof undefined || config == '' || config === false ) {\n                config = {\n                    \"from\"     : {\"opacity\":0,\"x\":70},\n                    \"to\"       : {\"opacity\":1,\"x\":0},\n                    \"ease\"     : \"Power2.easeOut\",\n                    \"duration\" : 0.4,\n                    \"delay\"    : 0,\n                    \"infinite\" : false,\n                    \"viewport\" : '100%' //A percentage of the viewport's height.\n                };\n            }\n\n\n            //get attributes to tweenMax\n            let fromCSS     = config.from,\n                toCSS       = config.to,\n                myEase      = config.ease,\n                myDuration  = config.duration,\n                myDelay     = config.delay,\n                infinite    = config.infinite;\n\n            //A percentage of the viewport's height.\n            viewport = config.viewport;\n\n\n            if ( typeof viewport === typeof undefined ) viewport = '100%';\n            if ( typeof myEase === typeof undefined ) myEase = 'Power2.easeOut';\n            if ( typeof myDelay === typeof undefined ) myDelay = 0;\n            if ( typeof myDuration === typeof undefined ) myDuration = 0.4;\n            if ( typeof infinite === typeof undefined ) infinite = false;\n\n\n            //Conversion between percentage and decimal\n            viewport = parseFloat( viewport ) / 100.0;\n            \n            //Make it go back and forth\n            const reverse = ( infinite ) ? 1 : 0;\n            \n            //Set the initial state of the element\n            TweenMax.set( $el, {\n                css        : fromCSS\n            });\n            \n            //\n            const fromIsString = ( Object.prototype.toString.call( fromCSS ) == '[object String]' ) ? true : false;\n            if( fromIsString ) {\n                toCSS = toCSS.replace(/\\./, '' );\n            } else {\n                tl.to( $el, myDuration, {\n                    css    : toCSS,\n                    ease   : myEase,\n                    delay  : myDelay\n                });\n                $el[0].animation = tl;\n            }  \n            \n       \n\n            //\n            const scrollUpdate = function() {\n                \n                const spyTop = $el[0].getBoundingClientRect().top;\n                \n                //Prevent asynchronous loading of repeated calls\n                const actived = $el.data( 'activated' );\n\n\n                if ( spyTop < ( window.innerHeight * viewport ) ) {\n\n                    if( typeof actived === typeof undefined ) {\n\n                        \n                        if( fromIsString ) {\n                            //Add class when element becomes visible\n                            $el.delay( myDelay*1000 ).queue( 'fx', function() { \n                                $( this ).addClass( toCSS ).dequeue();\n                            });\n\n\n                        } else {\n                            $el[0].animation.play();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Other animation\n\t\t\t\t\t\t\t//------------------------\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Image transition\n\t\t\t\t\t\t\tspyImageTrans( 'show' );\n\t\n\t\t\t\t\t\t\t\n                        }  \n\n                        \n                        \n                        //Prevents front-end javascripts that are activated in the background to repeat loading.\n                        $el.data( 'activated', 1 );\n\n\n\n                    }//endif actived\n\n\n                } else {\n                    \n           \n                    if ( typeof actived !== typeof undefined && reverse === 1 ) {\n\n                        if( fromIsString ) {\n                            //Add class when element becomes visible\n                            $el.removeClass( toCSS );\n                        } else {\n                            $el[0].animation.reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Other animation\n\t\t\t\t\t\t\t//------------------------\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//Image transition\n\t\t\t\t\t\t\tspyImageTrans( 'hide' );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n                        }  \n \n                        $el.removeData( 'activated' );\n\n\n                    }//endif actived\n\n                }  \n            };\n            \n            \n            scrollUpdate();\n            \n            // Please do not use scroll's off method in each\n            $( window ).on( 'scroll.SCROLL_REVEAL touchmove.SCROLL_REVEAL', function( event ) {\n                 scrollUpdate();\n            });\n\t\t\t\n\t\t\t\n            \n             /*\n             * The transition effect of each group of images\n             *\n             * @return {Void}\n\t\t\t * #Usage: \n\t\t\t \n\t\t\t\t<ul data-uix-anim='{\"viewport\":\"90%\",\"from\":{\"y\":0},\"to\":{\"y\":0},\"ease\":\"Power2.easeOut\",\"duration\":0.8,\"delay\":0.2,\"infinite\":true}' data-img-ids='[\"[data-imgshow]\"]'>\n\t\t\t\t\t<li data-imgshow=\"1\"><img src=\"logo-1.jpg\" alt=\"\"></li>\n\t\t\t\t\t<li data-imgshow=\"1\"><img src=\"logo-2.jpg\" alt=\"\"></li>\n\t\t\t\t\t<li data-imgshow=\"1\"><img src=\"logo-3.jpg\" alt=\"\"></li>\n\t\t\t\t\t<li data-imgshow=\"1\"><img src=\"logo-4.jpg\" alt=\"\"></li>\n\t\t\t\t<ul>\n \n\t\t\t \n             */ \n\t\t\tfunction spyImageTrans( type ) {\n\t\t\t\t\n\t\t\t\tconst _imgIds = $el.data( 'img-ids' );\n\t\t\t\t\n\t\t\t\tif ( typeof _imgIds !== typeof undefined ) {\n\t\t\t\t\t//add\n\t\t\t\t\tif ( type == 'show' ) {\n\t\t\t\t\t\t_imgIds.forEach( function( element ) {\n\t\t\t\t\t\t\t$( element ).each( function( index )  {\n\t\t\t\t\t\t\t\t$( this ).delay( 50*index ).queue( 'fx', function() { \n\t\t\t\t\t\t\t\t\t$( this ).addClass( 'is-active' );\n\t\t\t\t\t\t\t\t\t$( this ).dequeue();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//remove \n\t\t\t\t\t\t_imgIds.forEach( function( element ) {\n\t\t\t\t\t\t\t$( element ).removeClass( 'is-active' );\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t} \n\t\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\n\n\n        });//end each        \n\t\t\n    };\n\n    module.components.documentReady.push( module.SCROLL_REVEAL.documentReady );\n\t\n\n\treturn class SCROLL_REVEAL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Scrollspy Animate -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const SCROLLSPY_ANIM = ( ( module, $, window, document ) => {\n\tif ( window.SCROLLSPY_ANIM === null ) return false;\n\t\n\t\n\t\n    module.SCROLLSPY_ANIM               = module.SCROLLSPY_ANIM || {};\n    module.SCROLLSPY_ANIM.version       = '0.0.6';\n    module.SCROLLSPY_ANIM.documentReady = function( $ ) {\n\n\t\t// Remove pixi.js banner from the console\n\t\tPIXI.utils.skipHello();\n\t\t\n\t\t\n\t\tconst $el         = $( '#scrollspy-animate-demo' ),\n\t\t  \t  panelHeight = 0;\t\n\t\t\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $el.length == 0 ) return false;\n\t\t\n        \n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n            \n        let curSprite;\n        let filterSprite;\n        \n        \n\t\t//-------- Text Affect\n\t\tif ( Modernizr.webgl ) {\n\t\t\t\n\t\t\tconst   $txtContainer    = $el.find( '.row canvas' ),\n                    text             = $txtContainer.data( 'txt' ).split( '' ),\n                    tHeight          = 45,\n                    tWidth           = 25,\n                    renderer         = new PIXI.Application({\n                        width        : tWidth*(text.length+2),\n                        height       : tHeight*2,\n                        antialias    : true,\n                        transparent  : true,\n                        resolution   : 1,\n                        autoResize   : 1,\n                        view         : document.getElementById( 'scrollspy-animate-demo--txt' )\n                    });\n\n\n\n\t\t\tconst stage        = new PIXI.Container();\n\t\t\t\t  \n            filterSprite = PIXI.Sprite.from( $txtContainer.data( 'filter-texture' ) );\n\t\t\tfilterSprite.texture.baseTexture.wrapMode = PIXI.WRAP_MODES.REPEAT;\n\t\t\tconst filter = new PIXI.filters.DisplacementFilter( filterSprite );\n\n\n\t\t\tconst txtStyle = new PIXI.TextStyle({\n                                fontSize        : tHeight,\n                                letterSpacing   : 0,\n                                breakWords      : true,\n                                dropShadow      : true,\n                                dropShadowAngle : Math.PI / 6,\n                                dropShadowAlpha : 0.5,\n                                dropShadowColor : '#333',\n                                dropShadowBlur  : 1,\n                                fill            : 'white',\n                                fontFamily      : 'Arial Black',\n                                fontStyle       : 'normal',\n                                fontWeight      : 'bold',\n                                wordWrap        : false,\n                                align           : 'left'\n                            });\t\n\n\t\t\tcurSprite = new PIXI.Text( $txtContainer.data( 'txt' ), txtStyle );\n\t\t\tcurSprite.x = 0;\n\t\t\tcurSprite.y = 0;\n\t\t\t\n\t\t\trenderer.stage.addChild( curSprite );\n\t\t\t\n\n\t\t\tcurSprite.anchor.set( 0 );\n\t\t\tcurSprite.scale.set( 1 );\n\n            \n\n\t\t\tfilterSprite.anchor.set( 0 );\n\t\t\tfilterSprite.scale.set( 0.3 );  \n\t\t\tfilterSprite.x = -50;\n\t\t\tfilterSprite.y = 0;\n\n\t\t\trenderer.stage.filterArea = renderer.screen;\n\t\t\trenderer.stage.addChild( curSprite, filterSprite );\n\t\t\trenderer.stage.filters = [filter];\n\n\t\t\t\n\t\t\tconst ticker       = new PIXI.Ticker();\n\t\t\tticker.autoStart = true;\n\t\t\tticker.add( function( delta ) {\n\n\t\t\t\tfilterSprite.y += 0.2 * delta;\n\t\t\t\t\n\t\t\t\t// Render updated scene\n\t\t\t\trenderer.render( stage );\n\n\t\t\t});\n\n\t\t\t\t\t\n\t\t}\n\n\n        $window.off( 'scroll.SCROLLSPY_ANIM touchmove.SCROLLSPY_ANIM' ).on( 'scroll.SCROLLSPY_ANIM touchmove.SCROLLSPY_ANIM', function( event ) {\n\t\t\n            \n            const elHeight      = $el.height(),\n                  elOffsetTop   = $el.offset().top - panelHeight; \n            \n\n            const scrolled            = $( this ).scrollTop(),\n\t\t\t\t  translateTitle      = scrolled / 2,\n\t\t\t\t  translateBackground = scrolled / 3,\n\t\t\t\t  scale               = scrolled / elHeight,\n\t\t\t\t  backgroundScale     = 1, // + scale / 10\n\t\t\t\t  titleScale          = 1 - scale * 0.1,\n\t\t\t\t  titleOpacity        = 1 - scale,\n\t\t\t\t  scrollProgress      = ((scrolled - elOffsetTop) / (elHeight - windowHeight / 6));\n\n\t\t\t\n\t\t\t\n            //-------- Animation\n            const spyTop =  $el[0].getBoundingClientRect().top;\n            \n            if ( spyTop < window.innerHeight ) {\n                $el.find( '.row' ).css({\n                    'transition': 'none',\n                    'transform': 'translateY(' + translateTitle + 'px) scale(' + titleScale + ')',\n                    'opacity': titleOpacity\n                });\n\t\t\t\t\n                $( 'body' ).removeClass( 'js-uix-content-part' ).removeClass( 'js-uix-bottom-part' );\n            } else {\n                $( 'body' ).addClass( 'js-uix-content-part' ).removeClass( 'js-uix-bottom-part' );\n\t\t\t\t\n\t\t\t\t\n            }\n\t\t\t\n\t\t\t\n\t\t\t//-------- Display progress\n\t\t\t$el.find( '.row h3 em' ).text( scrollProgress.toFixed(2) );\n\n\t\t\tif ( Modernizr.webgl ) {\n\t\t\t\tTweenMax.set( filterSprite, {\n\t\t\t\t\tx: windowHeight*scrollProgress\n\t\t\t\t});\n\t\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\t\t\t\n        });\n\n\n\t\t\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.SCROLLSPY_ANIM.documentReady );\n\t\n\n\treturn class SCROLLSPY_ANIM {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Show More Less -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const SHOW_MORELESS = ( ( module, $, window, document ) => {\n\tif ( window.SHOW_MORELESS === null ) return false;\n\t\n\t\n\t\n    module.SHOW_MORELESS               = module.SHOW_MORELESS || {};\n    module.SHOW_MORELESS.version       = '0.0.3';\n    module.SHOW_MORELESS.documentReady = function( $ ) {\n\n\t\n\t\t$( '.uix-more-btn__link' ).each( function()  {\n\t\t\tconst $btn          = $( this ),\n\t\t\t  \t  $con          = $btn.parent().prev( '.uix-more-btn' ),\n\t\t\t\t  $btnTxt       = $btn.find( '> span' ),\n\t\t\t\t  defaultHeight = $con.height()\n\n\n\t\t\t\n\t\t\t$btn.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst expanded      = ( $( this ).attr( 'aria-expanded' ) == 'true' ) ? false : true;\n\n\t\t\t\tif ( expanded ) {\n\n\t\t\t\t\t$con.addClass( 'is-active' ).attr( 'aria-expanded', true );\n\t\t\t\t\t$( this ).addClass( 'is-active' ).attr( 'aria-expanded', true );\n\n\n\t\t\t\t\t//to open\n\t\t\t\t\t// - temporarilty set height:auto\n\t\t\t\t\t// - tween from height:0\n\t\t\t\t\tTweenMax.set( $con, { height: 'auto' } );\n\t\t\t\t\tTweenMax.from( $con, 0.5, { height: defaultHeight } );\t\t\n\n\t\t\t\t\t//change text\n\t\t\t\t\t$btnTxt.eq(0).hide();\n\t\t\t\t\t$btnTxt.eq(1).show();\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$con.removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\t\t\t\t\t$( this ).removeClass( 'is-active' ).attr( 'aria-expanded', false );\n\n\t\t\t\t\t//to close\n\t\t\t\t\tTweenMax.to( $con, 0.5, { height: defaultHeight } );\n\n\t\t\t\t\t//change text\n\t\t\t\t\t$btnTxt.eq(0).show();\n\t\t\t\t\t$btnTxt.eq(1).hide();\n\n\n\t\t\t\t}\n\n\t\t\t});\t\n\t\t});\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.SHOW_MORELESS.documentReady );\n\t\n\n\treturn class SHOW_MORELESS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- Skew Based On Velocity of Scroll -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const SKEW_ON_SCROLL = ( ( module, $, window, document ) => {\n\tif ( window.SKEW_ON_SCROLL === null ) return false;\n\t\n\t\n    module.SKEW_ON_SCROLL               = module.SKEW_ON_SCROLL || {};\n    module.SKEW_ON_SCROLL.version       = '0.0.1';\n    module.SKEW_ON_SCROLL.documentReady = function( $ ) {\n\n\t\t$( '.uix-skewscroll-container' ).each( function() {\n\t\t\n\t\t\tconst $this    = $( this ),\n\t\t\t\t  $animObj = $this.find( 'p' ),\n\t\t\t\t  ease     = 0.15;\n            \n            let followY  = 0;\n\n\t\t\t\n\t\t\tTweenMax.set( $animObj, {\n\t\t\t\ttransformOrigin: \"center left\"\n\t\t\t});\n\n\t\t\tTweenMax.ticker.addEventListener( 'tick', function() {\n\t\t\t\tfollowY += ( window.scrollY - followY) * ease;\n\n\t\t\t\tlet dy = (window.scrollY - followY) / 20;\n\t\t\t\t\n\t\t\t\tdy = Math.min( Math.max(dy, -15), 15);\n\t\t\t\tTweenLite.set( $animObj, {\n\t\t\t\t\tskewY: dy\n\t\t\t\t});\n\t\t\t});\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.SKEW_ON_SCROLL.documentReady );\n\t\n\n\treturn class SKEW_ON_SCROLL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Smooth Scrolling When Clicking An Anchor Link -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport ScrollToPlugin from '@uixkit/plugins/GSAP/ScrollToPlugin';\n\nexport const SMOOTH_SCROLLING_ANCHORLINK = ( ( module, $, window, document ) => {\n\tif ( window.SMOOTH_SCROLLING_ANCHORLINK === null ) return false;\n\t\n\t\n\t\n    module.SMOOTH_SCROLLING_ANCHORLINK               = module.SMOOTH_SCROLLING_ANCHORLINK || {};\n    module.SMOOTH_SCROLLING_ANCHORLINK.version       = '0.0.8';\n    module.SMOOTH_SCROLLING_ANCHORLINK.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( 'body' ).hasClass( 'onepage' ) ) return false;\n\t\t\n\t\t\n\t\tconst browserURL = window.location.href;\n\t\n\t\t//Prevent anchor behaviour\n        //Do not add off() to this\n\t\t$( 'a' ).on( 'click', function( e ) {\n\t\t\t\n\t\t\tif ( $( this ).data( 'smooth-scrolling' ) != false ) {\n\n\t\t\t\tlet linkURL    = $( this ).attr( 'href' ),\n\t\t\t\t\tlocIndex, \n\t\t\t\t\tlocURL;\n\n\t\t\t\tif ( linkURL.indexOf( '#' ) >= 0 && linkURL != '#' ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tconst locArr = linkURL.split( '#' );\n\t\t\t\t\tlocIndex = locArr[1];\n\t\t\t\t\tlocURL   = locArr[0];\n\n\n\t\t\t\t\tif ( browserURL.indexOf( locURL ) < 0 ) {\n\t\t\t\t\t\twindow.location.href = locURL + '#!!' + locIndex;\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\t\n\t\t\t}\n\n\t\t\t\n\t\t} );\n\t\t\n\t\t\n\t\t//Page automatically slide to jump to the corresponding position\n\t\tif ( browserURL.indexOf( '#!!' ) >= 0 ) {\n\t\t\t\n\n\t\t\tconst curndex = browserURL.split( '#!!' ),\n\t\t\t\t  $target = $( '#' + curndex[1] );\n\t\t\t\n\t\t\t//Smooth scrolling\n\t\t\tif ( $target.length ) {\n\t\t\t\tTweenMax.to( window, 0.5, {\n\t\t\t\t\tscrollTo: {\n\t\t\t\t\t\ty: $target.offset().top,\n\t\t\t\t\t\tautoKill : false\n\t\t\t\t\t},\n\t\t\t\t\tease: Power2.easeOut,\n\t\t\t\t\tonComplete : function() {\n\n\n\t\t\t\t\t\t//Fixed an error that offset().top returns wrong value\n                        const spyTop = $target[0].getBoundingClientRect().top;\n                        if ( spyTop < 0 || spyTop > 30 ) {\n\t\t\t\t\t\t\t$( 'a[href*=\"#' + curndex[1] +'\"]' ).trigger( 'click' );\t\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t}\n\t\t\t\t});\t\t\t\n\t\t\t}\n\t\n\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t//Hyperlink click event\n        //Do not add off() to this\n\t\t$( 'a[href*=\"#\"]' ).on( 'click', function( e ) {\n\t\t\n\t\t\tif ( \n\t\t\t\tlocation.pathname.replace(/^\\//, '') == this.pathname.replace(/^\\//, '') && \n\t\t\t\tlocation.hostname == this.hostname &&\n\t\t\t\t$( this ).attr( 'href' ) != '#' &\n                $( this ).attr( 'href' ).indexOf( '#?' ) < 0\n\t\t\t\t\n\t\t\t) {\n\t\t\t\t\n\t\t\t\t// Figure out element to scroll to\n\t\t\t\tlet target = $( this.hash );\n\t\t\t\ttarget = target.length ? target : $('[name=' + this.hash.slice(1) + ']');\n\t\t\t\t// Does a scroll target exist?\n\t\t\t\tif ( target.length ) {\n\n\t\t\t\t\t// Only prevent default if animation is actually gonna happen\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\n\n\t\t\t\t\tTweenMax.to( window, 0.5, {\n\t\t\t\t\t\tscrollTo: {\n\t\t\t\t\t\t\ty: target.offset().top,\n\t\t\t\t\t\t\tautoKill : false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tease: Power2.easeOut,\n\t\t\t\t\t\tonComplete : function() {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Callback after animation\n\t\t\t\t\t\t\t// Must change focus!\n\t\t\t\t\t\t\tconst $target = $( target );\n\t\t\t\t\t\t\t$target.focus();\n\t\t\t\t\t\t\tif ( $target.is( ':focus' ) ) { // Checking if the target was focused\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$target.attr( 'tabindex', '-1' ); // Adding tabindex for elements not focusable\n\t\t\t\t\t\t\t\t$target.focus();\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\n\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.SMOOTH_SCROLLING_ANCHORLINK.documentReady );\n\n\treturn class SMOOTH_SCROLLING_ANCHORLINK {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- Smooth Scrolling Page -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nexport const SMOOTH_SCROLLING_PAGE = ( ( module, $, window, document ) => {\n\tif ( window.SMOOTH_SCROLLING_PAGE === null ) return false;\n\t\n\t\n\t\n    module.SMOOTH_SCROLLING_PAGE               = module.SMOOTH_SCROLLING_PAGE || {};\n    module.SMOOTH_SCROLLING_PAGE.version       = '0.1.3';\n    module.SMOOTH_SCROLLING_PAGE.pageLoaded = function() {\n\n\t\t//Prevent this module from loading in other pages\n        //--------------\n\t\tif ( !$( 'body' ).hasClass( 'smooth-scrolling-page' ) ) return false;\n\n        \n        // Core params\n        //--------------\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n\n        const html = document.documentElement,\n              body = document.body,\n              scroller = {\n                  target        : '#uix-scrollspy-area',\n                  ease          : 0.05,\n\n                  // <= scroll speed\n                  endY          : 0,\n                  y             : 0,\n                  resizeRequest : 1,\n                  scrollRequest : 0\n              };\n        \n        let requestId = null;\n        let lastScrollTop = 0; // Determine the direction of scrolling\n\n        TweenMax.set( scroller.target, {\n            rotation: 0.01,\n            force3D: true\n        });\n\n\n\n        //Increase the viewport to display the visual area\n        const elTop = $( scroller.target ).offset().top;\n\t\t\n        \n\n        // Scrolling Progress\n        //--------------\n        const tlTarget1 = '#app-scrolling-progress1';\n        const tlTarget2 = '#app-scrolling-progress2';\n        const tlTarget3 = '#app-scrolling-progress3';\n        TweenMax.set( tlTarget1, {toAlpha: 1});\n        \n        // time should be adjusted relative to window width or height\n        // Animation progress has nothing to do with time\n\n\t\t//\n\t\t//\n        const time = 10;\n        const time02 = 2;\n        const timestop01 = time / 9.9999;\n        const timestop02 = time / 8.1;\n        \n        const tlAction = new TimelineMax({ paused: true })\n                            .to( tlTarget1, time, {\n                                height: ( $( scroller.target ).height() ) - windowHeight*2 - 200\n                            })\n                            .to( tlTarget1, time02, {\n                                height: ( $( scroller.target ).height() ) - windowHeight*2\n                            })\n                            .to( tlTarget1, time, {\n                                width: 15\n                            }, 0)\n\n                            .to( tlTarget2, 0.3, {\n                                rotation: -10,\n                                scale: 0.5, \n                                transformOrigin: 'center'\n                            }, timestop01 )\n\n                            \n                            .to( tlTarget3, 0.3, {\n                                rotation: 1125,\n                                scale: 0.1, \n                                transformOrigin: 'center'\n                            }, timestop02 );\n\n      \n\t\t//\n\t\t//\n\t\tlet scene2_progress = 0;\n\t\tconst scene2Action = new TimelineMax({ paused: true })\n\t\t\t\t\t\t\t.to( '#app-scene-2 p', 0.3, {\n\t\t\t\t\t\t\t\tx: 100\n\t\t\t\t\t\t\t}, 0);\n\t\t\n\t\t//\n\t\t//\n\t\tlet scene3_progress = 0;\n\t\tconst scene3Action = new TimelineMax({ paused: true })\n\t\t\t\t\t\t\t.to( '#app-scene-3 p', 0.3, {\n\t\t\t\t\t\t\t\tx: 200\n\t\t\t\t\t\t\t}, 0);\n\t\t\n        \n        // Core Actions\n        //--------------\n        \n        const initSmoothScrollingPageWrapper = 'js-uix-smooth-scrolling-page-wrapper';\n\n        if ( ! $( 'body' ).hasClass( initSmoothScrollingPageWrapper ) ) {\n            $( 'body' ).addClass( initSmoothScrollingPageWrapper );\n            $( scroller.target )\n                .wrap( '<div id=\"uix-scrollspy-area__wrapper\" style=\"overflow:hidden;position:fixed;height:100%;width:100%;top:0;left:0;right:0;bottom:0;\"></div>' )\n                .css( 'margin-top', elTop + 'px' );   \n        }\n\n\n\n        $( window ).on( 'resize', function() {\n            // Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n            if ( window.innerWidth != windowWidth ) {\n\n                // Update the window width for next time\n                windowWidth = window.innerWidth;\n\n                // Do stuff here\n                scroller.resizeRequest++;\n                if (!requestId) {\n                    requestId = requestAnimationFrame(scrollUpdate);\n                }\n\n            }\n        });\n\n        $( window ).off( 'scroll.SMOOTH_SCROLLING_PAGE touchmove.SMOOTH_SCROLLING_PAGE' ).on( 'scroll.SMOOTH_SCROLLING_PAGE touchmove.SMOOTH_SCROLLING_PAGE', function() {\n            scroller.scrollRequest++;\n            if (!requestId) {\n                requestId = requestAnimationFrame(scrollUpdate);\n            }\n     \n        });\n        \n\n\n        scrollUpdate();\n\n        function scrollUpdate() {\n\n            const resized = scroller.resizeRequest > 0;\n\n            if (resized) {\n                const height = $( scroller.target ).height();\n                body.style.height = parseFloat( height + elTop ) + \"px\";\n                scroller.resizeRequest = 0;\n            }\n\n\n            const scrollY = window.pageYOffset || html.scrollTop || body.scrollTop || 0;\n\n            scroller.endY = scrollY;\n            scroller.y += (scrollY - scroller.y) * scroller.ease;\n\n            if (Math.abs(scrollY - scroller.y) < 0.05 || resized) {\n                scroller.y = scrollY;\n                scroller.scrollRequest = 0;\n            }\n\n            TweenMax.set(scroller.target, {\n                y: -scroller.y,\n                onComplete: function() {\n                        \n                    //-----Spy scrollTop and elements of page\n                    \n                    //your code here...\n                    \n                    \n                    \n                }\n            });\n\n\n            requestId = scroller.scrollRequest > 0 ? requestAnimationFrame(scrollUpdate) : null;\n\n\n            //+++++++++++++++++++++++++++++++++++++++++++++++++\n            // Custom Functions\n            //+++++++++++++++++++++++++++++++++++++++++++++++++\n            const scrolled    = scroller.y,\n                  topSpacing  = ( window.innerWidth <= 768 ) ? 0 : $( '.uix-header__container' ).outerHeight( true ); //with margin \n\n            //----------------------------------------------------------------------------------\n            //--------------------------------- Scrollspy Animate -------------------------------\t\n            //----------------------------------------------------------------------------------   \n\n            \n            // Parallax \n            //-------------------------------------\t\n            $( '.uix-scrollspy-animate--parallax__wrapper' ).each( function()  {\n                const $wrapper = $( this );\n                const $target = $wrapper.find( '.uix-scrollspy-animate--parallax' );\n                const rect = $target[0].getBoundingClientRect();\n                const spyTop = rect.top;\n                const speed = -parseFloat( $wrapper.data( 'scrollspy-speed' ) );\n                \n                \n                //\n                $wrapper.css({\n                    'overflow': 'hidden',\n                    'height': rect.height - rect.height*0.3\n                });   \n                \n                \n                $target.css({\n                    'margin-top': -rect.height*0.15\n                }); \n\n                //\n                TweenMax.set( $wrapper, {\n                    css:{ \n                        'transform': 'matrix(1, 0, 0, 1, 0, '+( 0 - ( spyTop * speed ) )+')',\n                        'transition': 'none'\n                    }\n                });   \n                TweenMax.set( $target, {\n                    css:{ \n                        'transform': 'matrix(1, 0, 0, 1, 0, '+( 0 - ( spyTop * (speed/2) ) )+')',\n                        'transition': 'none'\n                    }\n                });    \n            });\n\n            \n            // Transparency\n            //-------------------------------------\t\n            $( '.uix-scrollspy-animate--transparency' ).each( function()  {\n                const $this = $( this );\n                const rect = $this[0].getBoundingClientRect();\n                const spyTop = rect.top;\n                const speed = -parseFloat( $this.data( 'scrollspy-speed' ) );\n\n                const scale               = ( 0 - ( spyTop * speed ) ) / rect.height,\n                      elOpacity           = scale;   \n                \n                TweenMax.set( $this, {\n                    alpha: ( $this.data( 'scrollspy-reverse' ) ? 1-elOpacity : elOpacity ) \n                });    \n            });  \n\n            \n            \n            //----------------------------------------------------------------------------------\n            //--------------------------------- Scrolling Progress -------------------------------\t\n            //----------------------------------------------------------------------------------   \n\n            const scrollDistance = $( scroller.target ).height(),\n                  visibleAreaDistance = windowHeight,\n                  scrollPercent = scrolled / (scrollDistance - visibleAreaDistance);\n\t\t\t\n\t\t\t//\n\t\t\tconsole.log( 'Body progress: ' + scrollPercent );\n\n            const progressBlobs = scrollPercent * 1; // slower (= <) or faster and/or change height of 'scrollDistance'\n            const scrollDir =  ( scrolled > lastScrollTop ) ? 'down' : 'up';\n\n            TweenMax.to( tlAction, 1, {\n                progress: progressBlobs, \n                ease: Sine.easeOut\n            });\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n            //----------------------------------------------------------------------------------\n            //---------------------- SCROLLING PROGRESS HELPER ----------------------------------\t\n            //----------------------------------------------------------------------------------   \n\t\t\tconst triggerViewport = 0.5;\n\n\t\t\n\t\t\t//Scene 2 progress\n\t\t\t//-----------------\n\t\t\tconst scene2_height = $( '#app-scene-2' ).outerHeight( true ), // do not use .height()\n\t\t\t\t  scene2_spyTop = $( '#app-scene-2' )[0].getBoundingClientRect().top;\n\t\t\t\n\t\t\tconst scene2_scrollPercent = parseFloat( scene2_spyTop / scene2_height ) - triggerViewport;\n\n\t\t\tif ( scene2_scrollPercent <= 0 && scene2_scrollPercent >= -1 ) {\n\t\t\t\tconsole.log( 'Scene 2 progress: ' + Math.abs( scene2_scrollPercent ) );\n\t\t\t\tscene2_progress = Math.abs( scene2_scrollPercent );\n\t\t\t}\n\n\n\t\t\tTweenMax.to( scene2Action, 1, {\n\t\t\t\tprogress: scene2_progress\n\t\t\t});\n\n\t\t\n\t\t\t\n\t\t\t//Scene 3 progress\n\t\t\t//-----------------\n\t\t\tconst scene3_height = $( '#app-scene-3' ).outerHeight( true ), // do not use .height()\n\t\t\t\t  scene3_spyTop = $( '#app-scene-3' )[0].getBoundingClientRect().top;\n\t\t\t\n\t\t\tconst scene3_scrollPercent = parseFloat( scene3_spyTop / scene3_height ) - triggerViewport;\n\t\t\t\n\t\t\t\n\t\t\tif ( scene3_scrollPercent <= 0 && scene3_scrollPercent >= -1 ) {\n\t\t\t\tconsole.log( 'Scene 3 progress: ' + Math.abs( scene3_scrollPercent ) );\n\t\t\t\tscene3_progress = Math.abs( scene3_scrollPercent );\n\t\t\t}\n\t\t\t\n\t\t\tTweenMax.to( scene3Action, 1, {\n\t\t\t\tprogress: scene3_progress\n\t\t\t});\n\t\t\t\n\t\t\t\n            //----------------------------------------------------------------------------------\n            //---------------------------------------------------------------------------------\t\n            //----------------------------------------------------------------------------------  \n            \n            \n            //\n            lastScrollTop = scrolled;\n\n        }//end scrollUpdate()\n\n\n\t\t\n    };\n    \n    module.components.pageLoaded.push( module.SMOOTH_SCROLLING_PAGE.pageLoaded );\n\n\treturn class SMOOTH_SCROLLING_PAGE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n *  <!-- Sticky Elements -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const STICKY_EL = ( ( module, $, window, document ) => {\n\tif ( window.STICKY_EL === null ) return false;\n\t\n\t\n    module.STICKY_EL               = module.STICKY_EL || {};\n    module.STICKY_EL.version       = '0.0.7';\n    module.STICKY_EL.pageLoaded    = function() {\n\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n        \n\t\tconst topSpacing   = ( windowWidth <= 768 ) ? 0 : $( '.uix-header__container' ).outerHeight( true ); //with margin\n\t\t\n\t\t\n\t\t//prepend a placeholder\n\t\t$( '.js-uix-sticky-el' ).each( function()  {\n\n\t\t\tconst $el      = $( this ),\n\t\t\t\t  elHeight = $el.outerHeight( true ), //with margin\n\t\t\t\t  elClass  = $el.attr( 'class' ).replace( 'js-uix-sticky-el', ''),\n\t\t\t\t  tempID   = 'sticky-' + UixGUID.create();\n\n\t\t\t$el.attr( 'data-sticky-id', tempID );\n\t\t\t\n\t\t\tif ( ! $el.hasClass( 'is-placeholder' ) ) {\n\t\t\t\t$( '<div class=\"'+elClass+' is-placeholder\"></div>' )\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'height': elHeight + 'px',\n\t\t\t\t\t\t'width' : '100%',\n\t\t\t\t\t\t'display': 'none',\n\t\t\t\t\t\t'visibility': 'hidden'\n\t\t\t\t\t})\n\t\t\t\t    .attr( 'data-sticky-id', tempID )\n\t\t\t\t\t.insertBefore( $el );\n\t\t\t}\n\n\t\t\t\n\t\t});\n\t\t\n\t\t//  Initialize\n\t\tstickyInit( windowWidth, windowHeight );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth  = window.innerWidth;\n\t\t\t\twindowHeight = window.innerHeight;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tstickyInit( windowWidth, windowHeight );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\n\t\t/*\n\t\t * Initialize Sticky Elements settings\n\t\t *\n\t\t * @param  {Number} w         - Returns width of browser viewport\n\t\t * @param  {Number} h         - Returns height of browser viewport\n\t\t * @return {Void}\n\t\t */\n\t\tfunction stickyInit( w, h ) {\n\t\t\n\t\t\t\n\t\t\tif ( w > 768 ) {\n\t\t\t\t\n                $( window ).off( 'scroll.STICKY_EL touchmove.STICKY_EL' );\n                \n\t\t\t\t$( '.js-uix-sticky-el' ).each( function()  {\n\t\t\t\t\tconst $el      = $( this ),\n\t\t\t\t\t\t  elTop    = $el.offset().top,\n\t\t\t\t\t\t  oWidth   = $el.width(),\n\t\t\t\t\t\t  clsID    = $el.data( 'sticky-id' ),\n\t\t\t\t\t\t  $ph      = $( '[data-sticky-id=\"'+clsID+'\"].is-placeholder' );\n\t\t\t\t\t\n\t\t\t\t\t\n                    \n\t\t\t\t\t\n\t\t\t\t\t// Please do not use scroll's off method in each\n\t\t\t\t\t$window.on( 'scroll.STICKY_EL touchmove.STICKY_EL', function() {\n\n\t\t\t\t\t\tconst scrolled   = $( this ).scrollTop(),\n\t\t\t\t\t\t\t  spyTop  = parseFloat( scrolled + window.innerHeight );\n\n\n\t\t\t\t\t\t//------\n\t\t\t\t\t\tif ( parseFloat( scrolled + topSpacing ) > elTop ) {\n\t\t\t\t\t\t  $el\n\t\t\t\t\t\t\t  .addClass( 'is-active' )\n\t\t\t\t\t\t\t  .css( {\n\t\t\t\t\t\t\t\t  'width': oWidth + 'px',\n\t\t\t\t\t\t\t\t  'top'  : topSpacing + 'px'\n\t\t\t\t\t\t\t  } );\n\t\t\t\t\t\t   $ph.css( 'display', 'block' );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t  $el\n\t\t\t\t\t\t\t  .removeClass( 'is-active' )\n\t\t\t\t\t\t\t  .css( {\n\t\t\t\t\t\t\t\t  'top'  : 0\n\t\t\t\t\t\t\t  } );\t\n\t\t\t\t\t\t  $ph.css( 'display', 'none' );\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t//------\n\t\t\t\t\t\tif ( typeof $el.data( 'stop-trigger' ) != typeof undefined && $( $el.data( 'stop-trigger' ) ).length > 0 ) {\n\n\t\t\t\t\t\t\tconst diff      = typeof $el.data( 'stop-trigger-diff' ) != typeof undefined && $el.data( 'stop-trigger-diff' ).length > 0 ? UixMath.evaluate( $el.data( 'stop-trigger-diff' ).replace(/\\s/g, '').replace(/\\%\\h/g, windowHeight ).replace(/\\%\\w/g, windowWidth ) ) : 0,\n\t\t\t\t\t\t\t\t  targetTop = $( $el.data( 'stop-trigger' ) ).offset().top - diff;\n\n\n\t\t\t\t\t\t\t//Detecting when user scrolls to bottom of div\n\t\t\t\t\t\t\tif ( spyTop >= targetTop ) {\n\n\t\t\t\t\t\t\t\t\t$el.css( {\n\t\t\t\t\t\t\t\t\t\t  'top'  : parseFloat( topSpacing - (spyTop - targetTop) ) + 'px'\n\t\t\t\t\t\t\t\t\t  } );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( $el.length > 0 && $el.position().top < topSpacing ) {\n\t\t\t\t\t\t\t\t\t$el.css( {\n\t\t\t\t\t\t\t\t\t\t  'top'  : topSpacing + 'px'\n\t\t\t\t\t\t\t\t\t  } );\t\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t});//endif scroll.STICKY_EL touchmove.STICKY_EL\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t});//endif $( '.js-uix-sticky-el' )\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t$( '.js-uix-sticky-el' ).removeClass( 'is-active' );\n\t\t\t\t$( '[data-sticky-id].is-placeholder' ).css( 'display', 'none' );\n\t\t\t\t\n\t\t\t}// endif w > 768\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\n\n\t\t\n    };\n\n    module.components.pageLoaded.push( module.STICKY_EL.pageLoaded );\n\n\treturn class STICKY_EL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- SVG Map (China) -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const SVG_MAP_CHINA = ( ( module, $, window, document ) => {\n\tif ( window.SVG_MAP_CHINA === null ) return false;\n\t\n\t\n\t\n    module.SVG_MAP_CHINA               = module.SVG_MAP_CHINA || {};\n    module.SVG_MAP_CHINA.version       = '0.0.2';\n    module.SVG_MAP_CHINA.documentReady = function( $ ) {\n\n\n\t\t\n\t\tconst $svgEl = $( '.uix-svgmap--china' );\n\t\t\n\t\t$( document ).off( 'click.SVG_MAP_CHINA' ).on( 'click.SVG_MAP_CHINA', '.uix-svgmap--china__trigger a', function( e ) {\n\t\t\t\n\t\t\t// stop propagation of this event, it will never reach body in bubbling phase.\n\t\t\te.stopPropagation();\n\n\t\t\tconst goName       = $( this ).data( 'title' ),\n\t\t\t\t  goText       = $( this ).text();\n            \n\t\t\tlet\tsvgCurName   = '',\n\t\t\t\tsvgNameIndex = 0;\n\t\t\t\n\t\t\t$( '.uix-svgmap--china .uix-svgmap--china__name' ).each( function()  {\n\t\t\t\t\n\t\t\t\tif ( goName == $( this ).data( 'title' ) ) {\n\t\t\t\t\tsvgCurName = $( this ).data( 'title' );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tsvgNameIndex = $( '.uix-svgmap--china .uix-svgmap--china__name[data-title=\"'+svgCurName+'\"]' ).index();\n\t\t\t\n\t\t\t//Hide all elements\n\t\t\tsvgMapRestore(1);\n\n\t\t\t\n\t\t\t//Display current element\n\t\t\tsvgMapActive( svgNameIndex, goText );\n\t\t\t\n\t\t\t\n\n\t\t});\n\t\t\n\t\t\n\t\t//Restore all elements\n        //Do not add off() to this\n\t\t$( document.body ).on( 'click', function( e ) {\n\t\t\tsvgMapRestore(2);\n\t\t});\n\n\t\tfunction svgMapRestore( type ) {\n\n\t\t\tconst alpha = ( type == 1 ) ? 0.3 : 1;\n\n\t\t\t$svgEl.children().removeClass( 'is-show' );\n\t\t\t$svgEl.find( 'circle' ).css({\n\t\t\t\t'r'         : 6,\n\t\t\t\t'font-size' : '6px',\n\t\t\t\t'z-index'   : 1,\n\t\t\t\t'opacity'   : alpha\n\t\t\t});\n\n\n\t\t\t$svgEl.find( '.uix-svgmap--china__name' ).each( function()  {\n\t\t\t\t$( this ).css({\n\t\t\t\t\t'transform' : 'translate(0,15px)',\n\t\t\t\t\t'z-index'   : 1,\n\t\t\t\t\t'opacity'   : alpha\n\t\t\t\t})\n\t\t\t\t.text( $( this ).data( 'title' ) );\n\n\t\t\t});\n\n\t\t\t$svgEl.find( '.uix-svgmap--china__num' ).css({\n\t\t\t\t'font-size' : '6px',\n\t\t\t\t'z-index'   : 1,\n\t\t\t\t'opacity'   : alpha\n\t\t\t});\t\n\n\n\t\t}\n\n\n\t\tfunction svgMapActive( index, text ) {\n\t\t\t$svgEl.each( function()  {\n\t\t\t\t$( this ).children().eq( index ).addClass( 'is-show' );\n\t\t\t\t$( this ).find( 'circle' ).eq( index ).css({\n\t\t\t\t\t'r'         : 15,\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1\n\t\t\t\t});\n\t\t\t\t$( this ).find( '.uix-svgmap--china__name' ).eq( index ).css({\n\t\t\t\t\t'transform' : 'translate(0,25px)',\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1\n\t\t\t\t})\n\t\t\t\t.text( text );\n\n\t\t\t\t$( this ).find( '.uix-svgmap--china__num' ).eq( index ).css({\n\t\t\t\t\t'font-size' : '10px',\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1\n\t\t\t\t});\t\n\n\n\t\t\t});\n\n\t\t}\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.SVG_MAP_CHINA.documentReady );\n\t\n\n\treturn class SVG_MAP_CHINA {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- SVG Map (World) -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const SVG_MAP_WORLD = ( ( module, $, window, document ) => {\n\tif ( window.SVG_MAP_WORLD === null ) return false;\n\t\n\t\n    module.SVG_MAP_WORLD               = module.SVG_MAP_WORLD || {};\n    module.SVG_MAP_WORLD.version       = '0.0.2';\n    module.SVG_MAP_WORLD.documentReady = function( $ ) {\n\n\n\t\tconst $svgEl = $( '.uix-svgmap--world' );\n\t\t\n\n\t\t$( document ).off( 'click.SVG_MAP_WORLD' ).on( 'click.SVG_MAP_WORLD', '.uix-svgmap--world__trigger a', function( e ) {\n\t\t\t\n\t\t\t// stop propagation of this event, it will never reach body in bubbling phase.\n\t\t\te.stopPropagation();\n\n\t\t\tconst goName       = $( this ).data( 'title' ),\n\t\t\t\t  goText       = $( this ).text();\n            \n\t\t\tlet\tsvgCurName   = '',\n\t\t\t\tsvgNameIndex = 0;\n\t\t\t\n\t\t\t$( '.uix-svgmap--world .uix-svgmap--world__name' ).each( function( index )  {\n\t\t\t\t\n\t\t\t\tif ( goName == $( this ).data( 'title' ) ) {\n\t\t\t\t\tsvgCurName = $( this ).data( 'title' );\n\t\t\t\t    svgNameIndex = index;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t\t//Hide all elements\n\t\t\tsvgMapRestore(1);\n\n\t\t\t\n\t\t\t//Display current element\n\t\t\tsvgMapActive( svgNameIndex, goText );\n\t\t\t\n\t\t\t\n\t\n\t\t});\n\t\t\n\t\t\t\n\t\t\t\n\t\t//Restore all elements\n        //Do not add off() to this\n\t\t$( document.body ).on( 'click', function( e ) {\n\t\t\tsvgMapRestore(2);\n\t\t});\n\n\t\t\n\t\tfunction svgMapRestore( type ) {\n\n\t\t\tconst alpha = ( type == 1 ) ? 0.3 : 1;\n\n\t\t\t$svgEl.children().removeClass( 'is-show' );\n\t\t\t$svgEl.find( 'path' ).css({\n\t\t\t\t'z-index'   : 1,\n\t\t\t\t'opacity'   : alpha\n\t\t\t});\n\n\n\n\t\t\t$svgEl.find( '.uix-svgmap--world__name' ).each( function()  {\n\t\t\t\t$( this ).css({\n\t\t\t\t\t'z-index'   : 1,\n\t\t\t\t\t'opacity'   : alpha,\n\t\t\t\t\t'font-size' : '3px'\n\t\t\t\t})\n\t\t\t\t.text( $( this ).data( 'title' ) );\n\n\t\t\t});\n\n\n\n\t\t\t$svgEl.find( '.uix-svgmap--world__num' ).css({\n\t\t\t\t'font-size' : '6px',\n\t\t\t\t'z-index'   : 1,\n\t\t\t\t'opacity'   : alpha\n\t\t\t});\t\n\n\n\t\t}\n\n\n\t\tfunction svgMapActive( index, text ) {\n\t\t\t$svgEl.each( function()  {\n\t\t\t\t$( this ).children().eq( index ).addClass( 'is-show' );\n\t\t\t\t$( this ).find( 'path' ).eq( index ).css({\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1\n\t\t\t\t});\n\t\t\t\t$( this ).find( '.uix-svgmap--world__name' ).eq( index ).css({\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1,\n\t\t\t\t\t'font-size' : '10px'\n\t\t\t\t})\n\t\t\t\t.text( text );\n\n\t\t\t\t$( this ).find( '.uix-svgmap--world__num' ).eq( index ).css({\n\t\t\t\t\t'font-size' : '10px',\n\t\t\t\t\t'z-index'   : 2,\n\t\t\t\t\t'opacity'   : 1\n\t\t\t\t});\t\n\n\n\t\t\t});\n\n\t\t}\n\t\t\n    };\n\n    module.components.documentReady.push( module.SVG_MAP_WORLD.documentReady );\n\t\n\n\treturn class SVG_MAP_WORLD {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- SVG Mask Slider -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const SVG_MASK_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.SVG_MASK_SLIDER === null ) return false;\n\t\n    \n    module.SVG_MASK_SLIDER               = module.SVG_MASK_SLIDER || {};\n    module.SVG_MASK_SLIDER.version       = '0.0.1';\n    module.SVG_MASK_SLIDER.pageLoaded    = function() {\n\n\t\tconst $window          = $( window );\n\t\tlet\twindowWidth        = window.innerWidth,\n\t\t\twindowHeight       = window.innerHeight;\n        \n\t\tlet\tanimDelay = 0;\n\t\tlet\tanimSpeed = 1000;\n\t\tconst $sliderWrapper = $( '.uix-svgMask-slider' );\n\t\tlet svgAnimating = false;\n\n\n        \n\t\t//\n\t\tsliderInit( false );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\tsliderInit( true );\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Initialize slideshow\n\t\t *\n\t\t * @param  {Boolean} resize            - Determine whether the window size changes.\n\t\t * @return {Void}\n\t\t */\n        function sliderInit( resize ) {\n\t\n\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\tconst $this                    = $( this );\n                \n\t\t\t\tconst $items                   = $this.find( '.uix-svgMask-slider__item' ),\n\t\t\t\t      $first                   = $items.first(),\n                      activated                = $this.data( 'activated' ); \n                \n\t\t\t\tlet\t  nativeItemW,\n\t\t\t\t\t  nativeItemH;\n                      \n\t\t\t\t\n\t\t\t\t\n                \n                if ( typeof activated === typeof undefined || activated === 0 ) {\n                    \n\n                    //Get parameter configuration from the data-* attribute of HTML\n                    let dataControlsPagination   = $this.data( 'controls-pagination' ),\n                        dataControlsArrows       = $this.data( 'controls-arrows' ),\n                        dataDraggable            = $this.data( 'draggable' ),\n                        dataDraggableCursor      = $this.data( 'draggable-cursor' ),                     \n                        dataCountTotal           = $this.data( 'count-total' ),\n                        dataCountCur             = $this.data( 'count-now' ),\n\t\t\t\t\t\tdataSpeed                = $this.data( 'speed' );\n\n\n                    if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-svgMask-slider__pagination';\n                    if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-svgMask-slider__arrows';\n                    if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                    if ( typeof dataDraggableCursor === typeof undefined || dataDraggableCursor == false ) dataDraggableCursor = 'move';\n                    if ( typeof dataCountTotal === typeof undefined ) dataCountTotal = 'p.count em.count';\n                    if ( typeof dataCountCur === typeof undefined ) dataCountCur = 'p.count em.current';\n\n                    \n                    //Autoplay parameters\n                    let dataAuto                   = $this.data( 'auto' ),\n                        dataTiming                 = $this.data( 'timing' ),\n                        dataLoop                   = $this.data( 'loop' );  \n                    \n                    if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                    if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                    if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n                    \n                    \n                    //Autoplay times\n                    let playTimes;\n                    //A function called \"timer\" once every second (like a digital watch).\n                    $this[0].animatedSlides;\n\n                    //Get the animation speed\n                    //-------------------------------------\t\n                    if ( typeof dataSpeed != typeof undefined && dataSpeed != false ) {\n                        animSpeed = dataSpeed;\n                    }\n\t\t\t\t\t\n\n\t\t\t\t\t//Get the duration of the animation\n\t\t\t\t\t//-------------------------------------\t\n                    animDelay = animSpeed;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t//Get timeline elements\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\tconst txtTimeline = new TimelineMax({delay: 0});\n\t\t\t\t\tconst txtMaskTimeline = new TimelineMax({delay: 0});\n\n\t\t\t\t\ttxtTimeline\n\t\t\t\t\t\t.to( $items.find( '.uix-svgMask-slider__txt__content' ), 0.1, {opacity: 0})\n\t\t\t\t\t\t.to( $items.find( 'svg image' ), 0.2, {scale: 1.1},'-=0.1')\n\t\t\t\t\t\t.to( $this.find( '.uix-svgMask-slider__inner' ), 0.9, {ease: Circ.easeOut, scale: 0.85},'-=0.2')\n\t\t\t\t\t\t.to( $this.find( '.uix-svgMask-slider__inner' ), 0.75, {ease: Elastic.easeOut.config(4, 1.5), scale: 1} )\n\t\t\t\t\t\t.pause();\n\n\t\t\t\t\ttxtMaskTimeline\n\t\t\t\t\t\t.to( $items.find( '.uix-svgMask-slider__txt__mask' ), 0.6, {css: { marginLeft: 0 } })\n\t\t\t\t\t\t.to( $items.find( '.uix-svgMask-slider__txt__content' ), 0.1, {opacity:1}, \"-=0.1\")  \n\t\t\t\t\t    .to( $items.find( 'svg image' ), 0.2, {scale: 1},'-=0.1')\n\t\t\t\t\t\t.to( $items.find( '.uix-svgMask-slider__txt__mask' ), 0.6, {css: { marginLeft: '-100vw' } });\n\n\n\t\t\t\t\t\n\n\t\t\t\t\t//Initialize the properties of each Item\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\t$items.each( function( index )  {\n\t\t\t\t\t\tconst _id = UixGUID.create();\n\t\t\t\t\t\tconst _item = $( this );\n\t\t\t\t\t\t_item.find( 'clipPath' ).attr( 'id', _id + '-img' );\n\t\t\t\t\t\t_item.find( 'image' ).attr( 'clip-path', 'url(#'+_id+'-img)' );\n\t\t\t\t\t\t_item.delay( animDelay*index ).queue( 'fx', function() { \n\t\t\t\t\t\t\t$( this ).addClass( 'is-loaded' ).dequeue();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\t\t\t\t\n\n                    //Initialize the first item container\n                    //-------------------------------------\t\t\n                    $items.addClass( 'next' );\n\n                    setTimeout( function() {\n                        $first.addClass( 'is-active' );\n                    }, animDelay );\n\n\t\t\t\t\t\n\t\t\t\t\t//\n\t\t\t\t\tlet imgURL   = $first.find( 'img' ).attr( 'src' );\n\t\t\t\t\tif ( typeof imgURL != typeof undefined ) {\n\t\t\t\t\t\tconst img = new Image();\n\n\t\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\t\t$this.css( 'height', $this.width()*(this.height/this.width) + 'px' );\t\t\n\n\t\t\t\t\t\t\tnativeItemW = this.width;\n\t\t\t\t\t\t\tnativeItemH = this.height;\t\n\n\t\t\t\t\t\t\t//Initialize all the items to the stage\n\t\t\t\t\t\t\taddItemsToStage( $this, nativeItemW, nativeItemH, dataControlsPagination, dataControlsArrows, dataLoop, dataDraggable, dataDraggableCursor, dataCountTotal, dataCountCur, txtTimeline, txtMaskTimeline );\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\timg.src = imgURL;\n\t\t\t\t\t}\n\n\n\n\n                    //Autoplay Slider\n                    //-------------------------------------\t\t\n                    if ( !resize ) {\n\n\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        }\n\n\n                    }\n\n                    \n                    //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                    $this.data( 'activated', 1 );\n                    \n                }//endif activated\n  \n\t\t\t\t\n\n\t\t\t});\n\n\n\t\t}\n\t\t\n\n\n\n        /*\n\t\t * Trigger slider autoplay\n\t\t *\n\t\t * @param  {Function} playTimes            - Number of times.\n\t\t * @param  {Number} timing                 - Autoplay interval.\n\t\t * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n\t\t * @return {Void}                          - The constructor.\n\t\t */\n\t\tfunction sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n\t\t\tconst items = slider.find( '.uix-svgMask-slider__item' ),\n\t\t\t\ttotal = items.length;\n\t\t\t\n\t\t\tslider[0].animatedSlides = setInterval( function() {\n\n\t\t\t\tplayTimes = parseFloat( items.filter( '.is-active' ).index() );\n\t\t\t\tplayTimes++;\n\t\t\t\t\n\t\t\t\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\tif ( playTimes < total && playTimes >= 0 ) sliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t} else {\n\t\t\t\t\tif ( playTimes == total ) playTimes = 0;\n\t\t\t\t\tif ( playTimes < 0 ) playTimes = total-1;\t\t\n\t\t\t\t\tsliderUpdates( playTimes, slider, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t}, timing );\t\n\t\t}\n\n\t\t\n\n        /*\n\t\t * Initialize all the items to the stage\n\t\t *\n\t\t * @param  {Element} slider                 - Current selector of each slider.\n\t\t * @param  {Number} nativeItemW            - Returns the intrinsic width of the image.\n\t\t * @param  {Number} nativeItemH            - Returns the intrinsic height of the image.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop. \n         * @param  {Boolean} draggable             - Allow drag and drop on the slider.\n         * @param  {String} draggableCursor        - Drag & Drop Change icon/cursor while dragging.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {Function} tl1                  - Timeline animation of text field.\n         * @param  {Function} tl2                  - Timeline animation of text mask field.\n\t\t * @return {Void}\n\t\t */\n        function addItemsToStage( slider, nativeItemW, nativeItemH, paginationID, arrowsID, loop, draggable, draggableCursor, countTotalID, countCurID, tl1, tl2  ) {\n\t\t\t\n\t\t\tconst $this                  = slider,\n\t\t\t\t$items                   = $this.find( '.uix-svgMask-slider__item' ),\n\t\t\t\t$first                   = $items.first(),\n\t\t\t\titemTotal                = $items.length;\n\t\n\n\t\t\t//If arrows does not exist on the page, it will be added by default, \n\t\t\t//and the drag and drop function will be activated.\n\t\t\tif ( $( arrowsID ).length == 0 ) {\n\t\t\t\t$( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-svgMask-slider__arrows '+arrowsID.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-svgMask-slider__arrows--prev\"></a><a href=\"#\" class=\"uix-svgMask-slider__arrows--next\"></a></div>' );\n\t\t\t}\n\t\t\t\n\n            //Add identifiers for the first and last items\n            $items.last().addClass( 'last' );\n            $items.first().addClass( 'first' );\n\n\t\t\t\n\t\t    //Prevent bubbling\n\t\t\tif ( itemTotal == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t}\n\n\t\t\t\n\n\t\t\t//Pagination dots \n\t\t\t//-------------------------------------\t\n\t\t\tlet _dot       = '',\n\t\t\t\t_dotActive = '';\n\t\t\t_dot += '<ul>';\n\t\t\tfor ( let i = 0; i < itemTotal; i++ ) {\n\n\t\t\t\t_dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n\t\t\t\t_dot += '<li><a '+_dotActive+' data-index=\"'+i+'\" href=\"javascript:\"></a></li>';\n\t\t\t}\n\t\t\t_dot += '</ul>';\n\n\t\t\tif ( $( paginationID ).html() == '' ) $( paginationID ).html( _dot );\n\n\t\t\t$( paginationID ).find( 'li a' ).off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( svgAnimating ) return false;\n                \n                //Prevent buttons' events from firing multiple times\n                const $btn = $( this );\n                if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'true' );\n                \n                $( paginationID ).find( 'li a' )\n                    .delay(animDelay)\n                    .queue(function(next) { $( paginationID ).find( 'li a' ).attr( 'aria-disabled', 'false' ); next(); }); \n                \n                \n                //\n\t\t\t\tif ( !$( this ).hasClass( 'is-active' ) ) {\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t//Text animation from timeline\n\t\t\t\t\ttl1.restart();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\ttl2.restart();\n\t\t\t\t\t}, 1500 ); \n\n\n\t\t\t\t\t//Determine the direction\n\t\t\t\t\tlet curDir = 'prev';\n\t\t\t\t\tif ( $( this ).attr( 'data-index' ) > parseFloat( $items.filter( '.is-active' ).index() ) ) {\n\t\t\t\t\t\tcurDir = 'next';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tsliderUpdates( $( this ).attr( 'data-index' ), $this, curDir, countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t\t//Pause the auto play event\n\t\t\t\t\tclearInterval( $this[0].animatedSlides );\t\n\t\t\t\t}\n\n\n\n\t\t\t});\n\n\t\t\t//Next/Prev buttons\n\t\t\t//-------------------------------------\t\t\n\t\t\tconst _prev = $( arrowsID ).find( '.uix-svgMask-slider__arrows--prev' ),\n\t\t\t\t_next = $( arrowsID ).find( '.uix-svgMask-slider__arrows--next' );\n\n\t\t\t$( arrowsID ).find( 'a' ).attr( 'href', 'javascript:' );\n\n\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\tif ( !loop ) {\n\t\t\t\t_prev.addClass( 'is-disabled' );\n\t\t\t}\n\n\n\t\t\t_prev.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( svgAnimating ) return false;\n\n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animDelay)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n\t\t\t\t\n\t\t\t\t//Text animation from timeline\n\t\t\t\ttl1.restart();\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\ttl2.restart();\n\t\t\t\t}, 1500 ); \n\t\t\t\t\n\t\t\t\t\n                //\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) - 1, $this, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\t\t\t});\n\n\t\t\t_next.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\tif ( svgAnimating ) return false;\n                \n                //Prevent buttons' events from firing multiple times\n                if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                $( this ).attr( 'aria-disabled', 'true' );\n\n                $( this )\n                    .delay(animDelay)\n                    .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n                \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Text animation from timeline\n\t\t\t\ttl1.restart();\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\ttl2.restart();\n\t\t\t\t}, 1500 ); \n\t\t\t\t\n\t\t\t\t\n                //\n\t\t\t\tsliderUpdates( parseFloat( $items.filter( '.is-active' ).index() ) + 1, $this, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n\n\n\t\t\t\t//Pause the auto play event\n\t\t\t\tclearInterval( $this[0].animatedSlides );\n\n\n\t\t\t});\n\n\n\n\t\t\t//Added touch method to mobile device and desktop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $items;\n\t\t\t\n\n\t\t\t//Make the cursor a move icon when a user hovers over an item\n\t\t\tif ( draggable && draggableCursor != '' && draggableCursor != false ) $dragDropTrigger.css( 'cursor', draggableCursor );\n\n\n\t\t\t//Mouse event\n\t\t\t$dragDropTrigger.on( 'mousedown.SVG_MASK_SLIDER touchstart.SVG_MASK_SLIDER', function( e ) {\n\t\t\t\t\n\t\t\t\t//Do not use \"e.preventDefault()\" to avoid prevention page scroll on drag in IOS and Android\n\n\t\t\t\tconst touches = e.originalEvent.touches;\n\n\t\t\t\t$( this ).addClass( 'is-dragging' );\n\n\n\t\t\t\tif ( touches && touches.length ) {\t\n\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( touches[0].pageX ) );\n\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( touches[0].pageY ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_x', parseInt( e.pageX ) );\n\t\t\t\t\t\t$( this ).data( 'origin_mouse_y', parseInt( e.pageY ) );\t\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\n\t\t\t\t$dragDropTrigger.on( 'mouseup.SVG_MASK_SLIDER touchmove.SVG_MASK_SLIDER', function( e ) {\n\t\t\t\t\t\n\n\t\t\t\t\t$( this ).removeClass( 'is-dragging' );\n\t\t\t\t\tlet touches        = e.originalEvent.touches,\n\t\t\t\t\t\torigin_mouse_x = $( this ).data( 'origin_mouse_x' ),\n\t\t\t\t\t\torigin_mouse_y = $( this ).data( 'origin_mouse_y' );\n\n\t\t\t\t\tif ( touches && touches.length ) {\n\n\t\t\t\t\t\tlet deltaX = origin_mouse_x - touches[0].pageX,\n\t\t\t\t\t\t\tdeltaY = origin_mouse_y - touches[0].pageY;\n\n\t\t\t\t\t\t//--- left\n\t\t\t\t\t\tif ( deltaX >= 50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- right\n\t\t\t\t\t\tif ( deltaX <= -50) {\n\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- up\n\t\t\t\t\t\tif ( deltaY >= 50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//--- down\n\t\t\t\t\t\tif ( deltaY <= -50) {\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tif ( Math.abs( deltaX ) >= 50 || Math.abs( deltaY ) >= 50 ) {\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'touchmove.SVG_MASK_SLIDER' );\n\t\t\t\t\t\t}\t\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( draggable ) {\n\t\t\t\t\t\t\t//right\n\t\t\t\t\t\t\tif ( e.pageX > origin_mouse_x ) {\t\t\t\t\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() > 0 ) _prev.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//left\n\t\t\t\t\t\t\tif ( e.pageX < origin_mouse_x ) {\n\t\t\t\t\t\t\t\tif ( $items.filter( '.is-active' ).index() < itemTotal - 1 ) _next.trigger( 'click' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//down\n\t\t\t\t\t\t\tif ( e.pageY > origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//up\n\t\t\t\t\t\t\tif ( e.pageY < origin_mouse_y ) {\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t\t$dragDropTrigger.off( 'mouseup.SVG_MASK_SLIDER' );\n\n\t\t\t\t\t\t}\t\n\n\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t} );//end: mouseup.SVG_MASK_SLIDER touchmove.SVG_MASK_SLIDER\n\n\n\n\n\t\t\t} );// end: mousedown.SVG_MASK_SLIDER touchstart.SVG_MASK_SLIDER\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\n\t\t\n\t\t/*\n\t\t * Transition Between Slides\n\t\t *\n\t\t * @param  {Number} elementIndex           - Index of current slider.\n\t\t * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {String} dir                    - Switching direction indicator.\n         * @param  {String} countTotalID           - Total number ID or class of counter.\n         * @param  {String} countCurID             - Current number ID or class of counter.\n         * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n         * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n         * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t * @return {Void}\n\t\t */\n        function sliderUpdates( elementIndex, slider, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\t\t\t\n\t\t\tconst $items                   = slider.find( '.uix-svgMask-slider__item' ),\n                  total                    = $items.length;\n\t\t\t\n\t\t\n\t\t    //Prevent bubbling\n\t\t\tif ( total == 1 ) {\n\t\t\t\t$( paginationID ).hide();\n\t\t\t\t$( arrowsID ).hide();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t\n\t\t\t\n\t\t\t//Transition Interception\n\t\t\t//-------------------------------------\n\t\t\tif ( loop ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = 0;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = total-1;\t\n\t\t\t} else {\n\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == total - 1 ) $( arrowsID ).find( '.uix-svgMask-slider__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\tif ( elementIndex == 0 ) $( arrowsID ).find( '.uix-svgMask-slider__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t}\n\n\t\t\t// To determine if it is a touch screen.\n\t\t\tif ( Modernizr.touchevents ) {\n\t\t\t\tif ( elementIndex == total ) elementIndex = total-1;\n\t\t\t\tif ( elementIndex < 0 ) elementIndex = 0;\t\n\t\t\t\t\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( !loop ) {\n\t\t\t\t\t//first item\n\t\t\t\t\tif ( elementIndex == 0 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-svgMask-slider__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\t\t\t\t\t//last item\n\t\t\t\t\tif ( elementIndex == total - 1 ) {\n\t\t\t\t\t\t$( arrowsID ).find( '.uix-svgMask-slider__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n            \n            \n            \n            // call the current item\n            //-------------------------------------\n            const $current = $items.eq( elementIndex );\n\t\t\t\n\t\t\t\n\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\tlet dirIndicatorClass = '';\n\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\t\t\t\n\n\t\t\t\n\t\t\t//Add transition class to Controls Pagination\n\t\t\t$( paginationID ).find( 'li a' ).removeClass( 'leave' );\n\t\t\t$( paginationID ).find( 'li a.is-active' ).removeClass( 'is-active' ).addClass( 'leave');\n\t\t\t$( paginationID ).find( 'li a[data-index=\"'+elementIndex+'\"]' ).addClass( 'is-active').removeClass( 'leave' );\n\t\t\t\n\t\t\t//Add transition class to each item\n\t\t\t$items.removeClass( 'leave prev next' );\n\t\t\t$items.addClass( dirIndicatorClass );\n\t\t\tslider.find( '.uix-svgMask-slider__item.is-active' ).removeClass( 'is-active' ).addClass( 'leave ' + dirIndicatorClass );\n\t\t\t$current.addClass( 'is-active ' + dirIndicatorClass ).removeClass( 'leave' );\n\n\t\t\t\n\t\t\t\n\t\t\t//SVG Animation\n\t\t\t//-------------------------------------\n\t\t\tif( !svgAnimating ) {\n\t\t\t\t\n\t\t\t\t//don't animate if already animating\n\t\t\t\tsvgAnimating = true;\n\n\t\t\t\t\n\n\t\t\t\tconst path1 = '1 0.5 1 540.5 1 1080.5 0 1080.5 4 1080.5 4 540.5 4 0.5 0 0.5 1 0.5',\n\t\t\t\t\t  path2 = '0.5 0.5 0.5 540.5 0.5 1080.5 1519.5 1080.5 1531.5 1080.5 1066.5 525.5 601.5 1.5 589.5 1.5 0.5 0.5',\n\t\t\t\t\t  path3 = '0.5 0.5 0.5 540.5 0.5 1080.5 960.5 1080.5 1920.5 1080.5 1920.5 540.5 1920.5 0.5 960.5 0.5 0.5 0.5';\n\n\t\t\t\tif ( dir == 'next' ) {\n\t\t\t\t\t$current.find('polygon').css({\n\t\t\t\t\t\t'transform-origin': 'center',\n\t\t\t\t\t\t'transform': 'rotate(180deg)'\t\n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\t\t\t\t\t$current.find('polygon').css({\n\t\t\t\t\t\t'transform-origin': 'center',\n\t\t\t\t\t\t'transform': 'rotate(0)'\t\n\t\t\t\t\t});\t\n\t\t\t\t}\n\n\n\t\t\t\t//----\n\t\t\t\t//@required: MorphSVGPlugin\n\t\t\t\t/*\n\t\t\t\tTweenMax.set( $current.find('polygon')[0], {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t  points: path1\n\t\t\t\t\t\t  },\n\t\t\t\t\tonComplete: function() {\n\n\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\tmorphSVG: path2,\n\t\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\t\tease: Power2.easeOut,\n\t\t\t\t\t\t\tonComplete: function() {\n\n\t\t\t\t\t\t\t\tTweenMax.to( this.target, animSpeed/1000, {\n\t\t\t\t\t\t\t\t\tmorphSVG: path3,\n\t\t\t\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\t\t\t\tease: Power2.easeInOut,\n\t\t\t\t\t\t\t\t\tonComplete: function() {\n\t\t\t\t\t\t\t\t\t\tsvgAnimating = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\t\n\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\n\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t*/\n\t\t\t\t\n\n\t\t\t\tTweenMax.set( $current.find('polygon')[0], {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t  points: path1\n\t\t\t\t\t\t  },\n\t\t\t\t\tonComplete: function() {\n\n\t\t\t\t\t\tanime.timeline({\n\t\t\t\t\t\t\tloop: false\n\t\t\t\t\t\t}).add({\n\t\t\t\t\t\t\ttargets: $current.find('polygon')[0],\n\t\t\t\t\t\t\tpoints: [\n\t\t\t\t\t\t\t\t{value: path2}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tduration: animSpeed,\n\t\t\t\t\t\t\teasing: \"easeOutExpo\"\n\t\t\t\t\t\t}).add({\n\t\t\t\t\t\t\ttargets: $current.find('polygon')[0],\n\t\t\t\t\t\t\tpoints: [\n\t\t\t\t\t\t\t\t{value: path3}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tduration: animSpeed,\n\t\t\t\t\t\t\teasing: \"easeOutExpo\",\n\t\t\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\t\t\tsvgAnimating = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\n\n\n\n\t\t\t\t\t}\n\t\t\t\t});\t\n\n\n\t\n\t\t\t}//endif svgAnimating\n\n\t\t\t\n\n\t\t\t//Display counter\n\t\t\t//-------------------------------------\n\t\t\t$( countTotalID ).text( total );\n\t\t\t$( countCurID ).text( parseFloat( elementIndex ) + 1 );\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t//Reset the default height of item\n\t\t\t//-------------------------------------\t\n\t\t\titemDefaultInit( slider, $current );\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t}\n\t\t\n        \n\t\t/*\n\t\t * Initialize the default height of item\n\t\t *\n         * @param  {Element} slider                 - Selector of the slider .\n\t\t * @param  {Element} currentLlement         - Current selector of each slider.\n\t\t * @return {Void}\n\t\t */\n        function itemDefaultInit( slider, currentLlement ) {\n\n\n\t\t\t//\n\t\t\tlet imgURL   = currentLlement.find( 'img' ).attr( 'src' );\n\t\t\tif ( typeof imgURL != typeof undefined ) {\n\t\t\t\tconst img = new Image();\n\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tslider.css( 'height', currentLlement.closest( '.uix-svgMask-slider__outline' ).width()*(this.height/this.width) + 'px' );\t\t\n\n\t\t\t\t};\n\n\t\t\t\timg.src = imgURL;\t\n\t\t\t}\n\n\t\t}\n\n    \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.SVG_MASK_SLIDER.pageLoaded );\n\t\n\n\treturn class SVG_MASK_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","\n/* \n *************************************\n * <!-- Swiper -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport Swiper from '@uixkit/core/swiper/js/third-party/swiper-bundle.js';\nimport '../scss/_style.scss';\n\n\nexport const SWIPER = ( ( module, $, window, document ) => {\n\tif ( window.SWIPER === null ) return false;\n\t\n\t\n\t\n    module.SWIPER               = module.SWIPER || {};\n    module.SWIPER.version       = '0.0.6';\n    module.SWIPER.documentReady = function( $ ) {\n\t\t\n\t\t$( '.uix-swiper' ).each( function()  {\n\t\t\t\n\t\t\tconst $el = $( this );\n\t\t\tconst actived = $el.data( 'activated' );\n\t\t\tif( typeof actived === typeof undefined ) {\n\n\t\t\t\t\n\n\n\t\t\t\t//Synchronize multiple objects\n\t\t\t\t//------------------------------------------\n\t\t\t\tif ( $el.find( '#app-slider1' ).length > 0 ) {\n\t\t\t\t\tconst swiper2 = new Swiper('#app-slider2', {\n\t\t\t\t\t\tslidesPerView: 5,\n\t\t\t\t\t\tspaceBetween: 10,\n\t\t\t\t\t\tallowTouchMove: false\n\t\t\t\t\t});\n\n\t\t\t\t\tconst swiper1 = new Swiper('#app-slider1', {\n\t\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\t\tspaceBetween: 10,\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\t\t640 : {\n\t\t\t\t\t\t\t\tslidesPerView: 2,\n\t\t\t\t\t\t\t\tspaceBetween: 20,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t768 : {\n\t\t\t\t\t\t\t\tslidesPerView: 4,\n\t\t\t\t\t\t\t\tspaceBetween: 40,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t1024 : {\n\t\t\t\t\t\t\t\tslidesPerView: 5,\n\t\t\t\t\t\t\t\tspaceBetween: 50,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t//Sync swiper slider\n\t\t\t\t\tswiper1.on( 'slideChange', function() {\n\n\t\t\t\t\t\tconst index = this.activeIndex;\n\t\t\t\t\t\tswiper2.slideTo( index, 1000, false );\n\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\n\t\t\t\t}\n\t\t\t\t\n\n\n\n\n\t\t\t\t//Swiper custom slides transform effect (Parallax effect)\n\t\t\t\t//------------------------------------------\n\t\t\t\t\n\t\t\t\tif ( $el.find( '#app-slider3' ).length > 0 ) {\n\t\t\t\t\tconst interleaveOffset = 0.5;\n\t\t\t\t\tconst swiper3 = new Swiper('#app-slider3', {\n\t\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\t\tspaceBetween: 0,\n\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\tgrabCursor: false,\n\t\t\t\t\t\twatchSlidesProgress: true,\n\t\t\t\t\t\tmousewheelControl: false,\n\t\t\t\t\t\tkeyboardControl: false,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tprogress: function( e ) {\n\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tfor (let i = 0; i < thisSwiper.slides.length; i++) {\n\t\t\t\t\t\t\t\t\tconst slideProgress = thisSwiper.slides[i].progress;\n\t\t\t\t\t\t\t\t\tconst innerOffset = thisSwiper.width * interleaveOffset;\n\t\t\t\t\t\t\t\t\tconst innerTranslate = slideProgress * innerOffset;\n\t\t\t\t\t\t\t\t\tthisSwiper.slides[i].querySelector(\".slide-inner\").style.transform = \"translate3d(\" + innerTranslate + \"px, 0, 0)\";\n\n\t\t\t\t\t\t\t\t\t//console.log( e.passedParams );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttouchStart: function( e ) {\n\t\t\t\t\t\t\t\tconst passedParams = e.passedParams;\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tfor (let i = 0; i < thisSwiper.slides.length; i++) {\n\t\t\t\t\t\t\t\t\tthisSwiper.slides[i].style.transition = \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetTransition: function( e ) {\n\n\t\t\t\t\t\t\t\tconst passedParams = e.passedParams;\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tfor (let i = 0; i < thisSwiper.slides.length; i++) {\n\t\t\t\t\t\t\t\t\tthisSwiper.slides[i].style.transition = passedParams.speed + \"ms\";\n\t\t\t\t\t\t\t\t\tthisSwiper.slides[i].querySelector(\".slide-inner\").style.transition = passedParams.speed + \"ms\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\n\n\t\t\t\t\t//AutoPlay\n\t\t\t\t\tswiper3.autoplay.start();\n\t\t\t\t\t//swiper3.autoplay.stop();\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Swiper custom slides transform effect (Scale Effect without left/right swipe)\n\t\t\t\t//------------------------------------------\n\t\t\t\t\n\t\t\t\tif ( $el.find( '#app-slider4' ).length > 0 ) {\n\t\t\t\t\tconst swiper4 = new Swiper('#app-slider4', {\n\t\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\t\tspaceBetween: 0,\n\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\tgrabCursor: false,\n\t\t\t\t\t\twatchSlidesProgress: true,\n\t\t\t\t\t\tmousewheelControl: false,\n\t\t\t\t\t\tkeyboardControl: false,\n\t\t\t\t\t\tvirtualTranslate: true, /* Required */\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tprogress: function( translate ) {\n\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < thisSwiper.slides.length; i++) {\n\t\t\t\t\t\t\t\t\tconst slideProgress = thisSwiper.slides[i].progress;\n\t\t\t\t\t\t\t\t\tconsole.log( translate.params );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttouchStart: function( translate ) {\n\t\t\t\t\t\t\t\tconst params = translate.params;\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetTransition( translate ) {\n\t\t\t\t\t\t\t\tconst params = translate.params;\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetTranslate(translate) {\n\n\t\t\t\t\t\t\t\tconst params = translate.params;\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\n\n\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t\tA weird way to find this out but I've found no other.\n\t\t\t\t\t\t\t\tChecks if the progress on the active slide is 1 or -1 which happens when swiper navigates to next/previous slide on click and keybord navigation.\n\t\t\t\t\t\t\t\tIf not then the slider is being dragged, so we get the right index by finding the startTranslate from touchEvents in array of transitions the swiper snaps to.\n\t\t\t\t\t\t\t\tThe startTranslate doesn't exist on initial load so we use the initialSlide index instead.\n\t\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t\tconst getActiveIndexBeforeTransitionStart = function(curSwiper, curSlides) {\n\t\t\t\t\t\t\t\t\tconst isDragging = !Math.abs(curSlides[curSwiper.activeIndex].progress === 1);\n\t\t\t\t\t\t\t\t\tif (isDragging) {\n\t\t\t\t\t\t\t\t\t\treturn curSwiper.slidesGrid.indexOf( -curSwiper.touchEventsData.startTranslate || curSwiper.params.initialSlide);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn curSwiper.activeIndex;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\n\n\t\t\t\t\t\t\t\tconst getDirection = function(animationProgress) {\n\t\t\t\t\t\t\t\t\tif (animationProgress === 0) {\n\t\t\t\t\t\t\t\t\t\treturn \"NONE\";\n\t\t\t\t\t\t\t\t\t} else if (animationProgress > 0) {\n\t\t\t\t\t\t\t\t\t\treturn \"NEXT\";\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn \"BACK\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\n\n\n\t\t\t\t\t\t\t\tconst durationInSeconds = params.speed / 1000;\n\t\t\t\t\t\t\t\t// convert slides object to plain array\n\t\t\t\t\t\t\t\tconst slides = thisSwiper.slides;\n\n\t\t\t\t\t\t\t\t// get the index of the slide active before transition start (activeIndex changes halfway when dragging)\n\t\t\t\t\t\t\t\tconst originIndex = getActiveIndexBeforeTransitionStart(thisSwiper, slides);\n\t\t\t\t\t\t\t\t// get information about animation progress from the active slide - the active slide's value is always -1 to 1.\n\t\t\t\t\t\t\t\t/* \n\t\t\t\t\t\t\t\tevery slide has a progress attribute equal to the \"distance\" from the current active index.\n\t\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\t\tconst animationProgress = slides[originIndex].progress;\n\t\t\t\t\t\t\t\t// you can then get the drag direction like so:\n\t\t\t\t\t\t\t\tconst direction = getDirection(animationProgress);\n\t\t\t\t\t\t\t\t// console.log(direction);\n\t\t\t\t\t\t\t\t// do magic with each slide\n\t\t\t\t\t\t\t\tslides.map(function (perSlide, index) {\n\t\t\t\t\t\t\t\t\t// to put the slides behind each other we have to set their CSS translate accordingly since by default they are arranged in line.\n\t\t\t\t\t\t\t\t\tconst offset = perSlide.swiperSlideOffset;\n\t\t\t\t\t\t\t\t\tlet x = -offset;\n\t\t\t\t\t\t\t\t\tif (!thisSwiper.params.virtualTranslate) x -= thisSwiper.translate;\n\t\t\t\t\t\t\t\t\tlet y = 0;\n\t\t\t\t\t\t\t\t\tif (!thisSwiper.isHorizontal()) {\n\t\t\t\t\t\t\t\t\t\ty = x;\n\t\t\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tTweenMax.set(perSlide, {\n\t\t\t\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\t\t\t\ty\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// do our animation stuff!\n\t\t\t\t\t\t\t\t\tconst clip = function clip(val, min, max) {\n\t\t\t\t\t\t\t\t\t\treturn Math.max(min, Math.min(val, max));\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst ZOOM_FACTOR = 0.05;\n\n\t\t\t\t\t\t\t\t\tconst opacity = Math.max(1 - Math.abs(perSlide.progress), 0);\n\n\t\t\t\t\t\t\t\t\tconst clippedProgress = clip(perSlide.progress, -1, 1);\n\t\t\t\t\t\t\t\t\tconst scale = 1 - ZOOM_FACTOR * clippedProgress;\n\n\t\t\t\t\t\t\t\t\t// you can do your CSS animation instead of using tweening.\n\t\t\t\t\t\t\t\t\tTweenMax.to(perSlide, durationInSeconds, {\n\t\t\t\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\t\t\t\topacity\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\n\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\n\n\t\t\t\t\t//AutoPlay\n\t\t\t\t\tswiper4.autoplay.start();\n\t\t\t\t\t//swiper4.autoplay.stop();\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\n\n\n\t\t\t\t\n\t\t\t\t//Centered Slides\n\t\t\t\t//------------------------------------------\t\n\t\t\t\t\n\t\t\t\tif ( $el.find( '#app-slider5' ).length > 0 ) {\n\t\t\t\t\tconst swiper5 = new Swiper('#app-slider5', {\n\t\t\t\t\t\tslidesPerView: 3,\n\t\t\t\t\t\tspaceBetween: 30,\n\t\t\t\t\t\tloop: true,\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\tcenteredSlides: true,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\t\t\t\n\t\t\t\t}\t\t\n\n\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Display half on both sides\n\t\t\t\t//------------------------------------------\t\t\n\t\t\t\t\n\t\t\t\tif ( $el.find( '#app-slider6' ).length > 0 ) {\n\t\t\t\t\tconst swiper6 = new Swiper('#app-slider6', {\n\t\t\t\t\t\tslidesPerView: 'auto',//Number of slides per view, and it must be \"auto\"!\n\t\t\t\t\t\tspaceBetween: 30,\n\t\t\t\t\t\tloop: true,\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\tcenteredSlides: true, //If true, then active slide will be centered, not always on the left side.\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\n\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Custom Progress Bar\n\t\t\t\t//------------------------------------------\n\n\t\t\t\tif ( $el.find( '#app-slider7' ).length > 0 ) {\n\t\t\t\t\tconst cusProgressBar = function( speed, length, curIndex ) {\n\t\t\t\t\t\tTweenMax.set( '#app-slider7__progress', {\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\tonComplete: function() {\n\t\t\t\t\t\t\t\tTweenMax.to( '#app-slider7__progress', speed/1000, {\n\t\t\t\t\t\t\t\t\twidth: '100%'\n\t\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\n\t\t\t\t\t\tTweenMax.set( '#app-slider7__progress2', {\n\t\t\t\t\t\t\twidth: 100/length * (curIndex) + '%',\n\t\t\t\t\t\t\tonComplete: function() {\n\t\t\t\t\t\t\t\tTweenMax.to( '#app-slider7__progress2', speed/1000, {\n\t\t\t\t\t\t\t\t\twidth: 100/length * (curIndex+1) + '%'\n\t\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\n\t\t\t\t\tconst swiper7 = new Swiper('#app-slider7', {\n\t\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\t\tspaceBetween: 0,\n\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\tspeed: 3500,\n\t\t\t\t\t\tgrabCursor: false,\n\t\t\t\t\t\twatchSlidesProgress: true,\n\t\t\t\t\t\tmousewheelControl: false,\n\t\t\t\t\t\tkeyboardControl: false,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tinit: function( e ) {\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tconsole.log( 'current index: ' + thisSwiper.activeIndex );\n\t\t\t\t\t\t\t\tcusProgressBar( e.passedParams.speed, thisSwiper.slides.length, thisSwiper.activeIndex );\n\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tslideChange: function( e ) {\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tconsole.log( 'current index: ' + \tthisSwiper.activeIndex );\n\t\t\t\t\t\t\t\tcusProgressBar( e.passedParams.speed, thisSwiper.slides.length, thisSwiper.activeIndex );\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\t\n\t\t\t\t}\n\t\t\t\t\n\t\n\t\t\t\t//Gallery with center thumbs automatically\n\t\t\t\t//------------------------------------------\n\t\t\t\tif ( $el.find( '#app-slider8' ).length > 0 ) {\n\t\t\t\t\tconst swiper8 = new Swiper('#app-slider8', {\n\t\t\t\t\t\tspaceBetween: 10,\n\t\t\t\t\t\tgrabCursor: false,\n\t\t\t\t\t\tloop: true,\n\t\t\t\t\t\tloopedSlides: 4,\n\t\t\t\t\t\tautoplay: {\n\t\t\t\t\t\t\tdelay: 5000\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// other parameters\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t/* do something */\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkeyboard: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tonlyInViewport: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tautoHeight: true,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspeed: 1000\n\t\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t\t\t/* thumbs */\n\t\t\t\t\tconst swiper8Thumbs = new Swiper( '#app-slider8-thumbs', {\n\t\t\t\t\t\tspaceBetween: 10,\n\t\t\t\t\t\tcenteredSlides: true,\n\t\t\t\t\t\tslidesPerView: \"auto\", //If you use it with \"auto\" value and along with loop: true then you need to specify loopedSlides parameter with amount of slides to loop (duplicate)\n\t\t\t\t\t\ttouchRatio: 0.4,\n\t\t\t\t\t\tslideToClickedSlide: true,\n\t\t\t\t\t\tloop: true,\n\t\t\t\t\t\tloopedSlides: 4,\n\t\t\t\t\t\tkeyboard: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tonlyInViewport: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspeed: 1000\n\t\t\t\t\t});\n\n\t\t\t\t\t/* set conteoller  */\n\t\t\t\t\tswiper8.controller.control = swiper8Thumbs;\n\t\t\t\t\tswiper8Thumbs.controller.control = swiper8;\n\n\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\n\t\t\t\t//Gallery with manual triggers\n\t\t\t\t//------------------------------------------\n\t\t\t\tif ( $el.find( '#app-slider9' ).length > 0 ) {\n\t\t\t\t\tconst swiper9 = new Swiper('#app-slider9', {\n\t\t\t\t\t\tspaceBetween: 10,\n\t\t\t\t\t\tgrabCursor: false,\n\t\t\t\t\t\tautoplay: {\n\t\t\t\t\t\t\tdelay: 5000\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// other parameters\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t/* do something */\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkeyboard: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tonlyInViewport: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tautoHeight: true,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tel: '.swiper-pagination',\n\t\t\t\t\t\t\tclickable: true,\n\t\t\t\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\t\t\t\treturn '<span class=\"' + className + '\">' + (index + 1) + '</span>';\n\t\t\t\t\t\t\t},\t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnavigation: {\n\t\t\t\t\t\t\tnextEl: '.swiper-button-next',\n\t\t\t\t\t\t\tprevEl: '.swiper-button-prev',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspeed: 1000,\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tinit: function( e ) {\n\t\t\t\t\t\t\t\tconst thisSwiper = this;\n\t\t\t\t\t\t\t\tswiper9BTN( thisSwiper.activeIndex, true );\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Sync swiper slider\n\t\t\t\t\tswiper9.on( 'slideChange', function() {\n\n\t\t\t\t\t\tconst index = this.activeIndex;\n\t\t\t\t\t\tswiper9BTN( index, false );\n\n\t\t\t\t\t});\n\t\n\n\t\t\t\t\t$( '#app-slider9-triggers > div' ).on( 'click', function() {\n\t\t\t\t\t\tswiper9BTN( $( this ).index(), false );\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\t\t\t\tfunction swiper9BTN( index, init ) {\n\t\t\t\t\t\tconst _btns = $( '#app-slider9-triggers > div' );\n\t\t\t\t\t\t_btns.removeClass( 'is-active' );\n\t\t\t\t\t\t_btns.eq( index ).addClass( 'is-active' );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( !init ) {\n\t\t\t\t\t\t\tswiper9.slideTo( index, 1000 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t//------------------------------------------\n\n\t\t\t\t//Prevents front-end javascripts that are activated in the background to repeat loading.\n\t\t\t\t$el.data( 'activated', 1 );\n\n\n\n\t\t\t}//endif actived\n\t\t});\n\n\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.SWIPER.documentReady );\n\t\n\n\treturn class SWIPER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","var defaultThreeUniforms = ['normalMatrix', 'viewMatrix', 'projectionMatrix', 'position', 'normal', 'modelViewMatrix', 'uv', 'uv2', 'modelMatrix'];\n\n\nfunction ShaderRuntime() {}\n\nShaderRuntime.prototype = {\n    mainCamera: null,\n    cubeCameras: {},\n    reserved: {\n        time: null,\n        cameraPosition: null\n    },\n    umap: {\n        float: {\n            type: 'f',\n            value: 0\n        },\n        int: {\n            type: 'i',\n            value: 0\n        },\n        vec2: {\n            type: 'v2',\n            value: function value() {\n                return new THREE.Vector2();\n            }\n        },\n        vec3: {\n            type: 'v3',\n            value: function value() {\n                return new THREE.Vector3();\n            }\n        },\n        vec4: {\n            type: 'v4',\n            value: function value() {\n                return new THREE.Vector4();\n            }\n        },\n        samplerCube: {\n            type: 't'\n        },\n        sampler2D: {\n            type: 't'\n        }\n    },\n    getUmap: function getUmap(type) {\n        var value = this.umap[type].value;\n        return typeof value === 'function' ? value() : value;\n    },\n    load: function load(sourceOrSources, callback) {\n        var _this = this;\n\n        var sources = sourceOrSources,\n        onlyOneSource = typeof sourceOrSources === 'string';\n\n        if (onlyOneSource) {\n            sources = [sourceOrSources];\n        }\n\n        var loadedShaders = new Array(sources.length),\n        itemsLoaded = 0;\n\n        var loadSource = function loadSource(index, source) {\n            var loader = new THREE.FileLoader();\n\n            loader.load(source, function(json) {\n                var parsed;\n\n                try {\n                    parsed = JSON.parse(json);\n                    delete parsed.id; // Errors if passed to rawshadermaterial :(\n                } catch(e) {\n                    throw new Error('Could not parse shader' + source + '! Please verify the URL is correct.');\n                }\n\t\t\t\t\n                _this.add(parsed.name, parsed);\n\n                loadedShaders[index] = parsed;\n\n                if (++itemsLoaded === sources.length) {\n                    callback(onlyOneSource ? loadedShaders[0] : loadedShaders);\n                }\n            });\n        };\n\n        for (var x = 0; x < sources.length; x++) {\n            loadSource(x, sources[x]);\n        }\n    },\n\t\n\t//Load json code directly\n    loadJSON: function load(sourceOrSources, callback) {\n        var _this = this;\n\n        var sources = sourceOrSources,\n        onlyOneSource = typeof sourceOrSources === 'string';\n\n        if (onlyOneSource) {\n            sources = [sourceOrSources];\n        }\n\n        var loadedShaders = new Array(sources.length),\n        itemsLoaded = 0;\n\n        var loadJSONCode = function loadJSONCode(index, source) {\n\t\t\t\n\t\t\tvar parsed;\n\n\t\t\tparsed = source;\n\t\t\tdelete parsed.id; // Errors if passed to rawshadermaterial :(\n\t\t\t\n\n\t\t\t_this.add(parsed.name, parsed);\n\n\t\t\tloadedShaders[index] = parsed;\n\n\t\t\tif (++itemsLoaded === sources.length) {\n\t\t\t\tcallback(onlyOneSource ? loadedShaders[0] : loadedShaders);\n\t\t\t}\n\t\t\t\n\t\t\t\n        };\n\n        for (var x = 0; x < sources.length; x++) {\n            loadJSONCode(x, sources[x]);\n        }\n    },\n    registerCamera: function registerCamera(camera) {\n        if (! (camera instanceof THREE.Camera)) {\n            throw new Error('Cannot register a non-camera as a camera!');\n        }\n\n        this.mainCamera = camera;\n    },\n    registerCubeCamera: function registerCubeCamera(name, camera) {\n        if (!camera.renderTarget) {\n            throw new Error('Cannot register a non-camera as a camera!');\n        }\n\n        this.cubeCameras[name] = camera;\n    },\n    unregisterCamera: function unregisterCamera(name) {\n        if (name in this.cubeCameras) {\n            delete this.cubeCameras[name];\n        } else if (name === this.mainCamera) {\n            delete this.mainCamera;\n        } else {\n            throw new Error('You never registered camera ' + name);\n        }\n    },\n    updateSource: function updateSource(identifier, config, findBy) {\n        findBy = findBy || 'name';\n\n        if (!this.shaderTypes[identifier]) {\n            throw new Error('Runtime Error: Cannot update shader ' + identifier + ' because it has not been added.');\n        }\n\n        var newShaderData = this.add(identifier, config),\n        shader,\n        x;\n\n        for (x = 0; shader = this.runningShaders[x++];) {\n            if (shader[findBy] === identifier) {\n                extend(shader.material, omit(newShaderData, 'id'));\n                shader.material.needsUpdate = true;\n            }\n        }\n    },\n    renameShader: function renameShader(oldName, newName) {\n        var x, shader;\n\n        if (! (oldName in this.shaderTypes)) {\n            throw new Error('Could not rename shader ' + oldName + ' to ' + newName + '. It does not exist.');\n        }\n\n        this.shaderTypes[newName] = this.shaderTypes[oldName];\n        delete this.shaderTypes[oldName];\n\n        for (x = 0; shader = this.runningShaders[x++];) {\n            if (shader.name === oldName) {\n                shader.name = newName;\n            }\n        }\n    },\n    get: function get(identifier) {\n        var shaderType = this.shaderTypes[identifier];\n\n        if (!shaderType.initted) {\n            this.create(identifier);\n        }\n\n        return shaderType.material;\n    },\n    add: function add(shaderName, config) {\n        var newData = clone(config),\n        uniform;\n        newData.fragmentShader = config.fragment;\n        newData.vertexShader = config.vertex;\n        delete newData.fragment;\n        delete newData.vertex;\n\n        for (var uniformName in newData.uniforms) {\n            uniform = newData.uniforms[uniformName];\n\n            if (uniform.value === null) {\n                newData.uniforms[uniformName].value = this.getUmap(uniform.glslType);\n            }\n        }\n\n        if (shaderName in this.shaderTypes) {\n            // maybe not needed? too sleepy, need document\n            extend(this.shaderTypes[shaderName], newData);\n        } else {\n            this.shaderTypes[shaderName] = newData;\n        }\n\n        return newData;\n    },\n    create: function create(identifier) {\n        var shaderType = this.shaderTypes[identifier];\n        var keys = Object.keys(shaderType); // Three's shadermaterial id is not assignable, so filter it out\n        var withoutId = {};\n\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i] !== 'id') {\n                withoutId[keys[i]] = shaderType[keys[i]];\n            }\n        }\n\n        shaderType.material = new THREE.RawShaderMaterial(withoutId);\n        this.runningShaders.push(shaderType);\n        shaderType.init && shaderType.init(shaderType.material);\n        shaderType.material.needsUpdate = true;\n        shaderType.initted = true;\n        return shaderType.material;\n    },\n    updateRuntime: function updateRuntime(identifier, data, findBy) {\n        findBy = findBy || 'name';\n        var shader, x, uniformName, uniform; // This loop does not appear to be a slowdown culprit\n        for (x = 0; shader = this.runningShaders[x++];) {\n            if (shader[findBy] === identifier) {\n                for (uniformName in data.uniforms) {\n                    if (uniformName in this.reserved) {\n                        continue;\n                    }\n\n                    if (uniformName in shader.material.uniforms) {\n                        uniform = data.uniforms[uniformName]; // this is nasty, since the shader serializes\n                        // CubeCamera model to string. Maybe not update it at\n                        // all?\n                        if (uniform.type === 't' && typeof uniform.value === 'string') {\n                            uniform.value = this.cubeCameras[uniform.value].renderTarget;\n                        }\n\n                        shader.material.uniforms[uniformName].value = data.uniforms[uniformName].value;\n                    }\n                }\n            }\n        }\n    },\n    // Update global shader uniform values\n    updateShaders: function updateShaders(time, obj) {\n        var shader, x;\n        obj = obj || {};\n\n        for (x = 0; shader = this.runningShaders[x++];) {\n            for (var uniform in obj.uniforms) {\n                if (uniform in shader.material.uniforms) {\n                    shader.material.uniforms[uniform].value = obj.uniforms[uniform];\n                }\n            }\n\n            if ('cameraPosition' in shader.material.uniforms && this.mainCamera) {\n                shader.material.uniforms.cameraPosition.value = this.mainCamera.position.clone();\n            }\n\n            if ('viewMatrix' in shader.material.uniforms && this.mainCamera) {\n                shader.material.uniforms.viewMatrix.value = this.mainCamera.matrixWorldInverse;\n            }\n\n            if ('time' in shader.material.uniforms) {\n                shader.material.uniforms.time.value = time;\n            }\n        }\n    },\n    shaderTypes: {},\n    runningShaders: []\n}; // Convenience methods so we don't have to include underscore\nfunction extend() {\n    var length = arguments.length,\n    obj = arguments[0];\n\n    if (length < 2) {\n        return obj;\n    }\n\n    for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n        keys = Object.keys(source || {}),\n        l = keys.length;\n\n        for (var i = 0; i < l; i++) {\n            var key = keys[i];\n            obj[key] = source[key];\n        }\n    }\n\n    return obj;\n}\n\nfunction clone(obj) {\n    return extend({},\n    obj);\n}\n\nfunction omit(obj) {\n    var cloned = clone(obj),\n    x,\n    key;\n\n    for (x = 0; key = (_ref = x+++1, _ref < 1 || arguments.length <= _ref ? undefined: arguments[_ref]);) {\n        var _ref;\n\n        delete cloned[key];\n    }\n\n    return cloned;\n}\n\nexport default ShaderRuntime;","/* \n *************************************\n * <!-- 3D Background 1 with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport ShaderRuntime from '@uixkit/plugins/THREE/extensions/ShaderRuntime.custom';\n\nexport const THREE_BACKGROUND_THREE = ( ( module, $, window, document ) => {\n\tif ( window.THREE_BACKGROUND_THREE === null ) return false;\n\t\n\t\n\t\n    module.THREE_BACKGROUND_THREE               = module.THREE_BACKGROUND_THREE || {};\n    module.THREE_BACKGROUND_THREE.version       = '0.0.5';\n    module.THREE_BACKGROUND_THREE.documentReady = function( $ ) {\n\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-background-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n\n\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\t\t\t\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n\n            const rendererCanvasID = '3D-background-three-canvas';\n\n\t\t\t\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\tshaderSprite,\n\t\t\t\tclock = new THREE.Clock();\n\n\n\t\t\t// controls\n\n\t\t\tlet spriteAnim = false;\n\n\t\t\tlet mouseX       = 0,\n\t\t\t\tmouseY       = 0,\n\t\t\t\twindowHalfX  = windowWidth / 2,\n\t\t\t\twindowHalfY  = windowHeight / 2;\n\n\t\t\tlet targetX = 0.0, \n\t\t\t\ttargetY = 0.0,\n\t\t\t\tangle   = 0.0,\n\t\t\t\theight  = 0.0,\n\t\t\t\ttarget  = new THREE.Vector3();\n\n\n\t\t\t// Load multiple ShaderFrog shaders\n\t\t\tconst runtime = new ShaderRuntime();\n\n\t\t\truntime.load([\n\t\t\t\t$( '#' + rendererCanvasID ).data( 'shader-url' )\n\t\t\t], function( shaders ) {\n\n\t\t\t\t// Get the Three.js material you can assign to your objects\n\t\t\t\tconst material = runtime.get( shaders[0].name );\n\t\t\t\tshaderSprite.material = material;\n\n\t\t\t});\n\n\n\t\t\t\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 60, windowWidth / windowHeight, 100, 2000000 );\n\t\t\t\tcamera.position.set( 0, 100, 2000 );\n\n\t\t\t\truntime.registerCamera( camera );\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t//Add shader background\n\t\t\t\tconst geometry = new THREE.SphereGeometry(5, 32, 32, 0, Math.PI * 2, 0, Math.PI * 2);\n\t\t\t\tshaderSprite = new THREE.Mesh( geometry );\n\t\t\t\tshaderSprite.scale.setScalar( 10000 );\n\t\t\t\tshaderSprite.renderDepth = 0;\n\t\t\t\tscene.add( shaderSprite );\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tconst defaultMaterial    = new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true, vertexColors: THREE.VertexColors } );\n\n\t\t\t\tdisplacementSprite = new THREE.Mesh( generateGeometry( 'sphere', 200 ), defaultMaterial );\n\t\t\t\tscene.add( displacementSprite );\n\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\t\tdocument.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\t\tdocument.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tconst objVector = new THREE.Vector3(0,0.2,0.1),\n\t\t\t\t\t  delta     = clock.getDelta();\n\n\t\t\t\tif ( ! spriteAnim ) {\n\t\t\t\t\tdisplacementSprite.rotation.x += delta * objVector.x;\n\t\t\t\t\tdisplacementSprite.rotation.y += delta * objVector.y;\n\t\t\t\t\tdisplacementSprite.rotation.z += delta * objVector.z;\n\t\t\t\t}\n\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\n\t\t\t\t//update shaders\n\t\t\t\truntime.updateShaders( clock.getElapsedTime() );\n\n\n\n\t\t\t\t// update camera\n\t\t\t\ttargetX = mouseX * .002;\n\t\t\t\ttargetY = mouseY * .002;\n\n\t\t\t\tangle  += 0.01 * ( targetX - angle );\n\t\t\t\theight += 0.01 * ( targetY - height );\n\n\t\t\t\tconst x = -Math.sin( angle * 1.5 ) * 35;\n\t\t\t\tconst z =  Math.cos( angle * 1.5 ) * 35;\n\t\t\t\tconst y = 130 * height + 0;\n\n\t\t\t\tcamera.position.set( x, y, z );\n\t\t\t\tcamera.lookAt( target );\t\n\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n                \n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\t\t\t\tmouseX = event.clientX - windowHalfX;\n\t\t\t\tmouseY = event.clientY - windowHalfY;\t\n\n\t\t\t}\n\n\t\t\tfunction onDocumentMouseDown( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tspriteAnim = true;\n\t\t\t\tmouseX = event.clientX - windowHalfX;\n\t\t\t\tmouseY = event.clientY - windowHalfY;\t\n\n\n\t\t\t}\n\n\t\t\tfunction onDocumentMouseUp( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tspriteAnim = false;\n\t\t\t\tmouseX = event.clientX - windowHalfX;\n\t\t\t\tmouseY = event.clientY - windowHalfY;\n\n\t\t\t}\n\n\n\n\t\t\t/*\n\t\t\t * Batch generation of geometry\n\t\t\t *\n\t\t\t * @param  {String} objectType     - String of geometry type identifier.\n\t\t\t * @param  {Number} numObjects       - The total number of generated objects.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction generateGeometry( objectType, numObjects ) {\n\n\t\t\t\tconst geometry = new THREE.Geometry();\n\n\t\t\t\tconst applyVertexColors = function(g, c) {\n\t\t\t\t\tg.faces.forEach(function(f) {\n\t\t\t\t\t\tconst n = (f instanceof THREE.Face3) ? 3 : 4;\n\t\t\t\t\t\tfor (let j = 0; j < n; j++) {\n\t\t\t\t\t\t\tf.vertexColors[j] = c;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tfor ( let i = 0; i < numObjects; i ++ ) {\n\n\t\t\t\t\tconst position = new THREE.Vector3();\n\t\t\t\t\tposition.x = Math.random() * 10000 - 5000;\n\t\t\t\t\tposition.y = Math.random() * 6000 - 3000;\n\t\t\t\t\tposition.z = Math.random() * 8000 - 4000;\n\n\t\t\t\t\tconst rotation = new THREE.Euler();\n\t\t\t\t\trotation.x = Math.random() * 2 * Math.PI;\n\t\t\t\t\trotation.y = Math.random() * 2 * Math.PI;\n\t\t\t\t\trotation.z = Math.random() * 2 * Math.PI;\n\n\t\t\t\t\tconst scale = new THREE.Vector3();\n\t\t\t\t\tscale.x = Math.random() * 200 + 100;\n\n\n\t\t\t\t\tlet geom;\n\t\t\t\t\tconst color = new THREE.Color();\n\n\n\t\t\t\t\tif ( objectType == \"cube\" ) {\n\n\t\t\t\t\t\tgeom = new THREE.BoxGeometry( 1, 1, 1 );\n\t\t\t\t\t\tscale.y = Math.random() * 200 + 100;\n\t\t\t\t\t\tscale.z = Math.random() * 200 + 100;\n\t\t\t\t\t\tcolor.setRGB( 0, 0, Math.random() + 0.1 );\n\n\t\t\t\t\t} else if ( objectType == \"sphere\" ) {\n\n\t\t\t\t\t\tgeom = new THREE.IcosahedronGeometry( 1, 1 );\n\t\t\t\t\t\tscale.y = scale.z = scale.x;\n\t\t\t\t\t\tcolor.setRGB( 0.35, getRandomFloat( 0.12, 0.3 ), 0.2 );\n\n\t\t\t\t\t} else if ( objectType == \"poly\" ) {\n\n\n\t\t\t\t\t\tgeom = new THREE.CylinderGeometry( 3, 6, 3, 5, 1 );\n\t\t\t\t\t\tscale.y = Math.random() * 30;\n\t\t\t\t\t\tscale.z = Math.random() * 30;\n\t\t\t\t\t\tcolor.setRGB( Math.random() + 0.1, 0, 0 );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// give the geom's vertices a random color, to be displayed\n\t\t\t\t\tapplyVertexColors( geom, color );\n\n\t\t\t\t\tconst object = new THREE.Mesh( geom );\n\t\t\t\t\tobject.position.copy( position );\n\t\t\t\t\tobject.rotation.copy( rotation );\n\t\t\t\t\tobject.scale.copy( scale );\n\t\t\t\t\tobject.updateMatrix();\n\n\t\t\t\t\tgeometry.merge( object.geometry, object.matrix );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\n\t\t\t}\n\n\n\t\t\t//Generate random number between two numbers\n\t\t\tfunction getRandomFloat(min, max) {\n\t\t\t\treturn Math.random() * (max - min) + min;\n\t\t\t}\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\n\t\t\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_BACKGROUND_THREE.documentReady );\n\t\n\n\treturn class THREE_BACKGROUND_THREE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n","/* \n *************************************\n * <!-- 3D Background 2 with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport fragment from \"./shader/fragment-custom.glsl\";\nimport vertex from \"./shader/vertex-custom.glsl\";\n\n\nexport const THREE_BACKGROUND_THREE2 = ( ( module, $, window, document ) => {\n\tif ( window.THREE_BACKGROUND_THREE2 === null ) return false;\n\t\n\t\n\t\n    module.THREE_BACKGROUND_THREE2               = module.THREE_BACKGROUND_THREE2 || {};\n    module.THREE_BACKGROUND_THREE2.version       = '0.0.4';\n    module.THREE_BACKGROUND_THREE2.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-background-three-canvas2' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID          = '3D-background-three-canvas2';\n\n\t\t\t\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\trenderer,\n\t\t\t\tmaterial,\n\t\t\t\tdisplacementSprite,\n\t\t\t\tclock = new THREE.Clock();\n\n\n\t\t\tconst mouseVector  = new THREE.Vector2();\n\n\t\t\tlet mouseX = 0;\n\t\t\tlet mouseY = 0;\n\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 50, windowWidth / windowHeight, .01, 1000 );\n\t\t\t\tcamera.position.set( 0, 0, 1.8 );\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tmaterial = new THREE.ShaderMaterial({\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\t\"time\": { value: 1.0 },\n\t\t\t\t\t\t\"texture\": { value: new THREE.TextureLoader().load( $( '#' + rendererCanvasID ).data( 'filter-texture' ) ) }\n\t\t\t\t\t},\n\t\t\t\t\tfragmentShader: fragment,\n\t\t\t\t\tvertexShader: vertex\n\t\t\t\t});\t\t\t\n\n\n\n\t\t\t\t//if use texture\n\t\t\t\tmaterial.uniforms.texture.value.wrapS = THREE.RepeatWrapping;\n\t\t\t\tmaterial.uniforms.texture.value.wrapT = THREE.RepeatWrapping;\n\n\n\t\t\t\tconst geometry = new THREE.SphereGeometry(5, 50, 50, 0, Math.PI * 2, 0, Math.PI * 2);\n\t\t\t\tdisplacementSprite = new THREE.Mesh( geometry, material );\n\t\t\t\tscene.add( displacementSprite );\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tconst delta = clock.getDelta();\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\n\t\t\t\tmaterial.uniforms.time.value += delta * 5;\n\n\n\t\t\t\t//displacementSprite.rotation.y += delta * 0.5 * 1;\n\t\t\t\t//displacementSprite.rotation.x += delta * 0.5 * -1;\n\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n                \n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\n\t\t\t\tconst rect = renderer.domElement.getBoundingClientRect();\n\t\t\t\tdisplacementSprite.position.z = ( event.clientX - rect.left ) / rect.width * 4 - 1;\n\n\t\t\t}\n\n\n\n\t\t\tfunction avgArr(arr) {\n\t\t\t\tconst total = arr.reduce(function(sum, b) {\n\t\t\t\t\treturn sum + b\n\t\t\t\t});\n\t\t\t\treturn (total / arr.length);\n\t\t\t}\n\t\t\tfunction maxArr(arr) {\n\t\t\t\treturn arr.reduce(function(a, b) {\n\t\t\t\t\treturn Math.max(a, b);\n\t\t\t\t})\n\t\t\t}\n\t\t\tfunction degToRad(degrees) {\n\t\t\t\treturn degrees * Math.PI / 180;\n\t\t\t}\n\t\t\tfunction round(n, digits) {\n\t\t\t\treturn Number(n.toFixed(digits));\n\t\t\t}\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_BACKGROUND_THREE2.documentReady );\n\t\n\n\treturn class THREE_BACKGROUND_THREE2 {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","export default \"#define GLSLIFY 1\\nuniform float time;\\n\\nuniform sampler2D texture;\\n\\nvarying vec2 vUv;\\n\\nvoid main( void ) {\\n\\n    vec2 position = - 1.0 + 2.0 * vUv;\\n\\n    float a = atan( position.y, position.x );\\n    float r = sqrt( dot( position, position ) );\\n\\n    vec2 uv;\\n    uv.x = cos( a ) / r;\\n    uv.y = sin( a ) / r;\\n    uv /= 10.0;\\n    uv += time * 0.05;\\n\\n    vec3 color = texture2D( texture, uv ).rgb;\\n\\n    gl_FragColor = vec4( color * r * 1.5, 1.0 );\\n\\n}\";","export default \"#define GLSLIFY 1\\nvarying vec2 vUv;\\n\\nvoid main()\\n{\\n    vUv = uv;\\n    vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n    gl_Position = projectionMatrix * mvPosition;\\n}\";","/* \n *************************************\n * <!-- 3D Background 3 with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n\nexport const THREE_BACKGROUND_THREE3 = ( ( module, $, window, document ) => {\n\tif ( window.THREE_BACKGROUND_THREE3 === null ) return false;\n\t\n\t\n\t\n    module.THREE_BACKGROUND_THREE3               = module.THREE_BACKGROUND_THREE3 || {};\n    module.THREE_BACKGROUND_THREE3.version       = '0.0.2';\n    module.THREE_BACKGROUND_THREE3.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-background-three-canvas3' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n            \n\t\t\tconst\trendererCanvasID = '3D-background-three-canvas3';\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n\t\t\tconst mouseVector  = new THREE.Vector2(),\n\t\t\t\t  sphereTarget = new THREE.Euler(),\n\t\t\t\t  xrad         = THREE.Math.degToRad(30),\n\t\t\t\t  yrad         = THREE.Math.degToRad(10);\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 50, windowWidth / windowHeight, .01, 1000 );\n\t\t\t\tcamera.position.set( 0, 0, 1.8 );\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tconst sphereGeo = new THREE.SphereBufferGeometry( 2, 12, 12 );\n\t\t\t\tconst sphereMat = new THREE.MeshBasicMaterial({\n\t\t\t\t\tcolor: 0x494949,\n\t\t\t\t\twireframe: true\n\t\t\t\t});\n\t\t\t\tdisplacementSprite = new THREE.Mesh( sphereGeo, sphereMat );\n\t\t\t\tdisplacementSprite.position.y = -0.2;\n\t\t\t\tscene.add( displacementSprite );\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\n\n\t\t\t\tlerp( displacementSprite.rotation, 'x', sphereTarget.x );\n\t\t\t\tlerp( displacementSprite.rotation, 'y', sphereTarget.y );\n\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                } \n                \n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\t\t\t\t// NDC -1 to 1\n\t\t\t\tconst rect = renderer.domElement.getBoundingClientRect();\n\t\t\t\tmouseVector.x = ( event.clientX - rect.left ) / rect.width * 2 - 1;\n\t\t\t\tmouseVector.y = ( event.clientY - rect.top ) / rect.height * -2 + 1;\n\n\t\t\t\tsphereTarget.y = mouseVector.x * xrad;\n\t\t\t\tsphereTarget.x = - mouseVector.y * yrad;\n\t\t\t}\n\n\t\t\t//Calculate the interpolation of two vectors\n\t\t\tfunction lerp( object, prop, destination ) {\n\t\t\t\tif (object && object[prop] !== destination) {\n\t\t\t\t\tobject[prop] += (destination - object[prop]) * 0.1;\n\n\t\t\t\t\tif (Math.abs(destination - object[prop]) < 0.001) {\n\t\t\t\t\t\tobject[prop] = destination;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\t\t\n\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_BACKGROUND_THREE3.documentReady );\n\t\n\n\treturn class THREE_BACKGROUND_THREE3 {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t\n\n","/* \n *************************************\n * <!-- 3D Background -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const THREE_BACKGROUND = ( ( module, $, window, document ) => {\n\tif ( window.THREE_BACKGROUND === null ) return false;\n\t\n\t\n\t\n    module.THREE_BACKGROUND               = module.THREE_BACKGROUND || {};\n    module.THREE_BACKGROUND.version       = '0.0.3';\n    module.THREE_BACKGROUND.documentReady = function( $ ) {\n\n\n\t\t//grab each 3dAnimate element and pass it into the animate function along with the config data\n\t\t$( '[data-3d-animate]' ).each( function( index, element ) {\n\t\t\tlet config      = $( element ).data( '3d-animate' );\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof config === typeof undefined ) {\n\t\t\t\tconfig = false;\n\t\t\t}\n\n\t\t\tif ( config ) {\n\t\t\t\t\n\t\t\t\tif ( Object.prototype.toString.call( config.offset ) == '[object Array]' ) {\n\t\t\t\t\tanimate3dMultiElement( config.offset[0], config.offset[1], element, config.reset );\n\t\t\t\t} else {\n\t\t\t\t\tanimate3dElement( config.offset, element, config.reset );\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\n\t\t/*\n\t\t * Sets an animation for each element\n\t\t *\n\t\t * @param  {Number} base           - Base offset value.\n\t\t * @param  {String} obj            - An HTML element.\n\t\t * @param  {Boolean} reset         - Reset block on mouse leave\n\t\t * @return {Void}\n\t\t */\n\t\tfunction animate3dElement( base, obj, reset ) {\n\n\t\t\tconst $el      = $( obj ),\n\t\t\t\t  w        = $el.innerWidth(),\n\t\t\t\t  h        = $el.innerHeight();\n\t\t\t\n\n//\t\t\tTweenMax.set( $el, {\n//\t\t\t\tperspective    : 500,\n//\t\t\t\ttransformStyle : \"preserve-3d\"\n//\t\t\t});\n\n\n\t\t\t\n\t\t\t// mouse move on block\n\t\t\t$( obj ).on( 'mousemove touchmove', function( e ) {\n\t\t\t\t\n\t\t\t\tlet mX, \n\t\t\t\t\tmY,\n\t\t\t\t\trmX,\n\t\t\t\t\trmY;\n                \n\t\t\t\tconst touches = e.originalEvent.touches;\n\t\t\t\n\t\t\t\tif ( touches && touches.length ) {\n\n\t\t\t\t\tmX = touches[0].pageX;\n\t\t\t\t\tmY = touches[0].pageY;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmX = e.pageX;\n\t\t\t\t\tmY = e.pageY;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//Find mouse position relative to element\n\t\t\t\trmX = mX - $( this ).offset().left;\n\t\t\t\trmY = mY - $( this ).offset().top;\t\n\t\t\t\t\n\t\t\t\t//console.log('X: ' + rmX + ' Y: ' + rmY );\n\t\n\t\t\t\t\n\t\t\t\t// function to run matrix3D effect on block\n\t\t\t\tconst tX = mousePosition( rmX, w ),\n\t\t\t\t\t  tY = mousePosition( rmY, h );\n\n\n\t\t\t\tTweenMax.to( $( this ), 0.2, {\n\t\t\t\t\trotationY          : tX,\n\t\t\t\t\trotationX          : tY,\n\t\t\t\t\tbackgroundPosition : ( tX + 120 ) + \"% 50%\",\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t});\n\t\t\t\t\n\t\t\t\n\t\t\tif ( reset ) {\n\t\t\t\t$( obj ).on( 'mouseleave touchcancel', function() {\n\t\t\t\t\tTweenMax.to( $( this ), 0.5, {\n\t\t\t\t\t\trotationY          : 0,\n\t\t\t\t\t\trotationX          : 0,\n\t\t\t\t\t\tbackgroundPosition : \"120% 50%\"\n\t\t\t\t\t});\n\t\t\t\t});\t\n\t\t\t}\n\t\t\t\t\n\n\n\t\t\t// make some calculations for mouse position\n\t\t\tfunction mousePosition( mousePos, dimension ) {\n\t\t\t\treturn ( Math.floor( mousePos / dimension * (base*2) ) - base );\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\t\n\t\t\n\t\t\n\t\t/*\n\t\t * Sets an animation with parallax for each element\n\t\t *\n\t\t * @param  {Number} base           - Base offset value.\n\t\t * @param  {Number} multiple       - The power of target number.\n\t\t * @param  {String} obj            - An HTML element.\n\t\t * @param  {Boolean} reset         - Reset block on mouse leave\n\t\t * @return {Void}\n\t\t */\n\t\tfunction animate3dMultiElement( base, multiple, obj, reset ) {\n\n\t\t\t//get the specs of the element\n\t\t\tconst divOffset = $( obj ).offset(),\n\t\t\t  \t  divTop    = divOffset.top,\n\t\t\t\t  divLeft   = divOffset.left,\n\t\t\t\t  divWidth  = $( obj ).innerWidth(),\n\t\t\t\t  divHeight = $( obj ).innerHeight();\n\n\t\t\t\n\t\n\t\t\t//set an onmousemove event on the element\n\t\t\t$( obj ).on( 'mousemove touchmove', function( e ){\n\n\t\t\t\tlet pctX, \n\t\t\t\t\tpctY;\n                \n\t\t\t\tconst touches = e.originalEvent.touches;\n\t\t\t\n\t\t\t\tif ( touches && touches.length ) {\n\n\t\t\t\t\tpctX = ( touches[0].pageX - divLeft )/divWidth;\n\t\t\t\t\tpctY = ( touches[0].pageY - divTop )/divHeight;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpctX = ( e.pageX - divLeft )/divWidth;\n\t\t\t\t\tpctY = ( e.pageY - divTop )/divHeight;\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t$( this ).children().each( function( index, elementSub ) {\n\t\t\t\t\tconst x         = pctX * ( base*Math.pow( multiple, index ) ),\n\t\t\t\t\t\t  y         = pctY * ( base*Math.pow( multiple, index ) ),\n\t\t\t\t\t\t  z         = 0,\n\t\t\t\t\t\t  deg       = pctY * ( 180 / Math.PI ),\n\t\t\t\t\t\t  rotateDeg = parseFloat( deg - 35 );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tTweenMax.to( $( elementSub ), 0.2, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t'transform' : 'translate('+ x +'px ,'+ y +'px) rotate3d( -1, 1, 0, '+ rotateDeg +'deg )'\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t});\n\n\t\t\t});\n\t\t\t\n\t\t\tif ( reset ) {\n\t\t\t\t$( obj ).on( 'mouseleave touchcancel', function() {\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t$( this ).children().each( function( index, elementSub ) {\n\n\t\t\t\t\t\tTweenMax.to( $( elementSub ), 0.5, {\n\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\t'transform' : 'translate(0,0) rotate3d( -1, 1, 0, 0deg )'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\t\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\n\n\t\t}\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_BACKGROUND.documentReady );\n\t\n\n\treturn class THREE_BACKGROUND {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n","\n/* \n *************************************\n * <!-- 3D Carousel -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const THREE_CAROUSEL = ( ( module, $, window, document ) => {\n\tif ( window.THREE_CAROUSEL === null ) return false;\n\t\n\t\n\t\n    module.THREE_CAROUSEL               = module.THREE_CAROUSEL || {};\n    module.THREE_CAROUSEL.version       = '0.0.2';\n    module.THREE_CAROUSEL.documentReady = function( $ ) {\n\n\t\t$( '.uix-3d-carousel' ).each( function() {\n\t\t\tconst $this             = $( this );\n            \n            let $wrapper          = $this.find( '> ul' ),\n\t\t\t\t$items            = $wrapper.find( '> li' ),\n                itemCount         = $items.length;\n            \n\t\t\tlet\tdataTiming        = $this.data( 'timing' ),\n\t\t\t\tdataPrevBtn       = $this.data( 'prev-btn' ),\n\t\t\t\tdataNextBtn       = $this.data( 'next-btn' ),\n\t\t\t\tdataDraggable     = $this.data( 'draggable' ),\n\t\t\t    autoSwap          = null,\n\t\t\t\titems             = [],\n\t\t\t\tstartItem         = 1,\n\t\t\t\tposition          = 0,\n\t\t\t\tleftpos           = itemCount,\n\t\t\t\tresetCount        = itemCount;\n\n\t\t\tif ( typeof dataTiming === typeof undefined ) dataTiming = 5000;\n\t\t\tif ( typeof dataPrevBtn === typeof undefined ) dataPrevBtn = \".my-carousel-3d-prev\";\n\t\t\tif ( typeof dataNextBtn === typeof undefined ) dataNextBtn = \".my-carousel-3d-next\";\n\t\t\tif ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n\t\t\t\n\n\t\t\t//Avoid problems caused by insufficient quantity\n\t\t\t//-------------------------------------\t\t\n\t\t\tif ( itemCount == 3 ) {\n\t\t\t\tconst $clone3 = $items.eq(1).clone();\n\t\t\t\t$items.last().after( $clone3 );\n\t\t\t}\n\t\t\t\n\t\t\tif ( itemCount == 2 ) {\n\t\t\t\tconst $clone2_1 = $items.eq(0).clone(),\n\t\t\t\t\t  $clone2_2 = $items.eq(1).clone();\n\t\t\t\t$items.last().after( [$clone2_1, $clone2_2 ] );\n\t\t\t}\n\t\t\t\n\t\t\tif ( itemCount == 1 ) {\n\t\t\t\tconst $clone1_1 = $items.eq(0).clone(),\n\t\t\t\t\t  $clone1_2 = $items.eq(0).clone(),\n\t\t\t\t\t  $clone1_3 = $items.eq(0).clone();\n\t\t\t\t\t\n\t\t\t\t$items.last().after( [$clone1_1, $clone1_2, $clone1_3 ] );\n\t\t\t}\t\t\n\t\t\t\n\n\t\t\t//New objects of items and wrapper\n\t\t\t$wrapper  = $this.find( '> ul' );\n\t\t\t$items = $wrapper.find( '> li' );\n\t\t\titemCount = $items.length;\n\t\t\tleftpos  = itemCount;\n\t\t\tresetCount = itemCount;\n\n\t\t\t//Adding an index to an element makes it easy to query\n\t\t\t//-------------------------------------\t\n\t\t\t$items.each( function( index ) {\n\t\t\t\titems[index] = $( this ).text();\n\t\t\t\t$( this ).attr( 'id', index+1 );\n\n\t\t\t});\n\n\t\t\t//Pause slideshow and reinstantiate on mouseout\n\t\t\t//-------------------------------------\t\n\t\t\t$wrapper.on( 'mouseenter', function() {\n\t\t\t\tclearInterval( autoSwap );\n\t\t\t} ).on( 'mouseleave' , function() {\n\t\t\t\tautoSwap = setInterval( itemUpdates, dataTiming );\n\t\t\t} );\n\n\n\t\t\t\n\t\t\t//Initialize the default effect\n\t\t\t//-------------------------------------\t\n\t\t\titemUpdates( 'clockwise' );\n\t\t\t\n\t\t\t\n\t\t\t//The matched click events for the element.\n\t\t\t//-------------------------------------\t\n\t\t\t$( dataPrevBtn ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\titemUpdates( 'clockwise' );\n\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t});\n\t\t\t$( dataNextBtn ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\titemUpdates( 'counter-clockwise' );\n\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t$items.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif ( $( this ).attr( 'class' ) == 'uix-3d-carousel__item uix-3d-carousel__item--left-pos' ) {\n\t\t\t\t\titemUpdates( 'counter-clockwise' );\n\t\t\t\t} else {\n\t\t\t\t\titemUpdates( 'clockwise' );\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t//Drag and Drop\n\t\t\t//-------------------------------------\t\n\t\t\tconst $dragDropTrigger = $wrapper;\n            \n\t\t\tlet\thammerProps = {};\n\n\t\t\t\n\t\t\tif ( !dataDraggable ) {\n\t\t\t\thammerProps = {\n\t\t\t\t\tinputClass: Hammer.TouchInput\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//Mouse event\n\t\t\t//Hammer.js pan event only for touch devices and not for desktop computer Click+Drag\n\t\t\tlet direction;\n            const dragDropElement = $dragDropTrigger[0],\n\t\t\t\t  dragDropMC      = new Hammer( dragDropElement, hammerProps );\n\t\t\t\n            // let the pan gesture support all directions.\n            // this will block the vertical scrolling on a touch-device while on the element\n            dragDropMC.get('pan').set({ direction: Hammer.DIRECTION_ALL });\n            \n\t\t\tdragDropMC.on( 'press panright panleft', function( ev ) {\n\n\t\t\t\t//Set the direction in here\n\t\t\t\tdirection = ev.type;\n\t\t\t});\n\n\n\n\t\t\tdragDropMC.on( 'panend', function( ev ) {\n\n\t\t\t\t//Use the direction in here\n\t\t\t\t//You know the pan has ended\n\t\t\t\t//and you know which action they were taking\n\t\t\t\tif ( direction == 'panleft' ) {\n\t\t\t\t\titemUpdates( 'clockwise' );\n\t\t\t\t}\n\n\t\t\t\tif ( direction == 'panright' ) {\n\t\t\t\t\titemUpdates( 'counter-clockwise' );\n\t\t\t\t}\t\t\t\n\n\n\n\t\t\t});\t\n\n\t\t\t\n\n\t\t\t/*\n\t\t\t * Swap Between Images\n\t\t\t *\n\t\t\t * @param  {String} action           - Direction of movement, optional: clockwise, counter-clockwise\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction itemUpdates( action ) {\n\t\t\t\tconst direction = action;\n\n\t\t\t\t//moving carousel backwards\n\t\t\t\tif ( direction == 'counter-clockwise' ) {\n\t\t\t\t\tlet leftitem = parseFloat( $wrapper.find( '> li.uix-3d-carousel__item--left-pos' ).attr( 'id' ) - 1 );\n\t\t\t\t\tif ( leftitem == 0 ) {\n\t\t\t\t\t\tleftitem = itemCount;\n\t\t\t\t\t}\n\n\t\t\t\t\t$wrapper.find( '> li.uix-3d-carousel__item--right-pos' ).removeClass( 'uix-3d-carousel__item--right-pos' ).addClass( 'uix-3d-carousel__item--back-pos' );\n\t\t\t\t\t$wrapper.find( '> li.uix-3d-carousel__item--main-pos' ).removeClass( 'uix-3d-carousel__item--main-pos' ).addClass( 'uix-3d-carousel__item--right-pos' );\n\t\t\t\t\t$wrapper.find( '> li.uix-3d-carousel__item--left-pos' ).removeClass( 'uix-3d-carousel__item--left-pos' ).addClass( 'uix-3d-carousel__item--main-pos' );\n\t\t\t\t\t$wrapper.find( '> li#' + leftitem + '').removeClass( 'uix-3d-carousel__item--back-pos' ).addClass( 'uix-3d-carousel__item--left-pos' );\n\n\t\t\t\t\tstartItem--;\n\n\t\t\t\t\tif ( startItem < 1 ) {\n\t\t\t\t\t\tstartItem = itemCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//moving carousel forward\n\t\t\t\tif ( direction == 'clockwise' || direction == '' || direction == null ) {\n\t\t\t\t\tconst carousel3DPos = function( dir ) {\n\t\t\t\t\t\tif ( dir != 'leftposition' ) {\n\t\t\t\t\t\t\t//increment image list id\n\t\t\t\t\t\t\tposition++;\n\n\t\t\t\t\t\t\t//if final result is greater than image count, reset position.\n\t\t\t\t\t\t\tif ( startItem + position > resetCount ) {\n\t\t\t\t\t\t\t\tposition = 1 - startItem;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//setting the left positioned item\n\t\t\t\t\t\tif (dir == 'leftposition') {\n\t\t\t\t\t\t\t//left positioned image should always be one left than main positioned image.\n\t\t\t\t\t\t\tposition = startItem - 1;\n\n\t\t\t\t\t\t\t//reset last image in list to left position if first image is in main position\n\t\t\t\t\t\t\tif (position < 1) {\n\t\t\t\t\t\t\t\tposition = itemCount;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn position;\n\t\t\t\t\t};\n\n\t\t\t\t\t$wrapper.find( '> li#' + startItem + '').removeClass( 'uix-3d-carousel__item--main-pos' ).addClass( 'uix-3d-carousel__item--left-pos' );\n\t\t\t\t\t$wrapper.find( '> li#' + (startItem + carousel3DPos()) + '').removeClass( 'uix-3d-carousel__item--right-pos' ).addClass( 'uix-3d-carousel__item--main-pos' );\n\t\t\t\t\t$wrapper.find( '> li#' + (startItem + carousel3DPos()) + '').removeClass( 'uix-3d-carousel__item--back-pos' ).addClass( 'uix-3d-carousel__item--right-pos' );\n\t\t\t\t\t$wrapper.find( '> li#' + carousel3DPos( 'leftposition' ) + '').removeClass( 'uix-3d-carousel__item--left-pos' ).addClass( 'uix-3d-carousel__item--back-pos' );\n\n\t\t\t\t\tstartItem++;\n\t\t\t\t\tposition = 0;\n\t\t\t\t\tif ( startItem > itemCount ) {\n\t\t\t\t\t\tstartItem = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\n\t\t});\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_CAROUSEL.documentReady );\n\t\n\n\treturn class THREE_CAROUSEL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or arrow keys / touch: two-finger move\n\nTHREE.OrbitControls = function ( object, domElement ) {\n\n\tthis.object = object;\n\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new THREE.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.25;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = false; // if true, pan in screen-space\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().inverse();\n\n\t\tvar lastPosition = new THREE.Vector3();\n\t\tvar lastQuaternion = new THREE.Quaternion();\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t// restrict theta to be between desired limits\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\t\t\tscope.target.add( panOffset );\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new THREE.Spherical();\n\tvar sphericalDelta = new THREE.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new THREE.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new THREE.Vector2();\n\tvar rotateEnd = new THREE.Vector2();\n\tvar rotateDelta = new THREE.Vector2();\n\n\tvar panStart = new THREE.Vector2();\n\tvar panEnd = new THREE.Vector2();\n\tvar panDelta = new THREE.Vector2();\n\n\tvar dollyStart = new THREE.Vector2();\n\tvar dollyEnd = new THREE.Vector2();\n\tvar dollyDelta = new THREE.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\t//console.log( 'handleMouseDownRotate' );\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\t//console.log( 'handleMouseDownDolly' );\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\t//console.log( 'handleMouseDownPan' );\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\t//console.log( 'handleMouseMoveRotate' );\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t// rotating across whole screen goes 360 degrees around\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );\n\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\t//console.log( 'handleMouseMoveDolly' );\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\t//console.log( 'handleMouseMovePan' );\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( event ) {\n\n\t\t// console.log( 'handleMouseUp' );\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\t// console.log( 'handleMouseWheel' );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\t//console.log( 'handleKeyDown' );\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\t//console.log( 'handleTouchStartRotate' );\n\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchStartDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\t//console.log( 'handleTouchMoveRotate' );\n\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t// rotating across whole screen goes 360 degrees around\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );\n\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchMoveDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyIn( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchEnd( event ) {\n\n\t\t//console.log( 'handleTouchEnd' );\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase scope.mouseButtons.ORBIT:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.ZOOM:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\t// two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\nObject.defineProperties( THREE.OrbitControls.prototype, {\n\n\tcenter: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n\t\t\treturn this.target;\n\n\t\t}\n\n\t},\n\n\t// backward compatibility\n\n\tnoZoom: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\treturn ! this.enableZoom;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\tthis.enableZoom = ! value;\n\n\t\t}\n\n\t},\n\n\tnoRotate: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\treturn ! this.enableRotate;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\tthis.enableRotate = ! value;\n\n\t\t}\n\n\t},\n\n\tnoPan: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\treturn ! this.enablePan;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\tthis.enablePan = ! value;\n\n\t\t}\n\n\t},\n\n\tnoKeys: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\treturn ! this.enableKeys;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\tthis.enableKeys = ! value;\n\n\t\t}\n\n\t},\n\n\tstaticMoving: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\treturn ! this.enableDamping;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\tthis.enableDamping = ! value;\n\n\t\t}\n\n\t},\n\n\tdynamicDampingFactor: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\treturn this.dampingFactor;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\tthis.dampingFactor = value;\n\n\t\t}\n\n\t}\n\n} );\n\n\nexport default THREE.OrbitControls;","/* \n *************************************\n * <!-- 3D Gallery with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\nexport const THREE_GALLERY = ( ( module, $, window, document ) => {\n\tif ( window.THREE_GALLERY === null ) return false;\n\t\n\t\n\t\n    module.THREE_GALLERY               = module.THREE_GALLERY || {};\n    module.THREE_GALLERY.version       = '0.0.4';\n    module.THREE_GALLERY.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-gallery-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n            \n\t\t\tconst rendererCanvasID          = '3D-gallery-three-canvas';\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n\n\t\t\tlet offsetWidth  = 1400,\n\t\t\t\toffsetHeight = 933,\n\t\t\t\tallImages    = [],\n\t\t\t\timgTotal,\n\t\t\t\timagesLoaded = false;\n\n\n\t\t\t// we will keep track of the scroll\n\t\t\tlet scrollValue = 0;\n\t\t\tlet lastScrollValue = 0;\n\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 75, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set(0, 0, 1000);\n\n\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera );\n\t\t\t\tcontrols.autoRotate = false;\n\t\t\t\tcontrols.autoRotateSpeed = 0.5;\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = false;\n\t\t\t\tcontrols.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n\t\t\t\tcontrols.dampingFactor = 0.25;\n\t\t\t\tcontrols.screenSpacePanning = false;\n\t\t\t\tcontrols.minDistance = 100;\n\t\t\t\tcontrols.maxDistance = 500;\n\t\t\t\tcontrols.maxPolarAngle = Math.PI / 2;\n\n\t\t\t\tcontrols.target.set( 30, 167, 81 );\n\t\t\t\tcontrols.update();\t\t\t\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t// Create a texture loader so we can load our image file\n\t\t\t\tconst imgs = [\n\t\t\t\t\t'https://placekitten.com/2100/2100',\n\t\t\t\t\t'https://placekitten.com/2200/2200',\n\t\t\t\t\t'https://placekitten.com/2300/2300',\n\t\t\t\t\t'https://placekitten.com/2400/2400',\n\t\t\t\t\t'https://placekitten.com/2500/2500',\n\t\t\t\t\t'https://placekitten.com/2000/2000',\n\t\t\t\t\t'https://placekitten.com/1600/1600',\n\t\t\t\t\t'https://placekitten.com/1650/1650',\n\t\t\t\t\t'https://placekitten.com/1670/1670',\n\t\t\t\t\t'https://placekitten.com/1680/1680',\n\t\t\t\t\t'https://placekitten.com/1700/1700'\n\t\t\t\t];\n\n\n\t\t\t\t//A loader for loading all images from array.\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\t\t\t\tloader.crossOrigin = 'anonymous';\n\n\t\t\t\t//Preload\n\t\t\t\timgTotal = imgs.length;\n\n\t\t\t\tconst gap               = 100,\n\t\t\t\t\t  circumference         = (offsetWidth + gap) * imgTotal,  //get circumference from all images width\n\t\t\t\t\t  galleryRadius       = circumference / ( Math.PI * 2 ), // C = 2πr = Math.PI * 2 * radius\n\t\t\t\t\t  eachItemAngleToRad  = ( Math.PI * 2 ) / imgTotal; // 360° = 2π = Math.PI * 2\n\n\t\t\t\tif ( camera.position.length() > galleryRadius ) {\n\t\t\t\t\tcamera.position.set( 0, 0, 0 );\n\t\t\t\t}\t\n\n\n\t\t\t\t//Load images\n\t\t\t\timgs.forEach( function( element, index ) {\n\t\t\t\t\tloadImage( loader, element, index, offsetWidth, offsetHeight, imgTotal, eachItemAngleToRad, galleryRadius, $( '#3D-gallery-three-canvas__loader' ) );\n\t\t\t\t});\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\t\t\t\t// listen to scroll to update\n\t\t\t\tlet delta = scrollValue - lastScrollValue;\n\t\t\t\t// threshold\n\t\t\t\tif (delta > 60) {\n\t\t\t\t\tdelta = 60;\n\t\t\t\t} else if(delta < -60) {\n\t\t\t\t\tdelta = -60;\n\t\t\t\t}\n\n\t\t\t\tcamera.position.x = camera.position.x + delta;\n\n\n\n\t\t\t\t//check all images loaded\n\t\t\t\tif ( typeof allImages != typeof undefined ) {\n\t\t\t\t\tif ( !imagesLoaded && allImages.length === imgTotal ) {\n\t\t\t\t\t\tallImages.forEach( function (element ) {\n\t\t\t\t\t\t\tscene.add( element );\n\t\t\t\t\t\t});\n\t\t\t\t\t\timagesLoaded = true;\n\n\t\t\t\t\t}\t\t\n\t\t\t\t}\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n                \n                \n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\t// listen to scroll\n\t\t\twindow.addEventListener( 'scroll', function(e) {\n\t\t\t\tlastScrollValue = scrollValue;\n\t\t\t\tscrollValue = window.pageYOffset;\n\n\t\t\t\tconsole.log( 'lastScrollValue: ' + lastScrollValue + ', scrollValue: ' + scrollValue );\n\t\t\t});\n\n\n\n\t\t\t/*\n\t\t\t * Load Image\n\t\t\t *\n\t\t\t * @param  {Element} imgLoader       - A loader for loading all images from array.\n\t\t\t * @param  {String} src             - URL of image.\n\t\t\t * @param  {Number} index           - Index of image.\n\t\t\t * @param  {Number} w               - The width of an image, in pixels. \n\t\t\t * @param  {Number} h               - The height of an image, in pixels. \n\t\t\t * @param  {Number} total           - Total number of preload images.\n\t\t\t * @param  {Number} itemRadAngle    - An equal radian angle of a sphere for each element.\n\t\t\t * @param  {Number} radius          - Radius length of the sphere (circumference).\n\t\t\t * @param  {Element|String} loading         - Progress bar display control.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction loadImage( imgLoader, src, index, w, h, total, itemRadAngle, radius, loading ) {\n\n\t\t\t\t// load a resource\n\t\t\t\timgLoader.load(\n\t\t\t\t\t// resource URL\n\t\t\t\t\tsrc,\n\n\t\t\t\t\t// onLoad callback\n\t\t\t\t\tfunction ( texture ) {\n\t\t\t\t\t\t// in this example we create the material when the texture is loaded\n\t\t\t\t\t\tconst material = new THREE.MeshBasicMaterial( {\n\t\t\t\t\t\t\tmap: texture\n\t\t\t\t\t\t } );\n\n\t\t\t\t\t\tconst geometry = new THREE.PlaneGeometry( w, h );\n\t\t\t\t\t\tconst mesh = new THREE.Mesh( geometry, material );\n\n\t\t\t\t\t\t//LinearFilter, which takes the four closest texels and bilinearly interpolates among them. \n\t\t\t\t\t\tmesh.minFilter = THREE.LinearFilter;\n\t\t\t\t\t\tmesh.overdraw = true;\n\n\t\t\t\t\t\t//Calculate the position of the image \n\t\t\t\t\t\t//X axis: a = sinA * c = Math.sin( rad ) * radius\n\t\t\t\t\t\t//Z axis: b = cosA * c = Math.cos( rad ) * radius\n\t\t\t\t\t\tmesh.rotation.y = -index * itemRadAngle;\n\t\t\t\t\t\tmesh.position.set( radius * Math.sin(index * itemRadAngle), 0, -radius * Math.cos(index * itemRadAngle) );\n\n\t\t\t\t\t\tallImages.push( mesh );\n\n\t\t\t\t\t\t//loading\n\t\t\t\t\t\tTweenMax.to( loading, 0.5, {\n\t\t\t\t\t\t\twidth    : Math.round(100 * allImages.length / total ) + '%',\n\t\t\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\t\t\tif ( $( this.target ).width() >= windowWidth - 50 ) {\n\n\t\t\t\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\t\t\t\talpha: 0\n\t\t\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t},\n\n\t\t\t\t\t// onProgress callback currently not supported\n\t\t\t\t\tundefined,\n\n\t\t\t\t\t// onError callback\n\t\t\t\t\tfunction ( err ) {\n\t\t\t\t\t\tconsole.error( 'An error happened.' );\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t}\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_GALLERY.documentReady );\n\t\n\n\treturn class THREE_GALLERY {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\t\n","/* \n *************************************\n * <!-- 3D Image Transition with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\nimport fragment from \"./shader/fragment-custom.glsl\";\nimport vertex from \"./shader/vertex-custom.glsl\";\n\nexport const THREE_IMAGE_TRANSITION = ( ( module, $, window, document ) => {\n\tif ( window.THREE_IMAGE_TRANSITION === null ) return false;\n\t\n\t\n    module.THREE_IMAGE_TRANSITION               = module.THREE_IMAGE_TRANSITION || {};\n    module.THREE_IMAGE_TRANSITION.version       = '0.0.3';\n    module.THREE_IMAGE_TRANSITION.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-imagetransition-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID          = '3D-imagetransition-three-canvas';\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n\n\t\t\tlet filterMaterial,\n\t\t\t\toffsetWidth  = $( '#' + rendererCanvasID ).parent().width(),\n\t\t\t\toffsetHeight = $( '#' + rendererCanvasID ).parent().width() * (550/1400);\n\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 75, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set(0, 0, 1000);\n\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera );\n\t\t\t\tcontrols.autoRotate = false;\n\t\t\t\tcontrols.autoRotateSpeed = 0.5;\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = false;\n\t\t\t\tcontrols.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n\t\t\t\tcontrols.dampingFactor = 0.25;\n\t\t\t\tcontrols.screenSpacePanning = false;\n\t\t\t\tcontrols.minDistance = 100;\n\t\t\t\tcontrols.maxDistance = 500;\n\t\t\t\tcontrols.maxPolarAngle = Math.PI / 2;\n\n\t\t\t\tcontrols.target.set( 30, 167, 81 );\n\t\t\t\tcontrols.update();\t\t\t\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( offsetWidth , offsetHeight );\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t// Create a texture loader so we can load our image file\n\t\t\t\tconst imgs = [\n\t\t\t\t\t'https://placekitten.com/1400/550',\n\t\t\t\t\t'https://placekitten.com/1410/550'\n\t\t\t\t];\n\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\t\t\t\tloader.crossOrigin = 'anonymous';\n\n\n\t\t\t\tconst texture1     = loader.load( imgs[0] ),\n\t\t\t\t\t  texture2     = loader.load( imgs[1] ),\n\t\t\t\t\t  intensity    = 1,\n\t\t\t\t\t  dispImage    = $( '#' + rendererCanvasID ).data( 'filter-texture' ), //Load displacement image\n\t\t\t\t\t  disp         = loader.load( dispImage );\n\n\t\t\t\tdisp.wrapS = disp.wrapT = THREE.RepeatWrapping;\n\n\t\t\t\ttexture1.magFilter = texture2.magFilter = THREE.LinearFilter;\n\t\t\t\ttexture1.minFilter = texture2.minFilter = THREE.LinearFilter;\n\n\t\t\t\ttexture1.anisotropy = renderer.capabilities.getMaxAnisotropy();\n\t\t\t\ttexture2.anisotropy = renderer.capabilities.getMaxAnisotropy();\n\n\n\t\t\t\tconst geometry = new THREE.PlaneBufferGeometry(\n\t\t\t\t\toffsetWidth,\n\t\t\t\t\toffsetHeight,\n\t\t\t\t\t1\n\t\t\t\t);\n\n\n\n\t\t\t\tfilterMaterial = new THREE.ShaderMaterial({\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\teffectFactor: { type: \"f\", value: intensity },\n\t\t\t\t\t\tdispFactor: { type: \"f\", value: 0.0 },\n\t\t\t\t\t\ttexture: { type: \"t\", value: texture1 },\n\t\t\t\t\t\ttexture2: { type: \"t\", value: texture2 },\n\t\t\t\t\t\tdisp: { type: \"t\", value: disp }\n\t\t\t\t\t},\n\n\t\t\t\t\tvertexShader: vertex,\n\t\t\t\t\tfragmentShader: fragment,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\topacity: 1.0\n\t\t\t\t});\n\n\n\t\t\t\tdisplacementSprite = new THREE.Mesh( geometry, filterMaterial );\n\t\t\t\tdisplacementSprite.position.set( 0, 0, 0 );\n\t\t\t\tscene.add( displacementSprite );\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t\t// When the mouse moves, call the given function\n\t\t\t\tdocument.getElementById( rendererCanvasID ).addEventListener( 'mouseenter', onDocumentMouseEnter, false );\n\t\t\t\tdocument.getElementById( rendererCanvasID ).addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\t//renderer.setClearColor( 0x000000 );\t\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n                \n                \n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseEnter( event ) {\n\t\t\t\tTweenMax.to( filterMaterial.uniforms.dispFactor, 1.5, {\n\t\t\t\t\tvalue: 1,\n\t\t\t\t\tease: Expo.easeOut\n\t\t\t\t});\t\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseLeave( event ) {\n\t\t\t\tTweenMax.to( filterMaterial.uniforms.dispFactor, 1, {\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tease: Expo.easeOut\n\t\t\t\t});\t\n\t\t\t}\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_IMAGE_TRANSITION.documentReady );\n\t\n\n\treturn class THREE_IMAGE_TRANSITION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n","export default \"#define GLSLIFY 1\\nvarying vec2 vUv;\\nvoid main() {\\n  vUv = uv;\\n  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";","export default \"#define GLSLIFY 1\\nvarying vec2 vUv;\\n\\nuniform sampler2D texture;\\nuniform sampler2D texture2;\\nuniform sampler2D disp;\\n\\n// uniform float time;\\n// uniform float _rot;\\nuniform float dispFactor;\\nuniform float effectFactor;\\n\\n// vec2 rotate(vec2 v, float a) {\\n//  float s = sin(a);\\n//  float c = cos(a);\\n//  mat2 m = mat2(c, -s, s, c);\\n//  return m * v;\\n// }\\n\\nvoid main() {\\n\\n    vec2 uv = vUv;\\n\\n    // uv -= 0.5;\\n    // vec2 rotUV = rotate(uv, _rot);\\n    // uv += 0.5;\\n\\n    vec4 disp = texture2D(disp, uv);\\n\\n    vec2 distortedPosition = vec2(uv.x + dispFactor * (disp.r*effectFactor), uv.y);\\n    vec2 distortedPosition2 = vec2(uv.x - (1.0 - dispFactor) * (disp.r*effectFactor), uv.y);\\n\\n    vec4 _texture = texture2D(texture, distortedPosition);\\n    vec4 _texture2 = texture2D(texture2, distortedPosition2);\\n\\n    vec4 finalTexture = mix(_texture, _texture2, dispFactor);\\n\\n    gl_FragColor = finalTexture;\\n    // gl_FragColor = disp;\\n}\";","/**\n * @author Rich Tibbett / https://github.com/richtr\n * @author mrdoob / http://mrdoob.com/\n * @author Tony Parisi / http://www.tonyparisi.com/\n * @author Takahiro / https://github.com/takahirox\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nTHREE.GLTFLoader = ( function () {\n\n\tfunction GLTFLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\t\tthis.dracoLoader = null;\n\n\t}\n\n\tGLTFLoader.prototype = {\n\n\t\tconstructor: GLTFLoader,\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar path = this.path !== undefined ? this.path : THREE.LoaderUtils.extractUrlBase( url );\n\n\t\t\tvar loader = new THREE.FileLoader( scope.manager );\n\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( data, path, onLoad, onError );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow e;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\tvar content;\n\t\t\tvar extensions = {};\n\n\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\tcontent = data;\n\n\t\t\t} else {\n\n\t\t\t\tvar magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontent = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar json = JSON.parse( content );\n\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\n\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_LIGHTS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFLightsExtension( json );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension( json );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\n\t\t\t\t\t\t\textensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar parser = new GLTFParser( json, extensions, {\n\n\t\t\t\tpath: path || this.path || '',\n\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\tmanager: this.manager\n\n\t\t\t} );\n\n\t\t\tparser.parse( function ( scene, scenes, cameras, animations, json ) {\n\n\t\t\t\tvar glTF = {\n\t\t\t\t\tscene: scene,\n\t\t\t\t\tscenes: scenes,\n\t\t\t\t\tcameras: cameras,\n\t\t\t\t\tanimations: animations,\n\t\t\t\t\tasset: json.asset,\n\t\t\t\t\tparser: parser,\n\t\t\t\t\tuserData: {}\n\t\t\t\t};\n\n\t\t\t\taddUnknownExtensionsToUserData( extensions, glTF, json );\n\n\t\t\t\tonLoad( glTF );\n\n\t\t\t}, onError );\n\n\t\t}\n\n\t};\n\n\t/* GLTFREGISTRY */\n\n\tfunction GLTFRegistry() {\n\n\t\tvar objects = {};\n\n\t\treturn\t{\n\n\t\t\tget: function ( key ) {\n\n\t\t\t\treturn objects[ key ];\n\n\t\t\t},\n\n\t\t\tadd: function ( key, object ) {\n\n\t\t\t\tobjects[ key ] = object;\n\n\t\t\t},\n\n\t\t\tremove: function ( key ) {\n\n\t\t\t\tdelete objects[ key ];\n\n\t\t\t},\n\n\t\t\tremoveAll: function () {\n\n\t\t\t\tobjects = {};\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** EXTENSIONS ***********/\n\t/*********************************/\n\n\tvar EXTENSIONS = {\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\t\tKHR_LIGHTS: 'KHR_lights',\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\n\t};\n\n\t/**\n\t * DDS Texture Extension\n\t *\n\t * Specification: \n\t * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\n\t * \n\t */\n\tfunction GLTFTextureDDSExtension() {\n\n\t\tif ( ! THREE.DDSLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\n\t\tthis.ddsLoader = new THREE.DDSLoader();\n\n\t}\n\n\t/**\n\t * Lights Extension\n\t *\n\t * Specification: PENDING\n\t */\n\tfunction GLTFLightsExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS;\n\n\t\tthis.lights = {};\n\n\t\tvar extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};\n\t\tvar lights = extension.lights || {};\n\n\t\tfor ( var lightId in lights ) {\n\n\t\t\tvar light = lights[ lightId ];\n\t\t\tvar lightNode;\n\n\t\t\tvar color = new THREE.Color().fromArray( light.color );\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlightNode = new THREE.DirectionalLight( color );\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlightNode = new THREE.PointLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlightNode = new THREE.SpotLight( color );\n\t\t\t\t\t// Handle spotlight properties.\n\t\t\t\t\tlight.spot = light.spot || {};\n\t\t\t\t\tlight.spot.innerConeAngle = light.spot.innerConeAngle !== undefined ? light.spot.innerConeAngle : 0;\n\t\t\t\t\tlight.spot.outerConeAngle = light.spot.outerConeAngle !== undefined ? light.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\t\tlightNode.angle = light.spot.outerConeAngle;\n\t\t\t\t\tlightNode.penumbra = 1.0 - light.spot.innerConeAngle / light.spot.outerConeAngle;\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlightNode = new THREE.AmbientLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightNode ) {\n\n\t\t\t\tlightNode.decay = 2;\n\n\t\t\t\tif ( light.intensity !== undefined ) {\n\n\t\t\t\t\tlightNode.intensity = light.intensity;\n\n\t\t\t\t}\n\n\t\t\t\tlightNode.name = light.name || ( 'light_' + lightId );\n\t\t\t\tthis.lights[ lightId ] = lightNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Unlit Materials Extension (pending)\n\t *\n\t * PR: https://github.com/KhronosGroup/glTF/pull/1163\n\t */\n\tfunction GLTFMaterialsUnlitExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function ( material ) {\n\n\t\treturn THREE.MeshBasicMaterial;\n\n\t};\n\n\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, material, parser ) {\n\n\t\tvar pending = [];\n\n\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tvar metallicRoughness = material.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/* BINARY EXTENSION */\n\n\tvar BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF';\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\tfunction GLTFBinaryExtension( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' );\n\n\t\t}\n\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tvar chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = THREE.LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * DRACO Mesh Compression Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/pull/874\n\t */\n\tfunction GLTFDracoMeshCompressionExtension ( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\n\t}\n\n\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\n\n\t\tvar json = this.json;\n\t\tvar dracoLoader = this.dracoLoader;\n\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tvar threeAttributeMap = {};\n\t\tvar attributeNormalizedMap = {};\n\t\tvar attributeTypeMap = {};\n\n\t\tfor ( var attributeName in gltfAttributeMap ) {\n\n\t\t\tif ( !( attributeName in ATTRIBUTES ) ) continue;\n\n\t\t\tthreeAttributeMap[ ATTRIBUTES[ attributeName ] ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( attributeName in primitive.attributes ) {\n\n\t\t\tif ( ATTRIBUTES[ attributeName ] !== undefined && gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ ATTRIBUTES[ attributeName ] ]  = componentType;\n\t\t\t\tattributeNormalizedMap[ ATTRIBUTES[ attributeName ] ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\treturn {\n\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\tspecularGlossinessParams: [\n\t\t\t\t'color',\n\t\t\t\t'map',\n\t\t\t\t'lightMap',\n\t\t\t\t'lightMapIntensity',\n\t\t\t\t'aoMap',\n\t\t\t\t'aoMapIntensity',\n\t\t\t\t'emissive',\n\t\t\t\t'emissiveIntensity',\n\t\t\t\t'emissiveMap',\n\t\t\t\t'bumpMap',\n\t\t\t\t'bumpScale',\n\t\t\t\t'normalMap',\n\t\t\t\t'displacementMap',\n\t\t\t\t'displacementScale',\n\t\t\t\t'displacementBias',\n\t\t\t\t'specularMap',\n\t\t\t\t'specular',\n\t\t\t\t'glossinessMap',\n\t\t\t\t'glossiness',\n\t\t\t\t'alphaMap',\n\t\t\t\t'envMap',\n\t\t\t\t'envMapIntensity',\n\t\t\t\t'refractionRatio',\n\t\t\t],\n\n\t\t\tgetMaterialType: function () {\n\n\t\t\t\treturn THREE.ShaderMaterial;\n\n\t\t\t},\n\n\t\t\textendParams: function ( params, material, parser ) {\n\n\t\t\t\tvar pbrSpecularGlossiness = material.extensions[ this.name ];\n\n\t\t\t\tvar shader = THREE.ShaderLib[ 'standard' ];\n\n\t\t\t\tvar uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\t\t\t\tvar specularMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar specularMapFragmentChunk = [\n\t\t\t\t\t'vec3 specularFactor = specular;',\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapFragmentChunk = [\n\t\t\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t\t\t'PhysicalMaterial material;',\n\t\t\t\t\t'material.diffuseColor = diffuseColor.rgb;',\n\t\t\t\t\t'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',\n\t\t\t\t\t'material.specularColor = specularFactor.rgb;',\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar fragmentShader = shader.fragmentShader\n\t\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\n\n\t\t\t\tdelete uniforms.roughness;\n\t\t\t\tdelete uniforms.metalness;\n\t\t\t\tdelete uniforms.roughnessMap;\n\t\t\t\tdelete uniforms.metalnessMap;\n\n\t\t\t\tuniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) };\n\t\t\t\tuniforms.glossiness = { value: 0.5 };\n\t\t\t\tuniforms.specularMap = { value: null };\n\t\t\t\tuniforms.glossinessMap = { value: null };\n\n\t\t\t\tparams.vertexShader = shader.vertexShader;\n\t\t\t\tparams.fragmentShader = fragmentShader;\n\t\t\t\tparams.uniforms = uniforms;\n\t\t\t\tparams.defines = { 'STANDARD': '' };\n\n\t\t\t\tparams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\t\tparams.opacity = 1.0;\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\tparams.color.fromArray( array );\n\t\t\t\t\tparams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) );\n\n\t\t\t\t}\n\n\t\t\t\tparams.emissive = new THREE.Color( 0.0, 0.0, 0.0 );\n\t\t\t\tparams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\tparams.specular = new THREE.Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\tparams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\tvar specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index;\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) );\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t},\n\n\t\t\tcreateMaterial: function ( params ) {\n\n\t\t\t\t// setup material properties based on MeshStandardMaterial for Specular-Glossiness\n\n\t\t\t\tvar material = new THREE.ShaderMaterial( {\n\t\t\t\t\tdefines: params.defines,\n\t\t\t\t\tvertexShader: params.vertexShader,\n\t\t\t\t\tfragmentShader: params.fragmentShader,\n\t\t\t\t\tuniforms: params.uniforms,\n\t\t\t\t\tfog: true,\n\t\t\t\t\tlights: true,\n\t\t\t\t\topacity: params.opacity,\n\t\t\t\t\ttransparent: params.transparent\n\t\t\t\t} );\n\n\t\t\t\tmaterial.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tmaterial.color = params.color;\n\n\t\t\t\tmaterial.map = params.map === undefined ? null : params.map;\n\n\t\t\t\tmaterial.lightMap = null;\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\tmaterial.aoMap = params.aoMap === undefined ? null : params.aoMap;\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\tmaterial.emissive = params.emissive;\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\tmaterial.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;\n\n\t\t\t\tmaterial.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;\n\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\tmaterial.normalMap = params.normalMap === undefined ? null : params.normalMap;\n\t\t\t\tif ( params.normalScale ) material.normalScale = params.normalScale;\n\n\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\tmaterial.specularMap = params.specularMap === undefined ? null : params.specularMap;\n\t\t\t\tmaterial.specular = params.specular;\n\n\t\t\t\tmaterial.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;\n\t\t\t\tmaterial.glossiness = params.glossiness;\n\n\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\tmaterial.envMap = params.envMap === undefined ? null : params.envMap;\n\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\tmaterial.extensions.derivatives = true;\n\n\t\t\t\treturn material;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can\n\t\t\t * copy only properties it knows about or inherits, and misses many properties that would\n\t\t\t * normally be defined by MeshStandardMaterial.\n\t\t\t *\n\t\t\t * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of\n\t\t\t * loading a glTF model, but cloning later (e.g. by the user) would require these changes\n\t\t\t * AND also updating `.onBeforeRender` on the parent mesh.\n\t\t\t *\n\t\t\t * @param  {THREE.ShaderMaterial} source\n\t\t\t * @return {THREE.ShaderMaterial}\n\t\t\t */\n\t\t\tcloneMaterial: function ( source ) {\n\n\t\t\t\tvar target = source.clone();\n\n\t\t\t\ttarget.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tvar params = this.specularGlossinessParams;\n\n\t\t\t\tfor ( var i = 0, il = params.length; i < il; i ++ ) {\n\n\t\t\t\t\ttarget[ params[ i ] ] = source[ params[ i ] ];\n\n\t\t\t\t}\n\n\t\t\t\treturn target;\n\n\t\t\t},\n\n\t\t\t// Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.\n\t\t\trefreshUniforms: function ( renderer, scene, camera, geometry, material, group ) {\n\n\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial !== true ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar uniforms = material.uniforms;\n\t\t\t\tvar defines = material.defines;\n\n\t\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t\t// uv repeat and offset setting priorities\n\t\t\t\t// 1. color map\n\t\t\t\t// 2. specular map\n\t\t\t\t// 3. normal map\n\t\t\t\t// 4. bump map\n\t\t\t\t// 5. alpha map\n\t\t\t\t// 6. emissive map\n\n\t\t\t\tvar uvScaleMap;\n\n\t\t\t\tif ( material.map ) {\n\n\t\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t\t} else if ( material.glossinessMap ) {\n\n\t\t\t\t\tuvScaleMap = material.glossinessMap;\n\n\t\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t\t// backwards compatibility\n\t\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar offset;\n\t\t\t\t\tvar repeat;\n\n\t\t\t\t\tif ( uvScaleMap.matrix !== undefined ) {\n\n\t\t\t\t\t\t// > r88.\n\n\t\t\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\t\t\toffset = uvScaleMap.offset;\n\t\t\t\t\t\t\trepeat = uvScaleMap.repeat;\n\t\t\t\t\t\t\tvar rotation = uvScaleMap.rotation;\n\t\t\t\t\t\t\tvar center = uvScaleMap.center;\n\n\t\t\t\t\t\t\tuvScaleMap.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// <= r87. Remove when reasonable.\n\n\t\t\t\t\t\toffset = uvScaleMap.offset;\n\t\t\t\t\t\trepeat = uvScaleMap.repeat;\n\n\t\t\t\t\t\tuniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.envMap.value = material.envMap;\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\t\t\t\tuniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? - 1 : 1;\n\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tuniforms.specular.value.copy( material.specular );\n\t\t\t\tuniforms.glossiness.value = material.glossiness;\n\n\t\t\t\tuniforms.glossinessMap.value = material.glossinessMap;\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t\tif ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {\n\n\t\t\t\t\tdefines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t// set USE_ROUGHNESSMAP to enable vUv\n\t\t\t\t\tdefines.USE_ROUGHNESSMAP = '';\n\n\t\t\t\t}\n\n\t\t\t\tif ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {\n\n\t\t\t\t\tdelete defines.USE_GLOSSINESSMAP;\n\t\t\t\t\tdelete defines.USE_ROUGHNESSMAP;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** INTERPOLATION ********/\n\t/*********************************/\n\n\t// Spline Interpolation\n\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tTHREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t};\n\n\tGLTFCubicSplineInterpolant.prototype = Object.create( THREE.Interpolant.prototype );\n\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\n\n\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer;\n\t\tvar values = this.sampleValues;\n\t\tvar stride = this.valueSize;\n\n\t\tvar stride2 = stride * 2;\n\t\tvar stride3 = stride * 3;\n\n\t\tvar td = t1 - t0;\n\n\t\tvar p = ( t - t0 ) / td;\n\t\tvar pp = p * p;\n\t\tvar ppp = pp * p;\n\n\t\tvar offset1 = i1 * stride3;\n\t\tvar offset0 = offset1 - stride3;\n\n\t\tvar s0 = 2 * ppp - 3 * pp + 1;\n\t\tvar s1 = ppp - 2 * pp + p;\n\t\tvar s2 = - 2 * ppp + 3 * pp;\n\t\tvar s3 = ppp - pp;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( var i = 0; i !== stride; i ++ ) {\n\n\t\t\tvar p0 = values[ offset0 + i + stride ];        // splineVertex_k\n\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td;  // outTangent_k * (t_k+1 - t_k)\n\t\t\tvar p1 = values[ offset1 + i + stride ];        // splineVertex_k+1\n\t\t\tvar m1 = values[ offset1 + i ] * td;            // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\t/*********************************/\n\t/********** INTERNALS ************/\n\t/*********************************/\n\n\t/* CONSTANTS */\n\n\tvar WEBGL_CONSTANTS = {\n\t\tFLOAT: 5126,\n\t\t//FLOAT_MAT2: 35674,\n\t\tFLOAT_MAT3: 35675,\n\t\tFLOAT_MAT4: 35676,\n\t\tFLOAT_VEC2: 35664,\n\t\tFLOAT_VEC3: 35665,\n\t\tFLOAT_VEC4: 35666,\n\t\tLINEAR: 9729,\n\t\tREPEAT: 10497,\n\t\tSAMPLER_2D: 35678,\n\t\tPOINTS: 0,\n\t\tLINES: 1,\n\t\tLINE_LOOP: 2,\n\t\tLINE_STRIP: 3,\n\t\tTRIANGLES: 4,\n\t\tTRIANGLE_STRIP: 5,\n\t\tTRIANGLE_FAN: 6,\n\t\tUNSIGNED_BYTE: 5121,\n\t\tUNSIGNED_SHORT: 5123\n\t};\n\n\tvar WEBGL_TYPE = {\n\t\t5126: Number,\n\t\t//35674: THREE.Matrix2,\n\t\t35675: THREE.Matrix3,\n\t\t35676: THREE.Matrix4,\n\t\t35664: THREE.Vector2,\n\t\t35665: THREE.Vector3,\n\t\t35666: THREE.Vector4,\n\t\t35678: THREE.Texture\n\t};\n\n\tvar WEBGL_COMPONENT_TYPES = {\n\t\t5120: Int8Array,\n\t\t5121: Uint8Array,\n\t\t5122: Int16Array,\n\t\t5123: Uint16Array,\n\t\t5125: Uint32Array,\n\t\t5126: Float32Array\n\t};\n\n\tvar WEBGL_FILTERS = {\n\t\t9728: THREE.NearestFilter,\n\t\t9729: THREE.LinearFilter,\n\t\t9984: THREE.NearestMipMapNearestFilter,\n\t\t9985: THREE.LinearMipMapNearestFilter,\n\t\t9986: THREE.NearestMipMapLinearFilter,\n\t\t9987: THREE.LinearMipMapLinearFilter\n\t};\n\n\tvar WEBGL_WRAPPINGS = {\n\t\t33071: THREE.ClampToEdgeWrapping,\n\t\t33648: THREE.MirroredRepeatWrapping,\n\t\t10497: THREE.RepeatWrapping\n\t};\n\n\tvar WEBGL_TEXTURE_FORMATS = {\n\t\t6406: THREE.AlphaFormat,\n\t\t6407: THREE.RGBFormat,\n\t\t6408: THREE.RGBAFormat,\n\t\t6409: THREE.LuminanceFormat,\n\t\t6410: THREE.LuminanceAlphaFormat\n\t};\n\n\tvar WEBGL_TEXTURE_DATATYPES = {\n\t\t5121: THREE.UnsignedByteType,\n\t\t32819: THREE.UnsignedShort4444Type,\n\t\t32820: THREE.UnsignedShort5551Type,\n\t\t33635: THREE.UnsignedShort565Type\n\t};\n\n\tvar WEBGL_SIDES = {\n\t\t1028: THREE.BackSide, // Culling front\n\t\t1029: THREE.FrontSide // Culling back\n\t\t//1032: THREE.NoSide   // Culling front and back, what to do?\n\t};\n\n\tvar WEBGL_DEPTH_FUNCS = {\n\t\t512: THREE.NeverDepth,\n\t\t513: THREE.LessDepth,\n\t\t514: THREE.EqualDepth,\n\t\t515: THREE.LessEqualDepth,\n\t\t516: THREE.GreaterEqualDepth,\n\t\t517: THREE.NotEqualDepth,\n\t\t518: THREE.GreaterEqualDepth,\n\t\t519: THREE.AlwaysDepth\n\t};\n\n\tvar WEBGL_BLEND_EQUATIONS = {\n\t\t32774: THREE.AddEquation,\n\t\t32778: THREE.SubtractEquation,\n\t\t32779: THREE.ReverseSubtractEquation\n\t};\n\n\tvar WEBGL_BLEND_FUNCS = {\n\t\t0: THREE.ZeroFactor,\n\t\t1: THREE.OneFactor,\n\t\t768: THREE.SrcColorFactor,\n\t\t769: THREE.OneMinusSrcColorFactor,\n\t\t770: THREE.SrcAlphaFactor,\n\t\t771: THREE.OneMinusSrcAlphaFactor,\n\t\t772: THREE.DstAlphaFactor,\n\t\t773: THREE.OneMinusDstAlphaFactor,\n\t\t774: THREE.DstColorFactor,\n\t\t775: THREE.OneMinusDstColorFactor,\n\t\t776: THREE.SrcAlphaSaturateFactor\n\t\t// The followings are not supported by Three.js yet\n\t\t//32769: CONSTANT_COLOR,\n\t\t//32770: ONE_MINUS_CONSTANT_COLOR,\n\t\t//32771: CONSTANT_ALPHA,\n\t\t//32772: ONE_MINUS_CONSTANT_COLOR\n\t};\n\n\tvar WEBGL_TYPE_SIZES = {\n\t\t'SCALAR': 1,\n\t\t'VEC2': 2,\n\t\t'VEC3': 3,\n\t\t'VEC4': 4,\n\t\t'MAT2': 4,\n\t\t'MAT3': 9,\n\t\t'MAT4': 16\n\t};\n\n\tvar ATTRIBUTES = {\n\t\tPOSITION: 'position',\n\t\tNORMAL: 'normal',\n\t\tTEXCOORD_0: 'uv',\n\t\tTEXCOORD0: 'uv', // deprecated\n\t\tTEXCOORD: 'uv', // deprecated\n\t\tTEXCOORD_1: 'uv2',\n\t\tCOLOR_0: 'color',\n\t\tCOLOR0: 'color', // deprecated\n\t\tCOLOR: 'color', // deprecated\n\t\tWEIGHTS_0: 'skinWeight',\n\t\tWEIGHT: 'skinWeight', // deprecated\n\t\tJOINTS_0: 'skinIndex',\n\t\tJOINT: 'skinIndex' // deprecated\n\t}\n\n\tvar PATH_PROPERTIES = {\n\t\tscale: 'scale',\n\t\ttranslation: 'position',\n\t\trotation: 'quaternion',\n\t\tweights: 'morphTargetInfluences'\n\t};\n\n\tvar INTERPOLATION = {\n\t\tCUBICSPLINE: THREE.InterpolateSmooth, // We use custom interpolation GLTFCubicSplineInterpolation for CUBICSPLINE.\n\t\t                                      // KeyframeTrack.optimize() can't handle glTF Cubic Spline output values layout,\n\t\t                                      // using THREE.InterpolateSmooth for KeyframeTrack instantiation to prevent optimization.\n\t\t                                      // See KeyframeTrack.optimize() for the detail.\n\t\tLINEAR: THREE.InterpolateLinear,\n\t\tSTEP: THREE.InterpolateDiscrete\n\t};\n\n\tvar STATES_ENABLES = {\n\t\t2884: 'CULL_FACE',\n\t\t2929: 'DEPTH_TEST',\n\t\t3042: 'BLEND',\n\t\t3089: 'SCISSOR_TEST',\n\t\t32823: 'POLYGON_OFFSET_FILL',\n\t\t32926: 'SAMPLE_ALPHA_TO_COVERAGE'\n\t};\n\n\tvar ALPHA_MODES = {\n\t\tOPAQUE: 'OPAQUE',\n\t\tMASK: 'MASK',\n\t\tBLEND: 'BLEND'\n\t};\n\n\t/* UTILITY FUNCTIONS */\n\n\tfunction resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\n\tfunction createDefaultMaterial() {\n\n\t\treturn new THREE.MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: THREE.FrontSide\n\t\t} );\n\n\t}\n\n\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t\t// Add unknown glTF extensions to an object's userData.\n\n\t\tfor ( var name in objectDef.extensions ) {\n\n\t\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * @param {THREE.Geometry} geometry\n\t * @param {Array<GLTF.Target>} targets\n\t * @param {Array<THREE.BufferAttribute>} accessors\n\t */\n\tfunction addMorphTargets( geometry, targets, accessors ) {\n\n\t\tvar hasMorphPosition = false;\n\t\tvar hasMorphNormal = false;\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t\t}\n\n\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return;\n\n\t\tvar morphPositions = [];\n\t\tvar morphNormals = [];\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\t\t\tvar attributeName = 'morphTarget' + i;\n\n\t\t\tif ( hasMorphPosition ) {\n\n\t\t\t\t// Three.js morph position is absolute value. The formula is\n\t\t\t\t//   basePosition\n\t\t\t\t//     + weight0 * ( morphPosition0 - basePosition )\n\t\t\t\t//     + weight1 * ( morphPosition1 - basePosition )\n\t\t\t\t//     ...\n\t\t\t\t// while the glTF one is relative\n\t\t\t\t//   basePosition\n\t\t\t\t//     + weight0 * glTFmorphPosition0\n\t\t\t\t//     + weight1 * glTFmorphPosition1\n\t\t\t\t//     ...\n\t\t\t\t// then we need to convert from relative to absolute here.\n\n\t\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t\t// Cloning not to pollute original accessor\n\t\t\t\t\tvar positionAttribute = cloneBufferAttribute( accessors[ target.POSITION ] );\n\t\t\t\t\tpositionAttribute.name = attributeName;\n\n\t\t\t\t\tvar position = geometry.attributes.position;\n\n\t\t\t\t\tfor ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\tpositionAttribute.setXYZ(\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\tpositionAttribute.getX( j ) + position.getX( j ),\n\t\t\t\t\t\t\tpositionAttribute.getY( j ) + position.getY( j ),\n\t\t\t\t\t\t\tpositionAttribute.getZ( j ) + position.getZ( j )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpositionAttribute = geometry.attributes.position;\n\n\t\t\t\t}\n\n\t\t\t\tmorphPositions.push( positionAttribute );\n\n\t\t\t}\n\n\t\t\tif ( hasMorphNormal ) {\n\n\t\t\t\t// see target.POSITION's comment\n\n\t\t\t\tvar normalAttribute;\n\n\t\t\t\tif ( target.NORMAL !== undefined ) {\n\n\t\t\t\t\tvar normalAttribute = cloneBufferAttribute( accessors[ target.NORMAL ] );\n\t\t\t\t\tnormalAttribute.name = attributeName;\n\n\t\t\t\t\tvar normal = geometry.attributes.normal;\n\n\t\t\t\t\tfor ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\tnormalAttribute.setXYZ(\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\tnormalAttribute.getX( j ) + normal.getX( j ),\n\t\t\t\t\t\t\tnormalAttribute.getY( j ) + normal.getY( j ),\n\t\t\t\t\t\t\tnormalAttribute.getZ( j ) + normal.getZ( j )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = geometry.attributes.normal;\n\n\t\t\t\t}\n\n\t\t\t\tmorphNormals.push( normalAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\n\t}\n\n\t/**\n\t * @param {THREE.Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t */\n\tfunction updateMorphTargets( mesh, meshDef ) {\n\n\t\tmesh.updateMorphTargets();\n\n\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\t\tvar targetNames = meshDef.extras.targetNames;\n\n\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction isPrimitiveEqual( a, b ) {\n\n\t\tif ( a.indices !== b.indices ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn isObjectEqual( a.attributes, b.attributes );\n\n\t}\n\n\tfunction isObjectEqual( a, b ) {\n\n\t\tif ( Object.keys( a ).length !== Object.keys( b ).length ) return false;\n\n\t\tfor ( var key in a ) {\n\n\t\t\tif ( a[ key ] !== b[ key ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction isArrayEqual( a, b ) {\n\n\t\tif ( a.length !== b.length ) return false;\n\n\t\tfor ( var i = 0, il = a.length; i < il; i ++ ) {\n\n\t\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getCachedGeometry( cache, newPrimitive ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( isPrimitiveEqual( cached.primitive, newPrimitive ) ) return cached.promise;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction getCachedCombinedGeometry( cache, geometries ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( isArrayEqual( geometries, cached.baseGeometries ) ) return cached.geometry;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction getCachedMultiPassGeometry( cache, geometry, primitives ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( geometry === cached.baseGeometry && isArrayEqual( primitives, cached.primitives ) ) return cached.geometry;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction cloneBufferAttribute( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tvar count = attribute.count;\n\t\t\tvar itemSize = attribute.itemSize;\n\t\t\tvar array = attribute.array.slice( 0, count * itemSize );\n\n\t\t\tfor ( var i = 0; i < count; ++ i ) {\n\n\t\t\t\tarray[ i ] = attribute.getX( i );\n\t\t\t\tif ( itemSize >= 2 ) array[ i + 1 ] = attribute.getY( i );\n\t\t\t\tif ( itemSize >= 3 ) array[ i + 2 ] = attribute.getZ( i );\n\t\t\t\tif ( itemSize >= 4 ) array[ i + 3 ] = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\treturn new THREE.BufferAttribute( array, itemSize, attribute.normalized );\n\n\t\t}\n\n\t\treturn attribute.clone();\n\n\t}\n\n\t/**\n\t * Checks if we can build a single Mesh with MultiMaterial from multiple primitives.\n\t * Returns true if all primitives use the same attributes/morphAttributes/mode\n\t * and also have index. Otherwise returns false.\n\t *\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Boolean}\n\t */\n\tfunction isMultiPassGeometry( primitives ) {\n\n\t\tif ( primitives.length < 2 ) return false;\n\n\t\tvar primitive0 = primitives[ 0 ];\n\t\tvar targets0 = primitive0.targets || [];\n\n\t\tif ( primitive0.indices === undefined ) return false;\n\n\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar primitive = primitives[ i ];\n\n\t\t\tif ( primitive0.mode !== primitive.mode ) return false;\n\t\t\tif ( primitive.indices === undefined ) return false;\n\t\t\tif ( ! isObjectEqual( primitive0.attributes, primitive.attributes ) ) return false;\n\n\t\t\tvar targets = primitive.targets || [];\n\n\t\t\tif ( targets0.length !== targets.length ) return false;\n\n\t\t\tfor ( var j = 0, jl = targets0.length; j < jl; j ++ ) {\n\n\t\t\t\tif ( ! isObjectEqual( targets0[ j ], targets[ j ] ) ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/* GLTF PARSER */\n\n\tfunction GLTFParser( json, extensions, options ) {\n\n\t\tthis.json = json || {};\n\t\tthis.extensions = extensions || {};\n\t\tthis.options = options || {};\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = [];\n\t\tthis.multiplePrimitivesCache = [];\n\t\tthis.multiPassGeometryCache = []\n\n\t\tthis.textureLoader = new THREE.TextureLoader( this.options.manager );\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\tthis.fileLoader = new THREE.FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t}\n\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\tvar json = this.json;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis.markDefs();\n\n\t\t// Fire the callback on complete\n\t\tthis.getMultiDependencies( [\n\n\t\t\t'scene',\n\t\t\t'animation',\n\t\t\t'camera'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar scenes = dependencies.scenes || [];\n\t\t\tvar scene = scenes[ json.scene || 0 ];\n\t\t\tvar animations = dependencies.animations || [];\n\t\t\tvar cameras = dependencies.cameras || [];\n\n\t\t\tonLoad( scene, scenes, cameras, animations, json );\n\n\t\t} ).catch( onError );\n\n\t};\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\tGLTFParser.prototype.markDefs = function () {\n\n\t\tvar nodeDefs = this.json.nodes || [];\n\t\tvar skinDefs = this.json.skins || [];\n\t\tvar meshDefs = this.json.meshes || [];\n\n\t\tvar meshReferences = {};\n\t\tvar meshUses = {};\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tvar joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Meshes can (and should) be reused by multiple nodes in a glTF asset. To\n\t\t// avoid having more than one THREE.Mesh with the same name, count\n\t\t// references and rename instances below.\n\t\t//\n\t\t// Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] === undefined ) {\n\n\t\t\t\t\tmeshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tmeshReferences[ nodeDef.mesh ] ++;\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.json.meshReferences = meshReferences;\n\t\tthis.json.meshUses = meshUses;\n\n\t};\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {String} type\n\t * @param {Number} index\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\tvar cacheKey = type + ':' + index;\n\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this.loadMesh( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this.loadBufferView( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this.loadMaterial( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this.loadTexture( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t};\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {String} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\tvar dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t};\n\n\t/**\n\t * Requests all multiple dependencies of the specified types asynchronously, with caching.\n\t * @param {Array<string>} types\n\t * @return {Promise<Object<Array<Object>>>}\n\t */\n\tGLTFParser.prototype.getMultiDependencies = function ( types ) {\n\n\t\tvar results = {};\n\t\tvar pendings = [];\n\n\t\tfor ( var i = 0, il = types.length; i < il; i ++ ) {\n\n\t\t\tvar type = types[ i ];\n\t\t\tvar value = this.getDependencies( type );\n\n\t\t\tvalue = value.then( function ( key, value ) {\n\n\t\t\t\tresults[ key ] = value;\n\n\t\t\t}.bind( this, type + ( type === 'mesh' ? 'es' : 's' ) ) );\n\n\t\t\tpendings.push( value );\n\n\t\t}\n\n\t\treturn Promise.all( pendings ).then( function () {\n\n\t\t\treturn results;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {Number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\tvar loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {Number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {Number} accessorIndex\n\t * @return {Promise<THREE.BufferAttribute|THREE.InterleavedBufferAttribute>}\n\t */\n\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\n\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tvar bufferView = bufferViews[ 0 ];\n\n\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\n\t\t\tvar byteStride = json.bufferViews[ accessorDef.bufferView ].byteStride;\n\t\t\tvar normalized = accessorDef.normalized === true;\n\t\t\tvar array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType;\n\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\t// Use the full buffer if it's interleaved.\n\t\t\t\t\tarray = new TypedArray( bufferView );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new THREE.InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, byteOffset / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new THREE.BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute.setArray( bufferAttribute.array.slice() );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {Number} textureIndex\n\t * @return {Promise<THREE.Texture>}\n\t */\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\t\tvar textureLoader = this.textureLoader;\n\n\t\tvar URL = window.URL || window.webkitURL;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar textureExtensions = textureDef.extensions || {};\n\n\t\tvar source;\n\n\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\n\n\t\t} else {\n\n\t\t\tsource = json.images[ textureDef.source ];\n\n\t\t}\n\n\t\tvar sourceURI = source.uri;\n\t\tvar isObjectURL = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\t// Load Texture resource.\n\n\t\t\tvar loader = THREE.Loader.Handlers.get( sourceURI );\n\n\t\t\tif ( ! loader ) {\n\n\t\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\n\t\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\n\t\t\t\t\t: textureLoader;\n\n\t\t\t}\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name !== undefined ) texture.name = textureDef.name;\n\n\t\t\t// .format of dds texture is set in DDSLoader\n\t\t\tif ( ! textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\t\ttexture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;\n\n\t\t\t}\n\n\t\t\tif ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' +\n\t\t\t\t\t\t\t\t\t\t\t'internalFormat will be forced to be the same value as format.' );\n\n\t\t\t}\n\n\t\t\ttexture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType;\n\n\t\t\tvar samplers = json.samplers || {};\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {String} textureName\n\t * @param {Number} textureIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) {\n\n\t\treturn this.getDependency( 'texture', textureIndex ).then( function ( texture ) {\n\n\t\t\tmaterialParams[ textureName ] = texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {Number} materialIndex\n\t * @return {Promise<THREE.Material>}\n\t */\n\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar materialDef = this.json.materials[ materialIndex ];\n\n\t\tvar materialType;\n\t\tvar materialParams = {};\n\t\tvar materialExtensions = materialDef.extensions || {};\n\n\t\tvar pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType( materialDef );\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType( materialDef );\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tmaterialType = THREE.MeshStandardMaterial;\n\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tvar textureIndex = metallicRoughness.metallicRoughnessTexture.index;\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = THREE.DoubleSide;\n\n\t\t}\n\n\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== THREE.MeshBasicMaterial) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture.index ) );\n\n\t\t\tmaterialParams.normalScale = new THREE.Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== THREE.MeshBasicMaterial) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture.index ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== THREE.MeshBasicMaterial) {\n\n\t\t\tmaterialParams.emissive = new THREE.Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== THREE.MeshBasicMaterial) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture.index ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tvar material;\n\n\t\t\tif ( materialType === THREE.ShaderMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name !== undefined ) material.name = materialDef.name;\n\n\t\t\t// Normal map textures use OpenGL conventions:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture\n\t\t\tif ( material.normalScale ) {\n\n\t\t\t\tmaterial.normalScale.y = - material.normalScale.y;\n\n\t\t\t}\n\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\tif ( material.map ) material.map.encoding = THREE.sRGBEncoding;\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = THREE.sRGBEncoding;\n\t\t\tif ( material.specularMap ) material.specularMap.encoding = THREE.sRGBEncoding;\n\n\t\t\tif ( materialDef.extras ) material.userData = materialDef.extras;\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * @param  {THREE.BufferGeometry} geometry\n\t * @param  {GLTF.Primitive} primitiveDef\n\t * @param  {Array<THREE.BufferAttribute>} accessors\n\t */\n\tfunction addPrimitiveAttributes( geometry, primitiveDef, accessors ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tfor ( var gltfAttributeName in attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ];\n\t\t\tvar bufferAttribute = accessors[ attributes[ gltfAttributeName ] ];\n\n\t\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\t\tif ( !threeAttributeName ) continue;\n\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\t\tgeometry.setAttribute( threeAttributeName, bufferAttribute );\n\n\t\t}\n\n\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\t\tgeometry.setIndex( accessors[ primitiveDef.indices ] );\n\n\t\t}\n\n\t\tif ( primitiveDef.targets !== undefined ) {\n\n\t\t\taddMorphTargets( geometry, primitiveDef.targets, accessors );\n\n\t\t}\n\n\t\tif ( primitiveDef.extras !== undefined ) {\n\n\t\t\tgeometry.userData = primitiveDef.extras;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t * If we can build a single BufferGeometry with .groups from multiple primitives, returns one BufferGeometry.\n\t * Otherwise, returns BufferGeometries without .groups as many as primitives.\n\t *\n\t * @param {Array<Object>} primitives\n\t * @return {Promise<Array<THREE.BufferGeometry>>}\n\t */\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\tvar parser = this;\n\t\tvar extensions = this.extensions;\n\t\tvar cache = this.primitiveCache;\n\n\t\tvar isMultiPass = isMultiPassGeometry( primitives );\n\t\tvar originalPrimitives;\n\n\t\tif ( isMultiPass ) {\n\n\t\t\toriginalPrimitives = primitives; // save original primitives and use later\n\n\t\t\t// We build a single BufferGeometry with .groups from multiple primitives\n\t\t\t// because all primitives share the same attributes/morph/mode and have indices.\n\n\t\t\tprimitives = [ primitives[ 0 ] ];\n\n\t\t\t// Sets .groups and combined indices to a geometry later in this method.\n\n\t\t}\n\n\t\treturn this.getDependencies( 'accessor' ).then( function ( accessors ) {\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t// See if we've already created this geometry\n\t\t\t\tvar cached = getCachedGeometry( cache, primitive );\n\n\t\t\t\tif ( cached ) {\n\n\t\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\t\tpending.push( cached );\n\n\t\t\t\t} else if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tvar geometryPromise = extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\n\n\t\t\t\t\t\t\treturn geometry;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\n\n\t\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\n\n\t\t\t\t\tvar geometryPromise = Promise.resolve( geometry );\n\n\t\t\t\t\t// Cache this geometry\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\n\n\t\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function ( geometries ) {\n\n\t\t\t\tif ( isMultiPass ) {\n\n\t\t\t\t\tvar baseGeometry = geometries[ 0 ];\n\n\t\t\t\t\t// See if we've already created this combined geometry\n\t\t\t\t\tvar cache = parser.multiPassGeometryCache;\n\t\t\t\t\tvar cached = getCachedMultiPassGeometry( cache, baseGeometry, originalPrimitives );\n\n\t\t\t\t\tif ( cached !== null ) return [ cached.geometry ];\n\n\t\t\t\t\t// Cloning geometry because of index override.\n\t\t\t\t\t// Attributes can be reused so cloning by myself here.\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\t\t\tgeometry.name = baseGeometry.name;\n\t\t\t\t\tgeometry.userData = baseGeometry.userData;\n\n\t\t\t\t\tfor ( var key in baseGeometry.attributes ) geometry.setAttribute( key, baseGeometry.attributes[ key ] );\n\t\t\t\t\tfor ( var key in baseGeometry.morphAttributes ) geometry.morphAttributes[ key ] = baseGeometry.morphAttributes[ key ];\n\n\t\t\t\t\tvar indices = [];\n\t\t\t\t\tvar offset = 0;\n\n\t\t\t\t\tfor ( var i = 0, il = originalPrimitives.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar accessor = accessors[ originalPrimitives[ i ].indices ];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = accessor.count; j < jl; j ++ ) indices.push( accessor.array[ j ] );\n\n\t\t\t\t\t\tgeometry.addGroup( offset, accessor.count, i );\n\n\t\t\t\t\t\toffset += accessor.count;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setIndex( indices );\n\n\t\t\t\t\tcache.push( { geometry: geometry, baseGeometry: baseGeometry, primitives: originalPrimitives } );\n\n\t\t\t\t\treturn [ geometry ];\n\n\t\t\t\t} else if ( geometries.length > 1 && THREE.BufferGeometryUtils !== undefined ) {\n\n\t\t\t\t\t// Tries to merge geometries with BufferGeometryUtils if possible\n\n\t\t\t\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t// can't merge if draw mode is different\n\t\t\t\t\t\tif ( primitives[ 0 ].mode !== primitives[ i ].mode ) return geometries;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// See if we've already created this combined geometry\n\t\t\t\t\tvar cache = parser.multiplePrimitivesCache;\n\t\t\t\t\tvar cached = getCachedCombinedGeometry( cache, geometries );\n\n\t\t\t\t\tif ( cached ) {\n\n\t\t\t\t\t\tif ( cached.geometry !== null ) return [ cached.geometry ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar geometry = THREE.BufferGeometryUtils.mergeBufferGeometries( geometries, true );\n\n\t\t\t\t\t\tcache.push( { geometry: geometry, baseGeometries: geometries } );\n\n\t\t\t\t\t\tif ( geometry !== null ) return [ geometry ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn geometries;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {Number} meshIndex\n\t * @return {Promise<THREE.Group|THREE.Mesh|THREE.SkinnedMesh>}\n\t */\n\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\n\n\t\tvar scope = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshDef = this.json.meshes[ meshIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'accessor',\n\t\t\t'material'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar primitives = meshDef.primitives;\n\t\t\tvar originalMaterials = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\toriginalMaterials[ i ] = primitives[ i ].material === undefined\n\t\t\t\t\t? createDefaultMaterial()\n\t\t\t\t\t: dependencies.materials[ primitives[ i ].material ];\n\n\t\t\t}\n\n\t\t\treturn scope.loadGeometries( primitives ).then( function ( geometries ) {\n\n\t\t\t\tvar isMultiMaterial = geometries.length === 1 && geometries[ 0 ].groups.length > 0;\n\n\t\t\t\tvar meshes = [];\n\n\t\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar geometry = geometries[ i ];\n\t\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t\t// 1. create Mesh\n\n\t\t\t\t\tvar mesh;\n\n\t\t\t\t\tvar material = isMultiMaterial ? originalMaterials : originalMaterials[ i ]\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See .markDefs()\n\t\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t\t? new THREE.SkinnedMesh( geometry, material )\n\t\t\t\t\t\t\t: new THREE.Mesh( geometry, material );\n\n\t\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleStripDrawMode;\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleFanDrawMode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\t\tmesh = new THREE.LineSegments( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\t\tmesh = new THREE.Line( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\t\tmesh = new THREE.LineLoop( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\t\tmesh = new THREE.Points( geometry, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.name = meshDef.name || ( 'mesh_' + meshIndex );\n\n\t\t\t\t\tif ( geometries.length > 1 ) mesh.name += '_' + i;\n\n\t\t\t\t\tif ( meshDef.extras !== undefined ) mesh.userData = meshDef.extras;\n\n\t\t\t\t\tmeshes.push( mesh );\n\n\t\t\t\t\t// 2. update Material depending on Mesh and BufferGeometry\n\n\t\t\t\t\tvar materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\n\t\t\t\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\t\t\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\t\t\t\t\tvar useSkinning = mesh.isSkinnedMesh === true;\n\t\t\t\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\t\t\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\t\t\t\tfor ( var j = 0, jl = materials.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar material = materials[ j ];\n\n\t\t\t\t\t\tif ( mesh.isPoints ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\t\t\t\t\tvar pointsMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\t\t\t\t\tpointsMaterial = new THREE.PointsMaterial();\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( pointsMaterial, material );\n\t\t\t\t\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\t\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\t\t\t\t\tpointsMaterial.lights = false;  // PointsMaterial doesn't support lights yet\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = pointsMaterial;\n\n\t\t\t\t\t\t} else if ( mesh.isLine ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\t\t\t\t\tvar lineMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\t\t\t\t\tlineMaterial = new THREE.LineBasicMaterial();\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( lineMaterial, material );\n\t\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\t\t\t\t\tlineMaterial.lights = false;  // LineBasicMaterial doesn't support lights yet\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, lineMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = lineMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Clone the material if it will be modified\n\t\t\t\t\t\tif ( useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\t\t\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\t\t\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\t\t\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\t\t\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\t\t\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\t\t\t\t\tvar cachedMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\t\t\t\t\tcachedMaterial = material.isGLTFSpecularGlossinessMaterial\n\t\t\t\t\t\t\t\t\t\t? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material )\n\t\t\t\t\t\t\t\t\t\t: material.clone();\n\n\t\t\t\t\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\t\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = THREE.VertexColors;\n\t\t\t\t\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\t\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\t\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = cachedMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ j ] = material;\n\n\t\t\t\t\t\t// workarounds for mesh and geometry\n\n\t\t\t\t\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\t\t\t\t\tconsole.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );\n\t\t\t\t\t\t\tgeometry.setAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) {\n\n\t\t\t\t\t\t\t// for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime update\n\t\t\t\t\t\t\tmesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.material = isMultiMaterial ? materials : materials[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tvar group = new THREE.Group();\n\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn group;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {Number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\tvar camera;\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new THREE.OrthographicCamera( params.xmag / - 2, params.xmag / 2, params.ymag / 2, params.ymag / - 2, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name !== undefined ) camera.name = cameraDef.name;\n\t\tif ( cameraDef.extras ) camera.userData = cameraDef.extras;\n\n\t\treturn Promise.resolve( camera );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {Number} skinIndex\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\n\n\t\tvar skinDef = this.json.skins[ skinIndex ];\n\n\t\tvar skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {Number} animationIndex\n\t * @return {Promise<THREE.AnimationClip>}\n\t */\n\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\n\n\t\tvar json = this.json;\n\n\t\tvar animationDef = this.json.animations[ animationIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'accessor',\n\t\t\t'node'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\t\tvar channel = animationDef.channels[ i ];\n\t\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\n\n\t\t\t\tif ( sampler ) {\n\n\t\t\t\t\tvar target = channel.target;\n\t\t\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\t\t\tvar inputAccessor = dependencies.accessors[ input ];\n\t\t\t\t\tvar outputAccessor = dependencies.accessors[ output ];\n\n\t\t\t\t\tvar node = dependencies.nodes[ name ];\n\n\t\t\t\t\tif ( node ) {\n\n\t\t\t\t\t\tnode.updateMatrix();\n\t\t\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.NumberKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.QuaternionKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.VectorKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;\n\n\t\t\t\t\t\tvar targetNames = [];\n\n\t\t\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t\t\t// node can be THREE.Group here but\n\t\t\t\t\t\t\t// PATH_PROPERTIES.weights(morphTargetInfluences) should be\n\t\t\t\t\t\t\t// the property of a mesh object under group.\n\n\t\t\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// KeyframeTrack.optimize() will modify given 'times' and 'values'\n\t\t\t\t\t\t// buffers before creating a truncated copy to keep. Because buffers may\n\t\t\t\t\t\t// be reused by other tracks, make copies here.\n\t\t\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar track = new TypedKeyframeTrack(\n\t\t\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\tinterpolation\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Here is the trick to enable custom interpolation.\n\t\t\t\t\t\t\t// Overrides .createInterpolant in a factory method which creates custom interpolation.\n\t\t\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Workaround, provide an alternate way to know if the interpolant type is cubis spline to track.\n\t\t\t\t\t\t\t\t// track.getInterpolation() doesn't return valid value for custom interpolant.\n\t\t\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new THREE.AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {Number} nodeIndex\n\t * @return {Promise<THREE.Object3D>}\n\t */\n\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshReferences = this.json.meshReferences;\n\t\tvar meshUses = this.json.meshUses;\n\n\t\tvar nodeDef = this.json.nodes[ nodeIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'mesh',\n\t\t\t'skin',\n\t\t\t'camera',\n\t\t\t'light'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar node;\n\n\t\t\t// .isBone isn't in glTF spec. See .markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new THREE.Bone();\n\n\t\t\t} else if ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tvar mesh = dependencies.meshes[ nodeDef.mesh ];\n\n\t\t\t\tnode = mesh.clone();\n\n\t\t\t\t// for Specular-Glossiness\n\t\t\t\tif ( mesh.isGroup === true ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mesh.children.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar child = mesh.children[ i ];\n\n\t\t\t\t\t\tif ( child.material && child.material.isGLTFSpecularGlossinessMaterial === true ) {\n\n\t\t\t\t\t\t\tnode.children[ i ].onBeforeRender = child.onBeforeRender;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( mesh.material && mesh.material.isGLTFSpecularGlossinessMaterial === true ) {\n\n\t\t\t\t\t\tnode.onBeforeRender = mesh.onBeforeRender;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] > 1 ) {\n\n\t\t\t\t\tnode.name += '_instance_' + meshUses[ nodeDef.mesh ] ++;\n\n\t\t\t\t}\n\n\t\t\t} else if ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tnode = dependencies.cameras[ nodeDef.camera ];\n\n\t\t\t} else if ( nodeDef.extensions\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\tnode = lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new THREE.Object3D();\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name !== undefined ) {\n\n\t\t\t\tnode.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.extras ) node.userData = nodeDef.extras;\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tvar matrix = new THREE.Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {Number} sceneIndex\n\t * @return {Promise<THREE.Scene>}\n\t */\n\tGLTFParser.prototype.loadScene = function () {\n\n\t\t// scene node hierachy builder\n\n\t\tfunction buildNodeHierachy( nodeId, parentObject, json, allNodes, skins ) {\n\n\t\t\tvar node = allNodes[ nodeId ];\n\t\t\tvar nodeDef = json.nodes[ nodeId ];\n\n\t\t\t// build skeleton here as well\n\n\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\tvar meshes = node.isGroup === true ? node.children : [ node ];\n\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar mesh = meshes[ i ];\n\t\t\t\t\tvar skinEntry = skins[ nodeDef.skin ];\n\n\t\t\t\t\tvar bones = [];\n\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = skinEntry.joints.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar jointId = skinEntry.joints[ j ];\n\t\t\t\t\t\tvar jointNode = allNodes[ jointId ];\n\n\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\tvar mat = new THREE.Matrix4();\n\n\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', jointId );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.bind( new THREE.Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build node hierachy\n\n\t\t\tparentObject.add( node );\n\n\t\t\tif ( nodeDef.children ) {\n\n\t\t\t\tvar children = nodeDef.children;\n\n\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\tbuildNodeHierachy( child, node, json, allNodes, skins );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function loadScene( sceneIndex ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\n\n\t\t\treturn this.getMultiDependencies( [\n\n\t\t\t\t'node',\n\t\t\t\t'skin'\n\n\t\t\t] ).then( function ( dependencies ) {\n\n\t\t\t\tvar scene = new THREE.Scene();\n\t\t\t\tif ( sceneDef.name !== undefined ) scene.name = sceneDef.name;\n\n\t\t\t\tif ( sceneDef.extras ) scene.userData = sceneDef.extras;\n\n\t\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\t\t\tvar nodeIds = sceneDef.nodes || [];\n\n\t\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\t\t\tbuildNodeHierachy( nodeIds[ i ], scene, json, dependencies.nodes, dependencies.skins );\n\n\t\t\t\t}\n\n\t\t\t\t// Ambient lighting, if present, is always attached to the scene root.\n\t\t\t\tif ( sceneDef.extensions\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\t\tscene.add( lights[ sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn scene;\n\n\t\t\t} );\n\n\t\t};\n\n\t}();\n\n\treturn GLTFLoader;\n\n} )();\n\nexport default THREE.GLTFLoader;","/* \n *************************************\n * <!-- 3D Model -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport GLTFLoader from '@uixkit/plugins/THREE/loaders/GLTFLoader';\n\n\nexport const THREE_MODEL = ( ( module, $, window, document ) => {\n\tif ( window.THREE_MODEL === null ) return false;\n\t\n\t\n\t\n    module.THREE_MODEL               = module.THREE_MODEL || {};\n    module.THREE_MODEL.version       = '0.0.5';\n    module.THREE_MODEL.documentReady = function( $ ) {\n\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-model-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID          = '3D-model-canvas';\n\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\tlights = [],\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n\n\t\t\t\n\t\t\tlet mixerGLTF;\n\t\t\tconst radius = 600;\n\t\t\tlet prevTime = Date.now();\n\t\t\t\n\t\t\t\n\n\t\t\tfunction init() {\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 45, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set( 0, 0, 100 );\n\t\t\t\tcamera.target = new THREE.Vector3( 0, 150, 0 );\n\n\t\n\n\t\t\t\t//=================\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t//=================\n\t\t\t\t//Lights\n\t\t\t\tlights[ 0 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\t\t\tlights[ 1 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\t\t\tlights[ 2 ] = new THREE.DirectionalLight( 0xffffff );\n\n\t\t\t\tlights[ 0 ].position.set( 0, 200, 0 );\n\t\t\t\tlights[ 1 ].position.set( 100, 200, 100 );\n\t\t\t\tlights[ 2 ].position.set( 120, 200, 0 );\n\t\t\t\tlights[ 2 ].intensity = 0.6;\n\n\t\t\t\tscene.add( lights[ 0 ] );\n\t\t\t\tscene.add( lights[ 1 ] );\n\t\t\t\tscene.add( lights[ 2 ] );\n\t\t\t\t\n\n\n\n\t\t\t\t//=================\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t\n\t\t\t\t//=================\n                displacementSprite = new THREE.Object3D();\n\t\t\t\tconst manager = new THREE.LoadingManager();\n\t\t\t\tmanager.onProgress = function ( item, loaded, total ) {\n\n\t\t\t\t\tconsole.log( item, loaded, total );\n\n\t\t\t\t};\n\n\t\t\t\tconst textureURL = ( typeof $( '#' + rendererCanvasID ).data( 'texture-src' ) != typeof undefined ) ? $( '#' + rendererCanvasID ).data( 'texture-src' ) : templateUrl + '/assets/models/gltf/project.jpg';\n\t\t\t\tconst objURL = ( typeof $( '#' + rendererCanvasID ).data( 'model-src' ) != typeof undefined ) ? $( '#' + rendererCanvasID ).data( 'model-src' ) : templateUrl + '/assets/models/gltf/project.glb';\n\t\t\t\t\n\t\t\t\tconst textureLoader = new THREE.TextureLoader( manager ),\n\t\t\t\t\ttexture       = textureLoader.load( textureURL ),\n\t\t\t\t\tonProgress    = function ( xhr ) {\n\t\t\t\t\t\tif ( xhr.lengthComputable ) {\n\t\t\t\t\t\t\tconst percentComplete = xhr.loaded / xhr.total * 100;\n\t\t\t\t\t\t\tconsole.log( Math.round(percentComplete, 2) + '% downloaded' );\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonError       = function ( xhr ) { };\n\n\n\t\t\t\tconst loader        = new THREE.GLTFLoader( manager );\n                loader.crossOrigin = 'anonymous';\n\t\t\t\tloader.load( objURL, function ( object ) {\n\n\t\t\t\t\t\n\t\t\t\t\tconst gltfMesh = object.scene.children[ 0 ];\n\t\t\t\t\tobject.scene.children[ 0 ].traverse( function( child ) {            \n\t\t\t\t\t   if ( ( child instanceof THREE.Mesh ) ) { \n\t\t\t\t\t\t   console.log( child );\n\n\n\t\t\t\t\t\t    child.material.emissive = new THREE.Color( 0xff6600 );  // -> color\n\t\t\t\t\t\t    child.material.normalMap = texture; // -> map\n\t\t\t\t\t\t    child.material.shadowSide = THREE.DoubleSide; // -> side\n\t\t\t\t\t\t    child.material.wireframe = false; // -> wireframe\n\t\t\t\t\t\t    child.material.emissiveIntensity = 0.5;  // -> shininess\n\t\t\t\t\t\t   \n\t\t\t\t\t\t   //Excluding objects from fog\n\t\t\t\t\t\t    child.material.fog = false; // -> fog\n\t\t\t\t\t\t   \n\t\n\t\t\t\t\t\t\t// set castShadow to object\n\t\t\t\t\t\t\tchild.castShadow = true;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\tIf you can not use `object.scene.children[ 0 ]`, use the following code:\n\t\t\t\t\t\n\n\t\t\t\t\tconst gltfMesh = object.scene;\n\t\t\t\t\tobject.scene.traverse( function( child ) {            \n\t\t\t\t\t   if ( ( child instanceof THREE.Mesh ) ) { \n\n\n\t\t\t\t\t\t\tchild.material = new THREE.MeshPhongMaterial( {\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: 0xdddddd,\n\t\t\t\t\t\t\t\t\t\t\t\tshininess: 80,\n\t\t\t\t\t\t\t\t\t\t\t\twireframe: true,\n\t\t\t\t\t\t\t\t\t\t\t\tmap: mainSceneImgTexture,\n\t\t\t\t\t\t\t\t\t\t\t\tside: THREE.DoubleSide,\n\t\t\t\t\t\t\t\t\t\t\t\tfog : false //Excluding objects from fog\n\t\t\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t// set castShadow to object\n\t\t\t\t\t\t\tchild.castShadow = true;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\t\t\t\t\t*/\n\t\t\t\t\t\n\t\t\t\t\tdisplacementSprite.add( gltfMesh );\n\t\t\t\t\n\t\t\t\t\tdisplacementSprite.scale.set( 1.2, 1.2, 1.2 );\n\t\t\t\t\tdisplacementSprite.position.y = 100;\n\t\t\t\t\tscene.add( displacementSprite );\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n                    // set the original position\n                    displacementSprite.origPos\t= {\n                        x: displacementSprite.position.x,\n                        y: displacementSprite.position.y,\n                        z: displacementSprite.position.z,\n                        rx: displacementSprite.rotation.x,\n                        ry: displacementSprite.rotation.y,\n                        rz: displacementSprite.rotation.z\n                    };\n\n\t\t\t\t\t\n\n\t\t\t\t\t// set animation\n\t\t\t\t\tmixerGLTF = new THREE.AnimationMixer( displacementSprite );\n\t\t\t\t\tconsole.log(mixerGLTF);\n\t\t\t\t\tobject.animations.forEach((el) => {\n\n\t\t\t\t\t\tconst thisAction = mixerGLTF.clipAction( el );\n\t\t\t\t\t\tthisAction.setDuration( 1 );\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(thisAction.time === 0) {\n\t\t\t\t\t\t\tthisAction.time = thisAction.getClip().duration;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//console.log( 'thisAction.time: ' + thisAction.time );\n\t\t\t\t\t\tconsole.log( thisAction );\n\n\t\t\t\t\t\tthisAction.paused = false;\n\t\t\t\t\t\t//thisAction.timeScale = -1; //Reverse Keyframe animation\n\t\t\t\t\t\tthisAction.play();\n\n\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t}, onProgress, onError );\n\n\n\n\t\t\t\t//=================\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\t\t\t\tcamera.position.x = radius * Math.sin( getRadian( theta ) );\n\t\t\t\tcamera.position.z = radius * Math.cos( getRadian( theta ) );\n\n\t\t\t\tcamera.lookAt( camera.target );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ( mixerGLTF ) {\n\n\t\t\t\t\tconst time = Date.now();\n\t\t\t\t\tmixerGLTF.update( ( time - prevTime ) * 0.001 );\n\t\t\t\t\tprevTime = time;\n\t\t\t\t\t\n\t\t\t\t\t//\n\t\t\t\t\t//const delta  clock.getDelta();\n\t\t\t\t\t//mixerGLTF.update( delta );\n\t\t\t\t\t\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t//To set a background color.\n\t\t\t\t//renderer.setClearColor( 0x000000 );\t\n\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n            \n            /*\n             * Returns the radian degree .\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n                \n                rad = Math.PI / 180 * 30 ;\n             */\n            function getRadian( deg ) {\n                return deg * Math.PI / 180;\n            }\n\t\t\t\n\t\t\t\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\t\t\t\n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_MODEL.documentReady );\n\t\n\n\treturn class THREE_MODEL {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/**\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\n * @author mrdoob / http://mrdoob.com/\n * @author yomotsu / https://yomotsu.net/\n */\n\nTHREE.CSS3DObject = function ( element ) {\n\n\tTHREE.Object3D.call( this );\n\n\tthis.element = element;\n\tthis.element.style.position = 'absolute';\n\n\tthis.addEventListener( 'removed', function () {\n\n\t\tif ( this.element.parentNode !== null ) {\n\n\t\t\tthis.element.parentNode.removeChild( this.element );\n\n\t\t}\n\n\t} );\n\n};\n\nTHREE.CSS3DObject.prototype = Object.create( THREE.Object3D.prototype );\nTHREE.CSS3DObject.prototype.constructor = THREE.CSS3DObject;\n\nTHREE.CSS3DSprite = function ( element ) {\n\n\tTHREE.CSS3DObject.call( this, element );\n\n};\n\nTHREE.CSS3DSprite.prototype = Object.create( THREE.CSS3DObject.prototype );\nTHREE.CSS3DSprite.prototype.constructor = THREE.CSS3DSprite;\n\n//\n\nTHREE.CSS3DRenderer = function () {\n\n\tconsole.log( 'THREE.CSS3DRenderer', THREE.REVISION );\n\n\tvar _width, _height;\n\tvar _widthHalf, _heightHalf;\n\n\tvar matrix = new THREE.Matrix4();\n\n\tvar cache = {\n\t\tcamera: { fov: 0, style: '' },\n\t\tobjects: new WeakMap()\n\t};\n\n\tvar domElement = document.createElement( 'div' );\n\tdomElement.style.overflow = 'hidden';\n\n\tthis.domElement = domElement;\n\n\tvar cameraElement = document.createElement( 'div' );\n\n\tcameraElement.style.WebkitTransformStyle = 'preserve-3d';\n\tcameraElement.style.transformStyle = 'preserve-3d';\n\n\tdomElement.appendChild( cameraElement );\n\n\tvar isIE = /Trident/i.test( navigator.userAgent );\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\t\t_widthHalf = _width / 2;\n\t\t_heightHalf = _height / 2;\n\n\t\tdomElement.style.width = width + 'px';\n\t\tdomElement.style.height = height + 'px';\n\n\t\tcameraElement.style.width = width + 'px';\n\t\tcameraElement.style.height = height + 'px';\n\n\t};\n\n\tfunction epsilon( value ) {\n\n\t\treturn Math.abs( value ) < 1e-10 ? 0 : value;\n\n\t}\n\n\tfunction getCameraCSSMatrix( matrix ) {\n\n\t\tvar elements = matrix.elements;\n\n\t\treturn 'matrix3d(' +\n\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\tepsilon( - elements[ 1 ] ) + ',' +\n\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\tepsilon( elements[ 4 ] ) + ',' +\n\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\tepsilon( elements[ 6 ] ) + ',' +\n\t\t\tepsilon( elements[ 7 ] ) + ',' +\n\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\tepsilon( - elements[ 9 ] ) + ',' +\n\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\tepsilon( - elements[ 13 ] ) + ',' +\n\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\tepsilon( elements[ 15 ] ) +\n\t\t')';\n\n\t}\n\n\tfunction getObjectCSSMatrix( matrix, cameraCSSMatrix ) {\n\n\t\tvar elements = matrix.elements;\n\t\tvar matrix3d = 'matrix3d(' +\n\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\tepsilon( elements[ 1 ] ) + ',' +\n\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\tepsilon( - elements[ 4 ] ) + ',' +\n\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\tepsilon( - elements[ 6 ] ) + ',' +\n\t\t\tepsilon( - elements[ 7 ] ) + ',' +\n\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\tepsilon( elements[ 9 ] ) + ',' +\n\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\tepsilon( elements[ 13 ] ) + ',' +\n\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\tepsilon( elements[ 15 ] ) +\n\t\t')';\n\n\t\tif ( isIE ) {\n\n\t\t\treturn 'translate(-50%,-50%)' +\n\t\t\t\t'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)' +\n\t\t\t\tcameraCSSMatrix +\n\t\t\t\tmatrix3d;\n\n\t\t}\n\n\t\treturn 'translate(-50%,-50%)' + matrix3d;\n\n\t}\n\n\tfunction renderObject( object, camera, cameraCSSMatrix ) {\n\n\t\tif ( object instanceof THREE.CSS3DObject ) {\n\n\t\t\tvar style;\n\n\t\t\tif ( object instanceof THREE.CSS3DSprite ) {\n\n\t\t\t\t// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\n\n\t\t\t\tmatrix.copy( camera.matrixWorldInverse );\n\t\t\t\tmatrix.transpose();\n\t\t\t\tmatrix.copyPosition( object.matrixWorld );\n\t\t\t\tmatrix.scale( object.scale );\n\n\t\t\t\tmatrix.elements[ 3 ] = 0;\n\t\t\t\tmatrix.elements[ 7 ] = 0;\n\t\t\t\tmatrix.elements[ 11 ] = 0;\n\t\t\t\tmatrix.elements[ 15 ] = 1;\n\n\t\t\t\tstyle = getObjectCSSMatrix( matrix, cameraCSSMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tstyle = getObjectCSSMatrix( object.matrixWorld, cameraCSSMatrix );\n\n\t\t\t}\n\n\t\t\tvar element = object.element;\n\t\t\tvar cachedStyle = cache.objects.get( object );\n\n\t\t\tif ( cachedStyle === undefined || cachedStyle !== style ) {\n\n\t\t\t\telement.style.WebkitTransform = style;\n\t\t\t\telement.style.transform = style;\n\n\t\t\t\tvar objectData = { style: style };\n\n\t\t\t\tif ( isIE ) {\n\n\t\t\t\t\tobjectData.distanceToCameraSquared = getDistanceToSquared( camera, object );\n\n\t\t\t\t}\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t}\n\n\t\t\tif ( element.parentNode !== cameraElement ) {\n\n\t\t\t\tcameraElement.appendChild( element );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( object.children[ i ], camera, cameraCSSMatrix );\n\n\t\t}\n\n\t}\n\n\tvar getDistanceToSquared = function () {\n\n\t\tvar a = new THREE.Vector3();\n\t\tvar b = new THREE.Vector3();\n\n\t\treturn function ( object1, object2 ) {\n\n\t\t\ta.setFromMatrixPosition( object1.matrixWorld );\n\t\t\tb.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn a.distanceToSquared( b );\n\n\t\t};\n\n\t}();\n\n\tfunction filterAndFlatten( scene ) {\n\n\t\tvar result = [];\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object instanceof THREE.CSS3DObject ) result.push( object );\n\n\t\t} );\n\n\t\treturn result;\n\n\t}\n\n\tfunction zOrder( scene ) {\n\n\t\tvar sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\tvar distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\tvar distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\treturn distanceA - distanceB;\n\n\t\t} );\n\n\t\tvar zMax = sorted.length;\n\n\t\tfor ( var i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t}\n\n\t}\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tvar fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;\n\n\t\tif ( cache.camera.fov !== fov ) {\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tdomElement.style.WebkitPerspective = fov + 'px';\n\t\t\t\tdomElement.style.perspective = fov + 'px';\n\n\t\t\t}\n\n\t\t\tcache.camera.fov = fov;\n\n\t\t}\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tvar cameraCSSMatrix = camera.isOrthographicCamera ?\n\t\t\t'scale(' + fov + ')' + getCameraCSSMatrix( camera.matrixWorldInverse ) :\n\t\t\t'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );\n\n\t\tvar style = cameraCSSMatrix +\n\t\t\t'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n\t\tif ( cache.camera.style !== style && ! isIE ) {\n\n\t\t\tcameraElement.style.WebkitTransform = style;\n\t\t\tcameraElement.style.transform = style;\n\n\t\t\tcache.camera.style = style;\n\n\t\t}\n\n\t\trenderObject( scene, camera, cameraCSSMatrix );\n\n\t\tif ( isIE ) {\n\n\t\t\t// IE10 and 11 does not support 'preserve-3d'.\n\t\t\t// Thus, z-order in 3D will not work.\n\t\t\t// We have to calc z-order manually and set CSS z-index for IE.\n\t\t\t// FYI: z-index can't handle object intersection\n\t\t\tzOrder( scene );\n\n\t\t}\n\n\t};\n\n};\n\nexport default THREE.CSS3DObject;\n","/* \n *************************************\n * <!-- 3D Pages -->\n *************************************\n */\n\n/**\n * module.THREE_PAGES\n * \n * @requires ./examples/assets/js/min/three.min.js\n * @requires ./src/plugins/THREE\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\nimport CSS3DRenderer from '@uixkit/plugins/THREE/renderers/CSS3DRenderer';\n\n\nexport const THREE_PAGES = ( ( module, $, window, document ) => {\n\tif ( window.THREE_PAGES === null ) return false;\n\t\n\t\n\t\n\t\n\tmodule.THREE_PAGES               = module.THREE_PAGES || {};\n    module.THREE_PAGES.version       = '0.0.2';\n\tmodule.THREE_PAGES.documentReady = function( $ ) {\n\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-renderer' ).length == 0 || ! Modernizr.webgl ) return false;\n\n        \n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n            \n\t\t\tconst viewRenderer = '3D-renderer';\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tclock = new THREE.Clock();\n\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 45, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set(0, 0, -1000);\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera );\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = true;\n\t\t\t\tcontrols.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n\t\t\t\tcontrols.dampingFactor = 0.25;\n\t\t\t\tcontrols.screenSpacePanning = false;\n\t\t\t\tcontrols.minDistance = 1000;\n\t\t\t\tcontrols.maxDistance = 1500;\n\t\t\t\tcontrols.maxPolarAngle = Math.PI / 2;\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tlight = new THREE.HemisphereLight( 0xffbf67, 0x15c6ff );\n\t\t\t\tscene.add( light );\n\n\t\t\t\t//WebGL Renderer\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setClearColor( 0xffffff, 0 );\n\t\t\t\trenderer.setSize( windowWidth - 50, windowHeight - 50 );\n\t\t\t\trenderer.domElement.style.zIndex = 5;\n\t\t\t\tdocument.getElementById( viewRenderer ).appendChild( renderer.domElement );\n\n\n\t\t\t\t//Add HTML elements to scene\n\t\t\t\tconst target  = $( '#html3D-view' ).clone(),\n\t\t\t\t\t  pages   = target.find( '.html3D-view-content' );\n\n\t\t\t\tpages.each( function() {\n\t\t\t\t\tconst el = new THREE.CSS3DObject( $.parseHTML( $( this )[0].outerHTML )[0] );\n\n\t\t\t\t\tel.position.x = $( this ).data( 'position-x' ) || 0;\n\t\t\t\t\tel.position.y = $( this ).data( 'position-y' ) || 0;\n\t\t\t\t\tel.position.z = $( this ).data( 'position-z' ) || 0;\n\t\t\t\t\tel.rotation.x = $( this ).data( 'rotation-x' ) || 0;\n\t\t\t\t\tel.rotation.y = $( this ).data( 'rotation-y' ) || 3.14159265358979;\n\t\t\t\t\tel.rotation.z = $( this ).data( 'rotation-z' ) || 0;\n\n\t\t\t\t\tscene.add( el );\n\t\t\t\t});\n\n\n\n\n\t\t\t\t//CSS3D Renderer\n\t\t\t\trenderer = new THREE.CSS3DRenderer();\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\t\t\t\trenderer.domElement.style.position = 'absolute';\n\t\t\t\trenderer.domElement.style.top = 0;\n\t\t\t\tdocument.getElementById( viewRenderer ).appendChild( renderer.domElement );\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tconst delta = clock.getDelta();\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\t\t\t}\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\n\n\n\n\n\t};\n\n\tmodule.components.documentReady.push( module.THREE_PAGES.documentReady );\n\n\treturn class THREE_PAGES {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","/* \n *************************************\n * <!-- 3D Particle Effect -->\n *************************************\n */\n\n/**\n * module.THREE_PARTICLE\n * \n * @requires ./examples/assets/js/min/three.min.js\n * @requires ./src/plugins/THREE\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const THREE_PARTICLE = ( ( module, $, window, document ) => {\n\tif ( window.THREE_PARTICLE === null ) return false;\n\t\n    module.THREE_PARTICLE               = module.THREE_PARTICLE || {};\n    module.THREE_PARTICLE.version       = '0.0.6';\n    module.THREE_PARTICLE.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-particle-effect-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n\t\tlet sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID = '3D-particle-effect-canvas';\n\n\t\t\tlet renderer, \n\t\t\t\ttexture, \n\t\t\t\tscene, \n\t\t\t\tcamera,\n\t\t\t\tparticles,\n\t\t\t\timagedata,\n\t\t\t\tclock        = new THREE.Clock(),\n\t\t\t\tmouseX       = 0, \n\t\t\t\tmouseY       = 0,\n\t\t\t\tisMouseDown  = true,\n\t\t\t\tlastMousePos = {x: 0, y: 0},\n\t\t\t\twindowHalfX  = windowWidth / 2,\n\t\t\t\twindowHalfY  = windowHeight / 2;\n\n\n\n            //background\n            const backgroundBg = 0xCE3A3E;\n            const backgroundPlane = 0xDE510E;\n            \n            \n            // Light from scene ready\n            let sceneForLightPlane, sceneForSpotLight, sceneForAmbientLight;        \n            \n            // camera data\n            let fieldOfView, aspectRatio, nearPlane, farPlane;\n            let dist, vFOV, visibleHeight, visibleWidth;\n            let xLimit, yLimit;   \n            const maxTargetZ = 200;\n            \n            \n\t\t\t//particle rotation\n\t\t\tlet particleRotation;\n\n\t\t\tconst centerVector = new THREE.Vector3(0, 0, 0);\n\t\t\tlet previousTime = 0;\n\n\n\n\t\t\tfunction init() {\n\n\t\t\t\t//==================================\n                //==================================\n\t\t\t\t//camera\n                fieldOfView = 60;\n                aspectRatio = windowWidth / windowHeight;\n                nearPlane = 1; // the camera won't \"see\" any object placed in front of this plane\n                farPlane = 10000; // the camera wont't see any object placed further than this plane \n\t\t\t\tcamera = new THREE.PerspectiveCamera( fieldOfView, aspectRatio, nearPlane, farPlane );\n\t\t\t\tcamera.position.set(0, 65, -500);\n\t\t\t\tcamera.lookAt( centerVector );\n                \n                \n                // convert the field of view to radians\n                const ang = (fieldOfView / 2) * Math.PI / 180;\n                // calculate the max y position seen by the camera related to the maxTargetZ position, I start by calculating the y limit because fielOfView is a vertical field of view. I then calculate the x Limit\n                yLimit = (camera.position.z + maxTargetZ) * Math.tan(ang); // this is a formula I found, don't ask me why it works, it just does :) \n                // Calculate the max x position seen by the camera related to the y Limit position\n                xLimit = yLimit * camera.aspect;\n                \n                \n                // Fit plane to screen\n                dist = 1000;\n                vFOV = THREE.Math.degToRad( camera.fov );              // convert vertical fov to radians\n                visibleHeight   = 2 * Math.tan( vFOV / 2 ) * dist;     // visible height\n                visibleWidth    = visibleHeight * camera.aspect;       // visible width   \n                \n                //console.log( 'visibleWidth:' + visibleWidth + ', visibleHeight: ' + visibleHeight + ', xLimit: ' + xLimit + ', yLimit: ' + yLimit );\n                \n                \n                \n\t\t\t\t\n\t\t\t\t//==================================\n                //==================================\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n                scene.fog = new THREE.Fog(backgroundBg, 0.0025, 650); // Used to cover the light plane\n  \n        \n        \n\t\t\t\t//==================================\n                //==================================\n\t\t\t\t//Light from scene ready\n                \n                // Light plane  \n                sceneForLightPlane = new THREE.Mesh(new THREE.CircleGeometry(1000, 32), new THREE.MeshPhongMaterial({emissive: backgroundPlane, side: THREE.DoubleSide, }));\n                sceneForLightPlane.receiveShadow = true;\n                sceneForLightPlane.position.set(0, -101, 5);\n                sceneForLightPlane.rotation.x = getRadian( -95 );\n                scene.add(sceneForLightPlane);\n                \n\n                // Spot Light\n                const spotLightColor = 0xffffff,\n                      spotLightIntensity = 2,\n                      spotLightDistance = 1200,\n                      spotLightAngle = getRadian( 50 ),\n                      spotLightPenumbra = 1,\n                      spotLightDecay = 1;\n                \n                sceneForSpotLight = new THREE.SpotLight(spotLightColor, spotLightIntensity, spotLightDistance, spotLightAngle, spotLightPenumbra, spotLightDecay);\n                sceneForSpotLight.position.set(5, 320, 5); // Setting the y-axis bond angle is critical\n                \n                \n                sceneForSpotLight.castShadow = true;\n                sceneForSpotLight.shadow.mapSize.width = 1024;\n                sceneForSpotLight.shadow.mapSize.height = 1024;\n                sceneForSpotLight.shadow.camera.near = 0.5;\n                sceneForSpotLight.shadow.camera.far = 31;\n                scene.add(sceneForSpotLight);\n                \n                //console.log( sceneForSpotLight );\n                \n                /*\n                const spotLightHelper = new THREE.SpotLightHelper( sceneForSpotLight );\n                scene.add( spotLightHelper );   \n                */\n     \n                \n\n                // Ambient Light\n                sceneForAmbientLight = new THREE.AmbientLight(0xffffff, 0.08);\n                scene.add(sceneForAmbientLight); \n\n\n                \n                \n                \n\t\t\t\t//==================================\n                //==================================\n\t\t\t\t//WebGL Renderer\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n                renderer.shadowMap.enabled = true;\n                renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n                \n\n\n\t\t\t\t// instantiate a loader\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\n\t\t\t\t// load a resource\n\t\t\t\tloader.load(\n\t\t\t\t\t// resource URL\n\t\t\t\t\t$( '#' + rendererCanvasID ).data( 'img-src' ),\n\n\t\t\t\t\t// onLoad callback\n\t\t\t\t\tfunction ( texture ) {\n\t\t\t\t\t\t// in this example we create the material when the texture is loaded\n\t\t\t\t\t\t// Get data from an image\n\t\t\t\t\t\timagedata = getImageData( texture.image );\n\n\t\t\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t\t\tconst geometry = new THREE.Geometry();\n\t\t\t\t\t\tconst material = new THREE.PointsMaterial({\n\t\t\t\t\t\t\tsize: 3,\n\t\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\t\tsizeAttenuation: false,\n                            fog : false //Excluding objects from fog\n\t\t\t\t\t\t});\n\n                 \n\t\t\t\t\t\tfor (let y = 0, y2 = imagedata.height; y < y2; y += 2) {\n\n\t\t\t\t\t\t\tfor (let x = 0, x2 = imagedata.width; x < x2; x += 2) {\n\n\t\t\t\t\t\t\t\tif ( imagedata.data[(x * 4 + y * 4 * imagedata.width) + 3] > 128 ) {\n\n\n\t\t\t\t\t\t\t\t\t// The array of vertices holds the position of every vertex in the model.\n\t\t\t\t\t\t\t\t\tconst vertex = new THREE.Vector3();\n\n\n\t\t\t\t\t\t\t\t\tvertex.x = Math.random() * 1000 - 500;\n\t\t\t\t\t\t\t\t\tvertex.y = Math.random() * 1000 - 500;\n\t\t\t\t\t\t\t\t\tvertex.z = -Math.random() * 500;\n\n\t\t\t\t\t\t\t\t\tvertex.destination = {\n\t\t\t\t\t\t\t\t\t\tx: x - imagedata.width / 2,\n\t\t\t\t\t\t\t\t\t\ty: -y + imagedata.height / 2,\n\t\t\t\t\t\t\t\t\t\tz: 0\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tvertex.speed = Math.random() / 200 + 0.015;\n\n\t\t\t\t\t\t\t\t\tgeometry.vertices.push( vertex );\n\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparticles = new THREE.Points( geometry, material );\n\t\t\t\t\t\tscene.add( particles );\n                        particles.scale.setScalar( 0.7 );\n                        particles.position.y = 50;\n                        particles.position.z = 70;\n                        particles.rotation.y = getRadian( 180 );\n\n                        // set castShadow to object\n                        particles.castShadow = true;\n                        \n\n\n\n\t\t\t\t\t},\n\n\t\t\t\t\t// onProgress callback currently not supported\n\t\t\t\t\tundefined,\n\n\t\t\t\t\t// onError callback\n\t\t\t\t\tfunction ( err ) {\n\t\t\t\t\t\tconsole.error( 'An error happened.' );\n\t\t\t\t\t}\n\t\t\t\t);\n\n\n\n\t\t\t\t// add particle rotation\n\t\t\t\tparticleRotation = new THREE.Object3D();\n\t\t\t\tscene.add( particleRotation );\n                \n\n\n\t\t\t\tconst geometryPR = new THREE.TetrahedronGeometry(2, 0),\n\t\t\t\t\tmaterialPR = new THREE.MeshPhongMaterial({\n\t\t\t\t\tcolor: 0xffffff,\n                    emissive: 0xffffff,\n                    shininess: 80,\n\t\t\t\t\tflatShading: true,\n\t\t\t\t});\n              \n\t\t\t\tfor (let i = 0; i < 750; i++) {\n\t\t\t\t\tconst mesh = new THREE.Mesh( geometryPR, materialPR );\n\t\t\t\t\tmesh.position.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5).normalize();\n\t\t\t\t\tmesh.position.multiplyScalar(90 + (Math.random() * 700));\n\t\t\t\t\tmesh.rotation.set(Math.random() * 2, Math.random() * 2, Math.random() * 2);\n\t\t\t\t\tparticleRotation.add(mesh);\n                    \n                    // set castShadow to object\n                    mesh.castShadow = true;  \n                    \n\t\t\t\t}\n             \n\n\t\t\t\t//----\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\t\tdocument.addEventListener( 'touchstart', onDocumentTouchStart, browser.supportsPassive ? { passive: true } : false );\n\t\t\t\tdocument.addEventListener( 'touchmove', onDocumentTouchMove, browser.supportsPassive ? { passive: true } : false );\n\n\t\t\t\tdocument.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\t\tdocument.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\t\n\t\t\t}\n\n\n\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tconst delta      = clock.getDelta(),\n\t\t\t\t\t  thickness = 40;\n\n                //---\n                // \n\t\t\t\t// To set a background color.\n\t\t\t\trenderer.setClearColor( backgroundBg );\t\n                \n\n                //---\n                // \n\t\t\t\t//Need to add judgment to avoid Cannot read property 'geometry' of undefined\n\t\t\t\tif ( typeof particles != typeof undefined ) {\n\n                    let particle;\n                    \n\t\t\t\t\tfor (let i = 0, j = particles.geometry.vertices.length; i < j; i++) {\n\t\t\t\t\t\tparticle = particles.geometry.vertices[i];\n\t\t\t\t\t\tparticle.x += (particle.destination.x - particle.x) * particle.speed;\n\t\t\t\t\t\tparticle.y += (particle.destination.y - particle.y) * particle.speed;\n\t\t\t\t\t\tparticle.z += (particle.destination.z - particle.z) * particle.speed;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( delta - previousTime > thickness ) {\n\t\t\t\t\t\tconst index     = Math.floor(Math.random()*particles.geometry.vertices.length);\n\t\t\t\t\t\tconst particle1 = particles.geometry.vertices[index];\n\t\t\t\t\t\tconst particle2 = particles.geometry.vertices[particles.geometry.vertices.length-index];\n\n\t\t\t\t\t\tTweenMax.to( particle, Math.random()*2+1, {\n\t\t\t\t\t\t\t\t\t\tx:    particle2.x, \n\t\t\t\t\t\t\t\t\t\ty:    particle2.y, \n\t\t\t\t\t\t\t\t\t\tease: Power2.easeInOut\n\t\t\t\t\t\t\t\t\t});\n\n\n\n\t\t\t\t\t\tTweenMax.to( particle2, Math.random()*2+1, {\n\t\t\t\t\t\t\t\t\t\tx:    particle1.x, \n\t\t\t\t\t\t\t\t\t\ty:    particle1.y, \n\t\t\t\t\t\t\t\t\t\tease: Power2.easeInOut\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tpreviousTime = delta;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tparticles.geometry.verticesNeedUpdate = true;\t\n\t\t\t\t}\n\n\n\t\t\t\tif( ! isMouseDown ) {\n\t\t\t\t\tcamera.position.x += (0-camera.position.x)*0.06;\n\t\t\t\t\tcamera.position.y += (0-camera.position.y)*0.06;\n\t\t\t\t}\n\n\n\t\t\t\tcamera.position.x += ( mouseX - camera.position.x ) * 0.09;\n\t\t\t\tcamera.position.y += ( - mouseY - camera.position.y ) * 0.09;\n                if ( camera.position.y < -60 ) camera.position.y = -60;\n\t\t\t\tcamera.lookAt( centerVector );\n\n\n\t\t\t\t//particle rotation\n\t\t\t\tparticleRotation.rotation.x += 0.0000;\n\t\t\t\tparticleRotation.rotation.y -= 0.0040;\n\n                \n                \n                //---\n                // \n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                \n                \n                //---\n                // \n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\t\t\t}\n\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\n\t\t\t\tmouseX = event.clientX - windowHalfX;\n\t\t\t\tmouseY = event.clientY - windowHalfY;\n\n\t\t\t\tif( isMouseDown ) {\n\t\t\t\t\tcamera.position.x += (event.clientX-lastMousePos.x)/100;\n\t\t\t\t\tcamera.position.y -= (event.clientY-lastMousePos.y)/100;\n\t\t\t\t\tcamera.lookAt( centerVector );\n\t\t\t\t\tlastMousePos = {x: event.clientX, y: event.clientY};\n\t\t\t\t}\n\n\n\t\t\t}\n\n\n\t\t\tfunction onDocumentTouchStart( event ) {\n\n\t\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\tmouseX = event.touches[ 0 ].pageX - windowHalfX;\n\t\t\t\t\tmouseY = event.touches[ 0 ].pageY - windowHalfY;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDocumentTouchMove( event ) {\n\n\t\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\tmouseX = event.touches[ 0 ].pageX - windowHalfX;\n\t\t\t\t\tmouseY = event.touches[ 0 ].pageY - windowHalfY;\n\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseUp() {\n\t\t\t\tisMouseDown = false;\n\t\t\t}\n\n\t\t\tfunction onDocumentMouseDown( event ) {\n\t\t\t\tisMouseDown = true;\n\t\t\t\tlastMousePos = {x: event.clientX, y: event.clientY};\n\n\n\t\t\t}\n\n\n\n\t\t\t/*\n\t\t\t * Get Image Data when Draw Image To Canvas\n\t\t\t *\n\t\t\t * @param  {!Element} image         - Overridden with a record type holding data, width and height.\n\t\t\t * @return {Object}                 - The image data via JSON.\n\t\t\t */\n\t\t\tfunction getImageData( image ) {\n\n\t\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tconst ctx = canvas.getContext( '2d' );\n\t\t\t\tctx.drawImage(image, 0, 0);\n\n\t\t\t\treturn ctx.getImageData(0, 0, image.width, image.height);\n\t\t\t}\n\n            \n            \n          \n            /*\n             * Get Object Coordinate, Width and Height From Screen\n             * Note: No data may be acquired without delay !!\n             *\n\t\t\t * @param  {THREE.Mesh} obj                           - Mesh object.\n             * @param  {THREE.PerspectiveCamera} camera           - Mesh object.\n\t\t\t * @param  {Number} rendererWidth                     - Width of renderer.\n             * @param  {Number} rendererHeight                    - Height of renderer.\n             * @param  {String} type                              - Build type.\n             * @return {JSON}\n             */\n\t\t\t/* @usage: \n\t\t\t   const screenPos = nestedObjectToScreenXYZAndWH( displacementSprite , camera, renderer.domElement.width, renderer.domElement.height );\n\t\t\t  */\n\t\t\tfunction nestedObjectToScreenXYZAndWH( obj, camera, rendererWidth, rendererHeight ) {\n                \n                const vector = new THREE.Vector3();\n                vector.setFromMatrixPosition( obj.matrixWorld );\n                const widthHalf = rendererWidth/2;\n                const heightHalf = rendererHeight/2;\n                const aspect = rendererHeight/rendererWidth;\n                vector.project( camera );\n                vector.x = ( vector.x * widthHalf ) + widthHalf;\n                vector.y = - ( vector.y * heightHalf ) + heightHalf;\n\n                //compute bounding box after\n                const boxInfo =  new THREE.Box3().setFromObject( obj ).getSize( new THREE.Vector3() );\n\n                \n                //Change it to fit the width and height of the stage based on the current value\n                const ratioFixedNum = 7;\n                \n                //correction\n                return {\n                    position: vector,\n                    width: ( boxInfo.x * ratioFixedNum * aspect ).toFixed( 2 ),\n                    height: ( boxInfo.y * ratioFixedNum * aspect ).toFixed( 2 )\n                };  \n\t\t\t}\n\t\t\t\n\t\t\t\n            \n           \n            \n            /*\n             * Generate random number between two numbers\n             *\n             * @return {Number}\n             */\n\t\t\tfunction getRandomFloat(min, max) {\n\t\t\t\treturn Math.random() * (max - min) + min;\n\t\t\t}\n\n            \n            /*\n             * Returns the degree from radian.\n             *\n             * @return {Number} rad - Value of radian.\n             * @return {Number}\n             * @usage: \n             \n               angle = rad / ( Math.PI / 180 )  = rad * ( 180/Math.PI );\n             */\n            \n            function getDegree( rad ) {\n                return rad / Math.PI * 180;\n            }\n\n            \n            /*\n             * Returns the radian degree .\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n                \n                rad = Math.PI / 180 * 30 ;\n             */\n            function getRadian( deg ) {\n                return deg * Math.PI / 180;\n            }\n\n            \n            /*\n             * Convert three.js scene rotation to polar coordinates\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n             \n                x = r * cos（θ）\n                y = r * sin（θ）  \n             */\n            function getPolarCoord(x, y, z) {\n                const nx = Math.cos(x) * Math.cos(y) * z,\n                      nz = Math.cos(x) * Math.sin(y) * z,\n                      ny = Math.sin(x) * z;\n                return new THREE.Vector3(nx, ny, nz);\n            }\n\n            \n            \n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_PARTICLE.documentReady );\n\n\treturn class THREE_PARTICLE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- 3D Sphere Rotation -->\n *************************************\n */\n\n/**\n * module.THREE_SPHERE_THREE\n * \n * @requires ./examples/assets/js/min/three.min.js\n * @requires ./src/plugins/THREE\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\nexport const THREE_SPHERE_THREE = ( ( module, $, window, document ) => {\n\tif ( window.THREE_SPHERE_THREE === null ) return false;\n\t\n\t\n\t\n    module.THREE_SPHERE_THREE               = module.THREE_SPHERE_THREE || {};\n    module.THREE_SPHERE_THREE.version       = '0.0.2';\n    module.THREE_SPHERE_THREE.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-sphere-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\tlet sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n            \n            \n\t\t\tconst rendererCanvasID = '3D-sphere-three-canvas';\n\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite;\n\n\t\t\tfunction init() {\n\t\t\t\t// camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 );\n\t\t\t\tcamera.position.set( 0, -46, 18 );\n\n\t\t\t\t// controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera );\n\t\t\t\tcontrols.minDistance = 10;\n\t\t\t\tcontrols.maxDistance = 50;\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t// axes\n\t\t\t\t//scene.add( new THREE.AxisHelper( 20 ) );\n\n\t\t\t\t// geometry\n\t\t\t\tconst geometry = new THREE.SphereGeometry( 3, 32, 32 );\n\n\t\t\t\t// material, we create the material when the texture is loaded\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\t\t\t\tloader.crossOrigin = 'anonymous';\n\n\t\t\t\tconst texture = loader.load( 'https://placekitten.com/1650/1650' ),\n\t\t\t\t\t  material = new THREE.MeshBasicMaterial( { map: texture } );\n\n\t\t\t\t// parent\n\t\t\t\tdisplacementSprite = new THREE.Object3D();\n\t\t\t\tscene.add( displacementSprite );\n\n\t\t\t\t// pivots\n\t\t\t\tconst pivot1 = new THREE.Object3D(),\n\t\t\t\t\t  pivot2 = new THREE.Object3D(),\n\t\t\t\t\t  pivot3 = new THREE.Object3D();\n\n\t\t\t\tpivot1.rotation.z = 0;\n\t\t\t\tpivot2.rotation.z = 2 * Math.PI / 3;\n\t\t\t\tpivot3.rotation.z = 4 * Math.PI / 3;\n\t\t\t\tdisplacementSprite.add( pivot1 );\n\t\t\t\tdisplacementSprite.add( pivot2 );\n\t\t\t\tdisplacementSprite.add( pivot3 );\n\n\t\t\t\t// mesh\n\t\t\t\tconst mesh1 = new THREE.Mesh( geometry, material ),\n\t\t\t\t\t  mesh2 = new THREE.Mesh( geometry, material ),\n\t\t\t\t\t  mesh3 = new THREE.Mesh( geometry, material );\n\n\t\t\t\tmesh1.position.y = 5;\n\t\t\t\tmesh2.position.y = 15;\n\t\t\t\tmesh3.position.y = 25;\n\t\t\t\tpivot1.add( mesh1 );\n\t\t\t\tpivot2.add( mesh2 );\n\t\t\t\tpivot3.add( mesh3 );\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tdisplacementSprite.rotation.z += 0.01;\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\n\t\t\n    };\n\t\n    module.components.documentReady.push( module.THREE_SPHERE_THREE.documentReady );\n\t\n\n\treturn class THREE_SPHERE_THREE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n\n","/* \n *************************************\n * <!-- 3D Object Anim When Click -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\n\nexport const THREE_OBJ_ANIM_INTERACTION = ( ( module, $, window, document ) => {\n\tif ( window.THREE_OBJ_ANIM_INTERACTION === null ) return false;\n\t\n\t\n\t\n    module.THREE_OBJ_ANIM_INTERACTION               = module.THREE_OBJ_ANIM_INTERACTION || {};\n    module.THREE_OBJ_ANIM_INTERACTION.version       = '0.0.3';\n    module.THREE_OBJ_ANIM_INTERACTION.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-object-buttonevent-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n            \n\t\t\tconst rendererCanvasID = '3D-object-buttonevent-canvas';\n\n\n\t\t\tlet renderer, \n\t\t\t\tscene, \n\t\t\t\tcontrols, \n\t\t\t\tcamera, \n\t\t\t\ttargetObj, \n\t\t\t\tparent, \n\t\t\t\tmaterial,\n\t\t\t\tsegLength;\n\n\n\t\t\tconst radius = 3,\n\t\t\t\t  height = 6,\n\t\t\t\t  segments = 200; //segments must be even\n\n\n\t\t\tfunction init() {\n\n\t\t\t\t// Create a camera, which defines where we're looking at.\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera(70, windowWidth / windowHeight, 1, 100);\n\t\t\t\tcamera.position.set(1, 1, 22);\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls(camera, renderer.domElement);\n\t\t\t\tcontrols.addEventListener('change', function() {\n\t\t\t\t\trenderer.render(scene, camera);\n\t\t\t\t}, false);\n\t\t\t\tcontrols.enableZoom = false;\n\t\t\t\tcontrols.enablePan = false;\n\n\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\tcolor: 0xEB6D35,\n\t\t\t\t\tspecular: 0xEB6D35,\n\t\t\t\t\tshininess: 15,\n\t\t\t\t\tflatShading: THREE.FlatShading,\n\t\t\t\t\tside: THREE.DoubleSide,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\topacity: .8\n\t\t\t\t});\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tconst light1 = new THREE.DirectionalLight(0xffffff);\n\t\t\t\tlight1.position.set(-5, 10, 10);\n\t\t\t\tconst light2 = new THREE.PointLight(0xffffff, .7, 0);\n\t\t\t\tlight2.position.set(5, 5, -5);\n\n\t\t\t\tscene.add(light1, light2);\n\n\t\t\t\t//put the target object inside a parent object so the manipulation is easier\n\t\t\t\tparent = new THREE.Object3D();\n\n\n\t\t\t\taddObject();\n\n\t\t\t\tparent.position.set(-radius, height / 2, 0);\n\t\t\t\tparent.rotation.y = Math.PI;\n\t\t\t\tscene.add(parent);\n\n\n\t\t\t\trenderer.render(scene, camera);\n\t\t\t}\n\n\n\n\n\n\t\t\tfunction addObject() {\n\t\t\t\tconst geo = new THREE.Geometry();\n\t\t\t\tsegLength = Math.PI * 2 * radius / segments;\n\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, height / 2, 0));\n\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, -height / 2, 0));\n\t\t\t\tfor (let i = 0; i < Math.floor(segments / 2); i++) {\n\t\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, height / 2, segLength * i));\n\t\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, -height / 2, segLength * i));\n\t\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, height / 2, -segLength * i));\n\t\t\t\t\tgeo.vertices.push(new THREE.Vector3(0, -height / 2, -segLength * i));\n\t\t\t\t}\n\t\t\t\tgeo.faces.push(new THREE.Face3(0, 1, 2));\n\t\t\t\tgeo.faces.push(new THREE.Face3(1, 2, 3));\n\t\t\t\tgeo.faces.push(new THREE.Face3(0, 1, 4));\n\t\t\t\tgeo.faces.push(new THREE.Face3(1, 4, 5));\n\t\t\t\tfor (let i = 1; i < Math.floor(segments / 2); i++) {\n\t\t\t\t\tgeo.faces.push(new THREE.Face3(2 + (i - 1) * 4, 3 + (i - 1) * 4, 6 + (i - 1) * 4));\n\t\t\t\t\tgeo.faces.push(new THREE.Face3(3 + (i - 1) * 4, 6 + (i - 1) * 4, 7 + (i - 1) * 4));\n\t\t\t\t\tgeo.faces.push(new THREE.Face3(4 + (i - 1) * 4, 5 + (i - 1) * 4, 8 + (i - 1) * 4));\n\t\t\t\t\tgeo.faces.push(new THREE.Face3(5 + (i - 1) * 4, 8 + (i - 1) * 4, 9 + (i - 1) * 4));\n\t\t\t\t}\n\t\t\t\ttargetObj = new THREE.Mesh(geo, material);\n\n\t\t\t\tparent.add( targetObj );\n\t\t\t}\n\n\n\n\t\t\tfunction render() {\n\n\t\t\t\trequestAnimationFrame( render );\n\n\n\t\t\t\t//upodate object\n\t\t\t\ttargetObj.geometry.verticesNeedUpdate = true;\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\t\t\t}\n\n\n\n\t\t\t$( '#3D-object-button1' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst theta = 55,\n\t\t\t\t\t  x     = camera.position.x,\n\t\t\t\t\t  z     = camera.position.z,\n\t\t\t\t\t  moveX = x * Math.cos( theta ) - z * Math.sin( theta ),\n\t\t\t\t\t  moveZ = z * Math.cos( theta ) + x * Math.sin( theta );\t\n\n\t\t\t\tTweenMax.to( camera.position, 1.5, {\n\t\t\t\t\tx: moveX,\n\t\t\t\t\tz: moveZ,\n\t\t\t\t\tease: Power0.easeNone,\n\t\t\t\t\tonUpdate: function(){\n\n\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\t$( '#3D-object-button2' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t//1. tween the first segment of each side\n\t\t\t\tconst w = targetObj.geometry.vertices;\n\n\t\t\t\tw[2].x = w[3].x = w[4].x = w[5].x = -Math.sin( 0 ) * segLength;\n\t\t\t\tw[2].z = w[3].z = Math.cos( 0 ) * segLength;\n\t\t\t\tw[4].z = w[5].z = -Math.cos( 0 ) * segLength;\n\n\t\t\t\t//2. rest of the vertex can now refer to the fourth previous vertex, their reference in the algorithm\n\t\t\t\tfor (let i = 6; i < w.length; i++) {\n\n\t\t\t\t\t//which segment from the origin the vertex belongs to\n\t\t\t\t\tconst vIndex   = i,\n\t\t\t\t\t\t  segIndex = Math.floor((vIndex + 2) / 4),\n\t\t\t\t\t\t  negate   = (vIndex / 4 === Math.floor(vIndex / 4) || (vIndex - 1) / 4 === Math.floor((vIndex - 1) / 4)) ? -1 : 1;\n\n\n\t\t\t\t\tconst tx = w[vIndex - 4].x - Math.sin( vIndex * (negate * (2 * segIndex - 1))) * segLength * negate;\n\t\t\t\t\tconst tz = w[vIndex - 4].z + Math.cos( vIndex * (negate * (2 * segIndex - 1))) * segLength * negate;\n\n\n\t\t\t\t\tTweenMax.to( w[vIndex], 1.5, {\n\t\t\t\t\t\tx: tx,\n\t\t\t\t\t\tz: tz,\n\t\t\t\t\t\tease: Power0.easeNone,\n\t\t\t\t\t\tonUpdate: function(){\n\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t}\n\n\n\n\t\t\t});\n\n\t\t\t$( '#3D-object-button3' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst scaleTo = Math.floor(Math.random() * Math.floor( 3 ) );\n\n\t\t\t\tTweenMax.to( targetObj.scale, 1.5, {\n\t\t\t\t\tx: scaleTo,\n\t\t\t\t\ty: scaleTo,\n\t\t\t\t\tz: scaleTo,\n\t\t\t\t\tease: Power0.easeNone,\n\t\t\t\t\tonUpdate: function(){\n\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_OBJ_ANIM_INTERACTION.documentReady );\n\t\n\n\treturn class THREE_OBJ_ANIM_INTERACTION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- 3D Mouse Interaction with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\nexport const THREE_MOUSE_INTERACTION = ( ( module, $, window, document ) => {\n\tif ( window.THREE_MOUSE_INTERACTION === null ) return false;\n\t\n\t\n\t\n    module.THREE_MOUSE_INTERACTION               = module.THREE_MOUSE_INTERACTION || {};\n    module.THREE_MOUSE_INTERACTION.version       = '0.0.4';\n    module.THREE_MOUSE_INTERACTION.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-mouseinteraction-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n        \n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID = '3D-mouseinteraction-three-canvas';\n\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\tradius       = 100,\n\t\t\t\ttheta        = 0,\n\t\t\t\tclickEnable   = false;\n\n\n\t\t\tconst mouseVector = new THREE.Vector2();\n            \n\t\t\tlet\traycaster,\n\t\t\t\tintersects,\n\t\t\t\tINTERSECTED,\n\t\t\t\tnucleus,\n\t\t\t\tatoms = [];\n\n\n\t\t\tfunction init() {\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 75, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set(0, 0, 1300);\n\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t//=================\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera );\n\t\t\t\tcontrols.autoRotate = false;\n\t\t\t\tcontrols.autoRotateSpeed = 0.5;\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = true;\n\t\t\t\tcontrols.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n\t\t\t\tcontrols.dampingFactor = 0.25;\n\t\t\t\tcontrols.screenSpacePanning = false;\n\t\t\t\tcontrols.minDistance = 100;\n\t\t\t\tcontrols.maxDistance = 500;\n\t\t\t\tcontrols.maxPolarAngle = Math.PI / 2;\n\n\t\t\t\tcontrols.target.set( 30, 167, 81 );\n\t\t\t\tcontrols.update();\t\t\t\n\n\n\n\t\t\t\t//=================\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//=================\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\t//=================\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tgenerateGeometry( 'poly', 15 );\n\n\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t// When the mouse moves, call the given function\n\t\t\t\traycaster = new THREE.Raycaster();\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\t\tdocument.getElementById( rendererCanvasID ).addEventListener( 'click', onDocumentMouseDown, false );\n\t\t\t\tdocument.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\n\t\t\t\t\t\t\n\t\t\t\t//++++++++++++++++++++++++++++++++++++++\n\t\t\t\t//++++++++++++++++++++++++++++++++++++++\n\t\t\t\t//Mouse interactions\n\t\t\t\traycaster.setFromCamera( mouseVector, camera );\n\t\t\t\tintersects = raycaster.intersectObjects( atoms );\n\t\t\t\t//intersects = raycaster.intersectObjects( scene.children );\n\t\t\t\tif ( intersects.length > 0 ) {\n\n\t\t\t\t\tif ( INTERSECTED != intersects[ 0 ].object ) {\n\n\t\t\t\t\t\t// restore previous intersection object (if it exists) to its original color\n\t\t\t\t\t\tif ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );\n\n\t\t\t\t\t\tINTERSECTED = intersects[ 0 ].object;\n\t\t\t\t\t\tINTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();\n\t\t\t\t\t\tINTERSECTED.material.emissive.setHex( 0xff0000 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// restore previous intersection object (if it exists) to its original color\n\t\t\t\t\tif ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );\n\n\t\t\t\t\t//by setting current intersection object to \"nothing\"\n\t\t\t\t\tINTERSECTED = null;\n\n\t\t\t\t}\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseDown( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\n\t\t\t\tclickEnable = true;\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//++++++++++++++++++++++++++++++++++++++\n\t\t\t\t//++++++++++++++++++++++++++++++++++++++\n\t\t\t\t//Mouse interactions\n\t\t\t\traycaster.setFromCamera( mouseVector, camera );\n\t\t\t\tintersects = raycaster.intersectObjects( atoms );\n\t\t\t\t//intersects = raycaster.intersectObjects( scene.children );\n\t\t\t\tif ( intersects.length > 0 && intersects[0].object.name.indexOf( 'nucleus' ) >= 0 ) {\n\n                    \n                    const _obj = intersects[0].object;\n                    \n\t\t\t\t\tconsole.log( _obj.name );\n\n\t\t\t\t\t//---Change object size\n\t//\t\t\t\tif ( typeof intersects[ 0 ] != typeof undefined ) {\n\t//\t\t\t\t\tconst obj = intersects[ 0 ].object;\n\t//\n\t//\n\t//\t\t\t\t\tTweenMax.to( obj.scale, 1, {\n\t//\t\t\t\t\t\tx: '+=' + ( 200 - obj.scale.x ) * 0.05,\n\t//\t\t\t\t\t\ty: '+=' + ( 200 - obj.scale.y ) * 0.05,\n\t//\t\t\t\t\t\tz: '+=' + ( 200 - obj.scale.z ) * 0.05\n\t//\t\t\t\t\t});\t\n\t//\n\t//\n\t//\t\t\t\t\tobj.updateMatrix();\t\n\t//\t\n\t//\t\t\t\t}\n\n\n\t\t\t\t\t//---Change object position\n\t\t\t\t\tconst targetAtomPos = _obj.position;\n\t\t\t\t\tconsole.log(targetAtomPos);\n                    \n\t\t\t\t\t// targetAtomPos.tween.pause();\n\t\t\t\t\tconst destinationPos = targetAtomPos.clone();\n\t\t\t\t\tTweenMax.to(controls.target, 2,{ x:destinationPos.x, y:destinationPos.y, z:destinationPos.z});\n\t\t\t\t\tTweenMax.to(camera.position, 2,{ x:destinationPos.x, y:destinationPos.y, z:destinationPos.z+100,\n\t\t\t\t\t\tonUpdate:function(){\n\t\t\t\t\t\t\tcamera.up.set(0,1,0);\n\t\t\t\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\t\t\t},\n                        onComplete: function() {\n                            // get object new coordinates\n                            const screenData = nestedObjectToScreenXYZAndWH( _obj , camera, renderer.domElement.width, renderer.domElement.height );\n                            console.log( `Current object coordinates: {x: ${screenData.position.x}, y: ${screenData.position.y}, z: ${screenData.position.z} }` );  \n\n                            \n                        }\n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\n\t\t\t\t\t //Change object position\n\t\t\t\t\t TweenMax.to(controls.target, 2,{ x:0, y:0, z:0,\n\t\t\t\t\t\tonComplete:function(){\n\t\t\t\t\t\t\tTweenMax.resumeAll();\n\t\t\t\t\t\t}\n\t\t\t\t\t });\n\t\t\t\t}\t\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseUp( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\n\t\t\t\ttheta = 0;\n\t\t\t\tclickEnable = false;\n\n\t\t\t}\n\n\n\n\n\t\t\t/*\n\t\t\t * Batch generation of geometry\n\t\t\t *\n\t\t\t * @param  {String} objectType     - String of geometry type identifier.\n\t\t\t * @param  {Number} numObjects       - The total number of generated objects.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction generateGeometry( objectType, numObjects ) {\n\n\n\t\t\t\t//set color\n\t\t\t\tconst applyVertexColors = function( g, c ) {\n\t\t\t\t\tg.faces.forEach( function( f ) {\n\t\t\t\t\t\tconst n = ( f instanceof THREE.Face3 ) ? 3 : 4;\n\t\t\t\t\t\tfor ( let j = 0; j < n; j ++ ) {\n\t\t\t\t\t\t\tf.vertexColors[ j ] = c;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t};\n\n\t\t\t\tfor ( let i = 0; i < numObjects; i ++ ) {\n\n\n\t\t\t\t\tlet geometry;\n\t\t\t\t\tif ( objectType == \"cube\" ) {\n\t\t\t\t\t\tgeometry = new THREE.BoxGeometry( 1, 1, 1 );\n\t\t\t\t\t} else if ( objectType == \"sphere\" ) {\n\t\t\t\t\t\tgeometry = new THREE.IcosahedronGeometry( 1, 1 );\n\n\t\t\t\t\t} else if ( objectType == \"poly\" ) {\n\t\t\t\t\t\tgeometry = new THREE.CylinderGeometry( 3, 6, 3, 5, 1 );\n\t\t\t\t\t}\n\n\n\t\t\t\t\tconst position = new THREE.Vector3();\n\n\t\t\t\t\tposition.x = Math.random() * 500;\n\t\t\t\t\tposition.y = Math.random() * 400;\n\t\t\t\t\tposition.z = Math.random() * 300;\n\n\t\t\t\t\tconst rotation = new THREE.Euler();\n\n\t\t\t\t\trotation.x = Math.random() * 2 * Math.PI;\n\t\t\t\t\trotation.y = Math.random() * 2 * Math.PI;\n\t\t\t\t\trotation.z = Math.random() * 2 * Math.PI;\n\n\n\t\t\t\t\tconst scale = new THREE.Vector3();\n\n\n\t\t\t\t\t// give the geom's vertices a random color, to be displayed\n\t\t\t\t\tconst color = new THREE.Color();\n\n\t\t\t\t\tcolor.setRGB( Math.random(), Math.random(), Math.random() );\n\t\t\t\t\tapplyVertexColors( geometry, color );\n\n\n\t\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t\tconst defaultMaterial     = new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true, vertexColors: THREE.VertexColors } );\n\n\t\t\t\t\tdisplacementSprite  = new THREE.Mesh( geometry, defaultMaterial );\n\t\t\t\t\tdisplacementSprite.name = 'nucleus-' + i;\n\t\t\t\t\tdisplacementSprite.position.x = Math.random() * 800 - 400;\n\t\t\t\t\tdisplacementSprite.position.y = Math.random() * 800 - 400;\n\t\t\t\t\tdisplacementSprite.position.z = Math.random() * 800 - 400;\n\t\t\t\t\tdisplacementSprite.rotation.x = Math.random() * 2 * Math.PI;\n\t\t\t\t\tdisplacementSprite.rotation.y = Math.random() * 2 * Math.PI;\n\t\t\t\t\tdisplacementSprite.rotation.z = Math.random() * 2 * Math.PI;\n\t\t\t\t\tdisplacementSprite.scale.x = Math.random() + 5;\n\t\t\t\t\tdisplacementSprite.scale.y = Math.random() + 5;\n\t\t\t\t\tdisplacementSprite.scale.z = Math.random() + 5;\n\n\n\t\t\t\t\tscene.add( displacementSprite );\n\t\t\t\t\tatoms.push( displacementSprite );\n\n\n\t\t\t\t}\n\n\n\t\t\t}\n            \n            \n            \n            \n          \n            /*\n             * Get Object Coordinate, Width and Height From Screen\n             * Note: No data may be acquired without delay !!\n             *\n\t\t\t * @param  {THREE.Mesh} obj                           - Mesh object.\n             * @param  {THREE.PerspectiveCamera} camera           - Mesh object.\n\t\t\t * @param  {Number} rendererWidth                     - Width of renderer.\n             * @param  {Number} rendererHeight                    - Height of renderer.\n             * @param  {String} type                              - Build type.\n             * @return {JSON}\n             */\n\t\t\t/* @usage: \n\t\t\t   const screenPos = nestedObjectToScreenXYZAndWH( displacementSprite , camera, renderer.domElement.width, renderer.domElement.height );\n\t\t\t  */\n\t\t\tfunction nestedObjectToScreenXYZAndWH( obj, camera, rendererWidth, rendererHeight ) {\n                \n                const vector = new THREE.Vector3();\n                vector.setFromMatrixPosition( obj.matrixWorld );\n                const widthHalf = rendererWidth/2;\n                const heightHalf = rendererHeight/2;\n                const aspect = rendererHeight/rendererWidth;\n                vector.project( camera );\n                vector.x = ( vector.x * widthHalf ) + widthHalf;\n                vector.y = - ( vector.y * heightHalf ) + heightHalf;\n\n                //compute bounding box after\n                const boxInfo =  new THREE.Box3().setFromObject( obj ).getSize( new THREE.Vector3() );\n\n                \n                //Change it to fit the width and height of the stage based on the current value\n                const ratioFixedNum = 7;\n                \n                //correction\n                return {\n                    position: vector,\n                    width: ( boxInfo.x * ratioFixedNum * aspect ).toFixed( 2 ),\n                    height: ( boxInfo.y * ratioFixedNum * aspect ).toFixed( 2 )\n                };  \n\t\t\t}\n\t\t\t\n\t\t\t\n            \n           \n            \n            /*\n             * Generate random number between two numbers\n             *\n             * @return {Number}\n             */\n\t\t\tfunction getRandomFloat(min, max) {\n\t\t\t\treturn Math.random() * (max - min) + min;\n\t\t\t}\n\n            \n            /*\n             * Returns the degree from radian.\n             *\n             * @return {Number} rad - Value of radian.\n             * @return {Number}\n             * @usage: \n             \n               angle = rad / ( Math.PI / 180 )  = rad * ( 180/Math.PI );\n             */\n            \n            function getDegree( rad ) {\n                return rad / Math.PI * 180;\n            }\n\n            \n            /*\n             * Returns the radian degree .\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n                \n                rad = Math.PI / 180 * 30 ;\n             */\n            function getRadian( deg ) {\n                return deg * Math.PI / 180;\n            }\n\n            \n            /*\n             * Convert three.js scene rotation to polar coordinates\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n             \n                x = r * cos（θ）\n                y = r * sin（θ）  \n             */\n            function getPolarCoord(x, y, z) {\n                const nx = Math.cos(x) * Math.cos(y) * z,\n                      nz = Math.cos(x) * Math.sin(y) * z,\n                      ny = Math.sin(x) * z;\n                return new THREE.Vector3(nx, ny, nz);\n            }\n\n            \n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n    };\n\n    module.components.documentReady.push( module.THREE_MOUSE_INTERACTION.documentReady );\n\n\treturn class THREE_MOUSE_INTERACTION {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n","/* \n *************************************\n * <!-- 3D Mouse Interaction with three.js -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const THREE_MOUSE_INTERACTION2 = ( ( module, $, window, document ) => {\n\tif ( window.THREE_MOUSE_INTERACTION2 === null ) return false;\n\t\n\t\n\t\n    module.THREE_MOUSE_INTERACTION2               = module.THREE_MOUSE_INTERACTION2 || {};\n    module.THREE_MOUSE_INTERACTION2.version       = '0.0.5';\n    module.THREE_MOUSE_INTERACTION2.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-mouseinteraction2-three-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\n\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            const rendererCanvasID          = '3D-mouseinteraction2-three-canvas';\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta         = 0,\n\t\t\t\tclickEnable   = false;\n\n\n\t\t\t// controls\n\t\t\tconst scroller = new CameraScroller({direction: \"y\"});\n\n\n\t\t\t// mouse\n\t\t\tconst mouseVector = new THREE.Vector2();\n            \n\t\t\tlet\traycaster,\n\t\t\t\tintersects,\n\t\t\t\tINTERSECTED,\n\t\t\t\tnucleus,\n\t\t\t\tatoms = [];\n\n\n\n\t\t\tfunction init() {\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 70, windowWidth / windowHeight, 1, 50000 );\n\t\t\t\tcamera.position.set( 0, 0, 20000 );\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 500, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\n\n\t\t\t\t//WebGL Renderer\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\t\t\t\tscroller.init( renderer.domElement );\n\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\tgenerateGeometry( 500 );\n\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t\t// When the mouse moves, call the given function\n\t\t\t\traycaster = new THREE.Raycaster();\n\t\t\t\tdocument.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\t\tdocument.getElementById( rendererCanvasID ).addEventListener( 'click', onDocumentMouseDown, false );\n\t\t\t\tdocument.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\n\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n\t\t\t\t//update controls\n\t\t\t\tcamera.position.y = scroller.getScrollPosY()*10000;\n\n\t\t\t\t//Mouse interactions\n\t\t\t\traycaster.setFromCamera( mouseVector, camera );\n\t\t\t\tintersects = raycaster.intersectObjects( atoms );\n\t\t\t\t//intersects = raycaster.intersectObjects( scene.children );\n\t\t\t\tif ( intersects.length > 0 ) {\n\n\n\t\t\t\t\tif ( INTERSECTED != intersects[ 0 ].object ) {\n\n\t\t\t\t\t\t// restore previous intersection object (if it exists) to its original color\n\t\t\t\t\t\tif ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );\n\n\t\t\t\t\t\tINTERSECTED = intersects[ 0 ].object;\n\t\t\t\t\t\tINTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();\n\t\t\t\t\t\tINTERSECTED.material.emissive.setHex( 0xff0000 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// restore previous intersection object (if it exists) to its original color\n\t\t\t\t\tif ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );\n\n\t\t\t\t\t//by setting current intersection object to \"nothing\"\n\t\t\t\t\tINTERSECTED = null;\n\n\t\t\t\t}\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseMove( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseDown( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\n\t\t\t\tclickEnable = true;\n\n\t\t\t\t//Mouse interactions\n\t\t\t\traycaster.setFromCamera( mouseVector, camera );\n\t\t\t\tintersects = raycaster.intersectObjects( atoms );\n\t\t\t\t//intersects = raycaster.intersectObjects( scene.children );\n\n\n\n\n\t\t\t\tif ( intersects.length > 0 && intersects[0].object.name.indexOf( 'nucleus' ) >= 0 ) {\n\n                    \n                    const _obj = intersects[0].object;\n                    \n\t\t\t\t\tconst targetAtomPos = _obj.position;\n                    \n\t\t\t\t\tconsole.log(targetAtomPos); \n                    \n\n\t\t\t\t\t// targetAtomPos.tween.pause();\n\t\t\t\t\tconst destinationPos = targetAtomPos.clone();\n\n\t\t\t\t\t// jump to new position\n\t\t\t\t\t// y movement via scroller object\n\t\t\t\t\t// x and z movement via TWEEN\n\t\t\t\t\tscroller.targetPosition = _obj.position.y/10000;\n\t\t\t\t\tconst targetPos = { x: _obj.position.x, y:_obj.position.y, z:_obj.position.z+1100};\n\n\t\t\t\t\tTweenMax.to( targetPos, 2,{ x:destinationPos.x, y:destinationPos.y, z:destinationPos.z});\n\t\t\t\t\tTweenMax.to( camera.position, 2,{ x:destinationPos.x, y:destinationPos.y, z:destinationPos.z+1000,\n\t\t\t\t\t\tonUpdate:function(){\n\t\t\t\t\t\t\tcamera.up.set(0,1,0);\n\t\t\t\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\t\t\t},\n                        onComplete: function() {\n                            \n                            // get object new coordinates\n                            const screenData = nestedObjectToScreenXYZAndWH( _obj, camera, renderer.domElement.width, renderer.domElement.height );\n                            console.log( `Current object coordinates: {x: ${screenData.position.x}, y: ${screenData.position.y}, z: ${screenData.position.z} }` ); \n                            \n                        }\n                                                     \n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\n\n\t\t\t\t\t//restore scroller position\n\t\t\t\t\tscroller.targetPosition = 0;\n\n\t\t\t\t\t//restore camera position\n\t\t\t\t\tTweenMax.to( camera.position, 2,{ x:0, y:0, z:20000,\n\t\t\t\t\t\tonComplete:function(){\n\t\t\t\t\t\t\tTweenMax.resumeAll();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\n\n\t\t\t\t}\t\n\n\n\n\t\t\t}\n\n\n\t\t\tfunction onDocumentMouseUp( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmouseVector.x = ( event.clientX / window.innerWidth ) * 2 - 1;\n\t\t\t\tmouseVector.y = - ( event.clientY / window.innerHeight ) * 2 + 1;\n\n\t\t\t\ttheta = 0;\n\t\t\t\tclickEnable = false;\n\n\t\t\t}\n\n\n\n\n\t\t\t/*\n\t\t\t * Batch generation of geometry\n\t\t\t *\n\t\t\t * @param  {Number} numObjects       - The total number of generated objects.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction generateGeometry( numObjects ) {\n\n\t\t\t\tconst geometry = new THREE.Geometry();\n\n\t\t\t\tconst applyVertexColors = function(g, c) {\n\t\t\t\t\tg.faces.forEach(function(f) {\n\t\t\t\t\t\tconst n = (f instanceof THREE.Face3) ? 3 : 4;\n\t\t\t\t\t\tfor (let j = 0; j < n; j++) {\n\t\t\t\t\t\t\tf.vertexColors[j] = c;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tfor ( let i = 0; i < numObjects; i ++ ) {\n\n\t\t\t\t\tlet geom; \n                    const color = new THREE.Color();\n\n\n\n\t\t\t\t\tconst position = new THREE.Vector3();\n\t\t\t\t\tposition.x = -9000 + (i % 10) * 2000;\n\t\t\t\t\tposition.y = -9000 + Math.floor((i % 100) / 10) * 2000;\n\t\t\t\t\tposition.z = -1000 + Math.floor(i / 100) * 2000;\n\n\t\t\t\t\tconst rotation = new THREE.Euler();\n\t\t\t\t\trotation.x = 0;\n\t\t\t\t\trotation.y = 0;\n\t\t\t\t\trotation.z = 0;\n\n\t\t\t\t\tconst scale = new THREE.Vector3();\n\t\t\t\t\tscale.x = 1200;\n\t\t\t\t\tscale.y = 600;\n\t\t\t\t\tscale.z = 200;\n\n\t\t\t\t\tgeom = new THREE.BoxGeometry( 1, 1, 1 );\n\t\t\t\t\tcolor.setRGB( 0, 0, Math.random() + 0.1 );\n\n\n\n\t\t\t\t\t// give the geom's vertices a random color, to be displayed\n\t\t\t\t\tapplyVertexColors( geom, color );\n\n\n\t\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t\tconst defaultMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true, vertexColors: THREE.VertexColors } );\n\n\t\t\t\t\tdisplacementSprite = new THREE.Mesh( geom, defaultMaterial );\n\t\t\t\t\tscene.add( displacementSprite );\n\n\t\t\t\t\tconst object = new THREE.Mesh( geom );\n\t\t\t\t\tdisplacementSprite.name = 'nucleus-' + i;\n\t\t\t\t\tdisplacementSprite.position.copy( position );\n\t\t\t\t\tdisplacementSprite.rotation.copy( rotation );\n\t\t\t\t\tdisplacementSprite.scale.copy( scale );\n\t\t\t\t\tdisplacementSprite.updateMatrix();\n\n\t\t\t\t\tscene.add( displacementSprite );\n\t\t\t\t\tatoms.push( displacementSprite );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\n            \n\t\t\t/*\n\t\t\t * CameraSroller\n\t\t\t * Scrolls the camera vertically (up/down) by mouse, scrollwhell and touch\n\t\t\t * including a velocity based animation\n\t\t\t */\n\t\t\tfunction CameraScroller(options) {\n\t\t\t\tthis.targetPosition = 0;\n\t\t\t\tthis.targetPositionOnMouseDown = 0;\n\t\t\t\tthis.mouseY = 0;\n\t\t\t\tthis.mouseYOnMouseDown = 0;\n\t\t\t\tthis.scrollPosY = 0;\n\t\t\t\tthis.domElem = undefined;\n\t\t\t\tthis.init = function(domEl) {\n\t\t\t\t\tthis.domElem = domEl;\n\t\t\t\t\tthis.domElem.addEventListener('mousedown', this.onDocumentMouseDown, false);\n\t\t\t\t\tthis.domElem.addEventListener('touchstart', this.onDocumentTouchStart, browser.supportsPassive ? { passive: true } : false);\n\t\t\t\t\tthis.domElem.addEventListener('touchmove', this.onDocumentTouchMove, browser.supportsPassive ? { passive: true } : false);\n\t\t\t\t\tthis.domElem.addEventListener('wheel', this.onDocumentMousewheel, browser.supportsPassive ? { passive: true } : false);\n\t\t\t\t};\n\t\t\t\tthis.onDocumentMouseDown = function(event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.domElem.addEventListener('mousemove', this.onDocumentMouseMove, false);\n\t\t\t\t\tthis.domElem.addEventListener('mouseup', this.onDocumentMouseUp, false);\n\t\t\t\t\tthis.domElem.addEventListener('mouseout', this.onDocumentMouseOut, false);\n\t\t\t\t\tthis.mouseYOnMouseDown = event.clientY;\n\t\t\t\t\tthis.targetPositionOnMouseDown = this.targetPosition;\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentMouseMove = function(event) {\n\t\t\t\t\tthis.mouseY = event.clientY;\n\t\t\t\t\tthis.targetPosition = this.targetPositionOnMouseDown + (this.mouseY - this.mouseYOnMouseDown) * 0.02;\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentMouseUp = function(event) {\n\t\t\t\t\tthis.domElem.removeEventListener('mousemove', this.onDocumentMouseMove, false);\n\t\t\t\t\tthis.domElem.removeEventListener('mouseup', this.onDocumentMouseUp, false);\n\t\t\t\t\tthis.domElem.removeEventListener('mouseout', this.onDocumentMouseOut, false);\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentMouseOut = function(event) {\n\t\t\t\t\tthis.domElem.removeEventListener('mousemove', this.onDocumentMouseMove, false);\n\t\t\t\t\tthis.domElem.removeEventListener('mouseup', this.onDocumentMouseUp, false);\n\t\t\t\t\tthis.domElem.removeEventListener('mouseout', this.onDocumentMouseOut, false);\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentTouchStart = function(event) {\n\t\t\t\t\tif (event.touches.length == 1) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.mouseYOnMouseDown = event.touches[0].pageY;\n\t\t\t\t\t\tthis.targetPositionOnMouseDown = this.targetPosition;\n\t\t\t\t\t}\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentTouchMove = function(event) {\n\t\t\t\t\tif (event.touches.length == 1) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.mouseY = event.touches[0].pageY;\n\t\t\t\t\t\tthis.targetPosition = this.targetPositionOnMouseDown + (this.mouseY - this.mouseYOnMouseDown) * 0.02;\n\t\t\t\t\t}\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.onDocumentMousewheel = function(event) {\n\t\t\t\t\tthis.targetPosition = this.targetPosition + event.wheelDeltaY * 0.005;\n\t\t\t\t}.bind(this);\n\t\t\t\tthis.getScrollPosY = function() {\n\t\t\t\t\tthis.scrollPosY = this.scrollPosY + (this.targetPosition - this.scrollPosY) * 0.05; // 0.05=long scroll delay, 0.15=short delay\n\t\t\t\t\treturn this.scrollPosY\n\t\t\t\t}.bind(this);\n\n\t\t\t}\n\n            \n            \n          \n            /*\n             * Get Object Coordinate, Width and Height From Screen\n             * Note: No data may be acquired without delay !!\n             *\n\t\t\t * @param  {THREE.Mesh} obj                           - Mesh object.\n             * @param  {THREE.PerspectiveCamera} camera           - Mesh object.\n\t\t\t * @param  {Number} rendererWidth                     - Width of renderer.\n             * @param  {Number} rendererHeight                    - Height of renderer.\n             * @param  {String} type                              - Build type.\n             * @return {JSON}\n             */\n\t\t\t/* @usage: \n\t\t\t   const screenPos = nestedObjectToScreenXYZAndWH( displacementSprite , camera, renderer.domElement.width, renderer.domElement.height );\n\t\t\t  */\n\t\t\tfunction nestedObjectToScreenXYZAndWH( obj, camera, rendererWidth, rendererHeight ) {\n                \n                const vector = new THREE.Vector3();\n                vector.setFromMatrixPosition( obj.matrixWorld );\n                const widthHalf = rendererWidth/2;\n                const heightHalf = rendererHeight/2;\n                const aspect = rendererHeight/rendererWidth;\n                vector.project( camera );\n                vector.x = ( vector.x * widthHalf ) + widthHalf;\n                vector.y = - ( vector.y * heightHalf ) + heightHalf;\n\n                //compute bounding box after\n                const boxInfo =  new THREE.Box3().setFromObject( obj ).getSize( new THREE.Vector3() );\n\n                \n                //Change it to fit the width and height of the stage based on the current value\n                const ratioFixedNum = 7;\n                \n                //correction\n                return {\n                    position: vector,\n                    width: ( boxInfo.x * ratioFixedNum * aspect ).toFixed( 2 ),\n                    height: ( boxInfo.y * ratioFixedNum * aspect ).toFixed( 2 )\n                };  \n\t\t\t}\n\t\t\t\n\t\t\t\n            \n           \n            \n            /*\n             * Generate random number between two numbers\n             *\n             * @return {Number}\n             */\n\t\t\tfunction getRandomFloat(min, max) {\n\t\t\t\treturn Math.random() * (max - min) + min;\n\t\t\t}\n\n            \n            /*\n             * Returns the degree from radian.\n             *\n             * @return {Number} rad - Value of radian.\n             * @return {Number}\n             * @usage: \n             \n               angle = rad / ( Math.PI / 180 )  = rad * ( 180/Math.PI );\n             */\n            \n            function getDegree( rad ) {\n                return rad / Math.PI * 180;\n            }\n\n            \n            /*\n             * Returns the radian degree .\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n                \n                rad = Math.PI / 180 * 30 ;\n             */\n            function getRadian( deg ) {\n                return deg * Math.PI / 180;\n            }\n\n            \n            /*\n             * Convert three.js scene rotation to polar coordinates\n             *\n             * @return {Number} deg - Value of degree.\n             * @return {Number}\n             * @usage: \n             \n                x = r * cos（θ）\n                y = r * sin（θ）  \n             */\n            function getPolarCoord(x, y, z) {\n                const nx = Math.cos(x) * Math.cos(y) * z,\n                      nz = Math.cos(x) * Math.sin(y) * z,\n                      ny = Math.sin(x) * z;\n                return new THREE.Vector3(nx, ny, nz);\n            }\n\n            \n            \n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\n\t\t}();\n\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_MOUSE_INTERACTION2.documentReady );\n\t\n\n\treturn class THREE_MOUSE_INTERACTION2 {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n","\n/**\n * Make all faces use unique vertices\n * so that each face can be separated from others\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.ExplodeModifier = function () {\n\n};\n\nTHREE.ExplodeModifier.prototype.modify = function ( geometry ) {\n\n\tvar vertices = [];\n\n\tfor ( var i = 0, il = geometry.faces.length; i < il; i ++ ) {\n\n\t\tvar n = vertices.length;\n\n\t\tvar face = geometry.faces[ i ];\n\n\t\tvar a = face.a;\n\t\tvar b = face.b;\n\t\tvar c = face.c;\n\n\t\tvar va = geometry.vertices[ a ];\n\t\tvar vb = geometry.vertices[ b ];\n\t\tvar vc = geometry.vertices[ c ];\n\n\t\tvertices.push( va.clone() );\n\t\tvertices.push( vb.clone() );\n\t\tvertices.push( vc.clone() );\n\n\t\tface.a = n;\n\t\tface.b = n + 1;\n\t\tface.c = n + 2;\n\n\t}\n\n\tgeometry.vertices = vertices;\n\n};\nexport default THREE.ExplodeModifier;","/* \n *************************************\n * <!-- 3D Shatter Slider -->\n *************************************\n */\n\n/**\n * module.THREE_SHATTER_SLIDER\n * \n * @requires ./examples/assets/js/min/three.min.js\n * @requires ./src/plugins/THREE\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\nimport ExplodeModifier from '@uixkit/plugins/THREE/modifiers/ExplodeModifier';\n\n\nimport '../scss/_style.scss';\n\n\nexport const THREE_SHATTER_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.THREE_SHATTER_SLIDER === null ) return false;\n\t\n\t\n    module.THREE_SHATTER_SLIDER               = module.THREE_SHATTER_SLIDER || {};\n    module.THREE_SHATTER_SLIDER.version       = '0.0.9';\n    module.THREE_SHATTER_SLIDER.documentReady = function( $ ) {\n\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '.uix-3d-slider--shatter' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\tlet sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n\n\t\t\tconst $sliderWrapper            = $( '.uix-3d-slider--shatter' ),\n\t\t\t\t  //Basic webGL renderers \n\t\t\t\t  renderLoaderID            = 'uix-3d-slider--shatter__loader',\n\t\t\t\t  rendererOuterID           = 'uix-3d-slider--shatter__canvas-container',\n\t\t\t\t  rendererCanvasID          = 'uix-3d-slider--shatter__canvas';\n\n            let animSpeed  = 1000;\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tmaterial,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n\n\t\t\tlet offsetWidth   = 475, //Set the display width of the objects in the Stage\n\t\t\t\toffsetHeight  = 375, //Set the display height of the objects in the Stage\n\t\t\t\tallSources    = [],\n\t\t\t\tobjTotal,\n\t\t\t\tobjLoaded = false;\n\n\t\t\t\n\t\t\n\t\t\tlet sources = [];\n\t\t\tlet isAnimating = false;\n\t\t\t\n\t\t\t\n\t\t\t// constants\n\t\t\tlet activeSlider = 0;\n\t\t\t\n\t\t\tfunction wrapperInit() {\n\t\t\t\t\n\t\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\t\tconst $this                    = $( this );\n                    \n\t\t\t\t\tconst $items                   = $this.find( '.uix-3d-slider--shatter__item' ),\n\t\t\t\t\t\t  $first                   = $items.first(),\n\t\t\t\t\t\t  itemTotal                = $items.length,\n                          activated                = $this.data( 'activated' ); \n\t\t\t\t\n                    \n                    if ( typeof activated === typeof undefined || activated === 0 ) {\n\n\n\n                        //Get parameter configuration from the data-* attribute of HTML\n                        let\tdataControlsPagination   = $this.data( 'controls-pagination' ),\n                            dataControlsArrows       = $this.data( 'controls-arrows' ),\n                            dataFilterTexture        = $this.data( 'filter-texture' ),\n                            dataDraggable            = $this.data( 'draggable' ),\n                            dataDraggableCursor      = $this.data( 'draggable-cursor' ),\n                            dataSpeed                = $this.data( 'speed' ),\n                            dataCountTotal           = $this.data( 'count-total' ),\n                            dataCountCur             = $this.data( 'count-now' );\n\n\n                        if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-3d-slider--shatter__pagination';\n                        if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-3d-slider--shatter__arrows';\n                        if ( typeof dataLoop === typeof undefined ) dataLoop = false;\n                        if ( typeof dataFilterTexture === typeof undefined || !dataFilterTexture || dataFilterTexture == '' ) dataFilterTexture = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n                        if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                        if ( typeof dataDraggableCursor === typeof undefined ) dataDraggableCursor = 'move';\n\n\n                        //Autoplay parameters\n                        let dataAuto                   = $this.data( 'auto' ),\n                            dataTiming                 = $this.data( 'timing' ),\n                            dataLoop                   = $this.data( 'loop' );  \n\n                        if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                        if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                        if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n                        \n\n                        //Autoplay times\n                        let playTimes;\n                        //A function called \"timer\" once every second (like a digital watch).\n                        $this[0].animatedSlides;\n\n\n                        //If arrows does not exist on the page, it will be added by default, \n                        //and the drag and drop function will be activated.\n                        if ( $( dataControlsArrows ).length == 0 ) {\n                            $( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-3d-slider--shatter__arrows '+dataControlsArrows.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-3d-slider--shatter__arrows--prev\"></a><a href=\"#\" class=\"uix-3d-slider--shatter__arrows--next\"></a></div>' );\n                        }\n\n\n\n                        //Prevent bubbling\n                        if ( itemTotal == 1 ) {\n                            $( dataControlsPagination ).hide();\n                            $( dataControlsArrows ).hide();\n                        }\n\n\n                        //Initialize the controlers classes\n                        //-------------------------------------\t\n                        $( dataControlsPagination ).find( 'ul > li' ).first().addClass( 'is-active' );\n\n\n\n\n                        //Initialize the wrapper width and height\n                        //-------------------------------------\t\n                        $this.css( 'height', windowHeight + 'px' );\n\n\n                        //Load slides to canvas\n                        //-------------------------------------\t\n                        if ( $( '#' + rendererCanvasID ).length == 0 ) {\n                            $this.prepend( '<div id=\"'+rendererOuterID+'\" class=\"uix-3d-slider--shatter__canvas-container\"><canvas id=\"'+rendererCanvasID+'\"></canvas></div>' );\n\n                        }\n\n\n                        //Get the animation speed\n                        //-------------------------------------\t\n                        if ( typeof dataSpeed != typeof undefined && dataSpeed != false ) {\n                            animSpeed = dataSpeed;\n                        }\n\n\n                        //Initialize the first item container\n                        //-------------------------------------\t\t\n                        $items.addClass( 'next' );\n                        $first.addClass( 'is-active' );\n\n                        \n\n                        //Add identifiers for the first and last items\n                        //-------------------------------------\t\t\n                        $items.last().addClass( 'last' );\n                        $items.first().addClass( 'first' );\n\n\n\n                        //Get all images and videos\n                        //-------------------------------------\t\t\n                        $items.each( function()  {\n                            const _item = $( this );\n\n                            if ( _item.find( 'video' ).length > 0 ) {\n\n                                //Returns the dimensions (intrinsic height and width ) of the video\n                                const video    = document.getElementById( _item.find( 'video' ).attr( 'id' ) );\n                                let videoURL = _item.find( 'source:first' ).attr( 'src' );\n                                \n                                if ( typeof videoURL === typeof undefined ) videoURL = _item.attr( 'src' ); \n\n                                if ( typeof videoURL != typeof undefined ) {\n                                    sources.push(\n                                        {\n                                            \"url\": videoURL,\n                                            \"id\": _item.find( 'video' ).attr( 'id' ),\n                                            \"type\": 'video'\n                                        }\n                                    );\n                                }\n\n\n\n\n                            } else {\n\n                                let imgURL   = _item.find( 'img' ).attr( 'src' );\n\n                                if ( typeof imgURL != typeof undefined ) {\n\n                                    sources.push(\n                                        {\n                                            \"url\": imgURL,\n                                            \"id\": 'img-' + UixGUID.create(),\n                                            \"type\": 'img'\n                                        }\n                                    );\n                                }\n\n\n                            }\t\n\n                        });\n\n\n\n                        //Pagination dots \n                        //-------------------------------------\t\n                        let _dot       = '',\n                            _dotActive = '';\n                        _dot += '<ul>';\n                        for ( let i = 0; i < itemTotal; i++ ) {\n\n                            _dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n                            _dot += '<li '+_dotActive+' data-index=\"'+i+'\"><a href=\"javascript:\"></a></li>';\n                        }\n                        _dot += '</ul>';\n\n                        if ( $( dataControlsPagination ).html() == '' ) $( dataControlsPagination ).html( _dot );\n\n\n                        //Fire the slider transtion with buttons\n                        $( dataControlsPagination ).find( 'ul > li' ).off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n\n\n                            //Prevent buttons' events from firing multiple times\n                            const $btn = $( this );\n                            if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'true' );\n                            \n                            $( dataControlsPagination ).find( 'ul > li' )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'false' ); next(); });   \n                            \n                            \n                            //\n                            const slideCurId  = $( dataControlsPagination ).find( 'ul > li.is-active' ).index(),\n                                  slideNextId = $( this ).index();\n\n\n                            //Determine the direction\n                            let curDir = 'prev';\n                            if ( $( this ).attr( 'data-index' ) > slideCurId ) {\n                                curDir = 'next';\n                            }\n\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, curDir, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\t\n\n\n                        });\n\n                        //Next/Prev buttons\n                        //-------------------------------------\t\t\n                        const _prev = $( dataControlsArrows ).find( '.uix-3d-slider--shatter__arrows--prev' ),\n                              _next = $( dataControlsArrows ).find( '.uix-3d-slider--shatter__arrows--next' );\n\n                        $( dataControlsArrows ).find( 'a' ).attr( 'href', 'javascript:' );\n\n                        $( dataControlsArrows ).find( 'a' ).removeClass( 'is-disabled' );\n                        if ( !dataLoop ) {\n                            _prev.addClass( 'is-disabled' );\n                        }\n\n\n                        _prev.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) - 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'prev', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n                        });\n\n                        _next.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) + 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'next', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n\n                        });\n\n\n\n                        //Autoplay Slider\n                        //-------------------------------------\t\t\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        } \n                        \n\n                        //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                        $this.data( 'activated', 1 );\n\n                    }//endif activated\n                        \n\n\t\t\t\t});// end each\t\t\t\t\n\t\t\t}\n\n\n\t\t\t\n\t\t\tfunction init() {\n\n\t\t\t\t\n\n\t\t\t\t//Core 3D stage begin\n\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 10,  2500 ); // FlyCamera // FlyControls\n\t\t\t\tcamera.movementSpeed = 100.0;\n\t\t\t\tcamera.rollSpeed = 0.5;\n\t\t\t\tcamera.position.y = 60;\n\t\t\t\tcamera.position.z = 500;\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 0, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\t // create a render and set the size\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setPixelRatio( window.devicePixelRatio );\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera, renderer.domElement );\n\t\t\t\tcontrols.autoRotate = false;\n\t\t\t\tcontrols.autoRotateSpeed = 0.5;\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = false;\n\t\t\t\tcontrols.target.set(0, 0, 0 );\n\t\t\t\tcontrols.update();\t\t\t\n\n\n\n\t\t\t\t//A loader for loading all images from array.\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\t\t\t\tloader.crossOrigin = 'anonymous';\n\n\n\t\t\t\t//Preload\n\t\t\t\tobjTotal = sources.length;\n\t\t\t\n\t\t\t\tsources.forEach( function( element, index ) {\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tif ( element.type == 'img' ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tloader.load(\n\t\t\t\t\t\t\t// resource URL\n\t\t\t\t\t\t\telement.url,\n\n\t\t\t\t\t\t\t// onLoad callback\n\t\t\t\t\t\t\tfunction ( texture ) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tloadSource( texture, index, offsetWidth, offsetHeight, objTotal, $( '#' + renderLoaderID ) );\n\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t// onProgress callback currently not supported\n\t\t\t\t\t\t\tundefined,\n\n\t\t\t\t\t\t\t// onError callback\n\t\t\t\t\t\t\tfunction ( err ) {\n\t\t\t\t\t\t\t\tconsole.error( 'An error happened.' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tconst texture = new THREE.VideoTexture( document.getElementById( element.id ) );\n\t\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\n\t\t\t\t\t\ttexture.magFilter = THREE.LinearFilter;\n\t\t\t\t\t\ttexture.format = THREE.RGBFormat;\n\n\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\ttexture.image.autoplay = true;\n\t\t\t\t\t\ttexture.image.loop = true;\n\t\t\t\t\t\ttexture.image.currentTime = 0;\n\t\t\t\t\t\ttexture.image.muted = false;\n\t\t\t\t\t\ttexture.image.pause();\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tloadSource( texture, index, offsetWidth, offsetHeight, objTotal, $( '#' + renderLoaderID ) );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\n\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\t//renderer.setClearColor( 0x000000 );\t\n\n\n\n\t\t\t\t//Animating Three.js vertices\n\t\t\t\tallSources.forEach( function ( element, index ) {\n\t\t\t\t\telement.geometry.verticesNeedUpdate = true;\n\t\t\t\t});\n\n\n\n\t\t\t\t//check all images loaded\n\t\t\t\tif ( typeof allSources != typeof undefined ) {\n\t\t\t\t\tif ( !objLoaded && allSources.length === objTotal ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tallSources.forEach( function ( element, index ) {\n\t\t\t\t\t\t\tscene.add( element );\n\n\n\t\t\t\t\t\t\t//if the first object is video and play it\n\t\t\t\t\t\t\tif ( index == 0 ) {\n\t\t\t\t\t\t\t\tconst videoObCur =  element.material.map.image;\n\t\t\t\t\t\t\t\tif ( videoObCur.localName == 'video' ) {\n\t\t\t\t\t\t\t\t\tvideoObCur.autoplay = true;\n\t\t\t\t\t\t\t\t\tvideoObCur.currentTime = 0;\n\t\t\t\t\t\t\t\t\tvideoObCur.muted = true;\n\t\t\t\t\t\t\t\t\tvideoObCur.play();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//initialize all objects\n\t\t\t\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\t\t\t\tconst fragment =  element.geometry.vertices;\n\n\t\t\t\t\t\t\t\tfor ( let i = 0; i < fragment.length; i++ ) {\n\n\t\t\t\t\t\t\t\t\tconst pos = new THREE.Vector3();\n\t\t\t\t\t\t\t\t\tconst final = Math.random();\n\n\t\t\t\t\t\t\t\t\tpos.x = Math.random();\n\t\t\t\t\t\t\t\t\tpos.y = Math.random() * (50 * i);\n\t\t\t\t\t\t\t\t\tpos.z = Math.random() * -300;\n\n\t\t\t\t\t\t\t\t\tfragment[i].x = pos.x;\n\t\t\t\t\t\t\t\t\tfragment[i].y = pos.y;\n\t\t\t\t\t\t\t\t\tfragment[i].z = pos.z;\n\n\t\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconsole.log( element );\n\t\t\t\t\t\t});\n\t\t\t\t\t\tobjLoaded = true;\n\n\n\t\t\t\t\t}\t\n\n\t\t\t\t}\n\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\t\t\t\n\n\t\t\t/*\n\t\t\t * Load Source\n\t\t\t *\n\t\t\t * @param  {Three.MeshBasicMaterial.map} texture         - Returns a new texture object which can directly be used for material creation.\n\t\t\t * @param  {Number} index           - Index of image or video.\n\t\t\t * @param  {Number} w               - The width of an image or video, in pixels. \n\t\t\t * @param  {Number} h               - The height of an image or video, in pixels. \n\t\t\t * @param  {Number} total           - Total number of preload images or video.\n\t\t\t * @param  {Element|String} loading         - Progress bar display control.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction loadSource( texture, index, w, h, total, loading ) {\n\n\t\t\t\tconst imgW = w,\n\t\t\t\t\t  imgH = h;\n\n\t\t\t\t\n\t\t\t\t// Immediately use the texture for material creation\n\t\t\t\t// Create a texture loader so we can load our image file\n\t\t\t\tmaterial = new THREE.MeshBasicMaterial( {\n\t\t\t\t\tmap: texture\n\t\t\t\t } );\n\n\n\t\t\t\tconst geometryExplode = new THREE.BoxGeometry( imgW, imgH, 13 ),\n\n\n\t\t\t\tdisplacementSprite = new THREE.Mesh( geometryExplode, material );\n\n\t\t\t\tdisplacementSprite.minFilter = THREE.LinearFilter;\n\t\t\t\tdisplacementSprite.overdraw = true;\n\t\t\t\tdisplacementSprite.position.set(0,0,0);\n\n\n\t\t\t\tgeometryExplode.center();\n\n\t\t\t\t// Shattering Images\n\t\t\t\tconst explodeModifier = new THREE.ExplodeModifier();\n\t\t\t\texplodeModifier.modify( geometryExplode );\n\n\t\t\t\t// add some additional vars to the\n\t\t\t\t// fragments to ensure we can do physics\n\t\t\t\t// and so on\n\t\t\t\tfor ( let i = 0; i < geometryExplode.vertices.length; i++ ) {\n\t\t\t\t\tconst fragment = geometryExplode.vertices[i];\n\t\t\t\t\tfragment.origPos\t= {\n\t\t\t\t\t\tx: fragment.x,\n\t\t\t\t\t\ty: fragment.y,\n\t\t\t\t\t\tz: fragment.z\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\n\t\t\t\tallSources.push( displacementSprite );\n\n\n\t\t\t\t//loading\n\t\t\t\tTweenMax.to( loading, 0.5, {\n\t\t\t\t\twidth    : Math.round(100 * allSources.length / total ) + '%',\n\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\tif ( $( this.target ).width() >= windowWidth - 50 ) {\n\n\t\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\t\talpha: 0\n\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t}\n\n\n\t\t\t\n             /*\n             * Trigger slider autoplay\n             *\n             * @param  {Function} playTimes            - Number of times.\n             * @param  {Number} timing                 - Autoplay interval.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n             * @param  {Element} slider                 - Selector of the slider .\n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @return {Void}                          - The constructor.\n             */\n            function sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n                const items = slider.find( '.uix-3d-slider--shatter__item' ),\n                      total = items.length;\n\n                slider[0].animatedSlides = setInterval( function() {\n\n                        playTimes = parseFloat( items.filter( '.is-active' ).index() );\n                        playTimes++;\n\n\n                        if ( !loop ) {\n                            if ( playTimes < total && playTimes >= 0 ) {\n\n                                const slideCurId  = items.filter( '.is-active' ).index(),\n                                      slideNextId = playTimes;\t\n\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n                        } else {\n                            if ( playTimes == total ) playTimes = 0;\n                            if ( playTimes < 0 ) playTimes = total-1;\t\t\n\n                            const slideCurId  = items.filter( '.is-active' ).index(),\n                                  slideNextId = playTimes;\t\n\n\n                            //Prevent problems with styles when switching in positive order\n                            if ( playTimes == 0 ) {\n                                sliderUpdates( slideCurId, slideNextId, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\t\n                            } else {\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n\n                        }\n\n\n\n                }, timing );\t\n            }\n\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t *  Transition Between Slides\n\t\t\t *\n\t\t\t * @param  {Number} slideCurId             - Index of current slider.\n\t\t\t * @param  {Number} slideNextId            - Index of next slider.\n\t\t\t * @param  {String} dir                    - Switching direction indicator.\t \n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction sliderUpdates( slideCurId, slideNextId, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\n\n\t\t\t\tconst $items                   = $sliderWrapper.find( '.uix-3d-slider--shatter__item' ),\n\t\t\t\t\t  total                    = $items.length;\n\t\t\n\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( total == 1 ) {\n\t\t\t\t\t$( paginationID ).hide();\n\t\t\t\t\t$( arrowsID ).hide();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( ! isAnimating ) {\n\t\t\t\t\tisAnimating = true;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Transition Interception\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( loop ) {\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = 0;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = total-1;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = total-1;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = 0;\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = total-1;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = 0;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = 0;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = total-1;\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\t//Get previous and next index of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tconst $current = $sliderWrapper.find( '.uix-3d-slider--shatter__item' ).eq( slideCurId );\n\t\t\t\t\tconst\t$next    = $sliderWrapper.find( '.uix-3d-slider--shatter__item' ).eq( slideNextId );\n\n\n\n\t\t\t\t\tconsole.log( 'Current: ' + slideCurId + ' | Next: ' + slideNextId );\n\n\n\t\t\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tlet dirIndicatorClass = '';\n\t\t\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\n\n\t\t\t\t\t//Add transition class to each item\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\t$items.removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t  .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$current.addClass( 'leave' );\n\t\t\t\t\t$next.addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Controls Pagination\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t\t\t\t\t\t   .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideCurId ).addClass( 'leave' );\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideNextId ).addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Arrows\n\t\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t\tif ( ! loop ) {\n\t\t\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == total - 1 ) $( arrowsID ).find( '.uix-3d-slider--shatter__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == 0 ) $( arrowsID ).find( '.uix-3d-slider--shatter__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t//Display counter\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( countTotalID ).text( total );\n\t\t\t\t\t$( countCurID ).text( parseFloat( slideCurId ) + 1 );\t\t\n\n\n\n\t\t\t\t\t//Pause all videos\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t// pause all videos\n\t\t\t\t\tallSources.forEach( function ( element, index ) {\n\n\t\t\t\t\t\tconst videoOb = element.material.map.image;\n\n\t\t\t\t\t\tif ( videoOb.localName == 'video' ) {\n\t\t\t\t\t\t\tvideoOb.autoplay = false;\n\t\t\t\t\t\t\tvideoOb.currentTime = 0;\n\t\t\t\t\t\t\tvideoOb.muted = true;\n\t\t\t\t\t\t\tvideoOb.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\n\n\t\t\t\t\t//Fire the next object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tactiveSlider = slideNextId;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif ( typeof allSources[slideNextId] != typeof undefined ) {\n\n\t\t\t\t\t\tconst fragment = allSources[slideNextId].geometry.vertices;\n\n\t\t\t\t\t\tfor ( let i = 0; i < fragment.length; i++ ) {\n\n\t\t\t\t\t\t\tTweenMax.to( fragment[i], 2, {\n\t\t\t\t\t\t\t\tx: fragment[i].origPos.x,\n\t\t\t\t\t\t\t\ty: fragment[i].origPos.y,\n\t\t\t\t\t\t\t\tz: fragment[i].origPos.z,\n\t\t\t\t\t\t\t\tease: \"Expo.easeInOut\"\n\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t}\t\t\n\n\n\t\t\t\t\t}\t\n\n\t\t\t\t\t// play the video\n\t\t\t\t\tconst videoObCur =  allSources[ slideNextId ].material.map.image;\n\n\t\t\t\t\tif ( videoObCur.localName == 'video' ) {\n\t\t\t\t\t\tvideoObCur.autoplay = true;\n\t\t\t\t\t\tvideoObCur.currentTime = 0;\n\t\t\t\t\t\tvideoObCur.muted = false;\n\t\t\t\t\t\tvideoObCur.play();\n\t\t\t\t\t}\n\n\n\t\t\t\t\t//Fire the current object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( typeof allSources[slideCurId] != typeof undefined ) {\n\n\t\t\t\t\t\tconst fragment = allSources[slideCurId].geometry.vertices;\n\n\t\t\t\t\t\tfor ( let i = 0; i < fragment.length; i++ ) {\n\n\t\t\t\t\t\t\tconst pos = new THREE.Vector3();\n\t\t\t\t\t\t\tconst final = Math.random();\n\n\t\t\t\t\t\t\tpos.x = Math.random();\n\t\t\t\t\t\t\tpos.y = Math.random() * (50 * i);\n\t\t\t\t\t\t\tpos.z = Math.random() * -300;\n\n\t\t\t\t\t\t\tTweenMax.to( fragment[i], 2, {\n\t\t\t\t\t\t\t\tx: pos.x,\n\t\t\t\t\t\t\t\ty: pos.y,\n\t\t\t\t\t\t\t\tz: pos.z,\n\t\t\t\t\t\t\t\tease: \"Expo.easeInOut\",\n\t\t\t\t\t\t\t\tonComplete: function onComplete() {\n\n\t\t\t\t\t\t\t\t\t//reset the trigger\n\t\t\t\t\t\t\t\t\tisAnimating = false;\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t}\t\t\n\n\n\t\t\t\t\t}\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}// end isAnimating\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n                wrapperInit         : wrapperInit,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n    \n\n\n\t\t}();\n\n\t\tMainStage.wrapperInit();\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\t\t\n\n\n\t\t\n    };\n\t\n    module.components.documentReady.push( module.THREE_SHATTER_SLIDER.documentReady );\n\t\n\n\treturn class THREE_SHATTER_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n","/* \n *************************************\n * <!-- 3D Explosive Particle Slider -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\nimport OrbitControls from '@uixkit/plugins/THREE/controls/OrbitControls';\n\nimport '../scss/_style.scss';\n\n\nexport const THREE_EXP_PARTICLE_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.THREE_EXP_PARTICLE_SLIDER === null ) return false;\n\t\n\t\n    module.THREE_EXP_PARTICLE_SLIDER               = module.THREE_EXP_PARTICLE_SLIDER || {};\n    module.THREE_EXP_PARTICLE_SLIDER.version       = '0.0.9';\n    module.THREE_EXP_PARTICLE_SLIDER.documentReady = function( $ ) {\n\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '.uix-3d-slider--expParticle' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n            \n\t\t\tconst $sliderWrapper            = $( '.uix-3d-slider--expParticle' ),\n                  //Basic webGL renderers \n                  renderLoaderID            = 'uix-3d-slider--expParticle__loader',\n                  rendererOuterID           = 'uix-3d-slider--expParticle__canvas-container',\n                  rendererCanvasID          = 'uix-3d-slider--expParticle__canvas';\n            \n\n            let animSpeed  = 1000;\n\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tmaterial,\n\t\t\t\tdisplacementSprite,\n\t\t\t\tclock = new THREE.Clock();\n\n\n\t\t\tlet offsetWidth   = 475, //Set the display width of the objects in the Stage\n\t\t\t\toffsetHeight  = 375, //Set the display height of the objects in the Stage\n\t\t\t\tallSources    = [],\n\t\t\t\tobjTotal,\n\t\t\t\tobjLoaded = false;\n\n\t\t\n\t\t\t\n\t\t\tlet sources = [];\n\t\t\tlet isAnimating = false;\n\t\t\t\n\t\t\t\n\t\t\t// constants\n\t\t\tlet activeSlider = 0;\n\t\t\t\n\t\t\tlet cube_count,\n\t\t\t\tmeshes = [],\n\t\t\t\tmaterials = [],\n\t\t\t\txgrid = 25,\n\t\t\t\tygrid = 15;\n\t\t\t\n\t\t\t\n\t\t\tfunction wrapperInit() {\n\t\t\t\t\n\t\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\t\tconst $this                    = $( this );\n                    \n\t\t\t\t\tconst $items                   = $this.find( '.uix-3d-slider--expParticle__item' ),\n\t\t\t\t\t\t  $first                   = $items.first(),\n\t\t\t\t\t\t  itemTotal                = $items.length,\n                          activated                = $this.data( 'activated' ); \n\t\t\t\t\n                    \n                    if ( typeof activated === typeof undefined || activated === 0 ) {\n\n\n                        //Get parameter configuration from the data-* attribute of HTML\n                        let\tdataControlsPagination   = $this.data( 'controls-pagination' ),\n                            dataControlsArrows       = $this.data( 'controls-arrows' ),\n                            dataFilterTexture        = $this.data( 'filter-texture' ),\n                            dataDraggable            = $this.data( 'draggable' ),\n                            dataDraggableCursor      = $this.data( 'draggable-cursor' ),\n                            dataSpeed                = $this.data( 'speed' ),\n                            dataCountTotal           = $this.data( 'count-total' ),\n                            dataCountCur             = $this.data( 'count-now' );\n\n\n                        if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-3d-slider--expParticle__pagination';\n                        if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-3d-slider--expParticle__arrows';\n                        if ( typeof dataFilterTexture === typeof undefined || !dataFilterTexture || dataFilterTexture == '' ) dataFilterTexture = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n                        if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                        if ( typeof dataDraggableCursor === typeof undefined ) dataDraggableCursor = 'move';\n                        if ( typeof dataCountTotal === typeof undefined ) dataCountTotal = 'p.count em.count';\n                        if ( typeof dataCountCur === typeof undefined ) dataCountCur = 'p.count em.current';\t\n\n\n                        //Autoplay parameters\n                        let dataAuto                   = $this.data( 'auto' ),\n                            dataTiming                 = $this.data( 'timing' ),\n                            dataLoop                   = $this.data( 'loop' );  \n\n                        if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                        if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                        if ( typeof dataLoop === typeof undefined ) dataLoop = false; \n\n\n                        \n                        //Autoplay times\n                        let playTimes;\n                        //A function called \"timer\" once every second (like a digital watch).\n                        $this[0].animatedSlides;\n\n\n\n                        //If arrows does not exist on the page, it will be added by default, \n                        //and the drag and drop function will be activated.\n                        if ( $( dataControlsArrows ).length == 0 ) {\n                            $( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-3d-slider--expParticle__arrows '+dataControlsArrows.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-3d-slider--expParticle__arrows--prev\"></a><a href=\"#\" class=\"uix-3d-slider--expParticle__arrows--next\"></a></div>' );\n                        }\n\n\n\n                        //Prevent bubbling\n                        if ( itemTotal == 1 ) {\n                            $( dataControlsPagination ).hide();\n                            $( dataControlsArrows ).hide();\n                        }\n\n\n                        //Initialize the controlers classes\n                        //-------------------------------------\t\n                        $( dataControlsPagination ).find( 'ul > li' ).first().addClass( 'is-active' );\n\n\n\n\n                        //Initialize the wrapper width and height\n                        //-------------------------------------\t\n                        $this.css( 'height', windowHeight + 'px' );\n\n\n                        //Load slides to canvas\n                        //-------------------------------------\t\n                        if ( $( '#' + rendererCanvasID ).length == 0 ) {\n                            $this.prepend( '<div id=\"'+rendererOuterID+'\" class=\"uix-3d-slider--expParticle__canvas-container\"><canvas id=\"'+rendererCanvasID+'\"></canvas></div>' );\n\n                        }\n\n\n                        //Get the animation speed\n                        //-------------------------------------\t\n                        if ( typeof dataSpeed != typeof undefined && dataSpeed != false ) {\n                            animSpeed = dataSpeed;\n                        }\n\n\n                        //Initialize the first item container\n                        //-------------------------------------\t\t\n                        $items.addClass( 'next' );\n                        $first.addClass( 'is-active' );\n\n                        \n                        //Add identifiers for the first and last items\n                        //-------------------------------------\t\t\n                        $items.last().addClass( 'last' );\n                        $items.first().addClass( 'first' );\n\n\n                        //Get all images and videos\n                        //-------------------------------------\t\t\n                        $items.each( function()  {\n                            const _item = $( this );\n\n                            if ( _item.find( 'video' ).length > 0 ) {\n\n                                //Returns the dimensions (intrinsic height and width ) of the video\n                                const video    = document.getElementById( _item.find( 'video' ).attr( 'id' ) );\n                                let videoURL = _item.find( 'source:first' ).attr( 'src' );\n                                \n                                if ( typeof videoURL === typeof undefined ) videoURL = _item.attr( 'src' ); \n\n                                if ( typeof videoURL != typeof undefined ) {\n                                    sources.push(\n                                        {\n                                            \"url\": videoURL,\n                                            \"id\": _item.find( 'video' ).attr( 'id' ),\n                                            \"type\": 'video'\n                                        }\n                                    );\n                                }\n\n\n\n\n                            } else {\n\n                                let imgURL   = _item.find( 'img' ).attr( 'src' );\n\n                                if ( typeof imgURL != typeof undefined ) {\n\n                                    sources.push(\n                                        {\n                                            \"url\": imgURL,\n                                            \"id\": 'img-' + UixGUID.create(),\n                                            \"type\": 'img'\n                                        }\n                                    );\n                                }\n\n\n                            }\t\n\n                        });\n\n\n\n                        //Pagination dots \n                        //-------------------------------------\t\n                        let _dot       = '',\n                            _dotActive = '';\n                        _dot += '<ul>';\n                        for ( let i = 0; i < itemTotal; i++ ) {\n\n                            _dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n                            _dot += '<li '+_dotActive+' data-index=\"'+i+'\"><a href=\"javascript:\"></a></li>';\n                        }\n                        _dot += '</ul>';\n\n                        if ( $( dataControlsPagination ).html() == '' ) $( dataControlsPagination ).html( _dot );\n\n\n                        //Fire the slider transtion with buttons\n                        $( dataControlsPagination ).find( 'ul > li' ).off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n\n                            //Prevent buttons' events from firing multiple times\n                            const $btn = $( this );\n                            if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'true' );\n                            \n                            $( dataControlsPagination ).find( 'ul > li' )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'false' ); next(); });   \n\n                            \n                            //\n                            const slideCurId  = $( dataControlsPagination ).find( 'ul > li.is-active' ).index(),\n                                  slideNextId = $( this ).index();\n\n\n                            //Determine the direction\n                            let curDir = 'prev';\n                            if ( $( this ).attr( 'data-index' ) > slideCurId ) {\n                                curDir = 'next';\n                            }\n\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, curDir, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\t\n\n\n                        });\n\n                        //Next/Prev buttons\n                        //-------------------------------------\t\t\n                        const _prev = $( dataControlsArrows ).find( '.uix-3d-slider--expParticle__arrows--prev' ),\n                              _next = $( dataControlsArrows ).find( '.uix-3d-slider--expParticle__arrows--next' );\n\n                        $( dataControlsArrows ).find( 'a' ).attr( 'href', 'javascript:' );\n\n                        $( dataControlsArrows ).find( 'a' ).removeClass( 'is-disabled' );\n                        if ( !dataLoop ) {\n                            _prev.addClass( 'is-disabled' );\n                        }\n\n\n                        _prev.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) - 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'prev', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n                        });\n\n                        _next.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) + 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'next', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n\n                        });\n\n\n\n                        //Autoplay Slider\n                        //-------------------------------------\t\t\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        }\n                        \n\n                        //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                        $this.data( 'activated', 1 );\n\n                    }//endif activated\n                        \n                        \n\t\t\t\t});// end each\t\t\t\t\n\t\t\t}\n\n\n\t\t\t\n\t\t\tfunction init() {\n\n\t\t\t\t\n\n\t\t\t\t//Core 3D stage begin\n\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 10,  2500 ); // FlyCamera // FlyControls\n\t\t\t\tcamera.movementSpeed = 100.0;\n\t\t\t\tcamera.rollSpeed = 0.5;\n\t\t\t\tcamera.position.y = 60;\n\t\t\t\tcamera.position.z = 500;\n\n\n\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 0, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\t // create a render and set the size\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setPixelRatio( window.devicePixelRatio );\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\n\t\t\t\t//controls\n\t\t\t\tcontrols = new THREE.OrbitControls( camera, renderer.domElement );\n\t\t\t\tcontrols.autoRotate = false;\n\t\t\t\tcontrols.autoRotateSpeed = 0.5;\n\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\tcontrols.zoomSpeed = 1.2;\n\t\t\t\tcontrols.panSpeed = 0.8;\n\t\t\t\tcontrols.enableZoom = false;\n\t\t\t\tcontrols.target.set(0, 0, 0 );\n\t\t\t\tcontrols.update();\t\t\t\n\n\n\n\t\t\t\t//A loader for loading all images from array.\n\t\t\t\tconst loader = new THREE.TextureLoader();\n\t\t\t\tloader.crossOrigin = 'anonymous';\n\n\n\t\t\t\t//Preload\n\t\t\t\tobjTotal = sources.length;\n\t\t\t\n\t\t\t\tsources.forEach( function( element, index ) {\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tif ( element.type == 'img' ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tloader.load(\n\t\t\t\t\t\t\t// resource URL\n\t\t\t\t\t\t\telement.url,\n\n\t\t\t\t\t\t\t// onLoad callback\n\t\t\t\t\t\t\tfunction ( texture ) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tloadSource( texture, index, offsetWidth, offsetHeight, objTotal, $( '#' + renderLoaderID ) );\n\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t// onProgress callback currently not supported\n\t\t\t\t\t\t\tundefined,\n\n\t\t\t\t\t\t\t// onError callback\n\t\t\t\t\t\t\tfunction ( err ) {\n\t\t\t\t\t\t\t\tconsole.error( 'An error happened.' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tconst texture = new THREE.VideoTexture( document.getElementById( element.id ) );\n\t\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\n\t\t\t\t\t\ttexture.magFilter = THREE.LinearFilter;\n\t\t\t\t\t\ttexture.format = THREE.RGBFormat;\n\n\t\t\t\t\t\t// pause the video\n\t\t\t\t\t\ttexture.image.autoplay = true;\n\t\t\t\t\t\ttexture.image.loop = true;\n\t\t\t\t\t\ttexture.image.currentTime = 0;\n\t\t\t\t\t\ttexture.image.muted = true;\n\t\t\t\t\t\ttexture.image.play();\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tloadSource( texture, index, offsetWidth, offsetHeight, objTotal, $( '#' + renderLoaderID ) );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\n\t\t\t}\n\n\n\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\tconst elapsed = clock.getElapsedTime();\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\t//renderer.setClearColor( 0x000000 );\t\n\n\n\n\t\t\t\t//Display the destination object\n\t\t\t\tif ( typeof allSources[activeSlider] != typeof undefined ) {\n\n\t\t\t\t\tconst objects = allSources[activeSlider].children;\n\t\t\t\t\tconst speed =  Math.random() * .0002;\n\n\t\t\t\t\tfor ( let i = 0; i < objects.length; i++ ) {\n\n\n\t\t\t\t\t\tfor ( let j = 0; j < objects[i].parent.children.length; j++ ) {\n\t\t\t\t\t\t\tconst obj = objects[i].parent.children[j];\n\n\t\t\t\t\t\t\tobj.position.x += (obj.origPos.x - obj.position.x) * speed;\n\t\t\t\t\t\t\tobj.position.y += (obj.origPos.y - obj.position.y) * speed;\n\t\t\t\t\t\t\tobj.position.z += (obj.origPos.z - obj.position.z) * speed;\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t}\t\n\t\t\t\t\t\n\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Hide inactive objects\n\t\t\t\tallSources.forEach( function ( element, index ) {\n\t\t\t\t\tif ( index != activeSlider ) {\n\n\t\t\t\t\t\tconst objects = element.children;\n\t\t\t\t\t\tconst speed =  Math.random() * .00005;\n\n\t\t\t\t\t\tfor ( let i = 0; i < objects.length; i++ ) {\n\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < objects[i].parent.children.length; j++ ) {\n\t\t\t\t\t\t\t\tconst obj = objects[i].parent.children[j];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tobj.position.x += (obj.targetPos.x - obj.position.x) * speed;\n\t\t\t\t\t\t\t\tobj.position.y += (obj.targetPos.y - obj.position.y) * speed;\n\t\t\t\t\t\t\t\tobj.position.z += (obj.targetPos.z - obj.position.z) * speed;\n\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t}\t\t\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\n\n\t\t\t\n\t\t\t\t//check all images loaded\n\t\t\t\tif ( typeof allSources != typeof undefined ) {\n\t\t\t\t\tif ( !objLoaded && allSources.length === objTotal ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tallSources.forEach( function ( element, index ) {\n\t\t\t\t\t\t\tscene.add( element );\n\t\t\t\t\t\t\tconsole.log( element );\n\t\t\t\t\t\t});\n\t\t\t\t\t\tobjLoaded = true;\n\n\n\t\t\t\t\t}\t\n\n\t\t\t\t}\n\n\n\t\t\t\t//update camera and controls\n\t\t\t\tcontrols.update();\n                \n                \n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\t\t\t\n\n\t\t\t/*\n\t\t\t * Load Source\n\t\t\t *\n\t\t\t * @param  {Three.MeshBasicMaterial.map} texture         - Returns a new texture object which can directly be used for material creation.\n\t\t\t * @param  {Number} index           - Index of image or video.\n\t\t\t * @param  {Number} w               - The width of an image or video, in pixels. \n\t\t\t * @param  {Number} h               - The height of an image or video, in pixels. \n\t\t\t * @param  {Number} total           - Total number of preload images or video.\n\t\t\t * @param  {Element|String} loading         - Progress bar display control.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction loadSource( texture, index, w, h, total, loading ) {\n\n\t\t\t\tconst imgW = w,\n\t\t\t\t\t  imgH = h;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//\n\t\t\t\tconst group = new THREE.Object3D();\n\t\t\t\tlet i, j, ux, uy, ox, oy,\n\t\t\t\t\tgeometry,\n\t\t\t\t\txsize, ysize;\n\t\t\t\tux = 1 / xgrid;\n\t\t\t\tuy = 1 / ygrid;\n\t\t\t\txsize = imgW / xgrid;\n\t\t\t\tysize = imgH / ygrid;\n\t\t\t\tcube_count = 0;\n\t\t\t\tfor ( i = 0; i < xgrid; i ++ ) {\n\t\t\t\t\tfor ( j = 0; j < ygrid; j ++ ) {\n\t\t\t\t\t\tox = i;\n\t\t\t\t\t\toy = j;\n\t\t\t\t\t\tgeometry = new THREE.BoxBufferGeometry( xsize, ysize, xsize );\n\t\t\t\t\t\tchangeUVS( geometry, ux, uy, ox, oy );\n\t\t\t\t\t\tmaterials[ cube_count ] = new THREE.MeshBasicMaterial( {\n\t\t\t\t\t\t\tmap: texture\n\t\t\t\t\t\t } );\n\t\t\t\t\t\tmaterial = materials[ cube_count ];\n\t\t\t\t\t\tdisplacementSprite = new THREE.Mesh( geometry, material );\n\t\t\t\t\t\tdisplacementSprite.position.x = ( i - xgrid / 2 ) * xsize;\n\t\t\t\t\t\tdisplacementSprite.position.y = ( j - ygrid / 2 ) * ysize;\n\t\t\t\t\t\tdisplacementSprite.position.z = 0;\n\t\t\t\t\t\tdisplacementSprite.scale.x = displacementSprite.scale.y = displacementSprite.scale.z = 1;\n\t\t\t\t\t\tdisplacementSprite.origPos\t= {\n\t\t\t\t\t\t\tx: displacementSprite.position.x,\n\t\t\t\t\t\t\ty: displacementSprite.position.y,\n\t\t\t\t\t\t\tz: displacementSprite.position.z\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t//hide all\n\t\t\t\t\t\tconst newPosX = 4000 * Math.random() * ( Math.random() > 0.5 ? 1 : -1 );\n\t\t\t\t\t\tconst newPosY = 2000 * Math.random();\n\t\t\t\t\t\tconst newPosZ = 3000 * Math.random();\n\t\t\t\t\t\tdisplacementSprite.position.x = newPosX;\n\t\t\t\t\t\tdisplacementSprite.position.y = newPosY;\n\t\t\t\t\t\tdisplacementSprite.position.z = newPosZ;\n\t\t\t\t\t\t\n\t\t\t\t\t\tdisplacementSprite.targetPos\t= {\n\t\t\t\t\t\t\tx: newPosX,\n\t\t\t\t\t\t\ty: newPosY,\n\t\t\t\t\t\t\tz: newPosZ\n\t\t\t\t\t\t};\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//\n\t\t\t\t\t\tgroup.add( displacementSprite );\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t//\n\t\t\t\t\t\tmeshes[ cube_count ] = displacementSprite;\n\t\t\t\t\t\tcube_count += 1;\n\t\t\t\t\t}\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\tallSources.push( group );\n\n\n\t\t\t\t//loading\n\t\t\t\tTweenMax.to( loading, 0.5, {\n\t\t\t\t\twidth    : Math.round(100 * allSources.length / total ) + '%',\n\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\tif ( $( this.target ).width() >= windowWidth - 50 ) {\n\n\t\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\t\talpha: 0\n\t\t\t\t\t\t\t});\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\t\n\n\t\t\t}\n\n\n\t\t\tfunction changeUVS( geometry, unitx, unity, offsetx, offsety ) {\n\t\t\t\tconst uvs = geometry.attributes.uv.array;\n\t\t\t\tfor ( let i = 0; i < uvs.length; i += 2 ) {\n\t\t\t\t\tuvs[ i ] = ( uvs[ i ] + offsetx ) * unitx;\n\t\t\t\t\tuvs[ i + 1 ] = ( uvs[ i + 1 ] + offsety ) * unity;\n\t\t\t\t}\n\t\t\t}\t\n\t\t\t\n\t\t\t\n             /*\n             * Trigger slider autoplay\n             *\n             * @param  {Function} playTimes            - Number of times.\n             * @param  {Number} timing                 - Autoplay interval.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n             * @param  {Element} slider                 - Selector of the slider .\n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @return {Void}                          - The constructor.\n             */\n            function sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n                const items = slider.find( '.uix-3d-slider--expParticle__item' ),\n                      total = items.length;\n\n                slider[0].animatedSlides = setInterval( function() {\n\n                        playTimes = parseFloat( items.filter( '.is-active' ).index() );\n                        playTimes++;\n\n\n                        if ( !loop ) {\n                            if ( playTimes < total && playTimes >= 0 ) {\n\n                                const slideCurId  = items.filter( '.is-active' ).index(),\n                                      slideNextId = playTimes;\t\n\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n                        } else {\n                            if ( playTimes == total ) playTimes = 0;\n                            if ( playTimes < 0 ) playTimes = total-1;\t\t\n\n                            const slideCurId  = items.filter( '.is-active' ).index(),\n                                  slideNextId = playTimes;\t\n\n\n                            //Prevent problems with styles when switching in positive order\n                            if ( playTimes == 0 ) {\n                                sliderUpdates( slideCurId, slideNextId, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\t\n                            } else {\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n\n                        }\n\n\n\n                }, timing );\t\n             }\n\n\n\t\t\t\n\t\t\t/*\n\t\t\t *  Transition Between Slides\n\t\t\t *\n\t\t\t * @param  {Number} slideCurId             - Index of current slider.\n\t\t\t * @param  {Number} slideNextId            - Index of next slider.\n\t\t\t * @param  {String} dir                    - Switching direction indicator.\t \n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction sliderUpdates( slideCurId, slideNextId, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\n\n\t\t\t\tconst $items                   = $sliderWrapper.find( '.uix-3d-slider--expParticle__item' ),\n\t\t\t\t\t  total                    = $items.length;\n\t\n\t\t\t\n                \n\t\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( total == 1 ) {\n\t\t\t\t\t$( paginationID ).hide();\n\t\t\t\t\t$( arrowsID ).hide();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( ! isAnimating ) {\n\t\t\t\t\tisAnimating = true;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Transition Interception\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( loop ) {\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = 0;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = total-1;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = total-1;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = 0;\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = total-1;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = 0;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = 0;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = total-1;\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\t//Get previous and next index of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tconst $current = $sliderWrapper.find( '.uix-3d-slider--expParticle__item' ).eq( slideCurId );\n\t\t\t\t\tconst\t$next    = $sliderWrapper.find( '.uix-3d-slider--expParticle__item' ).eq( slideNextId );\n\n\n\n\t\t\t\t\tconsole.log( 'Current: ' + slideCurId + ' | Next: ' + slideNextId );\n\n\n\t\t\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tlet dirIndicatorClass = '';\n\t\t\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\n\n\t\t\t\t\t//Add transition class to each item\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\t$items.removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t  .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$current.addClass( 'leave' );\n\t\t\t\t\t$next.addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Controls Pagination\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t\t\t\t\t\t   .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideCurId ).addClass( 'leave' );\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideNextId ).addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Arrows\n\t\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t\tif ( ! loop ) {\n\t\t\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == total - 1 ) $( arrowsID ).find( '.uix-3d-slider--expParticle__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == 0 ) $( arrowsID ).find( '.uix-3d-slider--expParticle__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t//Display counter\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( countTotalID ).text( total );\n\t\t\t\t\t$( countCurID ).text( parseFloat( slideCurId ) + 1 );\t\t\n\n\n\n\n\n\t\t\t\t\t//Fire the next object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tactiveSlider = slideNextId;\n\t\t\t\t\n\n\t\t\t\t\t//Fire the current object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\n\n\t\t\t\t\t//Reset the trigger\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tisAnimating = false;\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}// end isAnimating\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n                wrapperInit         : wrapperInit,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n            \n\n\t\t}();\n\n\t\tMainStage.wrapperInit();\n\t\tMainStage.init();\n\t\tMainStage.render();\n\t\t\n\n\t\t\n    };\n\t\n    module.components.documentReady.push( module.THREE_EXP_PARTICLE_SLIDER.documentReady );\n\t\n\n\treturn class THREE_EXP_PARTICLE_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n","/* \n *************************************\n * <!-- 3D Liquid Scrollspy Slider -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport fragment from \"./shader/fragment-custom.glsl\";\nimport vertex from \"./shader/vertex-custom.glsl\";\n\nimport '../scss/_style.scss';\n\n\nexport const THREE_LIQUID_SCROLLSPY_SLIDER = ( ( module, $, window, document ) => {\n\tif ( window.THREE_LIQUID_SCROLLSPY_SLIDER === null ) return false;\n\t\n\t\n    module.THREE_LIQUID_SCROLLSPY_SLIDER               = module.THREE_LIQUID_SCROLLSPY_SLIDER || {};\n    module.THREE_LIQUID_SCROLLSPY_SLIDER.version       = '0.1.3';\n    module.THREE_LIQUID_SCROLLSPY_SLIDER.documentReady = function( $ ) {\n\n\t\n        \n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '.uix-3d-slider--liquid-scrollspy' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\tlet sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n\n            const $sliderWrapper = $( '.uix-3d-slider--liquid-scrollspy' ),\n                  //Basic webGL renderers \n\t\t\t\t  renderLoaderID            = 'uix-3d-slider--liquid-scrollspy__loader',\n\t\t\t\t  rendererOuterID           = 'uix-3d-slider--liquid-scrollspy__canvas-container',\n\t\t\t\t  rendererCanvasID          = 'uix-3d-slider--liquid-scrollspy__canvas';\n            \n            \n\t\t\tlet animSpeed  = 1000;\n\t\t\t\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tcontrols,\n\t\t\t\tscene,\n\t\t\t\tlight,\n\t\t\t\trenderer,\n\t\t\t\tmaterial,\n\t\t\t\tdisplacementSprite,\n\t\t\t\ttheta        = 0;\n\n            \n\t\t\tconst offsetWidth   = 1920, //Set the display width of the objects\n\t\t\t\t  offsetHeight  = 1080, //Set the display height of the objects\n                  imgAspect     = offsetHeight / offsetWidth;\n            \n            \n\t\t\tlet dispImage;\n\n            \n\n            const loader = new THREE.TextureLoader();\n            loader.crossOrigin = 'anonymous'; \n            \n            \n            let textures;\n\t\t\tlet sources = [];\n\t\t\tlet isAnimating = false;\n            \n            \n            //scroll spy\n            let scrollspyEnable,\n                scrollspyConfigAutoAnim,\n                scrollspyConfigItems, \n                scrollspyConfigCountTotal, \n                scrollspyConfigCountCur, \n                scrollspyConfigControlsPagination, \n                scrollspyConfigControlsArrows, \n                scrollspyConfigLoop;\n\n\t\t\t\n\t\t\t// constants\n\t\t\tlet activeSlider = 0;\n\t\t\t\n\t\t\tfunction wrapperInit() {\n\t\t\t\t\n\t\t\t\t$sliderWrapper.each( function()  {\n\n\t\t\t\t\tconst $this                    = $( this );\n                    \n\t\t\t\t\tconst $items                   = $this.find( '.uix-3d-slider--liquid-scrollspy__item' ),\n\t\t\t\t\t\t  $first                   = $items.first(),\n\t\t\t\t\t\t  itemTotal                = $items.length,\n                          activated                = $this.data( 'activated' ); \n\t\t\t\t\n                    \n                    if ( typeof activated === typeof undefined || activated === 0 ) {\n\n\n\n                        //Get parameter configuration from the data-* attribute of HTML\n                        let\tdataControlsPagination   = $this.data( 'controls-pagination' ),\n                            dataControlsArrows       = $this.data( 'controls-arrows' ),\n                            dataFilterTexture        = $this.data( 'filter-texture' ),\n                            dataDraggable            = $this.data( 'draggable' ),\n                            dataDraggableCursor      = $this.data( 'draggable-cursor' ),\n                            dataSpeed                = $this.data( 'speed' ),\n                            dataCountTotal           = $this.data( 'count-total' ),\n                            dataCountCur             = $this.data( 'count-now' ),\n                            dataScrollspy            = $this.data( 'scrollspy' );\n\n\n                        if ( typeof dataControlsPagination === typeof undefined ) dataControlsPagination = '.uix-3d-slider--liquid-scrollspy__pagination';\n                        if ( typeof dataControlsArrows === typeof undefined || dataControlsArrows == false ) dataControlsArrows = '.uix-3d-slider--liquid-scrollspy__arrows';\n                        if ( typeof dataLoop === typeof undefined ) dataLoop = false;\n                        if ( typeof dataFilterTexture === typeof undefined || !dataFilterTexture || dataFilterTexture == '' ) dataFilterTexture = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n                        if ( typeof dataDraggable === typeof undefined ) dataDraggable = false;\n                        if ( typeof dataDraggableCursor === typeof undefined ) dataDraggableCursor = 'move';\n                        if ( typeof dataScrollspy === typeof undefined ) dataScrollspy = false;\n\n                        \n                        //Autoplay parameters\n                        let dataAuto                   = $this.data( 'auto' ),\n                            dataTiming                 = $this.data( 'timing' ),\n                            dataLoop                   = $this.data( 'loop' );  \n\n                        if ( typeof dataAuto === typeof undefined ) dataAuto = false;\t\n                        if ( typeof dataTiming === typeof undefined ) dataTiming = 10000;\n                        if ( typeof dataLoop === typeof undefined ) dataLoop = false;  \n                        \n                        \n                        //Load displacement image\n                        dispImage = dataFilterTexture;\n                        \n\n\n                        //Autoplay times\n                        let playTimes;\n                        //A function called \"timer\" once every second (like a digital watch).\n                        $this[0].animatedSlides;\n\n                        \n                        \n                        //scroll spy config\n                        scrollspyEnable = dataScrollspy;\n                        scrollspyConfigAutoAnim = $this[0].animatedSlides;\n                        scrollspyConfigItems = $items;\n                        scrollspyConfigCountTotal = dataCountTotal;\n                        scrollspyConfigCountCur = dataCountCur;\n                        scrollspyConfigControlsPagination = dataControlsPagination;\n                        scrollspyConfigControlsArrows = dataControlsArrows;\n                        scrollspyConfigLoop = dataLoop;\n    \n                        \n\n                        //If arrows does not exist on the page, it will be added by default, \n                        //and the drag and drop function will be activated.\n                        if ( $( dataControlsArrows ).length == 0 ) {\n                            $( 'body' ).prepend( '<div style=\"display:none;\" class=\"uix-3d-slider--liquid-scrollspy__arrows '+dataControlsArrows.replace('#','').replace('.','')+'\"><a href=\"#\" class=\"uix-3d-slider--liquid-scrollspy__arrows--prev\"></a><a href=\"#\" class=\"uix-3d-slider--liquid-scrollspy__arrows--next\"></a></div>' );\n                        }\n\n\n\n                        //Prevent bubbling\n                        if ( itemTotal == 1 ) {\n                            $( dataControlsPagination ).hide();\n                            $( dataControlsArrows ).hide();\n                        }\n\n\n                        //Initialize the controlers classes\n                        //-------------------------------------\t\n                        $( dataControlsPagination ).find( 'ul > li' ).first().addClass( 'is-active' );\n\n\n\n\n                        //Initialize the wrapper width and height\n                        //-------------------------------------\t\n                        $this.css( 'height', windowWidth * imgAspect + 'px' );\n\n\n                        //Load slides to canvas\n                        //-------------------------------------\t\n                        if ( $( '#' + rendererCanvasID ).length == 0 ) {\n                            $this.prepend( '<div id=\"'+rendererOuterID+'\" class=\"uix-3d-slider--liquid-scrollspy__canvas-container\"><canvas id=\"'+rendererCanvasID+'\"></canvas></div>' );\n\n                        }\n                        \n                        \n                        \n                           \n\n                        //Get the animation speed\n                        //-------------------------------------\t\n                        if ( typeof dataSpeed != typeof undefined && dataSpeed != false ) {\n                            animSpeed = dataSpeed;\n                        }\n\n\n                        //Initialize the first item container\n                        //-------------------------------------\t\t\n                        $items.addClass( 'next' );\n                        $first.addClass( 'is-active' );\n\n                        \n\n                        //Add identifiers for the first and last items\n                        //-------------------------------------\t\t\n                        $items.last().addClass( 'last' );\n                        $items.first().addClass( 'first' );\n\n\n\n                        //Get all images and videos\n                        //-------------------------------------\t\t\n                        $items.each( function()  {\n                            const _item = $( this );\n\n                            if ( _item.find( 'video' ).length > 0 ) {\n\n                                //Returns the dimensions (intrinsic height and width ) of the video\n                                const video    = document.getElementById( _item.find( 'video' ).attr( 'id' ) );\n                                let videoURL = _item.find( 'source:first' ).attr( 'src' );\n                                \n                                if ( typeof videoURL === typeof undefined ) videoURL = _item.attr( 'src' ); \n\n                                if ( typeof videoURL != typeof undefined ) {\n                                    sources.push(\n                                        {\n                                            \"url\": videoURL,\n                                            \"id\": _item.find( 'video' ).attr( 'id' ),\n                                            \"type\": 'video'\n                                        }\n                                    );\n                                }\n\n\n\n\n                            } else {\n\n                                let imgURL   = _item.find( 'img' ).attr( 'src' );\n\n                                if ( typeof imgURL != typeof undefined ) {\n\n                                    sources.push(\n                                        {\n                                            \"url\": imgURL,\n                                            \"id\": 'img-' + UixGUID.create(),\n                                            \"type\": 'img'\n                                        }\n                                    );\n                                }\n\n\n                            }\t\n\n                        });\n\n\n\n                        //Pagination dots \n                        //-------------------------------------\t\n                        let _dot       = '',\n                            _dotActive = '';\n                        _dot += '<ul>';\n                        for ( let i = 0; i < itemTotal; i++ ) {\n\n                            _dotActive = ( i == 0 ) ? 'class=\"is-active\"' : '';\n\n                            _dot += '<li '+_dotActive+' data-index=\"'+i+'\"><a href=\"javascript:\"></a></li>';\n                        }\n                        _dot += '</ul>';\n\n                        if ( $( dataControlsPagination ).html() == '' ) $( dataControlsPagination ).html( _dot );\n\n\n                        //Fire the slider transtion with buttons\n                        $( dataControlsPagination ).find( 'ul > li' ).off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n\n\n                            //Prevent buttons' events from firing multiple times\n                            const $btn = $( this );\n                            if ( $btn.attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'true' );\n                            \n                            $( dataControlsPagination ).find( 'ul > li' )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( dataControlsPagination ).find( 'ul > li' ).attr( 'aria-disabled', 'false' ); next(); });   \n       \n                            \n                            //\n                            const slideCurId  = $( dataControlsPagination ).find( 'ul > li.is-active' ).index(),\n                                  slideNextId = $( this ).index();\n\n\n                            //Determine the direction\n                            let curDir = 'prev';\n                            if ( $( this ).attr( 'data-index' ) > slideCurId ) {\n                                curDir = 'next';\n                            }\n\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, curDir, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\t\n\n\n                        });\n\n                        //Next/Prev buttons\n                        //-------------------------------------\t\t\n                        const _prev = $( dataControlsArrows ).find( '.uix-3d-slider--liquid-scrollspy__arrows--prev' ),\n                              _next = $( dataControlsArrows ).find( '.uix-3d-slider--liquid-scrollspy__arrows--next' );\n\n                        $( dataControlsArrows ).find( 'a' ).attr( 'href', 'javascript:' );\n\n                        $( dataControlsArrows ).find( 'a' ).removeClass( 'is-disabled' );\n                        if ( !dataLoop ) {\n                            _prev.addClass( 'is-disabled' );\n                        }\n\n\n                        _prev.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) - 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'prev', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n                        });\n\n                        _next.off( 'click' ).on( 'click', function( e ) {\n                            e.preventDefault();\n                            \n                            //Prevent buttons' events from firing multiple times\n                            if ( $( this ).attr( 'aria-disabled' ) == 'true' ) return false;\n                            $( this ).attr( 'aria-disabled', 'true' );\n\n                            $( this )\n                                .delay(animSpeed)\n                                .queue(function(next) { $( this ).attr( 'aria-disabled', 'false' ); next(); });                \n\n                            //\n                            const slideCurId  = $items.filter( '.is-active' ).index(),\n                                  slideNextId = parseFloat( $items.filter( '.is-active' ).index() ) + 1;\n\n                            //Transition Between Slides\n                            sliderUpdates( slideCurId, slideNextId, 'next', dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows, dataLoop );\t\n\n\n                            //Pause the auto play event\n                            clearInterval( $this[0].animatedSlides );\n\n\n                        });\n\n\n\n                        //Autoplay Slider\n                        //-------------------------------------\t\t\n                        if ( dataAuto && !isNaN( parseFloat( dataTiming ) ) && isFinite( dataTiming ) ) {\n\n                            sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n\n                            $this.on({\n                                mouseenter: function() {\n                                    clearInterval( $this[0].animatedSlides );\n                                },\n                                mouseleave: function() {\n                                    sliderAutoPlay( playTimes, dataTiming, dataLoop, $this, dataCountTotal, dataCountCur, dataControlsPagination, dataControlsArrows );\n                                }\n                            });\t\n\n                        } \n                        \n\n                        //Prevents front-end javascripts that are activated with AJAX to repeat loading.\n                        $this.data( 'activated', 1 );\n\n                    }//endif activated\n                        \n\n\t\t\t\t});// end each\t\t\t\t\n\t\t\t}\n\n\n            \n            \n            \n            function loadImages() {\n                let promises = [];\n\n                for (let i = 0; i < sources.length; i++) {\n                    \n                    if ( sources[i].type == 'img' ) {\n\t\n                        ///////////\n                        // IMAGE //\n                        ///////////   \n                        \n                        promises.push( \n                            \n                            new Promise(function(resolve, reject) {\n                            \n                                const img = document.createElement(\"img\");\n                                img.crossOrigin = \"anonymous\";\n                                img.src = sources[i].url;\n\n                                img.onload = function(image) {\n\n                                    //loading\n                                    TweenMax.to( \"#\" + renderLoaderID, 0.5, {\n                                        width    : Math.round(100 * ( i / sources.length ) ) + '%'\n                                    });\n\n                                      //Compatible with safari and firefox\n                                      if ( typeof image.path === typeof undefined ) {\n                                          return resolve(image.target.currentSrc);\n                                      } else {\n                                          return resolve(image.path[0].currentSrc);\n                                      }\n                                };  \n\n                            }).then( makeThreeTexture )\n                        );\n     \n                        \n\n                    } else {\n\n                        \n\t\n                        ///////////\n                        // VIDEO //\n                        ///////////    \n                        \n                        promises.push( \n                            new Promise( function(resolve, reject) {\n\n                                //loading\n                                TweenMax.to( \"#\" + renderLoaderID, 0.5, {\n                                    width    : Math.round(100 * ( i / sources.length ) ) + '%'\n                                });    \n\n                                $( '#' + sources[i].id ).one( 'loadedmetadata', resolve );\n\n                                return resolve( sources[i].url);\n                                \n\n                            }).then( makeThreeTexture )\n                        );\n                            \n     \n\n                    }                   \n                    \n                }\n                \n\n\n                return Promise.all(promises);\n            }\n\n            \n            \n\n            function makeThreeTexture( url ) {\n                \n                let texture;\n                \n                if ( /[\\/.](gif|jpg|jpeg|png)$/i.test( url ) ) {\n                    \n                    ///////////\n                    // IMAGE //\n                    ///////////   \n                    \n                   texture = loader.load( url );\n                    \n                } else {\n                    \n                    ///////////\n                    // VIDEO //\n                    ///////////   \n                    \n                    const video = document.createElement( 'video' );\n                    video.src = url;\n                    \n                    texture = new THREE.VideoTexture( video );\n                    texture.minFilter = THREE.LinearFilter;\n                    texture.magFilter = THREE.LinearFilter;\n                    texture.format = THREE.RGBFormat;\n\n                    // pause the video\n                    texture.image.autoplay = true;\n                    texture.image.loop = true;\n                    texture.image.currentTime = 0;\n                    texture.image.muted = true;\n                    texture.image.play();\n  \n                }\n\n                return texture;\n            }\n\n\n            \n            function texturesInit() {\n                \n            \n                //Must be placed behind the loadImages()\n                loadImages().then( function( images ) {\n                    \n                    //remove loading\n                    TweenMax.to($( \"#\" + renderLoaderID), 0.5, {\n                        alpha: 0\n                    });\n\n                    init( images );\n                    render();\n                });\n\n                \n                \n            }\n\n\n            \n\t\t\tfunction init( allTextures ) {\n\n\t\t\t\t\n                textures = allTextures;\n\n\t\t\t\t//Core 3D stage begin\n\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1,  10000 ); // FlyCamera // FlyControls\n                camera.position.z = 1000; //Object 1 unit, equal to 1 pixel\n                camera.lookAt = new THREE.Vector3( 0, 0, 0 );\n                \n                \n                \n                \n                // Fit plane to screen\n                const dist        = 1000,\n                      vFOV        = THREE.Math.degToRad( camera.fov ),   // convert vertical fov to radians\n                      objHeight   = 2 * Math.tan( vFOV / 2 ) * dist,     // visible height\n                      objWidth    = objHeight * camera.aspect;           // visible width   \n                \n            \n\n                \n                \n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\n\t\t\t\t//HemisphereLight\n\t\t\t\tscene.add( new THREE.AmbientLight( 0x555555 ) );\n\n\t\t\t\tlight = new THREE.SpotLight( 0xffffff, 1.5 );\n\t\t\t\tlight.position.set( 0, 0, 2000 );\n\t\t\t\tscene.add( light );\n\n\n\n\t\t\t\t//WebGL Renderer\t\n\t\t\t\t // create a render and set the size\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setPixelRatio( window.devicePixelRatio );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n\n\n\n\n                // Immediately use the texture for material creation\n                // Create a texture loader so we can load our image file\n                const texture1     = textures[0],\n                      texture2     = textures[1],\n                      intensity    = 1,\n                      disp         = loader.load( dispImage );\n\n\n                disp.wrapS = disp.wrapT = THREE.RepeatWrapping;\n\n                texture1.magFilter = texture2.magFilter = THREE.LinearFilter;\n                texture1.minFilter = texture2.minFilter = THREE.LinearFilter;\n\n                texture1.anisotropy = renderer.capabilities.getMaxAnisotropy();\n                texture2.anisotropy = renderer.capabilities.getMaxAnisotropy();\n\n\n\n                const geometry = new THREE.PlaneBufferGeometry(\n                    objWidth,\n                    objHeight,\n                    1\n                );\n                \n                $( '#' + rendererCanvasID ).css( 'height', windowWidth * imgAspect + 'px' );\n\n                geometry.center();\n\n\n                material = new THREE.ShaderMaterial({\n                    uniforms: {\n                        effectFactor: { type: \"f\", value: intensity },\n                        dispFactor: { type: \"f\", value: 0.0 },\n                        texture: { type: \"t\", value: texture1 },\n                        texture2: { type: \"t\", value: texture2 },\n                        disp: { type: \"t\", value: disp }\n                    },\n\n                    vertexShader: vertex,\n                    fragmentShader: fragment,\n                    transparent: true,\n                    opacity: 1.0\n                });\n\n\n                displacementSprite = new THREE.Mesh( geometry, material );\n                displacementSprite.position.set( 0, 0, 0 );\n\n                scene.add( displacementSprite );\n\n\n\n\t\t\n//\t\t\t\tTweenMax.to( material.uniforms.dispFactor, 1.5, {\n//\t\t\t\t\tvalue: 1,\n//\t\t\t\t\tease: Expo.easeOut\n//\t\t\t\t});\t\n//                \n                \n                \n\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n            \n                // Scrolling interaction with 3D scenes\n                window.addEventListener( 'wheel', onMouseWheel, browser.supportsPassive ? { passive: true } : false );\n\n\n\t\t\t}\n\n\n\n\n\n\t\t\tfunction render() {\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\ttheta += 0.1;\n\n\n\t\t\t\t//To set a background color.\n\t\t\t\t//renderer.setClearColor( 0x000000 );\t\n                \n                \n\n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n\n                //render the scene to display our scene through the camera's eye.\n\t\t\t\trenderer.render( scene, camera );\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n            function onMouseWheel( e ) {\n                \n                let  scrollPos;\n\n                //Gets a value that indicates the amount that the mouse wheel has changed.\n                let dir, delta, mobileDeltaY = null;\n\n                const touches = e.touches;\n                if ( touches && touches.length ) {\n                    mobileDeltaY = startY - touches[0].pageY;\n                    scrollPos = touches[0].pageY;\n                } else {\n                    delta = Math.max(-1, Math.min(1, (-e.deltaY)));\n                    scrollPos = e.deltaY;\n                }\n\n\n                if ( mobileDeltaY != null ) {\n\n                    if ( mobileDeltaY >= 50 ) {\n                        //--- swipe up\n                        dir = 'up';\n                    }\n                    if ( mobileDeltaY <= -50 ) {\n                        //--- swipe down\n                        dir = 'down';\n\n                    }\t\n                } else {\n                    if( delta < 0 ) { \n                        //scroll down\n                        dir = 'down';\n\n                    } else {\n                        //scroll up\n                        dir = 'up';\n                    }\t\n                }\n                \n                \n                \n                //-----\n              \n                if ( scrollspyEnable ) {\n                    \n                    const slideCurId = scrollspyConfigItems.filter( '.is-active' ).index();\n                    let slideNextId;\n\n                    if ( dir == 'down' ) {\n\n\n                        slideNextId = parseFloat( scrollspyConfigItems.filter( '.is-active' ).index() ) + 1;\n\n                        //Transition Between Slides\n                        sliderUpdates( slideCurId, slideNextId, 'next', scrollspyConfigCountTotal, scrollspyConfigCountCur, scrollspyConfigControlsPagination, scrollspyConfigControlsArrows, scrollspyConfigLoop );\t\n\n                        //Pause the auto play event\n                        clearInterval( scrollspyConfigAutoAnim );\n\n\n                    }\n                    if ( dir == 'up' ) {\n\n\n                        slideNextId = parseFloat( scrollspyConfigItems.filter( '.is-active' ).index() ) - 1;\n\n                        //Transition Between Slides\n                        sliderUpdates( slideCurId, slideNextId, 'prev', scrollspyConfigCountTotal, scrollspyConfigCountCur, scrollspyConfigControlsPagination, scrollspyConfigControlsArrows, scrollspyConfigLoop );\t\n\n\n                        //Pause the auto play event\n                        clearInterval( scrollspyConfigAutoAnim );  \n\n\n                    }      \n                    \n                }\n\n           \n               \n            }\n\n\n             /*\n             * Trigger slider autoplay\n             *\n             * @param  {Function} playTimes            - Number of times.\n             * @param  {Number} timing                 - Autoplay interval.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n             * @param  {Element} slider                 - Selector of the slider .\n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @return {Void}                          - The constructor.\n             */\n            function sliderAutoPlay( playTimes, timing, loop, slider, countTotalID, countCurID, paginationID, arrowsID ) {\t\n\n                const items = slider.find( '.uix-3d-slider--liquid-scrollspy__item' ),\n                      total = items.length;\n\n                slider[0].animatedSlides = setInterval( function() {\n\n                        playTimes = parseFloat( items.filter( '.is-active' ).index() );\n                        playTimes++;\n\n\n                        if ( !loop ) {\n                            if ( playTimes < total && playTimes >= 0 ) {\n\n                                const slideCurId  = items.filter( '.is-active' ).index(),\n                                      slideNextId = playTimes;\t\n\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n                        } else {\n                            if ( playTimes == total ) playTimes = 0;\n                            if ( playTimes < 0 ) playTimes = total-1;\t\t\n\n                            const slideCurId  = items.filter( '.is-active' ).index(),\n                                  slideNextId = playTimes;\t\n\n\n                            //Prevent problems with styles when switching in positive order\n                            if ( playTimes == 0 ) {\n                                sliderUpdates( slideCurId, slideNextId, 'prev', countTotalID, countCurID, paginationID, arrowsID, loop );\t\n                            } else {\n                                sliderUpdates( slideCurId, slideNextId, 'next', countTotalID, countCurID, paginationID, arrowsID, loop );\n                            }\n\n                        }\n\n\n\n                }, timing );\t\n            }\n\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t *  Transition Between Slides\n\t\t\t *\n\t\t\t * @param  {Number} slideCurId             - Index of current slider.\n\t\t\t * @param  {Number} slideNextId            - Index of next slider.\n\t\t\t * @param  {String} dir                    - Switching direction indicator.\t \n             * @param  {String} countTotalID           - Total number ID or class of counter.\n             * @param  {String} countCurID             - Current number ID or class of counter.\n             * @param  {String} paginationID           - Navigation ID for paging control of each slide.\n             * @param  {String} arrowsID               - Previous/Next arrow navigation ID.\n             * @param  {Boolean} loop                  - Gives the slider a seamless infinite loop.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tfunction sliderUpdates( slideCurId, slideNextId, dir, countTotalID, countCurID, paginationID, arrowsID, loop ) {\n\n\n\t\t\t\tconst $items                   = $sliderWrapper.find( '.uix-3d-slider--liquid-scrollspy__item' ),\n\t\t\t\t\t  total                    = $items.length;\n\t\t\n\n\t\t\t\t//Prevent bubbling\n\t\t\t\tif ( total == 1 ) {\n\t\t\t\t\t$( paginationID ).hide();\n\t\t\t\t\t$( arrowsID ).hide();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( ! isAnimating ) {\n\t\t\t\t\tisAnimating = true;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Transition Interception\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tif ( loop ) {\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = 0;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = total-1;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = total-1;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = 0;\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( slideCurId > total - 1 ) slideCurId = total-1;\n\t\t\t\t\t\tif ( slideCurId < 0 ) slideCurId = 0;\t\n\n\t\t\t\t\t\t//--\n\t\t\t\t\t\tif ( slideNextId < 0 ) slideNextId = 0;\n\t\t\t\t\t\tif ( slideNextId > total - 1 ) slideNextId = total-1;\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\t//Get previous and next index of item\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tconst $current = $sliderWrapper.find( '.uix-3d-slider--liquid-scrollspy__item' ).eq( slideCurId );\n\t\t\t\t\tconst\t$next    = $sliderWrapper.find( '.uix-3d-slider--liquid-scrollspy__item' ).eq( slideNextId );\n\n\n\n\t\t\t\t\tconsole.log( 'Current: ' + slideCurId + ' | Next: ' + slideNextId );\n\n\n\t\t\t\t\t//Determine the direction and add class to switching direction indicator.\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tlet dirIndicatorClass = '';\n\t\t\t\t\tif ( dir == 'prev' ) dirIndicatorClass = 'prev';\n\t\t\t\t\tif ( dir == 'next' ) dirIndicatorClass = 'next';\n\n\n\t\t\t\t\t//Add transition class to each item\n\t\t\t\t\t//-------------------------------------\t\n\t\t\t\t\t$items.removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t  .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$current.addClass( 'leave' );\n\t\t\t\t\t$next.addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Controls Pagination\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).removeClass( 'is-active leave prev next' )\n\t\t\t\t\t\t\t\t\t\t\t   .addClass( dirIndicatorClass );\n\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideCurId ).addClass( 'leave' );\n\t\t\t\t\t$( paginationID ).find( 'ul > li' ).eq( slideNextId ).addClass( 'is-active' );\n\n\n\n\t\t\t\t\t//Add transition class to Arrows\n\t\t\t\t\t//-------------------------------------\t\t\n\t\t\t\t\tif ( ! loop ) {\n\t\t\t\t\t\t$( arrowsID ).find( 'a' ).removeClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == total - 1 ) $( arrowsID ).find( '.uix-3d-slider--liquid-scrollspy__arrows--next' ).addClass( 'is-disabled' );\n\t\t\t\t\t\tif ( slideNextId == 0 ) $( arrowsID ).find( '.uix-3d-slider--liquid-scrollspy__arrows--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t//Display counter\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\t$( countTotalID ).text( total );\n\t\t\t\t\t$( countCurID ).text( parseFloat( slideCurId ) + 1 );\t\t\n\n\n\n\n\n\t\t\t\t\t//Fire the next object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\tactiveSlider = slideNextId;\n                    \n                    \n                    //Update Texture\n                    material.uniforms.texture.value = textures[Math.floor(slideCurId)];\n                    material.uniforms.texture2.value = textures[Math.floor(slideNextId)];  \n                    \n                    \n                    //console.log( 'material.uniforms.texture: ' + material.uniforms.texture.value.image.currentSrc );\n                    //console.log( 'material.uniforms.texture2: ' + material.uniforms.texture2.value.image.currentSrc );\n                    \n                    TweenMax.to( material.uniforms.dispFactor, 1.5, {\n                        value: 1,\n                        ease: Expo.easeOut,\n                        onComplete: function() {\n\n                            //Update Texture\n                            let tx1ID, tx2ID;\n                            \n                            if ( dir == 'prev' ) {\n                                \n                                \n                                material.uniforms.texture.value = textures[Math.floor(slideCurId)];\n                                material.uniforms.texture2.value = textures[Math.floor(slideNextId-1)];  \n                                \n                                \n                                if ( loop ) {\n\n                                    tx1ID = slideNextId;\n                                    tx2ID = slideNextId - 1;\n                                    if ( slideNextId == 0 ) tx2ID = total - 1;\n\n                                } else {\n\n\n                                }\n                                \n                            }\n                            if ( dir == 'next' ) {\n                                \n                                material.uniforms.texture.value = textures[Math.floor(slideCurId)];\n                                material.uniforms.texture2.value = textures[Math.floor(slideNextId)];  \n\n                                \n                                if ( loop ) {\n\n                                    tx1ID = slideNextId;\n                                    tx2ID = slideNextId + 1;\n                                    if ( slideNextId == total - 1 ) tx2ID = 0;\n\n                                } else {\n\n\n                                }\n  \n                            }\n\n\n                            material.uniforms.texture.value = textures[Math.floor(tx1ID)];\n                            material.uniforms.texture2.value = textures[Math.floor(tx2ID)];  \n\n                            \n                            //console.log( 'New material.uniforms.texture: ' + material.uniforms.texture.value.image.currentSrc );\n                            //console.log( 'New material.uniforms.texture2: ' + material.uniforms.texture2.value.image.currentSrc ); \n                            //console.log( '--------------------' );\n\n                            \n                            TweenMax.set( this.target, {\n                                value: 0\n                            });\t\n                            \n                            \n                            //Reset the trigger\n                            //-------------------------------------\n                            isAnimating = false;\t\t\t\n \n                            \n                        }\n                    });\t\n\n                    \n\n\t\t\t\t\t//Fire the current object\n\t\t\t\t\t//-------------------------------------\n\t\t\t\t\n\n\n                    \n\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}// end isAnimating\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t}\n\n\t\t\t\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n                wrapperInit         : wrapperInit,\n                texturesInit        : texturesInit,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n    \n\n\n\t\t}();\n\n\t\tMainStage.wrapperInit(); //step 1\n        MainStage.texturesInit(); // step 2\n\t\t\n\t\t\t\n\t\t\n\t\t\n\n\t\t\n    };\n\t\n    \n    \n    \n\t\n    module.components.documentReady.push( module.THREE_LIQUID_SCROLLSPY_SLIDER.documentReady );\n\t\n\n\treturn class THREE_LIQUID_SCROLLSPY_SLIDER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n\n\n","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.EffectComposer = function ( renderer, renderTarget ) {\n\n\tthis.renderer = renderer;\n\n\tif ( renderTarget === undefined ) {\n\n\t\tvar parameters = {\n\t\t\tminFilter: THREE.LinearFilter,\n\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\tstencilBuffer: false\n\t\t};\n\n\t\tvar size = renderer.getDrawingBufferSize( new THREE.Vector2() );\n\t\trenderTarget = new THREE.WebGLRenderTarget( size.width, size.height, parameters );\n\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t}\n\n\tthis.renderTarget1 = renderTarget;\n\tthis.renderTarget2 = renderTarget.clone();\n\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\tthis.writeBuffer = this.renderTarget1;\n\tthis.readBuffer = this.renderTarget2;\n\n\tthis.renderToScreen = true;\n\n\tthis.passes = [];\n\n\t// dependencies\n\n\tif ( THREE.CopyShader === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on THREE.CopyShader' );\n\n\t}\n\n\tif ( THREE.ShaderPass === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on THREE.ShaderPass' );\n\n\t}\n\n\tthis.copyPass = new THREE.ShaderPass( THREE.CopyShader );\n\n\tthis._previousFrameTime = Date.now();\n\n};\n\nObject.assign( THREE.EffectComposer.prototype, {\n\n\tswapBuffers: function () {\n\n\t\tvar tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t},\n\n\taddPass: function ( pass ) {\n\n\t\tthis.passes.push( pass );\n\n\t\tvar size = this.renderer.getDrawingBufferSize( new THREE.Vector2() );\n\t\tpass.setSize( size.width, size.height );\n\n\t},\n\n\tinsertPass: function ( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\n\t},\n\n\tisLastEnabledPass: function ( passIndex ) {\n\n\t\tfor ( var i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\trender: function ( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = ( Date.now() - this._previousFrameTime ) * 0.001;\n\n\t\t}\n\n\t\tthis._previousFrameTime = Date.now();\n\n\t\tvar currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tvar maskActive = false;\n\n\t\tvar pass, i, il = this.passes.length;\n\n\t\tfor ( i = 0; i < il; i ++ ) {\n\n\t\t\tpass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tvar context = this.renderer.context;\n\n\t\t\t\t\tcontext.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\tcontext.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( THREE.MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof THREE.MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof THREE.ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t},\n\n\treset: function ( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tvar size = this.renderer.getDrawingBufferSize( new THREE.Vector2() );\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( size.width, size.height );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t},\n\n\tsetSize: function ( width, height ) {\n\n\t\tthis.renderTarget1.setSize( width, height );\n\t\tthis.renderTarget2.setSize( width, height );\n\n\t\tfor ( var i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( width, height );\n\n\t\t}\n\n\t}\n\n} );\n\n\nTHREE.Pass = function () {\n\n\t// if set to true, the pass is processed by the composer\n\tthis.enabled = true;\n\n\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\tthis.needsSwap = true;\n\n\t// if set to true, the pass clears its buffer before rendering\n\tthis.clear = false;\n\n\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\tthis.renderToScreen = false;\n\n};\n\nObject.assign( THREE.Pass.prototype, {\n\n\tsetSize: function ( width, height ) {},\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n} );\n\n// Helper for passes that need to fill the viewport with a single quad.\nTHREE.Pass.FullScreenQuad = ( function () {\n\n\tvar camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\tvar geometry = new THREE.PlaneBufferGeometry( 2, 2 );\n\n\tvar FullScreenQuad = function ( material ) {\n\n\t\tthis._mesh = new THREE.Mesh( geometry, material );\n\n\t};\n\n\tObject.defineProperty( FullScreenQuad.prototype, 'material', {\n\n\t\tget: function () {\n\n\t\t\treturn this._mesh.material;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._mesh.material = value;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( FullScreenQuad.prototype, {\n\n\t\trender: function ( renderer ) {\n\n\t\t\trenderer.render( this._mesh, camera );\n\n\t\t}\n\n\t} );\n\n\treturn FullScreenQuad;\n\n} )();\n\n\n\nexport default THREE.EffectComposer;","export default \"#define GLSLIFY 1\\nvarying vec2 vUv;\\nvoid main() {\\n  vUv = uv;\\n  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";","export default \"#define GLSLIFY 1\\nvarying vec2 vUv;\\n\\nuniform sampler2D texture;\\nuniform sampler2D texture2;\\nuniform sampler2D disp;\\n\\n// uniform float time;\\n// uniform float _rot;\\nuniform float dispFactor;\\nuniform float effectFactor;\\n\\n// vec2 rotate(vec2 v, float a) {\\n//  float s = sin(a);\\n//  float c = cos(a);\\n//  mat2 m = mat2(c, -s, s, c);\\n//  return m * v;\\n// }\\n\\nvoid main() {\\n\\n    vec2 uv = vUv;\\n\\n    // uv -= 0.5;\\n    // vec2 rotUV = rotate(uv, _rot);\\n    // uv += 0.5;\\n\\n    vec4 disp = texture2D(disp, uv);\\n\\n    vec2 distortedPosition = vec2(uv.x + dispFactor * (disp.r*effectFactor), uv.y);\\n    vec2 distortedPosition2 = vec2(uv.x - (1.0 - dispFactor) * (disp.r*effectFactor), uv.y);\\n\\n    vec4 _texture = texture2D(texture, distortedPosition);\\n    vec4 _texture2 = texture2D(texture2, distortedPosition2);\\n\\n    vec4 finalTexture = mix(_texture, _texture2, dispFactor);\\n\\n    gl_FragColor = finalTexture;\\n    // gl_FragColor = disp;\\n}\";","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.MaskPass = function ( scene, camera ) {\n\n\tTHREE.Pass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.clear = true;\n\tthis.needsSwap = false;\n\n\tthis.inverse = false;\n\n};\n\nTHREE.MaskPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.MaskPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tvar context = renderer.context;\n\t\tvar state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tvar writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer for subsequent rendering\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\n\t}\n\n} );\n\n\nTHREE.ClearMaskPass = function () {\n\n\tTHREE.Pass.call( this );\n\n\tthis.needsSwap = false;\n\n};\n\nTHREE.ClearMaskPass.prototype = Object.create( THREE.Pass.prototype );\n\nObject.assign( THREE.ClearMaskPass.prototype, {\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n} );\n\nexport default THREE.MaskPass;\n","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.TexturePass = function ( map, opacity ) {\n\n\tTHREE.Pass.call( this );\n\n\tif ( THREE.CopyShader === undefined )\n\t\tconsole.error( \"THREE.TexturePass relies on THREE.CopyShader\" );\n\n\tvar shader = THREE.CopyShader;\n\n\tthis.map = map;\n\tthis.opacity = ( opacity !== undefined ) ? opacity : 1.0;\n\n\tthis.uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\tthis.material = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.uniforms,\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\tthis.needsSwap = false;\n\n\tthis.fsQuad = new THREE.Pass.FullScreenQuad( null );\n\n};\n\nTHREE.TexturePass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.TexturePass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tvar oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tthis.uniforms[ \"opacity\" ].value = this.opacity;\n\t\tthis.uniforms[ \"tDiffuse\" ].value = this.map;\n\t\tthis.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\trenderer.autoClear = oldAutoClear;\n\t}\n\n} );\n\n\nexport default THREE.TexturePass;\n","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.ShaderPass = function ( shader, textureID ) {\n\n\tTHREE.Pass.call( this );\n\n\tthis.textureID = ( textureID !== undefined ) ? textureID : \"tDiffuse\";\n\n\tif ( shader instanceof THREE.ShaderMaterial ) {\n\n\t\tthis.uniforms = shader.uniforms;\n\n\t\tthis.material = shader;\n\n\t} else if ( shader ) {\n\n\t\tthis.uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new THREE.ShaderMaterial( {\n\n\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t}\n\n\tthis.fsQuad = new THREE.Pass.FullScreenQuad( this.material );\n};\n\nTHREE.ShaderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.ShaderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n} );\n\n\nexport default THREE.ShaderPass;","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n\tTHREE.Pass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.overrideMaterial = overrideMaterial;\n\n\tthis.clearColor = clearColor;\n\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n\tthis.clear = true;\n\tthis.clearDepth = false;\n\tthis.needsSwap = false;\n\n};\n\nTHREE.RenderPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.RenderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tvar oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\tvar oldClearColor, oldClearAlpha;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\toldClearColor = renderer.getClearColor().getHex();\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = null;\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n} );\n\n\nexport default THREE.RenderPass;","/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nTHREE.ClearPass = function ( clearColor, clearAlpha ) {\n\n\tTHREE.Pass.call( this );\n\n\tthis.needsSwap = false;\n\n\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n};\n\nTHREE.ClearPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.ClearPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tvar oldClearColor, oldClearAlpha;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\toldClearColor = renderer.getClearColor().getHex();\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\trenderer.clear();\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t}\n\n} );\n\n\nexport default THREE.ClearPass;","/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Full-screen textured quad shader\n */\n\nTHREE.CopyShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"opacity\":  { value: 1.0 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\n\t\t\"uniform float opacity;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vec4 texel = texture2D( tDiffuse, vUv );\",\n\t\t\t\"gl_FragColor = opacity * texel;\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" )\n\n};\n\n\nexport default THREE.CopyShader;","/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Convolution shader\n * ported from o3d sample to WebGL / GLSL\n * http://o3d.googlecode.com/svn/trunk/samples/convolution.html\n */\n\nTHREE.ConvolutionShader = {\n\n\tdefines: {\n\n\t\t\"KERNEL_SIZE_FLOAT\": \"25.0\",\n\t\t\"KERNEL_SIZE_INT\": \"25\"\n\n\t},\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"uImageIncrement\": { value: new THREE.Vector2( 0.001953125, 0.0 ) },\n\t\t\"cKernel\": { value: [] }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"uniform vec2 uImageIncrement;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\n\t\t\"uniform float cKernel[ KERNEL_SIZE_INT ];\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\t\t\"uniform vec2 uImageIncrement;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vec2 imageCoord = vUv;\",\n\t\t\t\"vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\",\n\n\t\t\t\"for( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\",\n\n\t\t\t\t\"sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\",\n\t\t\t\t\"imageCoord += uImageIncrement;\",\n\n\t\t\t\"}\",\n\n\t\t\t\"gl_FragColor = sum;\",\n\n\t\t\"}\"\n\n\n\t].join( \"\\n\" ),\n\n\tbuildKernel: function ( sigma ) {\n\n\t\t// We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.\n\n\t\tfunction gauss( x, sigma ) {\n\n\t\t\treturn Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );\n\n\t\t}\n\n\t\tvar i, values, sum, halfWidth, kMaxKernelSize = 25, kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;\n\n\t\tif ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;\n\t\thalfWidth = ( kernelSize - 1 ) * 0.5;\n\n\t\tvalues = new Array( kernelSize );\n\t\tsum = 0.0;\n\t\tfor ( i = 0; i < kernelSize; ++ i ) {\n\n\t\t\tvalues[ i ] = gauss( i - halfWidth, sigma );\n\t\t\tsum += values[ i ];\n\n\t\t}\n\n\t\t// normalize the kernel\n\n\t\tfor ( i = 0; i < kernelSize; ++ i ) values[ i ] /= sum;\n\n\t\treturn values;\n\n\t}\n\n};\n\n\nexport default THREE.ConvolutionShader;","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.BloomPass = function ( strength, kernelSize, sigma, resolution ) {\n\n\tTHREE.Pass.call( this );\n\n\tstrength = ( strength !== undefined ) ? strength : 1;\n\tkernelSize = ( kernelSize !== undefined ) ? kernelSize : 25;\n\tsigma = ( sigma !== undefined ) ? sigma : 4.0;\n\tresolution = ( resolution !== undefined ) ? resolution : 256;\n\n\t// render targets\n\n\tvar pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat };\n\n\tthis.renderTargetX = new THREE.WebGLRenderTarget( resolution, resolution, pars );\n\tthis.renderTargetX.texture.name = \"BloomPass.x\";\n\tthis.renderTargetY = new THREE.WebGLRenderTarget( resolution, resolution, pars );\n\tthis.renderTargetY.texture.name = \"BloomPass.y\";\n\n\t// copy material\n\n\tif ( THREE.CopyShader === undefined )\n\t\tconsole.error( \"THREE.BloomPass relies on THREE.CopyShader\" );\n\n\tvar copyShader = THREE.CopyShader;\n\n\tthis.copyUniforms = THREE.UniformsUtils.clone( copyShader.uniforms );\n\n\tthis.copyUniforms[ \"opacity\" ].value = strength;\n\n\tthis.materialCopy = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.copyUniforms,\n\t\tvertexShader: copyShader.vertexShader,\n\t\tfragmentShader: copyShader.fragmentShader,\n\t\tblending: THREE.AdditiveBlending,\n\t\ttransparent: true\n\n\t} );\n\n\t// convolution material\n\n\tif ( THREE.ConvolutionShader === undefined )\n\t\tconsole.error( \"THREE.BloomPass relies on THREE.ConvolutionShader\" );\n\n\tvar convolutionShader = THREE.ConvolutionShader;\n\n\tthis.convolutionUniforms = THREE.UniformsUtils.clone( convolutionShader.uniforms );\n\n\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurX;\n\tthis.convolutionUniforms[ \"cKernel\" ].value = THREE.ConvolutionShader.buildKernel( sigma );\n\n\tthis.materialConvolution = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.convolutionUniforms,\n\t\tvertexShader: convolutionShader.vertexShader,\n\t\tfragmentShader: convolutionShader.fragmentShader,\n\t\tdefines: {\n\t\t\t\"KERNEL_SIZE_FLOAT\": kernelSize.toFixed( 1 ),\n\t\t\t\"KERNEL_SIZE_INT\": kernelSize.toFixed( 0 )\n\t\t}\n\n\t} );\n\n\tthis.needsSwap = false;\n\n\tthis.fsQuad = new THREE.Pass.FullScreenQuad( null );\n\n};\n\nTHREE.BloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.BloomPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );\n\n\t\t// Render quad with blured scene into texture (convolution pass 1)\n\n\t\tthis.fsQuad.material = this.materialConvolution;\n\n\t\tthis.convolutionUniforms[ \"tDiffuse\" ].value = readBuffer.texture;\n\t\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurX;\n\n\t\trenderer.setRenderTarget( this.renderTargetX );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\n\t\t// Render quad with blured scene into texture (convolution pass 2)\n\n\t\tthis.convolutionUniforms[ \"tDiffuse\" ].value = this.renderTargetX.texture;\n\t\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurY;\n\n\t\trenderer.setRenderTarget( this.renderTargetY );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Render original scene with superimposed blur to texture\n\n\t\tthis.fsQuad.material = this.materialCopy;\n\n\t\tthis.copyUniforms[ \"tDiffuse\" ].value = this.renderTargetY.texture;\n\n\t\tif ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST );\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n} );\n\nTHREE.BloomPass.blurX = new THREE.Vector2( 0.001953125, 0.0 );\nTHREE.BloomPass.blurY = new THREE.Vector2( 0.0, 0.001953125 );\n\nexport default THREE.BloomPass;\n","/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.FilmPass = function ( noiseIntensity, scanlinesIntensity, scanlinesCount, grayscale ) {\n\n\tTHREE.Pass.call( this );\n\n\tif ( THREE.FilmShader === undefined )\n\t\tconsole.error( \"THREE.FilmPass relies on THREE.FilmShader\" );\n\n\tvar shader = THREE.FilmShader;\n\n\tthis.uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\tthis.material = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.uniforms,\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader\n\n\t} );\n\n\tif ( grayscale !== undefined )\tthis.uniforms.grayscale.value = grayscale;\n\tif ( noiseIntensity !== undefined ) this.uniforms.nIntensity.value = noiseIntensity;\n\tif ( scanlinesIntensity !== undefined ) this.uniforms.sIntensity.value = scanlinesIntensity;\n\tif ( scanlinesCount !== undefined ) this.uniforms.sCount.value = scanlinesCount;\n\n\tthis.fsQuad = new THREE.Pass.FullScreenQuad( this.material );\n\n};\n\nTHREE.FilmPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {\n\n\tconstructor: THREE.FilmPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {\n\n\t\tthis.uniforms[ \"tDiffuse\" ].value = readBuffer.texture;\n\t\tthis.uniforms[ \"time\" ].value += deltaTime;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n} );\n\n\nexport default THREE.FilmPass;\n","/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Film grain & scanlines shader\n *\n * - ported from HLSL to WebGL / GLSL\n * http://www.truevision3d.com/forums/showcase/staticnoise_colorblackwhite_scanline_shaders-t18698.0.html\n *\n * Screen Space Static Postprocessor\n *\n * Produces an analogue noise overlay similar to a film grain / TV static\n *\n * Original implementation and noise algorithm\n * Pat 'Hawthorne' Shearon\n *\n * Optimized scanlines + noise version with intensity scaling\n * Georg 'Leviathan' Steinrohder\n *\n * This version is provided under a Creative Commons Attribution 3.0 License\n * http://creativecommons.org/licenses/by/3.0/\n */\n\nTHREE.FilmShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"time\": { value: 0.0 },\n\t\t\"nIntensity\": { value: 0.5 },\n\t\t\"sIntensity\": { value: 0.05 },\n\t\t\"sCount\": { value: 4096 },\n\t\t\"grayscale\": { value: 1 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\n\t\t\"#include <common>\",\n\n\t\t// control parameter\n\t\t\"uniform float time;\",\n\n\t\t\"uniform bool grayscale;\",\n\n\t\t// noise effect intensity value (0 = no effect, 1 = full effect)\n\t\t\"uniform float nIntensity;\",\n\n\t\t// scanlines effect intensity value (0 = no effect, 1 = full effect)\n\t\t\"uniform float sIntensity;\",\n\n\t\t// scanlines effect count value (0 = no effect, 4096 = full effect)\n\t\t\"uniform float sCount;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t// sample the source\n\t\t\t\"vec4 cTextureScreen = texture2D( tDiffuse, vUv );\",\n\n\t\t\t// make some noise\n\t\t\t\"float dx = rand( vUv + time );\",\n\n\t\t\t// add noise\n\t\t\t\"vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 );\",\n\n\t\t\t// get us a sine and cosine\n\t\t\t\"vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\",\n\n\t\t\t// add scanlines\n\t\t\t\"cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\",\n\n\t\t\t// interpolate between source and result by intensity\n\t\t\t\"cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\",\n\n\t\t\t// convert to grayscale if desired\n\t\t\t\"if( grayscale ) {\",\n\n\t\t\t\t\"cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\",\n\n\t\t\t\"}\",\n\n\t\t\t\"gl_FragColor =  vec4( cResult, cTextureScreen.a );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" )\n\n};\n\n\nexport default THREE.FilmShader;","/* \n *************************************\n * <!-- 3D Filmic Effects -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\n//filter basic\n//---------------------\nimport EffectComposer from '@uixkit/plugins/THREE/postprocessing/EffectComposer';\nimport MaskPass from '@uixkit/plugins/THREE/postprocessing/MaskPass';\nimport TexturePass from '@uixkit/plugins/THREE/postprocessing/TexturePass';\nimport ShaderPass from '@uixkit/plugins/THREE/postprocessing/ShaderPass';\nimport RenderPass from '@uixkit/plugins/THREE/postprocessing/RenderPass';\nimport ClearPass from '@uixkit/plugins/THREE/postprocessing/ClearPass';\nimport CopyShader from '@uixkit/plugins/THREE/shaders/CopyShader';\nimport ConvolutionShader from '@uixkit/plugins/THREE/shaders/ConvolutionShader';\n\n\n//Extra filter -- film\n//---------------------\nimport BloomPass from '@uixkit/plugins/THREE/postprocessing/BloomPass';\n\n\n//Extra filter -- film\n//---------------------\nimport FilmPass from '@uixkit/plugins/THREE/postprocessing/FilmPass';\nimport FilmShader from '@uixkit/plugins/THREE/shaders/FilmShader';\n\n\nexport const THREE_FILMIC_EFF = ( ( module, $, window, document ) => {\n\tif ( window.THREE_FILMIC_EFF === null ) return false;\n\t\n\t\n\t\n    module.THREE_FILMIC_EFF               = module.THREE_FILMIC_EFF || {};\n    module.THREE_FILMIC_EFF.version       = '0.0.2';\n    module.THREE_FILMIC_EFF.documentReady = function( $ ) {\n\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#3D-filmic-effects-canvas' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n        let sceneSubjects = []; // Import objects and animations dynamically\n\t\tconst MainStage = function() {\n\n            const $window          = $( window );\n            let\twindowWidth        = window.innerWidth,\n                windowHeight       = window.innerHeight;\n\n\n            const rendererCanvasID = '3D-filmic-effects-canvas';\n\n\n\n\n\t\t\t// Generate one plane geometries mesh to scene\n\t\t\t//-------------------------------------\t\n\t\t\tlet camera,\n\t\t\t\tscene,\n\t\t\t\tlights = [],\n\t\t\t\trenderer,\n                clock = new THREE.Clock();\n\n\n            let intersectionPlane;\n            \n            let composer, bloomPass, filmPass;\n            \n\t\n\t\t\tfunction init() {\n\t\t\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//camera\n\t\t\t\tcamera = new THREE.PerspectiveCamera( 60, windowWidth / windowHeight, 1, 10000 );\n\t\t\t\tcamera.position.set( 0, 0, 100 );\n\t\t\t\tcamera.lookAt(new THREE.Vector3(0, 0, 0));\n\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//Scene\n\t\t\t\tscene = new THREE.Scene();\n\n\t\t\t\t\n\t\t\t\t//=================\n\t\t\t\t//Lights\n\t\t\t\tlights[ 0 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\t\t\tlights[ 1 ] = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\t\t\tlights[ 2 ] = new THREE.DirectionalLight( 0xffffff );\n\n\t\t\t\tlights[ 0 ].position.set( 0, 200, 0 );\n\t\t\t\tlights[ 1 ].position.set( 100, 200, 100 );\n\t\t\t\tlights[ 2 ].position.set( 120, 200, 0 );\n\t\t\t\tlights[ 2 ].intensity = 0.6;\n\n\t\t\t\tscene.add( lights[ 0 ] );\n\t\t\t\tscene.add( lights[ 1 ] );\n\t\t\t\tscene.add( lights[ 2 ] );\n\t\t\t\t\n\n\n\t\t\t\t//=================\n\t\t\t\t//WebGL Renderer\t\t\n\t\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\t\tcanvas   : document.getElementById( rendererCanvasID ), //canvas\n\t\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\trenderer.setSize( windowWidth, windowHeight );\n                renderer.shadowMap.enabled = true;\n                renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n\n                //=================\n                //add bloom effect\n                bloomPass = new THREE.BloomPass(\n                    1,    // strength\n                    25,   // kernel size\n                    4,    // sigma ?\n                    256,  // blur render target resolution\n                );\n\n\n                //add film effect\n                filmPass = new THREE.FilmPass(\n                    0.35,   // noise intensity\n                    0.025,  // scanline intensity\n                    648,    // scanline count\n                    false,  // grayscale\n                );\n\n\n\n                //-----\n                const renderPass = new THREE.RenderPass(scene, camera);\n                const effectCopy = new THREE.ShaderPass(THREE.CopyShader);\n                effectCopy.renderToScreen = true;\n\n\n                composer = new THREE.EffectComposer( renderer );\n                composer.addPass(renderPass);\n                composer.addPass(bloomPass);    \n                composer.addPass(filmPass);\n                composer.addPass(effectCopy);\n\n\n\t\t\t\t//=================\n                const planeGeometry = new THREE.PlaneGeometry(100000, 100000);\n                const planeMaterial = new THREE.MeshNormalMaterial({\n                    side: THREE.DoubleSide\n                });\n                intersectionPlane = new THREE.Mesh(planeGeometry, planeMaterial);\n                intersectionPlane.visible = false;\n                scene.add(intersectionPlane);\n\n                const hoverMaterial = new THREE.MeshNormalMaterial();\n                const neutralMaterial = new THREE.MeshLambertMaterial({\n                    color: 0xffcccc\n                });\n                const selectedMaterial = new THREE.MeshBasicMaterial({\n                    color: 0x55ff88\n                });\n\n                const neutralGeometry = new THREE.IcosahedronGeometry(30, 1);\n                const mesh = new THREE.Mesh(neutralGeometry, neutralMaterial);\n\n                mesh.position.x = 0\n                mesh.position.y = 0;\n                mesh.position.z = 0;\n\n                scene.add(mesh);\n      \n\t\t\t\t//=================\n\t\t\t\t// Fires when the window changes\n\t\t\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\t\t\t\n\n\t\t\t}\n\n\t\t\tfunction render() {\n\t\n\t\t\t\trequestAnimationFrame( render );\n\n\t\t\t\t//To set a background color.\n\t\t\t\trenderer.setClearColor( 0x000000 );\t\n\n                \n                //push objects\n                /*\n                @Usage: \n\n                    function CustomObj( scene ) {\n\n                        const elements = new THREE...;\n                        scene.add( elements );\n\n                        this.update = function( time ) {\n                            elements.rotation.y = time*0.003;\n                        }\n                    }       \n\n                    sceneSubjects.push( new CustomObj( MainStage.getScene() ) );  \n                */\n                for( let i = 0; i < sceneSubjects.length; i++ ) {\n                    sceneSubjects[i].update( clock.getElapsedTime()*1 );  \n                }\n        \t\n\n                //render the scene with filter\n\t\t\t\tcomposer.render();\n\n\n\t\t\t}\n\n\n\t\t\tfunction onWindowResize() {\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\trenderer.setSize( window.innerWidth, window.innerHeight );\n\t\t\t}\n\n\n\n\n\t\t\t// \n\t\t\t//-------------------------------------\t\n\t\t\treturn {\n\t\t\t\tinit                : init,\n\t\t\t\trender              : render,\n\t\t\t\tgetRendererCanvasID : function () { return rendererCanvasID; },\n\t\t\t\tgetScene            : function () { return scene; },\n\t\t\t\tgetCamera           : function () { return camera; } \n\t\t\t};\n\n\n\t\t}();\n\t\t\n\t\n\t\t// \n\t\tMainStage.init();\n\t\tMainStage.render();\n\n        \n        \n        \n        // Add stars to scene\n        //-------------------------------------\t\n        const starScene = MainStage.getScene();\n        const starCamera = MainStage.getCamera();\n        \n        \n        function Stars(scene, terrainSize) {\n\n            const starsGeometry = new THREE.IcosahedronGeometry(terrainSize, 4);\n\n            // geometry deformation\n            for (let i=0; i<starsGeometry.vertices.length; i+=1) {\n                const scalar = 1+ Math.random() + Math.random();\n                starsGeometry.vertices[i].multiplyScalar(scalar)\n            }\n\n            const textureLoader = new THREE.TextureLoader();\n            textureLoader.setCrossOrigin(\"anonymous\");\n            const texture = textureLoader.load( 'data:image/png;base64,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' );\n\n            const starMaterial = new THREE.PointsMaterial({ map: texture, color: \"#fff\", size: 20, blending: THREE.AdditiveBlending, transparent: false });\n            const stars = new THREE.Points(starsGeometry, starMaterial);\n            scene.add(stars);\n\n            this.update = function(time) {\n                stars.rotation.y = time*0.13;\n            }\n        }    \n        \n        sceneSubjects.push( new Stars(starScene, 150) );\n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_FILMIC_EFF.documentReady );\n\t\n\n\treturn class THREE_FILMIC_EFF {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- Simulate HTML Layout with threejs -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nexport const THREE_SIMULATE_HTML_LAYOUT = ( ( module, $, window, document ) => {\n\tif ( window.THREE_SIMULATE_HTML_LAYOUT === null ) return false;\n\t\n\t\n\t\n    module.THREE_SIMULATE_HTML_LAYOUT               = module.THREE_SIMULATE_HTML_LAYOUT || {};\n    module.THREE_SIMULATE_HTML_LAYOUT.version       = '0.0.1';\n    module.THREE_SIMULATE_HTML_LAYOUT.documentReady = function( $ ) {\n\n\t\t\n\t\t//Prevent this module from loading in other pages\n\t\tif ( $( '#app-3D-page-container' ).length == 0 || ! Modernizr.webgl ) return false;\n\t\t\n\t\t\n      \n\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//==============================THREE.js===============================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\n\n\t\tconst $window                 = $( window );\n\t\tlet\twindowWidth               = window.innerWidth,\n\t\t\twindowHeight              = window.innerHeight;\n\n\n\n\t\t//scroll spy\n\t\tlet scrollY = 0;\n\t\tlet touchStartY = 0;\n\t\tconst _event = {\n\t\t\ty: 0,\n\t\t\tdeltaY: 0\n\t\t};\n\t\tconst scrollTrigger = document.getElementById( 'app-3D-page-container' );\n\t\tconst maxHeight = (scrollTrigger.clientHeight || scrollTrigger.offsetHeight) - window.innerHeight;\n\n\n\n\n\t\t// THREE PARAMS\n\t\t//-------------------------------------\t\n\t\tlet camera = null,\n\t\t\tscene = null,\n\t\t\trenderer;\n\n\t\tlet clock = new THREE.Clock(), time = 0;\n\t\tconst dataBGSources = [];\n\n\n\n\t\t// Loader manager\n\t\tconst loadingManager = new THREE.LoadingManager();\n\n\t\tloadingManager.onLoad = function() {\n\t\t\t//console.log( '▶▶▶▶▶ Loading complete! ◀◀◀◀◀◀' );\n\t\t};\n\n\t\tloadingManager.onProgress = function ( item, loaded, total ) {\n\t\t\t//console.log( '▶▶▶▶▶ LoadingManager ◀◀◀◀◀◀ ( item: '+item+', loaded: '+loaded+', total: '+total+')' );\n\t\t};\n\n\t\tloadingManager.onError = function(url) {\n\t\t\tconsole.log( '▶▶▶▶▶ There was an error loading ◀◀◀◀◀◀  ' + url );\n\t\t};\n\n\t\tconst loaderImage = new THREE.TextureLoader(loadingManager);\n\n\t\tloaderImage.crossOrigin = 'anonymous';    \n\n\n\t\tfunction SubStageInit( $rendererInnerCanvas, wrapperHeight, wrapperWidth, offsetLeft ) {\n\n\t\t\tconsole.log( 'wrapperHeight: ' + wrapperHeight );\n\n\t\t\t//=================\n\t\t\t//camera\n\t\t\tcamera = new THREE.OrthographicCamera( - wrapperWidth / wrapperHeight / 2, wrapperWidth / wrapperHeight / 2, 1 / 2, -1 / 2, -0.1, 0.1);\n\t\t\tcamera.position.set( 0, 0, 0 );\n\t\t\tcamera.lookAt(new THREE.Vector3(0, 0, 0));\n\n\n\t\t\t//=================\n\t\t\t//Scene\n\t\t\tscene = new THREE.Scene();\n\n\n\n\t\t\t//=================\n\t\t\t//WebGL Renderer\t\t\n\t\t\trenderer = new THREE.WebGLRenderer( { \n\t\t\t\t\t\t\t\t\talpha    : true, \n\t\t\t\t\t\t\t\t\tantialias: true \n\t\t\t\t\t\t\t\t} );\n\t\t\trenderer.setSize( wrapperWidth, wrapperHeight );\n\t\t\trenderer.shadowMap = true;\n\t\t\trenderer.shadowMapSoft = true;\n\n\t\t\t$rendererInnerCanvas[0].appendChild( renderer.domElement );\n\n\n\n\n\t\t\t//=================\n\t\t\t// Immediately use the texture for material creation\n\t\t\tlet i = 0;\n\n\t\t\t//update image data\n\t\t\tdocument.querySelectorAll('.app-coverWebgl ~ img').forEach(function( thisImg ) {\n\n\t\t\t\tdataBGSources.forEach(function (item, i) {\n\t\t\t\t\tif ( item.url.indexOf( thisImg.src ) >= 0 || thisImg.src == item.url ) {\n\t\t\t\t\t\titem.visibleWidth = thisImg.width;\n\t\t\t\t\t\titem.visibleHeight = thisImg.height;\n\t\t\t\t\t\titem.top = thisImg.getBoundingClientRect().top;\n\t\t\t\t\t\titem.left = thisImg.getBoundingClientRect().left;\n\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t});\t\t\n\t\t\t});\n\n\n\t\t\tconsole.log( dataBGSources );\n\t\t\tdocument.querySelectorAll('.app-coverWebgl').forEach(function( thisImg ) {\n\n\t\t\t\tconst _curURL = thisImg.getAttribute('data-url');\n\t\t\t\tlet ratio;\n\n\t\t\t\t//\n\t\t\t\t(function(index) {\n\t\t\t\t\twindow['tex' + i] = loaderImage.load( _curURL );\n\t\t\t\t\twindow['tex' + i].anisotropy = renderer.capabilities.getMaxAnisotropy();\n\t\t\t\t})(i);\t\t\n\n\n\t\t\t\t//\n\t\t\t\tdataBGSources.forEach(function (item, i) {\n\n\t\t\t\t\tif ( item.url.indexOf( _curURL ) >= 0 || _curURL == item.url ) {\n\t\t\t\t\t\tratio = wrapperWidth/wrapperHeight;\n\n\t\t\t\t\t\tconst _offsetLeft = offsetLeft/wrapperWidth * ratio;\n\n\n\t\t\t\t\t\twindow['geometry' + i] = new THREE.BoxBufferGeometry(item.visibleWidth / wrapperHeight, item.visibleHeight / wrapperHeight, 40 / wrapperHeight);\n\t\t\t\t\t\twindow['tex' + i].wrapS = window['tex' + i].wrapT = THREE.RepeatWrapping;\n\t\t\t\t\t\twindow['materiel' + i] = new THREE.MeshBasicMaterial({\n\t\t\t\t\t\t\tmap: window['tex' + i]\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow['materiel' + i].map.minFilter = THREE.LinearFilter;\n\t\t\t\t\t\twindow['mesh' + i] = new THREE.Mesh(window['geometry' + i], window['materiel' + i]);\n\t\t\t\t\t\twindow['mesh' + i].material.transparent = true;\n\t\t\t\t\t\twindow['mesh' + i].position.y = -(item.top + item.visibleHeight / 2) / wrapperHeight + 0.5; // car origine repere est au centre du view\n\t\t\t\t\t\twindow['mesh' + i].position.x = (item.left * ratio + item.visibleWidth * ratio / 2) / wrapperWidth - 0.5 * ratio - _offsetLeft; // car origine repere est au centre du view\n\n\t\t\t\t\t\t//\n\t\t\t\t\t\tscene.add(window['mesh' + i]);\n\n\t\t\t\t\t\t//console.log( window['mesh' + i] );\n\n\n\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t});\t\n\n\n\n\t\t\t\ti++;\n\t\t\t});\t\t\t\t\n\n\n\n\n\t\t\t//=================\n\t\t\t// Fires when the window changes\n\t\t\twindow.addEventListener( 'resize', function(){\n\t\t\t   onWindowResize(wrapperWidth,wrapperHeight);\n\t\t   }, false );\n\n\t\t\t//=================\n\t\t\t// Fires scroll animation\n\t\t\tscrollTrigger.addEventListener('scroll', onScroll, {\n\t\t\t\tpassive: false\n\t\t\t});\n\t\t\t/*\n\t\t\tmobile example\n\t\t\tscrollTrigger.addEventListener('touchstart', onTouchStart, { passive: false });\n\t\t\tscrollTrigger.addEventListener('touchmove', onTouchMove, { passive: false });*/\t\n\n\t\t}\n\n\t\tfunction SubStageRender() {\n\n\t\t\trequestAnimationFrame( SubStageRender );\n\n\t\t\t//To set a background color.\n\t\t\t//renderer.setClearColor( 0x000000 );\t\n\n\t\t\tvar delta = clock.getDelta();\n\n\n\t\t\t//objects animation\n\t\t\tdataBGSources.forEach(function (item, i) {\n\t\t\t\twindow['mesh' + i].rotation.y = 0.01 * scrollY;\t\t\n\t\t\t\twindow['mesh' + i].rotation.x = 0.004 * scrollY;\t\t\n\t\t\t});\t\n\n\n\t\t\t//render the scene to display our scene through the camera's eye.\n\t\t\trenderer.render( scene, camera );\n\n\n\t\t}\n\n\n\t\tfunction onWindowResize(w,h) {\n\t\t\tcamera.aspect = w / h;\n\t\t\tcamera.updateProjectionMatrix();\n\t\t\trenderer.setSize( w, h );\n\t\t}\n\n\t\t//Destroy the 3D rendering process\n\t\tfunction destroy3DScene() {\n\n\t\t\tconsole.log( 'Destroy the 3D rendering process!' );\n\n\t\t\t//Clear the animations and scenes\n\t\t\t//------\n\t\t\tcancelAnimationFrame( SubStageRender );\n\t\t\tscene.remove();\n\n\n\t\t\t//Clear the renderer cache, no need to use in this demo\n\t\t\t//------\n\t\t\trenderer.dispose();\n\t\t\trenderer.forceContextLoss();\n\t\t\trenderer.content = null;\n\t\t\trenderer.domElement = null;\n\n\n\t\t\t//Clear the cache of the current obj object\n\t\t\t//------\n\t\t\tconst cleanMaterial = function( material ) {\n\t\t\t\t//console.log('dispose material!')\n\t\t\t\tmaterial.dispose();\n\n\t\t\t\t// dispose textures\n\t\t\t\tfor (const key of Object.keys(material)) {\n\t\t\t\t\tconst value = material[key];\n\t\t\t\t\tif (value && typeof value === 'object' && 'minFilter' in value) {\n\t\t\t\t\t\t//console.log('dispose texture!')\n\t\t\t\t\t\tvalue.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\t\n\n\n\t\t\tscene.traverse(object => {\n\t\t\t\tif (!object.isMesh) return;\n\n\t\t\t\t//console.log('dispose geometry!');\n\t\t\t\tobject.geometry.dispose();\n\n\t\t\t\tif (object.material.isMaterial) {\n\t\t\t\t\tcleanMaterial(object.material);\n\t\t\t\t} else {\n\t\t\t\t\t// an array of materials\n\t\t\t\t\tfor (const material of object.material) cleanMaterial(material);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//===================================SCROLL ANIMATION==================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\tfunction onScroll(e) {\n\n\t\t\tscrollY = scrollTrigger.scrollTop;\n\t\t\tconsole.log(scrollTrigger.scrollTop);\n\t\t};\n\n\n\t\t/*\n\t\tmobile example\n\t\tfunction onTouchStart (e) {\n\t\t\tvar t = (e.targetTouches) ? e.targetTouches[0] : e;\n\t\t\ttouchStartY = t.pageY;\n\t\t};\n\n\t\tfunction onTouchMove (e) {\n\t\t\tvar evt = _event;\n\t\t\tvar t = (e.targetTouches) ? e.targetTouches[0] : e;\n\t\t\tevt.deltaY = (t.pageY - touchStartY) * 5;\n\t\t\ttouchStartY = t.pageY;\n\n\t\t\t\tscroll(e)\n\t\t};*/\n\n\n\n\n\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//===================================IMAGES LOADER====================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\t\t//=====================================================================================\n\n\n\t\tconst sources = [];\n\n\t\t//Push all images from page\n\t\t$( 'section' ).find( 'img' ).each(function() {\n\t\t\tsources.push(\n\t\t\t\t{\n\t\t\t\t\t\"url\": this.src,\n\t\t\t\t\t\"type\": 'img'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t//\n\t\t\tdataBGSources.push( {w: 0, h: 0,visibleWidth: 0, visibleHeight: 0, top: 0, left: 0, url: this.src } );\n\t\t}); \n\n\n\n\t\t//===========\n\n\t\tconst loadImages = function() {\n\t\t\tconst promises = [];\n\n\t\t\tfor (let i = 0; i < sources.length; i++) {\n\n\t\t\t\tif ( sources[i].type == 'img' ) {\n\n\t\t\t\t\t///////////\n\t\t\t\t\t// IMAGE //\n\t\t\t\t\t///////////   \n\n\t\t\t\t\tpromises.push( \n\n\t\t\t\t\t\tnew Promise(function(resolve, reject) {\n\n\t\t\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t\t\timg.crossOrigin = \"anonymous\";\n\t\t\t\t\t\t\timg.src = sources[i].url;\n\n\t\t\t\t\t\t\timg.onload = function(image) {\n\n\t\t\t\t\t\t\t  //Compatible with safari and firefox\n\t\t\t\t\t\t\t  if ( typeof image.path === typeof undefined ) {\n\t\t\t\t\t\t\t\t\treturn resolve( {\n\t\t\t\t\t\t\t\t\t\tw: 0,\n\t\t\t\t\t\t\t\t\t\th: 0,\n\t\t\t\t\t\t\t\t\t\turl: image.target.currentSrc\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t  } else {\n\n\t\t\t\t\t\t\t\t\treturn resolve( {\n\t\t\t\t\t\t\t\t\t\tw: image.path[0].naturalWidth,\n\t\t\t\t\t\t\t\t\t\th: image.path[0].naturalHeight,\n\t\t\t\t\t\t\t\t\t\turl: image.path[0].currentSrc\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t  }\t\n\n\t\t\t\t\t\t\t};  \n\n\t\t\t\t\t\t}).then( textureLoaded )\n\t\t\t\t\t);\n\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\n\t\t\treturn Promise.all(promises);\n\t\t};\n\n\n\t\tlet k = 0;\n\t\tconst textureLoaded = function( data ) {\n\n\t\t\t//console.log( data );\n\n\t\t\tconst _curURL = data.url;\n\t\t\tconst _curW = data.w;\n\t\t\tconst _curH = data.h;\n\n\n\t\t\t//update image data\n\t\t\tdataBGSources.forEach(function (item, i) {\n\n\t\t\t\tif ( _curURL.indexOf( item.url ) >= 0 || _curURL == item.url ) {\n\t\t\t\t\titem.w = _curW;\n\t\t\t\t\titem.h = _curH;\n\t\t\t\t}\t\t\t\t\n\t\t\t});\t\n\n\n\t\t\tk++;\n\t\t\treturn k; \n\t\t};\n\n\n\t\t//============\n\t\t//images loaded\n\t\t//Must be placed behind the loadImages()\n\t\tloadImages().then( function( images ) {\n\t\t\tconsole.log( '------images loaded!------' );\n\n\n\n\n\t\t\t//in order to calculate a correct height for all images\n\t\t\tsetTimeout( function() {\n\t\t\t\t//Run 3D rendering process\n\t\t\t\tconst $innerCanvas = $( '#app-3D-page-container' ).find( '.app-innerCanvas' );\n\t\t\t\tconst canvasPosOffsetX = 15;\n\t\t\t\tconst canvasPosOffsetY = -$( '#app-3D-page-container' )[0].getBoundingClientRect().top;\n\n\t\t\t\t$innerCanvas.css({\n\t\t\t\t\t'position': 'absolute',\n\t\t\t\t\t'z-index': '-1',\n\t\t\t\t\t'left': 0,\n\t\t\t\t\t'top': canvasPosOffsetY\n\n\t\t\t\t});\n\t\t\t\tif ( $innerCanvas.length > 0 ) {\n\t\t\t\t\tSubStageInit( $innerCanvas, $( '#app-3D-page-container' ).find( '.app-work-detail__wrapper' ).outerHeight( true ), $( '#app-3D-page-container' ).find( '.app-work-detail__wrapper' ).outerWidth( true ), $( '#app-3D-page-container' ).find( '.app-work-detail__wrapper' ).offset().left - canvasPosOffsetX );\n\t\t\t\t\tSubStageRender();\n\n\t\t\t\t}\n\n\t\t\t\t$( '#app-3D-page-container' ).css( 'overflow-y', 'auto' );\n\n\t\t\t}, 500 );\n\n\n\n\n\t\t});\n\n\n\t\t\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.THREE_SIMULATE_HTML_LAYOUT.documentReady );\n\t\n\n\treturn class THREE_SIMULATE_HTML_LAYOUT {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- Responsive Table -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const TABLE = ( ( module, $, window, document ) => {\n\tif ( window.TABLE === null ) return false;\n\t\n\t\n\t\n    module.TABLE               = module.TABLE || {};\n    module.TABLE.version       = '0.0.3';\n    module.TABLE.documentReady = function( $ ) {\n\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Duplicate title\n\t\t ---------------------------\n\t\t */\n\t\t\t\t\t\n\t\tconst $resTable = $('table.uix-table.is-responsive, .uix-table.is-responsive table'),\n\t\t\t  $thead    = $resTable.find( 'thead' ),\n\t\t\t  $tbody    = $resTable.find( 'tbody' );\n\n        $thead.find( 'th' ).each(function() {\n            const data = $( this ).html().replace(/<span\\s+class=(\\\"|\\')js-uix-table-responsive__hidden(\\\"|\\')(([\\s\\S])*?)<\\/span>/g, '');\n            if ( !$( this ).attr( 'data-table' ) ) {\n                $( this ).attr( 'data-table', data );\n            }\n        });\n\n        $tbody.find( 'td' ).each(function() {\n            const index = $(this).index();\n            const data = $thead.find( 'th:eq(' + index + ')' ).attr( 'data-table' );\n            $( this ).attr( 'data-table', data );\n        });\n\t\t\n\t\n\t\t/* \n\t\t ---------------------------\n\t\t With scroll bars\n\t\t ---------------------------\n\t\t */\n\t\tconst resTableSCrolled = '.js-uix-table--responsive-scrolled',\n\t\t\t  columns          = $( resTableSCrolled + ' tr').length,\n\t\t\t  rows             = $( resTableSCrolled + ' th').length;\n\t\t\n\t\ttableDataScrolledInit( windowWidth );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth = window.innerWidth;\n\n\t\t\t\t// Do stuff here\n\t\t\t\ttableDataScrolledInit( windowWidth );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\tfunction tableDataScrolledInit( w ) {\n\t\t\t\n\t\t\tif ( w <= 768 ) {\n\t\t\t\tfor ( let i = 0; i < rows; i++ ) {\n\t\t\t\t\tconst maxHeight = $( resTableSCrolled + ' th:nth-child(' + i + ')').outerHeight();\n\t\t\t\t\tfor ( let j = 0; j < columns; j++ ) {\n\t\t\t\t\t\tif ($( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').outerHeight() > maxHeight) {\n\t\t\t\t\t\t\tmaxHeight = $( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').outerHeight();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').prop('scrollHeight') > $( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').outerHeight()) {\n\t\t\t\t\t\t\tmaxHeight = $( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').prop( 'scrollHeight' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (let j = 0; j < columns; j++ ) {\n\t\t\t\t\t\t$( resTableSCrolled + ' tr:nth-child(' + j + ') td:nth-child(' + i + ')').css( 'height', maxHeight );\n\t\t\t\t\t\t$( resTableSCrolled + ' th:nth-child(' + i + ')').css( 'height', maxHeight );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$( resTableSCrolled + ' td, '+resTableSCrolled+' th').removeAttr( 'style') ;\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.TABLE.documentReady );\n\t\n\n\treturn class TABLE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n","/* \n *************************************\n * <!-- Table Sorter -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport sortElements from '@uixkit/core/table/js/fn/sort-elements';\n\nimport '../scss/_style.scss';\n\n\nexport const TABLE_SORTER = ( ( module, $, window, document ) => {\n\tif ( window.TABLE_SORTER === null ) return false;\n\t\n\t\n\t\n    module.TABLE_SORTER               = module.TABLE_SORTER || {};\n    module.TABLE_SORTER.version       = '0.0.3';\n    module.TABLE_SORTER.documentReady = function( $ ) {\n\n\t\t\n\t\t$( '.js-uix-table-sorter' ).each( function()  {\n\t\t\tconst $sortTable = $( this ).find( 'table' );\n\t\t\t\n\t\t\t//add arrows\n\t\t\t\n\t\t\t$sortTable.find( \"[data-sort-type]\" ).each( function()  {\n\t\t\t\tif ( $( this ).find( '.uix-table-sorter' ).length == 0 ) {\n\t\t\t\t\t$( this ).wrapInner( '<span class=\"uix-table-sorter\" />' );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst $th     = $( this ),\n\t\t\t\t\t  thIndex = $th.index(),\n\t\t\t\t\t  thType  = $th.data( 'sort-type' );\n                \n\t\t\t\tlet\tinverse = false;\n\n\t\t\t\t$th.off( 'click' ).on( 'click', function() {\n\n\t\t\t\t\t$sortTable.find( 'tbody td' ).filter( function() {\n\n\t\t\t\t\t\treturn $( this ).index() === thIndex;\n\n\t\t\t\t\t}).sortElements(function(a, b) {\n\n\n\t\t\t\t\t\tlet txt1 = $.text([a]).replace(/(<([^>]+)>)/ig, ''),\n\t\t\t\t            txt2 = $.text([b]).replace(/(<([^>]+)>)/ig, '');\n\n\t\t\t\t\t\t//type of number\n\t\t\t\t\t\tif ( thType == 'number' ) {\n\t\t\t\t\t\t\ttxt1 = Number( txt1.replace(/[^0-9.-]+/g, '' ) );\n\t\t\t\t\t\t\ttxt2 = Number( txt2.replace(/[^0-9.-]+/g, '' ) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//type of date\n\t\t\t\t\t\tif ( thType == 'date' ) {\n\t\t\t\t\t\t\ttxt1 = new Date( txt1 );\n\t\t\t\t\t\t\ttxt2 = new Date( txt2 );\t\n\t\t\t\t\t\t}\t\n\n\n\n\t\t\t\t\t\t//add filter class\n\t\t\t\t\t\t$sortTable.find( 'tbody tr' ).addClass( 'js-uix-newsort' );\n\n\n\t\t\t\t\t\tif ( txt1 > txt2 ) {\n\t\t\t\t\t\t\tif ( inverse ) {\n\t\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( inverse ) {\n\t\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// parentNode is the element we want to move\n\t\t\t\t\t\treturn this.parentNode;\n\n\t\t\t\t\t});\n\n\t\t\t\t\tinverse = !inverse;\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\n\n\t\t});\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.TABLE_SORTER.documentReady );\n\t\n\n\treturn class TABLE_SORTER {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n/* \n *************************************\n * <!-- Tabs -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const TABS = ( ( module, $, window, document ) => {\n\tif ( window.TABS === null ) return false;\n\t\n\t\n    module.TABS               = module.TABS || {};\n    module.TABS.version       = '0.1.4';\n    module.TABS.documentReady = function( $ ) {\n\n\t\t$( '.uix-tabs' ).each( function( id ) {\n\t\t\tconst $this             = $( this );\n            \n\t\t\tconst $li               = $this.find( '.uix-tabs__nav ul > li' ),\n\t\t\t\t  liWidth           = $li.first().outerWidth(),\n\t\t\t\t  liHeight          = $li.first().outerHeight(),\n\t\t\t\t  liNum             = $li.length,\n\t\t\t\t  $contentbox       = $this.find( '.uix-tabs__content' ),\n                  isNumeric         = /^[-+]?(\\d+|\\d+\\.\\d*|\\d*\\.\\d+)$/,\n                  tabBoxID          = id;\n            \n\t\t\tlet\tulWidth           = $this.data( 'width' ),\n\t\t\t\tfullwidth         = $this.data( 'fullwidth' ),\n\t\t\t\trotation          = $this.data( 'rotation' ),\n\t\t\t\trotationRadius    = $this.data( 'rotation-radius' ),\n\t\t\t\trotationWapperDeg = $this.data( 'rotation-wrapper-angle' ),\n\t\t\t\trotationDisplay   = $this.data( 'rotation-display' );\n            \n\t\t\t\n\t\t\tif ( typeof fullwidth != typeof undefined && fullwidth == 1 ) {\n\t\t\t\t$li.css( 'width', ( 100 / liNum ) + '%' );\n\t\t\t}\n\t\t\t\n\t\t\t\t\t\n\t\t\t\n\t\t\tif ( typeof rotation === typeof undefined ) {\n\t\t\t\trotation = false;\n\t\t\t}\t\n\t\t\t\n\t\t\t\n\t\t\tif ( typeof rotationWapperDeg === typeof undefined ) {\n\t\t\t\trotationWapperDeg = 0;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof rotationDisplay === typeof undefined ) {\n\t\t\t\trotationDisplay = 5;\n\t\t\t}\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t$li.each( function( index ) {\n\t\t\t\tindex = index + 1;\n\t\t\t\t$( this ).attr( 'href', 'javascript:' );\n\t\t\t\t$( this ).attr( 'data-tab', tabBoxID + '-tabs-show' + index );\n\t\t\t});\n\t\t\t$( $contentbox ).each( function( index ) {\n\t\t\t\tindex = index + 1;\n\t\t\t\t$( this ).attr( 'id', tabBoxID + '-tabs-show' + index );\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t// Tab Rotation Effect\n\t\t\tif ( rotation ) {\n\t\t\n\t\t\t\t$this.find( '.uix-tabs__nav' ).css( {\n\t\t\t\t\t'width'      : rotationRadius * 2 + 'px'\n\t\t\t\t} );\n\n\t\t\n\t\t\t\t$this.find( '.uix-tabs__nav ul' ).css( {\n\t\t\t\t\t'width'     : rotationRadius * 2 + 'px',\n\t\t\t\t\t'height'    : rotationRadius * 2 + 'px',\n\t\t\t\t\t'transform' : 'rotate('+parseFloat(rotationWapperDeg)+'deg)'\n\t\t\t\t} );\n\n\t\t\t\t\n\n\t\t\t\t//Layout components in a circle layout\n\t\t\t\tconst step            = 2 * Math.PI / rotationDisplay,\n\t\t\t\t\t  pad             = $this.find( '.uix-tabs__nav ul' ).width();\n\n                let angle             = 0,\n                    transitionDelay   = 0;\n                \n\n\t\t\t\t$this.find( '.uix-tabs__nav ul > li' ).each( function() { //Can'nt use arrow function here!!!\n\t\t\t\t\t// 'this' works differently with arrow fucntions\n\t\t\t\t\tconst el          = $( this ),\n\t\t\t\t\t\t  x           = rotationRadius * Math.cos(angle) - liWidth / 2,\n\t\t\t\t\t\t  y           = rotationRadius * Math.sin(angle) - liHeight / 2;\n\n\n\t\t\t\t\tel.css({\n\t\t\t\t\t\t'transform'        : 'translate('+parseFloat( x )+'px,'+parseFloat( pad/2 + y )+'px)',\n\t\t\t\t\t\t'transition-delay' : transitionDelay + \"s\"\n\t\t\t\t\t})\n\t\t\t\t\t.find( '> a' )\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'transform'        : 'rotate('+parseFloat(-rotationWapperDeg)+'deg)'\n\t\t\t\t\t});\n\n\n\t\t\t\t\tangle += step;\n\t\t\t\t\ttransitionDelay += 0.15;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//Click on the rotation effect\n\t\t\t\t\t//----------------------- begin ----------------------\n\t\t\t\t\tel.off( 'click' ).on( 'click', function( e ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst increase   = Math.PI * 2 / rotationDisplay,\n\t\t\t\t\t\t\t  n          = $( this ).index(),\n\t\t\t\t\t\t\t  endAngle   = n % rotationDisplay * increase; \n\n\n\t\t\t\t\t\t( function turn() {\n\t\t\t\t\t\t\tif (Math.abs(endAngle - angle) > 1 / 8) {\n\t\t\t\t\t\t\t\tconst sign = endAngle > angle ? 1 : -1;\n\t\t\t\t\t\t\t\tangle = angle + sign / 8;\n\t\t\t\t\t\t\t\tsetTimeout(turn, 20);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tangle = endAngle;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t$this.find( '.uix-tabs__nav ul > li' ).each( function( index ) {\n\t\t\t\t\t\t\t\tconst x2           = Math.cos( - Math.PI / 2 + index * increase - angle) * rotationRadius - liWidth / 2,\n\t\t\t\t\t\t\t\t\t  y2           = Math.sin( - Math.PI / 2 + index * increase - angle) * rotationRadius + liHeight;\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t$( this ).css({\n\t\t\t\t\t\t\t\t\t'transform'        : 'translate('+parseFloat( x2 )+'px,'+parseFloat( y2 )+'px)',\n\t\t\t\t\t\t\t\t\t'transition'       : 'none',\n\t\t\t\t\t\t\t\t\t'transition-delay' : 0\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.find( '> a' )\n\t\t\t\t\t\t\t\t.css({\n\t\t\t\t\t\t\t\t\t'transform'        : 'rotate('+parseFloat(-rotationWapperDeg)+'deg)'\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t})();\t\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\t//----------------------- end ----------------------\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t});\t\n\n\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// Tab Sliding Effext\n\t\t\tif ( $this.find( '.uix-tabs__nav ul > li:first .uix-tabs__marker' ).length == 0 ) {\n\t\t\t\t$this.find( '.uix-tabs__nav ul > li:first' ).prepend( '<div class=\"uix-tabs__marker\"></div>' );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// Tab Fade Effect\n\t\t\t$this.off( 'click' ).on( 'click', '.uix-tabs__nav ul > li', function( e ) {\n\t\t\t\t\n\t\t\t\tconst tabID = $( this ).attr( 'data-tab' ),\n\t\t\t\t\t  index = parseFloat( $( this ).index() - 1 );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t$this.find( '.uix-tabs__nav ul > li' ).removeClass( 'is-active' );\n\t\t\t\t$this.find( '.uix-tabs__content' ).removeClass( 'is-active' );\n\t\t\n\t\t\t\t$( this ).addClass( 'is-active' );\n\t\t\t\t$( '#' + tabID ).addClass( 'is-active' );\n\t\t\t\t\n\n\t\t\t\t//sliding marker\n\t\t\t\tconst translateX = $( this ).index() * 100,\n\t\t\t\t\t  liHeight   = $this.find( '.uix-tabs__nav ul > li:first' ).outerHeight(),\n\t\t\t\t\t  translateY = $( this ).index() * liHeight;\n\t\t\t\t\n\t\t\t\tif ( window.innerWidth <= 768 ) {\n\t\t\t\t\t$this.find( '.uix-tabs__marker' ).css({\n\t\t\t\t\t\t'transform'          : 'translateY( '+translateY+'px )'\t\n\t\t\t\t\t});\t\n\t\t\t\t} else {\n\t\t\t\t\t$this.find( '.uix-tabs__marker' ).css({\n\t\t\t\t\t\t'transform'          : 'translateX( '+translateX+'% )'\t\n\t\t\t\t\t});\t\n\t\t\t\t}\n\n\t\t\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\t// Init\n\t\t\t$this.find( '.uix-tabs__nav ul > li.is-active' ).trigger( 'click' );\n\t\t\t\n\t\t\t//Active current tab\n\t\t\tlet url    = window.location.href,\n\t\t\t\tlocArr,\n\t\t\t    loc, \n\t\t\t\tcurTab;\n\t\t\t\n\t\t\tif ( url.indexOf( '#' ) >= 0 ) {\n\t\t\t\t\n\t\t\t\tlocArr = url.split( '#' );\n\t\t\t    loc    = locArr[1];\n\t\t\t\tcurTab = $( '.uix-tabs' ).find( 'ul > li:eq('+loc+')' );\n\t\t\t\tcurTab.trigger( 'click' );\t\n\t\t\t}\n\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t});\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.TABS.documentReady );\n\t\n\n\treturn class TABS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","/* \n *************************************\n * <!-- Team Focus -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const TEAM_FOCUS = ( ( module, $, window, document ) => {\n\tif ( window.TEAM_FOCUS === null ) return false;\n\t\n\t\n\t\n    module.TEAM_FOCUS               = module.TEAM_FOCUS || {};\n    module.TEAM_FOCUS.version       = '0.0.4';\n    module.TEAM_FOCUS.documentReady = function( $ ) {\n\n\t\tconst teamFocusContent = '.uix-team-focus',\n\t\t\t  teamFocusMask    = '.uix-team-focus__mask';\n\t\t\t\n\t\t\t\n\t\t$( teamFocusContent ).each( function() {\n\t\t\tconst $this           = $( this );\n            \n\t\t\tconst thisID          = 'uix-team-focus-' + UixGUID.create(),\n                  el              = '#' + thisID + '> div';\n            \n            let total           = 0;\n            \n\t\t\tlet\thoverWidth      = $this.data( 'hover-width' ),\n\t\t\t\ttargetWidth     = $this.data( 'target-width' ), // Div over width as a percentage \n\t\t\t\ttargetInfo      = $this.data( 'target-info' ), // Corresponding character details display\n\t\t\t\tcloseBtn        = $this.data( 'close-btn' );\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t$this.attr( 'id', thisID );\n\t\t\t\n\t\t\n\t\t\tif ( typeof hoverWidth === typeof undefined ) {\n\t\t\t\thoverWidth = 20;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof targetWidth === typeof undefined ) {\n\t\t\t\ttargetWidth = 80;\n\t\t\t}\t\n\t\t\t\n\t\t\tif ( typeof closeBtn === typeof undefined ) {\n\t\t\t\tcloseBtn = '.close';\n\t\t\t}\n\t\t\t\n\t\t\tif ( typeof targetInfo === typeof undefined ) {\n\t\t\t\ttargetInfo = '.uix-team-focus__info';\n\t\t\t}\t\t\n\t\t\n\t\t\ttotal = $( el ).length;\n\t\t\n\n\t\t\tTweenMax.set( el, {\n\t\t\t\twidth: 100/total + '%'\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t//Add an index to each item\n\t\t\t$( el ).each( function( index )  {\n\t\t\t\t$( this ).attr( 'data-index', index );\n\t\t\t});\n\t\t\t\n\n\t\t\t//Create item hover overlay effects\n\t\t\t$( el ).on( 'mouseenter', function() {\n\n\t\t\t\tconst $cur      = $( this ),\n\t\t\t\t\t  $neighbor = $cur.siblings().not( '.focus' ); //Get the siblings of each element in the set of matched elements\n\n\t\t\t\tTweenMax.to( $cur, 0.3, {\n\t\t\t\t\twidth: hoverWidth + '%'\n\t\t\t\t});\n\n\t\t\t\tTweenMax.to( $neighbor, 0.3, {\n\t\t\t\t\twidth: ( 100 - hoverWidth )/( total - 1 ) + '%'\n\t\t\t\t});\n\n\t\t\t} );\n\n\t\t\t\n\t\t\t//Display the target item\n\t\t\t$( document ).off( 'click.TEAM_FOCUS' ).on( 'click.TEAM_FOCUS', el, function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst $cur        = $( this ),\n\t\t\t\t\t  $neighbor   = $cur.siblings(), //Get the siblings of each element in the set of matched elements\n\t\t\t\t\t  $cloneItem  = $cur.clone();\n\t\t\t\t\n\t\t\t\t//The mask prevent click and hover\n\t\t\t\t$( teamFocusMask ).show();\n\t\t\t\t\n\t\t\t\t$( el ).removeClass( 'is-active' );\n\t\t\t\t$cur.addClass( 'is-active' );\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tconst $info   = $( targetInfo ),\n\t\t\t\t\t  cName   = $cur.data( 'name' ),\n\t\t\t\t\t  cPo     = $cur.data( 'po' ),\n\t\t\t\t\t  cIntro  = $cur.data( 'intro' );\n\t\t\t\t\t\n\t\t\t\tTweenMax.set( $info, {\n\t\t\t\t\tcss: {\n\t\t\t\t\t\topacity : 0,\n\t\t\t\t\t\tdisplay : 'none'\n\t\t\t\t\t},\n\t\t\t\t\tonComplete : function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\tTweenMax.to( this.target, 0.5, {\n\t\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\t\topacity    : 1,\n\t\t\t\t\t\t\t\tdisplay    : 'block'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t$info.find( 'h4 strong' ).html( cName );\n\t\t\t\t$info.find( 'h4 em' ).html( cPo );\n\t\t\t\t$info.find( '.uix-team-focus__info__text' ).html( cIntro );\n\t\t\t\t\n\n\t\t\t\tif ( !$cur.hasClass( 'focus' ) ) {\n\t\t\t\t\t$( el + '.focus' ).remove();\n\n\n\t\t\t\t\tTweenMax.set( $cloneItem, {\n\t\t\t\t\t\talpha      : 0,\n\t\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\t\tthis.target\n\t\t\t\t\t\t\t\t.prependTo( '#' + thisID )\n\t\t\t\t\t\t\t\t.addClass( 'focus' );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tTweenMax.to( el, 0.3, {\n\t\t\t\t\t\talpha      : 1\n\t\t\t\t\t});\n\n\n\t\t\t\t\tTweenMax.to( $cur, 0.3, {\n\t\t\t\t\t\talpha : 0\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tTweenMax.to( $neighbor, 0.3, {\n\t\t\t\t\t\talpha : 0.3\n\t\t\t\t\t});\n\t\t\t\t}\n\n\n\n\t\t\t});\n\n\t\t\t\n\t\t\t//Close the focus item\n\t\t\t$( document ).off( 'click.TEAM_FOCUS_CLOSE' ).on( 'click.TEAM_FOCUS_CLOSE', el + '.focus, ' + closeBtn + ', ' + targetInfo + ', ' + teamFocusMask, function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t\n\t\t\t\t//Remove the mask\n\t\t\t\t$( teamFocusMask ).hide();\n\t\t\t\t\n\t\t\t\tTweenMax.to( el, 0.3, {\n\t\t\t\t\twidth : 100/total + '%',\n\t\t\t\t\tease  : Back.easeOut\n\t\t\t\t});\n\n\t\t\t\tTweenMax.to( el + '.focus', 0.3, {\n\t\t\t\t\talpha : 0,\n\t\t\t\t\tonComplete : function() {\n\n\t\t\t\t\t\t$( el + '.focus' ).remove();\n\t\t\t\t\t\tTweenMax.to( el, 0.3, {\n\t\t\t\t\t\t\talpha : 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\tconst $info = $( targetInfo );\n\t\t\t\tTweenMax.to( $info, 0.5, {\n\t\t\t\t\tcss: {\n\t\t\t\t\t\topacity : 0,\n\t\t\t\t\t\tdisplay : 'none'\n\t\t\t\t\t}\n\t\t\t\t});\t\n\t\t\t\t\n\t\t\t\t$info.find( 'h4 strong' ).html( '' );\n\t\t\t\t$info.find( 'h4 em' ).html( '' );\n\t\t\t\t$info.find( '.uix-team-focus__info__text' ).html( '' );\t\t\n\n\n\t\t\t});\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t});\t\n\n\n\t\t\n    };\n\n    module.components.documentReady.push( module.TEAM_FOCUS.documentReady );\n\n\treturn class TEAM_FOCUS {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n","\n\n/* \n *************************************\n * <!-- Text effect -->\n *************************************\n */\n/**\n * module.TEXT_EFFECT\n * \n * @requires ./examples/assets/js/min/anime.min.js\n * @example \n\n //The data-text-eff attribute on the same page cannot be duplicated.\n\n<h3 data-text-eff=\"letters-eff-flyInOut1\" data-text-eff-speed=\"800\">Text Text</h3>\n<h3 data-text-eff=\"letters-eff-flyInOut2\" data-text-eff-speed=\"800\">Text Text</h3>\n<h3 data-text-eff=\"letters-eff-flyInOut3\" data-text-eff-speed=\"800\">Text Text</h3>\n \n */\n\n\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\nimport UixTextEff from '@uixkit/core/text-effect/js/fn/text-anime';\n\n\nimport '../scss/_style.scss';\n\n\nexport const TEXT_EFFECT = ( ( module, $, window, document ) => {\n\tif ( window.TEXT_EFFECT === null ) return false;\n\t\n    module.TEXT_EFFECT               = module.TEXT_EFFECT || {};\n    module.TEXT_EFFECT.version       = '0.0.5';\n    module.TEXT_EFFECT.pageLoaded    = function() {\n\n\n\t\t$( '[data-text-eff]' ).each( function( index )  {\n\t\t\t$( document ).UixTextEff( { selectors: '[data-text-eff=\"'+$( this ).data( 'text-eff' )+'\"]', scrollSpy: true } );\n\t\t});   \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.TEXT_EFFECT.pageLoaded );\n\t\n\n\treturn class TEXT_EFFECT {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n","\n/* \n *************************************\n * <!-- Timeline -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const TIMELINE = ( ( module, $, window, document ) => {\n\tif ( window.TIMELINE === null ) return false;\n\t\n\t\n\n    module.TIMELINE               = module.TIMELINE || {};\n    module.TIMELINE.version       = '0.1.8';\n    module.TIMELINE.pageLoaded    = function() {\n\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n\t\t\t\t\n\n\t\t/*! \n\t\t ---------------------------\n         Horizontal Timeline\n\t\t ---------------------------\n\t\t */\n\t\t$( '.uix-timeline__container-wrapper.js-uix-timeline' ).each( function()  {\n\n            const $this          = $( this );\n\n            const $container     = $this.find( '.uix-timeline__container' ),\n                  $timeline      = $container.find( '> .uix-timeline' );\n\n\n            const dir = $this.hasClass( 'is-vertical' ) ? 'vertical' : 'horizontal';\n\n            let\t  dateShowEle    = $timeline.data( 'show-ele' );\n\n            if ( typeof dateShowEle === typeof undefined ) {\n                dateShowEle = '#timeline-number-show';\n            }\t\n\n\n\n            $this.find( '.uix-timeline__btn--prev' ).off( 'click' ).on( 'click', function( e ) {\n                e.preventDefault();\n                timelineUpdate( $this, null, dateShowEle, true, dir );\n                return false;\n            });\n\n            $this.find( '.uix-timeline__btn--next' ).off( 'click' ).on( 'click', function( e ) {\n                e.preventDefault();\n                timelineUpdate( $this, null, dateShowEle, false, dir );\n                return false;\n            });\n\n            $this.find( '.uix-timeline__item .uix-timeline__item__img' ).off( 'click' ).on( 'click', function( e ) {\n                e.preventDefault();\n                timelineUpdate( $this, $( this ).parent(), dateShowEle, false, dir );\n                return false;\n            });\n\n\n            //Activate the default selection\n            timelineUpdate( $this, $this.find( '.uix-timeline__item.is-active' ), dateShowEle, false, dir );\n            if ( $this.find( '.uix-timeline__item.is-active' ).index() == 0 ) {\n                $this.find( '.uix-timeline__btn--prev' ).addClass( 'is-disabled' );\n            }\n\n\n\n            // for reversed timeline\n            if ( dir == 'horizontal' && $this.hasClass( 'is-reversed' ) && windowWidth > 768 ) {\n\n                // Set equal heights\n                const setEqualHeights = function( el ) {\n                    let counter = 0;\n\n                    for ( let i = 0; i < el.length; i++) {\n\n                        const singleHeight = $( el[i] ).outerHeight( true );\n\n                        if (counter < singleHeight) {\n                            counter = singleHeight;\n                        }\n                    }\n\n                    for ( let k = 0; k < el.length; k++) {\n                        $( el[k] ).css( 'height', counter + 'px' );\n                    }\n\n                    return counter;\n\n                };\n\n\n                // Reset container height\n                const infoNewHeight = setEqualHeights( $timeline.find( '.uix-timeline__item__info' ) );\n                $container.css( {\n                    'padding' : parseFloat( infoNewHeight + 64 ) + 'px 0'\n                } );\n\n            }\n\n\n\n\n        });\t\n\n\t\t\n\n\t\t/*\n\t\t * Method that updates items of timeline\n\t\t *\n\t\t * @param  {Element} obj                 - Wrapper of timeline.\n\t\t * @param  {?Element} iscur              - The current item.\n\t\t * @param  {String} showEle              - Element ID or class name that push the current text.\n\t\t * @param  {Boolean} prev                - Whether to slide forward.\n         * @param  {String} dir                  - Timeline direction.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction timelineUpdate( obj, iscur, showEle, prev, dir ) {\n\t\t\tconst itemTotal  = obj.find( '.uix-timeline__item' ).length,\n\t\t\t\t  tNav       = obj.find( '.uix-timeline__item' ),\n\t\t\t\t  tLoop      = false;\n\t\t\t\n\t\t\t\n\t\t\tlet curIndex = obj.find( '.uix-timeline__item.is-active' ).index(),\n\t\t\t\ttarIndex;\n\n\t\t\t//Check if a value is an object currently\n\t\t\tif ( iscur != null && typeof iscur === 'object' ) {\n\t\t\t\tcurIndex = iscur.index();\n\t\t\t\ttarIndex = curIndex;\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tif ( prev ) {\n\t\t\t\t\ttarIndex = ( curIndex >= 0  ) ? curIndex-1 : 0;\n\t\t\t\t} else {\n\t\t\t\t\ttarIndex = ( curIndex < itemTotal  ) ? curIndex+1 : itemTotal-1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\t//loop the items\n\t\t\tobj.find( '.uix-timeline__btn--prev, .uix-timeline__btn--next' ).removeClass( 'is-disabled' );\n\t\t\t\n\t\t\tif ( prev ) {\n\t\t\t\t\n\t\t\t\t//Previous\n\t\t\t\tif ( tLoop ) {\n\t\t\t\t\tif ( tarIndex < 0 ) tarIndex = itemTotal-1;\n\t\t\t\t} else {\n\t\t\t\t\tif ( tarIndex < 0 ) tarIndex = 0;\n\t\t\t\t\tif ( tarIndex == 0 ) obj.find( '.uix-timeline__btn--prev' ).addClass( 'is-disabled' );\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\t//Next\n\t\t\t\tif ( tLoop ) {\n\t\t\t\t\tif ( tarIndex == itemTotal ) tarIndex = 0;\n\t\t\t\t} else {\n\t\t\t\t\tif ( tarIndex > itemTotal-1 ) tarIndex = itemTotal-1;\n\t\t\t\t\tif ( tarIndex > itemTotal-2 ) obj.find( '.uix-timeline__btn--next' ).addClass( 'is-disabled' );\n\t\t\t\t\tif ( tarIndex == 0 ) obj.find( '.uix-timeline__btn--prev' ).addClass( 'is-disabled' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t\t\n\t\t\ttNav.removeClass( 'is-active' );\n\t\t\tobj.find( '.uix-timeline__item:eq('+tarIndex+')' ).addClass( 'is-active' );\n\n\t\t\t//scroll left\n            if ( dir == 'horizontal' ) {\n                let moveWidth = 0;\n                for ( let i = 0; i < tarIndex; i++ ) {\n                    moveWidth += obj.find( '.uix-timeline__item:eq('+i+')' ).width();\n                }\n\n                obj.find( '.uix-timeline__container > .uix-timeline' ).css({\n                    'margin-left' : -parseFloat( moveWidth ) + 'px'\n                });    \n            }\n\n            \n\t\t\t//scroll top\n            if ( dir == 'vertical' ) {\n                let moveHeight = 0;\n                for ( let i = 0; i < tarIndex; i++ ) {\n                    moveHeight += obj.find( '.uix-timeline__item:eq('+i+')' ).outerHeight( true );\n                    \n                }\n\n                obj.find( '.uix-timeline__container > .uix-timeline' ).css({\n                    'margin-top' : -parseFloat( moveHeight ) + 'px'\n                });        \n                \n            }\n            \n           \n\t\t\t//Push the current text to element \n\t\t\t$( showEle ).text( obj.find( '.uix-timeline__item:eq('+tarIndex+')' ).find( '.uix-timeline__item__date' ).text() );\n\t\t\t\n\t\t\t\n\t\t}\n    \n\t\t\n    };\n\n    module.components.pageLoaded.push( module.TIMELINE.pageLoaded );\n\n\treturn class TIMELINE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n\n","\n/* \n *************************************\n * <!-- Vertical Menu -->\n *************************************\n */\n\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_style.scss';\n\n\nexport const VERTICAL_MENU = ( ( module, $, window, document ) => {\n\tif ( window.VERTICAL_MENU === null ) return false;\n\t\n\t\n\t\n    module.VERTICAL_MENU               = module.VERTICAL_MENU || {};\n    module.VERTICAL_MENU.version       = '0.0.5';\n    module.VERTICAL_MENU.documentReady = function( $ ) {\n\n        const $window          = $( window );\n        let\twindowWidth        = window.innerWidth,\n            windowHeight       = window.innerHeight;\n        \n\t\tconst ulForDesktop = '.uix-v-menu__container:not(.is-mobile) ul.uix-menu';\n\n\n\t\t// Menu Hover\n\t\tconst mTop = 15;\n\t\t$( ulForDesktop + ' > li.multi-column > ul li ul' ).addClass( 'multi' );\n\t\t$( ulForDesktop + ' > li:not(.multi-column) ul, .uix-v-menu__container:not(.is-mobile) li.multi-column > ul.sub-menu > li > ul, '+ulForDesktop+' li.multi-column > ul' ).css( 'margin-top', mTop + 'px' );\n\n\t\t$( ulForDesktop + ' li' ).on( 'mouseenter', function(){\n\n\n\t\t\tTweenMax.set( $( this ).find( ' > ul.sub-menu:not(.multi), .uix-menu__arrow-mega' ), {\n\t\t\t\tcss: {\n\t\t\t\t\topacity    : 0,\n\t\t\t\t\tdisplay    : 'block',\n\t\t\t\t\tmarginTop  : mTop + 'px'\n\t\t\t\t},\n\t\t\t\tonComplete : function() {\n\n\t\t\t\t\tTweenMax.to( this.target, 0.3, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\topacity    : 1,\n\t\t\t\t\t\t\tmarginTop  : 0\n\t\t\t\t\t\t},\n\t\t\t\t\t\tease   : Power2.easeOut\n\t\t\t\t\t});\t\t\n\n\n\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\n\n\t\t\n\t\t\t//Calculate whether the total width of a large navigation is greater than the window\n\t\t\tconst megaMenuW        = $( ulForDesktop + ' > li.multi-column > ul' ).width(),\n\t\t\t\t  megaMaxW         = parseFloat( windowWidth - $( ulForDesktop ).parent().width() ),\n\t\t\t\t  megaMenuCoLength = $( ulForDesktop + ' > li.multi-column > ul > li' ).length;\n\t\t\t\n\t\t\tif ( megaMenuW > megaMaxW ) {\n\t\t\t\t\n\t\t\t\t$( ulForDesktop + ' > li.multi-column > ul > li' ).css( 'width', megaMaxW/megaMenuCoLength + 'px' );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\n\t\t}).on( 'mouseleave' , function(){\n\n\n\t\t\tTweenMax.to( $( this ).find( ' > ul.sub-menu:not(.multi), .uix-menu__arrow-mega' ), 0.3, {\n\t\t\t\tcss: {\n\t\t\t\t\topacity    : 0,\n\t\t\t\t\tmarginTop  : mTop + 'px'\n\t\t\t\t},\n\t\t\t\tonComplete : function() {\n\n\t\t\t\t\tTweenMax.set( this.target, {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\tdisplay    : 'none',\n\t\t\t\t\t\t}\n\t\t\t\t\t});\t\t\n\n\n\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\n\t\t});\n\t\t\n\n\n\n\t\t//Add Sub-menu Arrow\n\t\t$( ulForDesktop + ' li' ).each( function() {\n\t\t\tif ( $( this ).find( 'ul' ).length > 0 ) {\n\t\t\t\t$( this ).prepend( '<span class=\"uix-menu__arrow\"></span>' );\n\t\t\t}\n\n\t\t} );\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t//Monitor the maximum height of the vertical navigation\n\t\tmenuWrapInit( windowWidth, windowHeight );\n\t\t\n\t\t$window.on( 'resize', function() {\n\t\t\t// Check window width has actually changed and it's not just iOS triggering a resize event on scroll\n\t\t\tif ( window.innerWidth != windowWidth ) {\n\n\t\t\t\t// Update the window width for next time\n\t\t\t\twindowWidth  = window.innerWidth;\n\t\t\t\twindowHeight = window.innerHeight;\n\n\t\t\t\t// Do stuff here\n\t\t\t\tmenuWrapInit( windowWidth, windowHeight );\n\t\t\n\n\t\t\t}\n\t\t});\n\t\t\n\t\n\t\t/*\n\t\t * Monitor the maximum height of the vertical navigation\n\t\t *\n\t\t * @param  {Number} w         - Returns width of browser viewport\n\t\t * @param  {Number} h         - Returns height of browser viewport\n\t\t * @return {Void}\n\t\t */\n\t\tfunction menuWrapInit( w, h ) {\n\t\t\t\n\t\t\tconst $menuWrap  = $( '.uix-v-menu__container:not(.is-mobile)' ),\n\t\t\t\t  vMenuTop   = 0; //This value is equal to the $vertical-menu-top variable in the SCSS\n            \n            \n\t\t\tlet\twinHeight  = h - vMenuTop;\n\n\t\t\t//WoedPress spy\n\t\t\tif ( $( '.admin-bar' ).length > 0 ) {\n\t\t\t\twinHeight = h - 132;\n\t\t\t}\t\n\n\t\t\t$menuWrap.css({\n\t\t\t\tposition  : 'fixed',\n\t\t\t\theight    : winHeight + 'px',\n\t\t\t\tmarginTop : 0\n\t\t\t});\t\n\n\t\t\t$window.off( 'scroll.VERTICAL_MENU touchmove.VERTICAL_MENU' ).on( 'scroll.VERTICAL_MENU touchmove.VERTICAL_MENU', function() {\n\n\t\t\t\tconst curULHeight = $( 'ul.uix-menu' ).height(),\n\t\t\t\t\t  scrolled    = $( this ).scrollTop();\n\n\t\t\t\tif ( curULHeight > winHeight ) {\n\t\t\t\t\t$menuWrap.css({\n\t\t\t\t\t\tposition : 'absolute',\n\t\t\t\t\t\theight   : curULHeight + 'px'\n\t\t\t\t\t});\n\n\t\t\t\t\tif ( scrolled >= ( curULHeight - winHeight ) ) {\n\t\t\t\t\t\t$menuWrap.css({\n\t\t\t\t\t\t\tposition  : 'fixed',\n\t\t\t\t\t\t\tmarginTop : -( curULHeight - winHeight ) + 'px'\n\t\t\t\t\t\t});\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$menuWrap.css({\n\t\t\t\t\t\t\tposition : 'absolute',\n\t\t\t\t\t\t\tmarginTop : 0\n\t\t\t\t\t\t});\t\t\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( $menuWrap.height() < winHeight ) {\n\t\t\t\t\t$menuWrap.css({\n\t\t\t\t\t\tposition  : 'fixed',\n\t\t\t\t\t\theight    : winHeight + 'px',\n\t\t\t\t\t\tmarginTop : 0\n\t\t\t\t\t});\t\t\n\t\t\t\t}\n\n\n\t\t\t});\t\n\t\t\t\n\t\t}\n\t\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.VERTICAL_MENU.documentReady );\n\t\n\n\treturn class VERTICAL_MENU {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n","\n/* \n *************************************\n * <!-- WordPress Core Scripts -->\n *************************************\n */\nimport {\n    templateUrl,\n    homeUrl,\n    ajaxUrl,\n    browser,\n    UixModuleInstance,\n    UixGUID,\n    UixMath,\n    UixCssProperty\n} from '@uixkit/core/_global/js';\n\n\nimport '../scss/_wp_core.scss';\nimport '../scss/_3rd_party_plugins.scss';\n\nexport const WP_CORE = ( ( module, $, window, document ) => {\n\tif ( window.WP_CORE === null ) return false;\n\t\n\t\n\t\n    module.WP_CORE               = module.WP_CORE || {};\n    module.WP_CORE.version       = '0.0.1';\n    module.WP_CORE.documentReady = function( $ ) {\n\n\t\t/* \n\t\t ---------------------------\n\t\t Pagination\n\t\t ---------------------------\n\t\t */  \n\t\t$( '.uix-pagination__container li > span.current' ).each( function()  {\n\t\t\t$( this ).parent( 'li' ).addClass( 'is-active' );\n\t\t});\n\t\t\n\t\t\n\t\t\n\t\t/* \n\t\t ---------------------------\n\t\t Dropdown Categories\n\t\t ---------------------------\n\t\t */  \n\t\t  $( '#cat' ).on( 'change', function () {\n\t\t\t  const cvalue = $( this ).val();\n\t\t\t  if ( cvalue ) {\n\t\t\t\t  location.href = homeUrl + \"/?cat=\" + cvalue;\n\t\t\t  }\n\t\t\t  return false;\n\t\t  });\n\n\n\t\t\n\t\t\n    };\n\n    module.components.documentReady.push( module.WP_CORE.documentReady );\n\n\treturn class WP_CORE {\n\t\tconstructor() {\n\t\t\tthis.module = module;\n\t\t}\n\t\t\n\t};\n\t\n})( UixModuleInstance, jQuery, window, document );\n\n\n\n"],"sourceRoot":""}