{"version":3,"sources":["../../../../node_modules/wee-core/temp/?","../../../../node_modules/wee-core/js/wee.js","../../../../node_modules/wee-core/js/wee.animate.js","../../../../node_modules/wee-core/js/wee.assets.js","../../../../node_modules/wee-core/js/wee.fetch.js","../../../../node_modules/wee-core/js/wee.dom.js","../../../../node_modules/wee-core/js/wee.events.js","../../../../node_modules/wee-core/js/wee.history.js","../../../../node_modules/wee-core/js/wee.routes.js","../../../../node_modules/wee-core/js/wee.screen.js","../../../../node_modules/wee-core/js/wee.touch.js","../../../../node_modules/wee-core/js/wee.view.js","../../../../node_modules/wee-core/js/wee.view.diff.js","../../../../node_modules/wee-core/js/wee.chain.js","../../../../node_modules/wee-core/js/chain/wee.chain.animate.js","../../../../node_modules/wee-core/js/chain/wee.chain.dom.js","../../../../node_modules/wee-core/js/chain/wee.chain.events.js","../../../../node_modules/wee-core/js/chain/wee.chain.history.js","../../../../node_modules/wee-core/js/chain/wee.chain.view.js","../../../../node_modules/wee-core/temp/views.js","../../../../source/js/build/vendor/autogrow.js","../../../../source/js/build/vendor/swiper.js","../../../../source/js/build/common.js","../../../../source/js/build/form.js","../../../../source/js/build/landingPage2.js","../../../../source/js/build/modal.js","../../../../source/js/build/newsletter.js","../../../../source/js/build/quotes.js","../../../../source/js/build/validate.js","../../../../source/js/custom/script.js","../../../../source/modules/csrf/core/js/script.js","../../../../source/modules/infield-labels/core/js/script.js"],"names":["exports","global","Wee","W","U","web","window","scope","env","range","D","document","store","$","observe","refs","_storage","obj","key","create","val","data","type","$type","num","segs","toString","split","pop","forEach","hasOwnProperty","Array","isArray","arr","slice","length","_set","obs","options","stored","seg","_val","_trigger","_copy","_get","fallback","set","resp","_has","$isObject","indexOf","_add","prepend","root","orig","$toArray","concat","unshift","push","_merge","$extend","_drop","i","splice","_observe","fn","init","_unobserve","upd","Object","keys","_equals","opts","map","join","el","recursive","value","args","diff","_diff","$exec","once","_extend","_contains","source","target","_html","contains","object","deep","src","len","a","b","aType","_arrEquals","_objEquals","every","aKeys","sort","aObj","bObj","after","before","_canExec","_$","WeeAlias","_body","body","_doc","documentElement","_slice","_win","make","name","pub","priv","base","instance","_make","extend","c","d","$private","this","selector","context","ref","filter","sel","trim","WeeSelector","test","pre","getElementById","substr","getElementsByClassName","getElementsByTagName","querySelectorAll","e","$parseHTML","childNodes","nodeType","call","html","createRange","selectNode","createContextualFragment","child","div","createElement","createDocumentFragment","innerHTML","firstChild","appendChild","$set","$get","$push","$concat","$merge","$has","$drop","$observe","$unobserve","$trigger","$each","conf","els","_selArray","reverse","$env","rules","fb","host","location","hostname","rule","$envSecure","protocol","fns","response","apply","$copy","bool","arguments","$diff","$equals","$isArray","$isFunction","$isString","$map","res","$serialize","encodeURIComponent","replace","$unserialize","str","decodeURIComponent","$setRef","getAttribute","$setVar","_castString","prototype","toLowerCase","$unique","array","$chain","controller","method","parseInt","JSON","parse","model","Public","Private","id","core","$destroy","_destruct","$public","_construct","ready","readyState","addEventListener","module","undefined","raf","easings","ease","t","linear","process","prop","cssValue","scroll","bodyScroll","getComputedStyle","css","unit","setValue","update","style","dir","dist","Math","abs","start","Date","now","duration","complete","animate","tween","values","requestAnimationFrame","cb","setTimeout","addEasing","groups","loaded","groupId","_load","js","path","async","onload","_done","group","onerror","_fail","head","link","rel","href","img","Image","assets","load","files","ext","file","noCache","cache","remove","parentNode","removeChild","poll","hasErrors","error","success","version","_change","x","code","status","exec","_success","responseType","responseText","json","_jsonp","jsonpCallback","jsonp","_getUrl","request","headers","dt","url","XMLHttpRequest","send","onreadystatechange","contentTypeHeader","toUpperCase","processData","stringify","open","Accept","setRequestHeader","fetch","_getSelected","select","selected","_getClass","SVGElement","className","_setClass","setAttribute","_getSibling","match","index","$index","$children","$parent","$is","_toCamel","_toDashed","$addClass","func","cn","names","$after","aft","par","cel","$clone","insertBefore","nextSibling","$remove","$append","app","$attr","$before","bef","parent","children","$filter","cloneNode","$closest","$contains","descendant","$contents","$css","$data","attributes","attr","$empty","$eq","$find","$first","$hasClass","some","RegExp","$height","height","innerHeight","scrollHeight","offsetHeight","parseFloat","marginTop","marginBottom","$hide","$html","nodeName","atob","outerHTML","$insertAfter","$insertBefore","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","$last","$next","$not","$offset","rect","getBoundingClientRect","offset","top","pageYOffset","left","pageXOffset","$parents","$position","offsetTop","offsetLeft","$prepend","$prev","$prop","$removeAttr","removeAttribute","$removeClass","$replaceWith","$scrollLeft","scrollLeft","$scrollTop","scrollTop","$serializeForm","elements","checked","$show","$siblings","siblings","$slice","end","$text","textContent","$toggle","$toggleClass","state","$val","$width","width","innerWidth","scrollWidth","offsetWidth","marginLeft","marginRight","$wrap","wrap","$wrapInner","markup","bound","custom","_bind","delegate","targ","evts","evt","ev","parts","f","namespace","cont","_off","events","removeEventListener","on","off","event","delegateTarg","binding","String","trigger","preventDefault","stopPropagation","addEvent","E","H","support","pushState","entries","order","pending","settings","_path","loc","pathname","search","hash","_isValid","hasAttribute","exts","extensions","_reset","history","bind","_process","prev","title","routes","uri","run","pushstate","popstate","full","partials","scrollTarget","scrollRestoration","replaceState","go","click","submit","form","l","attrs","metaKey","get","req","mock","action","route","force","begin","sendEvents","successEvents","errorEvents","completeEvents","targets","X-PJAX","X-Requested-With","replaceEvent","modHtml","replaceChild","scrollEvent","st","anim","processErrors","responseURL","useResponseURL","filters","Number","any","total","k","y","ran","opt","negate","eq","query","segments","curr","addFilter","current","_addRule","watch","_run","size","screen","_eq","callback","sz","mn","min","mx","max","ex","each","getPropertyValue","sets","reset","ns","distance","movement","touches","changedTouches","travel","esc","reg","pair","partial","short","single","tags","helpers","is","not","isEmpty","_isEmpty","empty","notEmpty","views","_embed","temp","m","tag","_string","_parseArgs","arg","_parse","helper","inner","cond","help","meth","sec","agg","rv","isObject",".","#","##","isPlainObject","item","$key","hl","helps","_render","depth","exists","o","view","render","$pause","$resume","template","addHelper","hasHelper","addView","specialElHandlers","OPTION","fromEl","toEl","INPUT","TEXTAREA","newValue","nodeValue","_morphAttrs","fromNode","toNode","attrName","attrValue","specified","removeAttributeNode","_moveChildren","curChild","nextChild","savedEls","unmatchedEls","removeNodeHelper","node","nestedInSavedEl","walkDiscardedChildNodes","removeNode","alreadyVisited","morphEl","tagName","curToNodeId","fromNextSibling","toNextSibling","savedEl","unmatchedEl","curToNodeChild","curFromNodeChild","outer","curFromNodeId","curFromNodeType","isCompatible","specialElHandler","morphedNode","savedElId","A","Get","copy","setRef","setVar","toArray","add","addClass","append","appendTo","clone","closest","contents","r","find","first","hasClass","hide","insertAfter","last","next","outerHeight","parents","position","prependTo","removeAttr","removeClass","replaceWith","serialize","show","text","toggle","toggleClass","wrapInner","newsletter-thank","thankyou","factory","define","amd","Autogrow","textarea","maxLines","self","getOffset","props","autogrowFn","newHeight","hasGrown","maxAllowedHeight","overflowY","rows","lineHeight","addLibraryPlugin","lib","swiper","params","firstInstance","s","Swiper","container","round","floor","autoplay","autoplayDelay","activeSlide","slides","activeIndex","autoplayTimeoutId","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","found","_el","initObserver","ObserverFunc","MutationObserver","WebkitMutationObserver","observer","mutations","mutation","onResize","childList","characterData","observers","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","activeElement","inView","slideClass","slideActiveClass","windowScroll","windowWidth","windowHeight","swiperOffset","rtl","swiperCoord","point","returnValue","slideNext","slidePrev","isEventSupported","eventName","isSupported","element","implementation","hasFeature","normalizeWheel","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMousewheel","delta","rtlFactor","mousewheelForceToAxis","mousewheelInvert","freeMode","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","mousewheel","timeout","slideReset","lazyLoading","lazy","autoplayDisableOnInteraction","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","transform","normalizeEventName","substring","defaults","direction","touchEventsTarget","initialSlide","speed","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","zoom","zoomMax","zoomMin","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","mousewheelEventsTarged","hashnav","hashnavWatchState","breakpoints","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","normalizeSlideIndex","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","paginationClickableClass","paginationModifierClass","lazyLoadingClass","lazyStatusLoadingClass","lazyStatusLoadedClass","lazyPreloaderClass","notificationClass","preloaderClass","zoomContainerClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","flexbox","transforms3d","touch","wrapper","paginationContainer","wrongRTL","device","android","translate","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","srcset","sizes","checkForComplete","onReady","image","_onReady","currentSrc","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","activeSlides","ceil","updateContainerSize","clientWidth","clientHeight","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","virtualSize","slidesNumberEvenToRows","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","outerWidth","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","currentSlidesPerView","j","spv","breakLoop","updateSlidesProgress","offsetCenter","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","updateRealIndex","realIndex","nextSlide","prevSlide","bullets","scale","scaleX","scaleY","transition","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","translated","spline","slideTo","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","onAfterResize","touchEventsDesktop","move","navigator","pointerEnabled","msPointerEnabled","touchEvents","initEvents","detach","actionDom","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","passiveListener","passive","capture","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","velocities","startX","startY","currentX","currentY","isTouchEvent","startMoving","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","disableParentSwiper","pow","time","touchEndTime","timeDiff","currentPos","lastMoveEvent","velocityEvent","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","lteIE9","setHistory","setHash","clientLeft","_slidePrev","disableTouchControl","enableTouchControl","byController","effects","setTransition","z","setTranslate","getTranslate","matrix","curTransform","curStyle","transformMatrix","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","prependSlides","appendSlides","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","draggableEvents","enableDraggable","disableDraggable","trackSize","divider","display","newPos","newSize","LinearSpline","binarySearch","guess","lastIndex","i1","i3","interpolate","x2","getInterpolateFunction","setControlledTranslate","controlledTranslate","controlled","setControlledTransition","onHashCange","newHash","activeSlideHash","initialized","slideHash","destroy","paths","getPathValues","scrollToSlide","setHistoryPopState","pathArray","slugify","includes","slideHistory","disableKeyboardControl","enableKeyboardControl","userAgent","disableMousewheelControl","enableMousewheelControl","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","sqrt","onGestureStart","gestures","scaleStart","onGestureChange","scaleMove","onGestureEnd","os","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","offsetX","offsetY","diffX","diffY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","_plugins","plugin","plugins","callPlugins","emitterEventListeners","handler","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","liveRegion","message","notification","bullet","hashnavReplaceState","cleanupStyles","deleteInstance","ua","ieTouch","msMaxTouchPoints","maxTouchPoints","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","styles","supportsPassive","defineProperty","_this","tempParent","toCreate","classes","classList","dom7ElementDataStorage","dataKey","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","targetSelector","listener","handleLiveEvent","dom7LiveListeners","liveListener","proxy","dom","eventData","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","fireCallBack","includeMargins","box","clientTop","compareWith","previousSibling","returnIndex","newChild","tempDiv","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","unique","foundElements","toAdd","swiperDomPlugins","domLib","$form","infieldLabels","ref:message","keydown","keyup","errors","insertErrors","heading","console","log","ref:showVideo","showVideo","ref:hideVideo","hideVideo","ref:video","ref:arrow","_initYouTubeAnalytics","unload","$modal","ref:modalToggle","ref:modalClose","close","results","ref:newsletterModalToggle","$email","ref:newsletterForm","validate","submitForm","toggleButton","showSuccessMessage","$button","modal","$swiper","destroySwiper","initSwiper","quotesSwiper","config","allowWeeObject","allowDomObject","allowSelector","setIdx","result","check","orCond","idx","rulesSet","rulesPairs","required","orRule","runSet","runRule","rulePair","$startEl","startDate","moment","endDate","isAfter","$endEl","isBefore","currency","date","isValid","email","in","numeric","or","otherVal","phone","hasCount","confirm","hasCountExact","we-see-a-teacher","$slug","csrf","chain","endpoint","insertInput","$existingToken","focusClass","activeClass","$selector"],"mappings":"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","file":"../script.min.js","sourcesContent":[null,"// Wee (weepower.com)\n// Licensed under Apache 2 (http://www.apache.org/licenses/LICENSE-2.0)\n// DO NOT MODIFY\n\n/* global exports, global */\n/* jshint maxdepth: 4, maxparams: 6 */\n\nvar Wee;\n\n(function(W, U) {\n\t'use strict';\n\n\tvar web = typeof window != 'undefined',\n\t\tscope = web ? window : global,\n\t\tW = (function() {\n\t\t\tvar D = web ? document : {},\n\t\t\t\tstore = {\n\t\t\t\t\t$: {}\n\t\t\t\t},\n\t\t\t\tobserve = {\n\t\t\t\t\t$: {}\n\t\t\t\t},\n\t\t\t\trefs = {},\n\t\t\t\tenv,\n\t\t\t\trange,\n\n\t\t\t\t/**\n\t\t\t\t * Determine data storage root, key, and value\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {boolean} [create=false]\n\t\t\t\t * @returns {Array} value\n\t\t\t\t */\n\t\t\t\t_storage = function(obj, key, create) {\n\t\t\t\t\tvar data = obj,\n\t\t\t\t\t\ttype = W.$type(key),\n\t\t\t\t\t\tnum = type == 'number',\n\t\t\t\t\t\tval;\n\n\t\t\t\t\tif (num || type == 'string') {\n\t\t\t\t\t\tvar segs = key.toString().split('.');\n\t\t\t\t\t\tkey = segs.pop();\n\t\t\t\t\t\tdata = data.$;\n\n\t\t\t\t\t\tsegs.forEach(function(key) {\n\t\t\t\t\t\t\tdata = data.hasOwnProperty(key) ?\n\t\t\t\t\t\t\t\tdata[key] :\n\t\t\t\t\t\t\t\t(create ? data[key] = {} : []);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkey = '$';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (num && Array.isArray(data)) {\n\t\t\t\t\t\tvar arr = data.slice(key);\n\n\t\t\t\t\t\tif (arr.length) {\n\t\t\t\t\t\t\tval = arr[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkey = key.toString();\n\n\t\t\t\t\t\tif (data.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tval = data[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [data, key, val];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Set global variable\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_set = function(obj, obs, key, val, options) {\n\t\t\t\t\tvar stored = _storage(obj, key, true),\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\tdata = seg == '$' ?\n\t\t\t\t\t\t\t_val(key, val) :\n\t\t\t\t\t\t\t_val(val, options);\n\n\t\t\t\t\tstored[0][seg] = data;\n\n\t\t\t\t\t_trigger(obj, obs, key, _copy(stored[2]), data, 'set');\n\n\t\t\t\t\treturn data;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get global variable\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_get = function(obj, obs, key, fallback, set, options) {\n\t\t\t\t\tvar resp = _storage(obj, key)[2];\n\n\t\t\t\t\tif (resp !== U) {\n\t\t\t\t\t\treturn resp;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fallback !== U) {\n\t\t\t\t\t\treturn set ?\n\t\t\t\t\t\t\t_set(obj, obs, key, fallback, options) :\n\t\t\t\t\t\t\t_val(fallback, options);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if storage criteria is set\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_has = function(obj, key, val) {\n\t\t\t\t\tvar resp = _storage(obj, key)[2];\n\n\t\t\t\t\tif (resp === U) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (val !== U) {\n\t\t\t\t\t\tif (W.$isObject(resp)) {\n\t\t\t\t\t\t\treturn resp.hasOwnProperty(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Array.isArray(resp)) {\n\t\t\t\t\t\t\treturn resp.indexOf(val) > -1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn resp === val;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Push or concatenate values into global array\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_add = function(type, obj, obs, key, val, prepend) {\n\t\t\t\t\tvar stored = _storage(obj, key, true),\n\t\t\t\t\t\troot = stored[0],\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\torig = _copy(stored[2]);\n\n\t\t\t\t\tif (seg == '$') {\n\t\t\t\t\t\tprepend = val;\n\t\t\t\t\t\tval = key;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (! Array.isArray(orig)) {\n\t\t\t\t\t\troot[seg] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type == 1) {\n\t\t\t\t\t\troot[seg] = prepend ?\n\t\t\t\t\t\t\tW.$toArray(val).concat(root[seg]) :\n\t\t\t\t\t\t\troot[seg].concat(val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprepend ?\n\t\t\t\t\t\t\troot[seg].unshift(val) :\n\t\t\t\t\t\t\troot[seg].push(val);\n\t\t\t\t\t}\n\n\t\t\t\t\t_trigger(obj, obs, key, orig, root[seg],\n\t\t\t\t\t\ttype == 1 ? 'concat' : 'push');\n\n\t\t\t\t\treturn root[seg];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object into into global storage\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_merge = function(obj, obs, key, val) {\n\t\t\t\t\tval === U ?\n\t\t\t\t\t\tkey = W.$extend(true, {}, obj.$, key) :\n\t\t\t\t\t\tval = W.$extend(true, {}, _get(obj, obs, key, {}), val);\n\n\t\t\t\t\treturn _set(obj, obs, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove key or value from global array\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_drop = function(obj, obs, key, val) {\n\t\t\t\t\tvar stored = _storage(obj, key),\n\t\t\t\t\t\troot = stored[0],\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\torig = _copy(stored[2]),\n\t\t\t\t\t\tarr = Array.isArray(root);\n\n\t\t\t\t\tif (val !== U) {\n\t\t\t\t\t\tif (orig !== U) {\n\t\t\t\t\t\t\tif (arr) {\n\t\t\t\t\t\t\t\tvar i = orig.indexOf(val);\n\n\t\t\t\t\t\t\t\tif (i > -1) {\n\t\t\t\t\t\t\t\t\troot[seg].splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (orig === val) {\n\t\t\t\t\t\t\t\tdelete root[seg];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete root[seg][val];\n\t\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\tarr ?\n\t\t\t\t\t\t\troot.splice(seg, 1) :\n\t\t\t\t\t\t\tdelete root[seg];\n\t\t\t\t\t}\n\n\t\t\t\t\t_trigger(obj, obs, key, orig, root[seg], 'drop');\n\n\t\t\t\t\treturn val !== U ? root[seg] : root;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Attach callback to data storage change\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_observe = function(store, obs, key, fn, options) {\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\toptions.fn = fn;\n\n\t\t\t\t\tobs.$[key] = obs.$[key] || [];\n\t\t\t\t\tobs.$[key].push(options);\n\n\t\t\t\t\tif (options.init) {\n\t\t\t\t\t\tvar val = _get(store, false, key);\n\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\tfn(val);\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\t * Remove callback from data storage change\n\t\t\t\t */\n\t\t\t\t_unobserve = function(obs, key) {\n\t\t\t\t\tkey === U ?\n\t\t\t\t\t\tobs.$ = {} :\n\t\t\t\t\t\tdelete obs.$[key];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Fire callback from data storage change\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_trigger = function(obj, obs, key, orig, upd, type) {\n\t\t\t\t\tif (Object.keys(obs.$).length &&\n\t\t\t\t\t\t(type == 'trigger' || ! _equals(upd, orig))\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (typeof key != 'string') {\n\t\t\t\t\t\t\tkey = '';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar arr = [],\n\t\t\t\t\t\t\topts = key.split('.').map(function(seg) {\n\t\t\t\t\t\t\t\tarr.push(seg);\n\t\t\t\t\t\t\t\treturn arr.join('.');\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfor (var val in obs.$) {\n\t\t\t\t\t\t\tif (opts.indexOf(val) > -1 || val == '*') {\n\t\t\t\t\t\t\t\tvar data = val == '*' ? obj.$ : upd;\n\n\t\t\t\t\t\t\t\tobs.$[val].forEach(function(el, i) {\n\t\t\t\t\t\t\t\t\tif (val === key || val == '*' || el.recursive) {\n\t\t\t\t\t\t\t\t\t\tif (! el.value || _equals(el.value, data)) {\n\t\t\t\t\t\t\t\t\t\t\tvar args = [\n\t\t\t\t\t\t\t\t\t\t\t\tel.recursive ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t_get(obj, false, val) :\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\t\t\tif (el.diff) {\n\t\t\t\t\t\t\t\t\t\t\t\targs.push(_diff(orig, data));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tW.$exec(el.fn, {\n\t\t\t\t\t\t\t\t\t\t\t\targs: args.concat(el.args),\n\t\t\t\t\t\t\t\t\t\t\t\tscope: el.scope\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tif (el.once) {\n\t\t\t\t\t\t\t\t\t\t\t\tobs.$[val].splice(i, 1);\n\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\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},\n\n\t\t\t\t/**\n\t\t\t\t * Clone value to a new instance\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} val\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\t_copy = function(val) {\n\t\t\t\t\tvar type = W.$type(val);\n\n\t\t\t\t\tif (type == 'object') {\n\t\t\t\t\t\tval = _extend({}, val, true);\n\t\t\t\t\t} else if (type == 'array') {\n\t\t\t\t\t\tval = val.slice(0);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if a node contains another node\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {HTMLElement} source\n\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t * @returns {boolean} match\n\t\t\t\t */\n\t\t\t\t_contains = function(source, target) {\n\t\t\t\t\treturn (source === D ? W._html : source)\n\t\t\t\t\t\t.contains(target);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend target object with source object(s)\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} target\n\t\t\t\t * @param {object} object\n\t\t\t\t * @param {boolean} [deep=false]\n\t\t\t\t * @param {Array} [_set=[]]\n\t\t\t\t * @returns object\n\t\t\t\t */\n\t\t\t\t_extend = function(target, object, deep, _set) {\n\t\t\t\t\tif (! object) {\n\t\t\t\t\t\treturn target;\n\t\t\t\t\t}\n\n\t\t\t\t\t_set = _set || [];\n\n\t\t\t\t\tfor (var key in object) {\n\t\t\t\t\t\tvar src = object[key],\n\t\t\t\t\t\t\ttype = W.$type(src);\n\n\t\t\t\t\t\tif (deep && type == 'object') {\n\t\t\t\t\t\t\tvar len = _set.length,\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tval;\n\n\t\t\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\t\t\tif (_set[i] === src) {\n\t\t\t\t\t\t\t\t\tval = src;\n\t\t\t\t\t\t\t\t\tbreak;\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\tif (val) {\n\t\t\t\t\t\t\t\ttarget[key] = val;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_set.push(src);\n\t\t\t\t\t\t\t\ttarget[key] = _extend(target[key] || {}, src, deep, _set);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (src !== U) {\n\t\t\t\t\t\t\ttarget[key] = type == 'array' ? src.slice(0) : src;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two values for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} a\n\t\t\t\t * @param {*} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_equals = function(a, b) {\n\t\t\t\t\tif (a === b) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar aType = W.$type(a);\n\n\t\t\t\t\tif (aType != W.$type(b)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'array') {\n\t\t\t\t\t\treturn _arrEquals(a, b);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'object') {\n\t\t\t\t\t\treturn _objEquals(a, b);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'date') {\n\t\t\t\t\t\treturn +a == +b; // jscs:ignore\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two arrays for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {Array} a\n\t\t\t\t * @param {Array} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_arrEquals = function(a, b) {\n\t\t\t\t\treturn a.length == b.length &&\n\t\t\t\t\t\ta.every(function(el, i) {\n\t\t\t\t\t\t\treturn _equals(el, b[i]);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two objects for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} a\n\t\t\t\t * @param {object} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_objEquals = function(a, b) {\n\t\t\t\t\tvar aKeys = Object.keys(a);\n\n\t\t\t\t\treturn _arrEquals(aKeys.sort(), Object.keys(b).sort()) &&\n\t\t\t\t\t\taKeys.every(function(i) {\n\t\t\t\t\t\t\treturn _equals(a[i], b[i]);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Generate a delta from two objects\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} a - original object\n\t\t\t\t * @param {object} b - updated object\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t_diff = function(a, b) {\n\t\t\t\t\tvar aObj = W.$isObject(a),\n\t\t\t\t\t\tbObj = W.$isObject(b);\n\n\t\t\t\t\tif (! (aObj || bObj)) {\n\t\t\t\t\t\tvar type = 'u';\n\n\t\t\t\t\t\tif (_equals(a, b)) {\n\t\t\t\t\t\t\ttype = '-';\n\t\t\t\t\t\t} else if (a === U) {\n\t\t\t\t\t\t\ttype = 'c';\n\t\t\t\t\t\t} else if (b === U) {\n\t\t\t\t\t\t\ttype = 'd';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tafter: b,\n\t\t\t\t\t\t\tbefore: a,\n\t\t\t\t\t\t\ttype: type\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar diff = {};\n\n\t\t\t\t\tif (aObj) {\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tdiff[key] = _diff(\n\t\t\t\t\t\t\t\ta[key],\n\t\t\t\t\t\t\t\tb && bObj ? b[key] : U\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\tif (bObj) {\n\t\t\t\t\t\tObject.keys(b).forEach(function(key) {\n\t\t\t\t\t\t\tif (! diff[key]) {\n\t\t\t\t\t\t\t\tdiff[key] = _diff(U, b[key]);\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\treturn diff;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get value from function or directly\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\t_val = function(val, options) {\n\t\t\t\t\treturn W._canExec(val) ?\n\t\t\t\t\t\tW.$exec(val, options) :\n\t\t\t\t\t\tval;\n\t\t\t\t};\n\n\t\t\treturn {\n\t\t\t\t_$: scope.WeeAlias || '$',\n\t\t\t\t_body: D.body,\n\t\t\t\t_doc: D,\n\t\t\t\t_html: D.documentElement,\n\t\t\t\t_slice: [].slice,\n\t\t\t\t_win: scope,\n\t\t\t\tfn: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Create a namespaced controller\n\t\t\t\t\t *\n\t\t\t\t\t * @param {string} name\n\t\t\t\t\t * @param {object} pub - public methods and properties\n\t\t\t\t\t * @param {object} [priv] - private methods and properties\n\t\t\t\t\t * @param {object} [options] - configuration options\n\t\t\t\t\t */\n\t\t\t\t\tmake: function(name, pub, priv, options) {\n\t\t\t\t\t\tvar base,\n\t\t\t\t\t\t\toptions = options || {},\n\t\t\t\t\t\t\targs = options.args || {},\n\t\t\t\t\t\t\tinstance = options.instance !== false;\n\n\t\t\t\t\t\t// Check for base controller\n\t\t\t\t\t\tif (name.indexOf(':') > 0) {\n\t\t\t\t\t\t\tvar segs = name.split(':');\n\t\t\t\t\t\t\tbase = _copy(W[segs[1]]);\n\t\t\t\t\t\t\tname = segs[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create new controller instance\n\t\t\t\t\t\tW.fn[name] = W._make(name, pub, priv, base);\n\n\t\t\t\t\t\tif (instance) {\n\t\t\t\t\t\t\targs.name = name;\n\t\t\t\t\t\t\tW[name] = new W.fn[name](args);\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 * Extend controller with additional methods and properties\n\t\t\t\t\t *\n\t\t\t\t\t * @param {(object|string)} a - controller name or core methods\n\t\t\t\t\t * @param {object} [b] - public methods and properties\n\t\t\t\t\t * @param {object} [c] - private methods and properties\n\t\t\t\t\t * @param {object} [d] - options\n\t\t\t\t\t */\n\t\t\t\t\textend: function(a, b, c, d) {\n\t\t\t\t\t\tif (W.$isObject(a)) {\n\t\t\t\t\t\t\t// Merge into the global object\n\t\t\t\t\t\t\t_extend(W, a);\n\t\t\t\t\t\t} else if (W.hasOwnProperty(a)) {\n\t\t\t\t\t\t\t// Merge the objects else create the controller\n\t\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t\tb.$private = c;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_extend(W[a], b, true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.make(a, b, c, d);\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\t * Get matches to specified selector or return parsed HTML\n\t\t\t\t *\n\t\t\t\t * @param {($|HTMLElement|string)} selector\n\t\t\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t\t\t * @returns {Array} elements\n\t\t\t\t */\n\t\t\t\t$: function(selector, context) {\n\t\t\t\t\tvar el = null,\n\t\t\t\t\t\tref = [];\n\n\t\t\t\t\tif (typeof selector != 'string') {\n\t\t\t\t\t\tel = selector;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (selector == 'window') {\n\t\t\t\t\t\t\treturn [scope];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (selector == 'document') {\n\t\t\t\t\t\t\treturn [D];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Return nothing if context doesn't exist\n\t\t\t\t\t\tcontext = context !== U ? W.$(context)[0] : D;\n\n\t\t\t\t\t\tif (! context) {\n\t\t\t\t\t\t\treturn ref;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for pre-cached elements\n\t\t\t\t\t\tif (selector.indexOf('ref:') > -1) {\n\t\t\t\t\t\t\tvar split = selector.split(',').filter(function(sel) {\n\t\t\t\t\t\t\t\tsel = sel.trim();\n\n\t\t\t\t\t\t\t\tif (sel.slice(0, 4) == 'ref:') {\n\t\t\t\t\t\t\t\t\tsel = sel.slice(4);\n\t\t\t\t\t\t\t\t\tsel = refs[sel];\n\n\t\t\t\t\t\t\t\t\t// Apply context filter if not document\n\t\t\t\t\t\t\t\t\tif (sel) {\n\t\t\t\t\t\t\t\t\t\tref = ref.concat(\n\t\t\t\t\t\t\t\t\t\t\tcontext === D ?\n\t\t\t\t\t\t\t\t\t\t\t\tsel :\n\t\t\t\t\t\t\t\t\t\t\t\tsel.filter(function(el) {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn _contains(context, el);\n\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\treturn false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\t\tselector = split.join(',');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn ref;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use third-party selector engine if defined\n\t\t\t\t\t\tif (scope.WeeSelector !== U) {\n\t\t\t\t\t\t\tel = scope.WeeSelector(selector, context);\n\t\t\t\t\t\t} else if (/^[#.]?[\\w-]+$/.test(selector)) {\n\t\t\t\t\t\t\tvar pre = selector[0];\n\n\t\t\t\t\t\t\tif (pre == '#') {\n\t\t\t\t\t\t\t\tel = D.getElementById(selector.substr(1));\n\t\t\t\t\t\t\t} else if (pre == '.') {\n\t\t\t\t\t\t\t\tel = context.getElementsByClassName(selector.substr(1));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tel = context.getElementsByTagName(selector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tel = context.querySelectorAll(selector);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tel = W.$parseHTML(selector).childNodes;\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\tif (! el) {\n\t\t\t\t\t\tel = ref;\n\t\t\t\t\t} else if (el.nodeType !== U || el === scope) {\n\t\t\t\t\t\tel = [el];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel = W._slice.call(el);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Join references if available\n\t\t\t\t\treturn ref.length ? el.concat(ref) : el;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Create document fragment from an HTML string\n\t\t\t\t *\n\t\t\t\t * @param {string} html\n\t\t\t\t * @returns {HTMLElement} element\n\t\t\t\t */\n\t\t\t\t$parseHTML: function(html) {\n\t\t\t\t\tvar el;\n\t\t\t\t\thtml = html.trim();\n\n\t\t\t\t\tif (! range) {\n\t\t\t\t\t\trange = D.createRange();\n\t\t\t\t\t\trange.selectNode(W._body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (range && range.createContextualFragment) {\n\t\t\t\t\t\tel = range.createContextualFragment(html);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar div = D.createElement('div'),\n\t\t\t\t\t\t\tchild;\n\t\t\t\t\t\tel = D.createDocumentFragment();\n\n\t\t\t\t\t\tdiv.innerHTML = html;\n\n\t\t\t\t\t\twhile (child = div.firstChild) {\n\t\t\t\t\t\t\tel.appendChild(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Set global variable\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {object} [options] - applicable if value is a callback\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} value\n\t\t\t\t */\n\t\t\t\t$set: function(key, val, options) {\n\t\t\t\t\treturn _set(store, observe, key, val, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get global variable\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [fallback]\n\t\t\t\t * @param {boolean} [set=false]\n\t\t\t\t * @param {object} [options] - available for fallback functions\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} value\n\t\t\t\t */\n\t\t\t\t$get: function(key, fallback, set, options) {\n\t\t\t\t\treturn _get(store, observe, key, fallback, set, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Push value into global array\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {boolean} [prepend=false]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$push: function(key, val, prepend) {\n\t\t\t\t\treturn _add(2, store, observe, key, val, prepend);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Concatenate values into global storage\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {boolean} [prepend=false]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$concat: function(key, val, prepend) {\n\t\t\t\t\treturn _add(1, store, observe, key, val, prepend);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object into global storage\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @returns {object} value\n\t\t\t\t */\n\t\t\t\t$merge: function(key, obj) {\n\t\t\t\t\treturn _merge(store, observe, key, obj);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if storage criteria is set\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [val]\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$has: function(key, val) {\n\t\t\t\t\treturn _has(store, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove key or value from global array\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [val]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$drop: function(key, val) {\n\t\t\t\t\treturn _drop(store, observe, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Attach callback to data storage change\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {boolean} [options.diff=false]\n\t\t\t\t * @param {boolean} [options.init=false]\n\t\t\t\t * @param {boolean} [options.once=false]\n\t\t\t\t * @param {boolean} [options.recursive=false]\n\t\t\t\t * @param {*} [options.value]\n\t\t\t\t */\n\t\t\t\t$observe: function(key, fn, options) {\n\t\t\t\t\t_observe(store, observe, key, fn, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove callback from data storage change\n\t\t\t\t *\n\t\t\t\t * @param {string} [key]\n\t\t\t\t */\n\t\t\t\t$unobserve: function(key) {\n\t\t\t\t\t_unobserve(observe, key);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute matching observed callbacks\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t */\n\t\t\t\t$trigger: function(key) {\n\t\t\t\t\tvar val = _get(store, false, key);\n\n\t\t\t\t\t_trigger(store, observe, key, val, val, 'trigger');\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute function for each matching selection\n\t\t\t\t *\n\t\t\t\t * @param {($|Array|HTMLElement|string)} target\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {($|HTMLElement|string)} [options.context=document]\n\t\t\t\t * @param {boolean} [options.reverse=false]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t */\n\t\t\t\t$each: function(target, fn, options) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t\t}, options),\n\t\t\t\t\t\t\tels = W._selArray(target, conf),\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\tif (conf.reverse && ! els._$) {\n\t\t\t\t\t\t\tels = els.reverse();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (; i < els.length; i++) {\n\t\t\t\t\t\t\tvar el = els[i],\n\t\t\t\t\t\t\t\tval = W.$exec(fn, {\n\t\t\t\t\t\t\t\t\targs: [el, i].concat(conf.args),\n\t\t\t\t\t\t\t\t\tscope: conf.scope || el\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (val === false) {\n\t\t\t\t\t\t\t\treturn;\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\n\t\t\t\t/**\n\t\t\t\t * Get current environment or set current environment against\n\t\t\t\t * specified object\n\t\t\t\t *\n\t\t\t\t * @param {object} [rules]\n\t\t\t\t * @param {string} [fallback=local]\n\t\t\t\t * @returns {string} environment\n\t\t\t\t */\n\t\t\t\t$env: function(rules, fallback) {\n\t\t\t\t\tvar fb = fallback || 'local';\n\n\t\t\t\t\tif (rules) {\n\t\t\t\t\t\tvar host = location.hostname;\n\n\t\t\t\t\t\tfor (var rule in rules) {\n\t\t\t\t\t\t\tvar val = rules[rule];\n\n\t\t\t\t\t\t\tif (val == host || _val(val, {\n\t\t\t\t\t\t\t\t\targs: host\n\t\t\t\t\t\t\t\t}) === true) {\n\t\t\t\t\t\t\t\tenv = rule;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (! env) {\n\t\t\t\t\t\t\tenv = fb;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn env || fb;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if the current environment is SSL encrypted\n\t\t\t\t *\n\t\t\t\t * @returns {boolean} secure\n\t\t\t\t */\n\t\t\t\t$envSecure: function() {\n\t\t\t\t\treturn location.protocol == 'https:';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute specified function or controller method\n\t\t\t\t *\n\t\t\t\t * @param {Array|function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} [response]\n\t\t\t\t */\n\t\t\t\t$exec: function(fn, options) {\n\t\t\t\t\toptions = options || {};\n\n\t\t\t\t\tvar fns = W.$toArray(fn),\n\t\t\t\t\t\tlen = fns.length,\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t}, options || {});\n\t\t\t\t\t\tfn = fns[i];\n\n\t\t\t\t\t\tif (typeof fn == 'string') {\n\t\t\t\t\t\t\tvar segs = fn.split(':');\n\n\t\t\t\t\t\t\tif (W[segs[0]]) {\n\t\t\t\t\t\t\t\tfn = W[segs[0]][\n\t\t\t\t\t\t\t\t\tsegs.length > 1 ?\n\t\t\t\t\t\t\t\t\t\tsegs[1] :\n\t\t\t\t\t\t\t\t\t\t'init'\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\tif (! conf.scope) {\n\t\t\t\t\t\t\t\t\tconf.scope = W[segs[0]];\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\tif (typeof fn == 'function') {\n\t\t\t\t\t\t\tvar response = fn.apply(\n\t\t\t\t\t\t\t\tconf.scope,\n\t\t\t\t\t\t\t\tW.$toArray(conf.args)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (len === 1) {\n\t\t\t\t\t\t\t\treturn response;\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\n\t\t\t\t/**\n\t\t\t\t * Clone value to a new instance\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} val\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\t$copy: function(val) {\n\t\t\t\t\treturn _copy(val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend target object with source object(s)\n\t\t\t\t *\n\t\t\t\t * @param {(boolean|object)} deep - extend nested properties else target object\n\t\t\t\t * @param {object} [obj] - target object\n\t\t\t\t * @param {...object} [obj] - merged objects\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t$extend: function(deep) {\n\t\t\t\t\tvar bool = typeof deep == 'boolean',\n\t\t\t\t\t\targs = W._slice.call(arguments).slice(bool ? 1 : 0),\n\t\t\t\t\t\ttarget = args[0] || {};\n\t\t\t\t\tdeep = bool ? deep : false;\n\n\t\t\t\t\targs.slice(1).forEach(function(source) {\n\t\t\t\t\t\ttarget = _extend(target, source, deep);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Generate a delta from two objects\n\t\t\t\t *\n\t\t\t\t * @param {object} a\n\t\t\t\t * @param {object} b\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t$diff: function(a, b) {\n\t\t\t\t\treturn _diff(a, b);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two values for strict equality\n\t\t\t\t *\n\t\t\t\t * @param {*} a\n\t\t\t\t * @param {*} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$equals: function(a, b) {\n\t\t\t\t\treturn _equals(a, b);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is an array\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isArray: function(obj) {\n\t\t\t\t\treturn Array.isArray(obj);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is a function\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isFunction: function(obj) {\n\t\t\t\t\treturn W.$type(obj) == 'function';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is an object\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isObject: function(obj) {\n\t\t\t\t\treturn W.$type(obj) == 'object';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is a string\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isString: function(obj) {\n\t\t\t\t\treturn typeof obj == 'string';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Translate items in an array or selection to new array\n\t\t\t\t *\n\t\t\t\t * @param {($|Array|HTMLElement|string)} target - array or selector\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {Array}\n\t\t\t\t */\n\t\t\t\t$map: function(target, fn, options) {\n\t\t\t\t\tif (! Array.isArray(target)) {\n\t\t\t\t\t\ttarget = W._selArray(target, options);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t}, options),\n\t\t\t\t\t\tres = [],\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < target.length; i++) {\n\t\t\t\t\t\tvar el = target[i],\n\t\t\t\t\t\t\tval = W.$exec(fn, {\n\t\t\t\t\t\t\t\targs: [el, i].concat(conf.args),\n\t\t\t\t\t\t\t\tscope: conf.scope || el\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (val !== false) {\n\t\t\t\t\t\t\tres.push(val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn res;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Serialize object\n\t\t\t\t *\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @returns {string} value\n\t\t\t\t */\n\t\t\t\t$serialize: function(obj) {\n\t\t\t\t\tvar arr = [];\n\n\t\t\t\t\tObject.keys(obj || {}).forEach(function(key) {\n\t\t\t\t\t\tvar val = obj[key];\n\t\t\t\t\t\tkey = encodeURIComponent(key);\n\n\t\t\t\t\t\tif (typeof val != 'object') {\n\t\t\t\t\t\t\tarr.push(key + '=' + encodeURIComponent(val));\n\t\t\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\t\t\tval.forEach(function(el) {\n\t\t\t\t\t\t\t\tarr.push(key + '[]=' + encodeURIComponent(el));\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\treturn arr.length ? arr.join('&').replace(/%20/g, '+') : '';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Convert serialized string back into an object\n\t\t\t\t *\n\t\t\t\t * @param {string} str\n\t\t\t\t * @returns {object} value\n\t\t\t\t */\n\t\t\t\t$unserialize: function(str) {\n\t\t\t\t\tvar obj = {};\n\n\t\t\t\t\tdecodeURIComponent(str)\n\t\t\t\t\t\t.replace(/^\\?/, '')\n\t\t\t\t\t\t.split('&').forEach(function(el) {\n\t\t\t\t\t\t\tvar split = el.split('='),\n\t\t\t\t\t\t\t\tkey = split[0],\n\t\t\t\t\t\t\t\tval = (split[1] || '').replace(/\\+/g, ' ') || '';\n\n\t\t\t\t\t\t\tif (obj[key]) {\n\t\t\t\t\t\t\t\tobj[key] = W.$toArray(obj[key]);\n\t\t\t\t\t\t\t\tobj[key].push(val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobj[key] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Add ref elements to datastore\n\t\t\t\t *\n\t\t\t\t * @param {(HTMLElement|string)} [context=document]\n\t\t\t\t */\n\t\t\t\t$setRef: function(context) {\n\t\t\t\t\tcontext = context ? W.$(context)[0] : D;\n\n\t\t\t\t\t// Clear existing refs if reset\n\t\t\t\t\tObject.keys(refs).forEach(function(val) {\n\t\t\t\t\t\trefs[val] = refs[val].filter(function(el) {\n\t\t\t\t\t\t\treturn ! (\n\t\t\t\t\t\t\t\t! _contains(D, el) ||\n\t\t\t\t\t\t\t\t(_contains(context, el) && context !== el)\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\t// Set refs from DOM\n\t\t\t\t\tW.$each('[data-ref]', function(el) {\n\t\t\t\t\t\tel.getAttribute('data-ref').split(/\\s+/)\n\t\t\t\t\t\t\t.forEach(function(val) {\n\t\t\t\t\t\t\t\trefs[val] = refs[val] || [];\n\t\t\t\t\t\t\t\trefs[val].push(el);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Add metadata variables to datastore\n\t\t\t\t *\n\t\t\t\t * @param {(HTMLElement|string)} [context=document]\n\t\t\t\t */\n\t\t\t\t$setVar: function(context) {\n\t\t\t\t\tW.$each('[data-set]', function(el) {\n\t\t\t\t\t\tvar key = el.getAttribute('data-set'),\n\t\t\t\t\t\t\tval = W._castString(el.getAttribute('data-value'));\n\n\t\t\t\t\t\tkey.slice(-2) == '[]' ?\n\t\t\t\t\t\t\t_add(2, store, observe, key.slice(0, -2), val) :\n\t\t\t\t\t\t\t_set(store, observe, key, val);\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Cast value to array if it isn't one\n\t\t\t\t *\n\t\t\t\t * @param {*} val\n\t\t\t\t * @returns {Array} value\n\t\t\t\t */\n\t\t\t\t$toArray: function(val) {\n\t\t\t\t\treturn val !== U ? (Array.isArray(val) ? val : [val]) : [];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine the JavaScript type of an object\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns string\n\t\t\t\t */\n\t\t\t\t$type: function(obj) {\n\t\t\t\t\treturn obj === U ? 'undefined' :\n\t\t\t\t\t\tObject.prototype.toString.call(obj)\n\t\t\t\t\t\t\t.replace(/^\\[object (.+)]$/, '$1')\n\t\t\t\t\t\t\t.toLowerCase();\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Create new array with only unique values from source array\n\t\t\t\t *\n\t\t\t\t * @param {Array} array\n\t\t\t\t * @returns {Array} unique values\n\t\t\t\t */\n\t\t\t\t$unique: function(array) {\n\t\t\t\t\treturn array.reverse().filter(function(el, i, arr) {\n\t\t\t\t\t\treturn arr.indexOf(el, i + 1) < 0;\n\t\t\t\t\t}).reverse();\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Fallback for non-existent chaining\n\t\t\t\t */\n\t\t\t\t$chain: function() {},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value can be executed as a function\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {*} fn\n\t\t\t\t * @returns {boolean} is executable\n\t\t\t\t */\n\t\t\t\t_canExec: function(fn) {\n\t\t\t\t\tif (typeof fn == 'string' && fn.indexOf(':') > -1) {\n\t\t\t\t\t\tvar split = fn.split(':'),\n\t\t\t\t\t\t\tcontroller = W[split[0]],\n\t\t\t\t\t\t\tmethod = split[1];\n\n\t\t\t\t\t\tif (controller && controller[method]) {\n\t\t\t\t\t\t\tfn = controller[method];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn typeof fn == 'function';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Cast string to most applicable data type\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {*} val\n\t\t\t\t */\n\t\t\t\t_castString: function(val) {\n\t\t\t\t\tif (typeof val == 'string') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tval = val == 'true' ? true :\n\t\t\t\t\t\t\t\tval == 'false' ? false :\n\t\t\t\t\t\t\t\tval == 'null' ? null :\n\t\t\t\t\t\t\t\tparseInt(val).toString() == val ? parseInt(val) :\n\t\t\t\t\t\t\t\t\t/^(?:\\{[\\w\\W]*}|\\[[\\w\\W]*])$/.test(val) ? JSON.parse(val) :\n\t\t\t\t\t\t\t\t\tval;\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object storage with object or key -> val\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @param {(object|string)} a\n\t\t\t\t * @param {*} b\n\t\t\t\t */\n\t\t\t\t_extend: function(obj, a, b) {\n\t\t\t\t\tvar val = a;\n\n\t\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\t\tval = [];\n\t\t\t\t\t\tval[a] = b;\n\t\t\t\t\t}\n\n\t\t\t\t\t_extend(obj, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Convert selection to array\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {($|HTMLElement|string)} selector\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {(HTMLElement|string)} [options.context=document]\n\t\t\t\t * @returns {($|Array)} nodes\n\t\t\t\t */\n\t\t\t\t_selArray: function(selector, options) {\n\t\t\t\t\tif (selector && selector._$) {\n\t\t\t\t\t\treturn selector;\n\t\t\t\t\t}\n\n\t\t\t\t\toptions = options || {};\n\n\t\t\t\t\tvar el = typeof selector == 'string' ?\n\t\t\t\t\t\tW.$(selector, options.context) :\n\t\t\t\t\t\tselector;\n\n\t\t\t\t\treturn W.$toArray(el);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Return a new controller method\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {string} name\n\t\t\t\t * @param {object} pub\n\t\t\t\t * @param {object} [priv]\n\t\t\t\t * @param {(boolean|object)} base\n\t\t\t\t * @param {object} [model]\n\t\t\t\t * @returns {Function}\n\t\t\t\t */\n\t\t\t\t_make: function(name, pub, priv, base, model) {\n\t\t\t\t\treturn function(options) {\n\t\t\t\t\t\tvar Public = pub || {},\n\t\t\t\t\t\t\tPrivate = priv || {},\n\t\t\t\t\t\t\toptions = options || {},\n\t\t\t\t\t\t\tid = options.name ? options.name : null;\n\n\t\t\t\t\t\t// Ensure the current controller is not being extended\n\t\t\t\t\t\tif (name != '_tmp') {\n\t\t\t\t\t\t\tvar store = {\n\t\t\t\t\t\t\t\t\t$: model || {}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tobserve = {\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\tcore = {\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Get value from controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {*}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$get: function(key, fallback, set, options) {\n\t\t\t\t\t\t\t\t\t\treturn _get(store, observe, key, fallback, set, options);\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\t * Set value in controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {*}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$set: function(key, val, options) {\n\t\t\t\t\t\t\t\t\t\treturn _set(store, observe, key, val, options);\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\t * Check if storage criteria is set\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$has: function(key, val) {\n\t\t\t\t\t\t\t\t\t\treturn _has(store, key, val);\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\t * Push value into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$push: function(key, val, prepend) {\n\t\t\t\t\t\t\t\t\t\treturn _add(2, store, observe, key, val, prepend);\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\t * Concatenate values into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$concat: function(key, val, prepend) {\n\t\t\t\t\t\t\t\t\t\treturn _add(1, store, observe, key, val, prepend);\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\t * Extend object into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$merge: function(key, obj) {\n\t\t\t\t\t\t\t\t\t\treturn _merge(store, observe, key, obj);\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\t * Remove value from controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$drop: function(key, val) {\n\t\t\t\t\t\t\t\t\t\treturn _drop(store, observe, key, val);\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\t * Attach callback to data storage change\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$observe: function(key, fn, options) {\n\t\t\t\t\t\t\t\t\t\t_observe(store, observe, key, fn, options);\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\t * Remove callback from data storage change\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$unobserve: function(key) {\n\t\t\t\t\t\t\t\t\t\t_unobserve(observe, key);\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\t * Execute matching observed callbacks\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$trigger: function(key) {\n\t\t\t\t\t\t\t\t\t\tvar val = _get(store, false, key);\n\n\t\t\t\t\t\t\t\t\t\t_trigger(store, observe, key, val, val, 'trigger');\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\t * Destroy current controller\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$destroy: function() {\n\t\t\t\t\t\t\t\t\t\tif (this.$private._destruct) {\n\t\t\t\t\t\t\t\t\t\t\tthis.$private._destruct();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (this._destruct) {\n\t\t\t\t\t\t\t\t\t\t\tthis._destruct();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// If namespaced delete root property\n\t\t\t\t\t\t\t\t\t\tif (id) {\n\t\t\t\t\t\t\t\t\t\t\tdelete W[id];\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\n\t\t\t\t\t\t\t// Extend public and private objects with core methods\n\t\t\t\t\t\t\tPublic = _extend(Public, core);\n\t\t\t\t\t\t\tPrivate = _extend(Private, core);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Clone controller objects for instance support\n\t\t\t\t\t\tPublic = _copy(Public);\n\t\t\t\t\t\tPrivate = _copy(Private);\n\n\t\t\t\t\t\t// Interface $public and $private\n\t\t\t\t\t\tPublic.$private = Private;\n\t\t\t\t\t\tPrivate.$public = Public;\n\n\t\t\t\t\t\tif (base) {\n\t\t\t\t\t\t\t// Extend controller methods into base\n\t\t\t\t\t\t\tPublic = _extend(base, Public, true);\n\t\t\t\t\t\t\tPublic.$private.$public = Public;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Public.$private._construct) {\n\t\t\t\t\t\t\tPublic.$private._construct(options);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Public._construct) {\n\t\t\t\t\t\t\tPublic._construct(options);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Public;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute specified function when document is ready\n\t\t\t\t *\n\t\t\t\t * @param {(Array|function|string)} fn\n\t\t\t\t */\n\t\t\t\tready: function(fn) {\n\t\t\t\t\tD.readyState == 'complete' ?\n\t\t\t\t\t\tW.$exec(fn) :\n\t\t\t\t\t\tD.addEventListener('DOMContentLoaded', function() {\n\t\t\t\t\t\t\tW.$exec(fn);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t})();\n\n\t// Set data variables and bind elements\n\tif (web) {\n\t\tW.$setRef();\n\t\tW.$setVar();\n\t}\n\n\texports = Wee = W;\n\n\tif (typeof module == 'object' && module.exports) {\n\t\tmodule.exports = W;\n\t}\n})(Wee, undefined);","/* jshint maxparams: 5 */\n\n(function(W) {\n\t'use strict';\n\n\t/**\n\t * Default easing functions\n\t */\n\tvar easings = {\n\t\t\tease: function(t) {\n\t\t\t\treturn t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n\t\t\t},\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process a specific animation property\n\t\t *\n\t\t * @param {HTMLElement} el\n\t\t * @param {string} prop\n\t\t * @param {number} target\n\t\t * @param {object} conf\n\t\t * @param {function} ease\n\t\t */\n\t\tprocess = function(el, prop, target, conf, ease) {\n\t\t\tvar scroll = prop == 'scrollTop' || prop == 'scrollLeft',\n\t\t\t\tbodyScroll = scroll && el === W._body,\n\t\t\t\tcssValue;\n\n\t\t\tif (! scroll) {\n\t\t\t\tcssValue = getComputedStyle(el, null)[prop];\n\t\t\t}\n\n\t\t\tvar css = cssValue !== undefined,\n\t\t\t\tunit = css && cssValue.slice(-2) == 'px' ? 'px' : '',\n\t\t\t\tval = parseInt(\n\t\t\t\t\tcss ?\n\t\t\t\t\t\tcssValue :\n\t\t\t\t\t\tbodyScroll ? (el[prop] || W._html[prop]) : el[prop]\n\t\t\t\t),\n\t\t\t\tsetValue = function(prop, update) {\n\t\t\t\t\tcss ?\n\t\t\t\t\t\tel.style[prop] = update + unit :\n\t\t\t\t\t\tel[prop] = update;\n\n\t\t\t\t\tif (bodyScroll) {\n\t\t\t\t\t\tW._html[prop] = update;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdir = target > val ? 1 : -1,\n\t\t\t\tdist = Math.abs(target - val),\n\t\t\t\tstart = Date.now(),\n\t\t\t\tfn = function() {\n\t\t\t\t\tvar diff = Date.now() - start;\n\n\t\t\t\t\tif (dist && diff < conf.duration) {\n\t\t\t\t\t\tsetValue(prop, val + dist * ease(diff / conf.duration) * dir);\n\t\t\t\t\t\traf(fn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetValue(prop, target);\n\t\t\t\t\t\tconf.i--;\n\n\t\t\t\t\t\tif (conf.complete && ! conf.i) {\n\t\t\t\t\t\t\tW.$exec(conf.complete);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tfn();\n\t\t},\n\t\traf;\n\n\tW.animate = {\n\t\t/**\n\t\t * Transition an attribute or property value\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {object} values\n\t\t * @param {object} [options]\n\t\t * @param {(Array|function|string)} [options.complete]\n\t\t * @param {number} [options.duration=400]\n\t\t * @param {string} [options.ease='ease']\n\t\t */\n\t\ttween: function(target, values, options) {\n\t\t\tvar conf = W.$extend({\n\t\t\t\t\tduration: 400\n\t\t\t\t}, options),\n\t\t\t\tease = easings[conf.ease] || easings.ease;\n\t\t\tconf.i = 0;\n\n\t\t\tif (! raf) {\n\t\t\t\traf = W._win.requestAnimationFrame || function(cb) {\n\t\t\t\t\tsetTimeout(cb, 15);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tfor (var prop in values) {\n\t\t\t\t\tconf.i++;\n\t\t\t\t\tprocess(el, prop, parseInt(values[prop]), conf, ease);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Add additional easing function(s)\n\t\t *\n\t\t * @param {(object|string)} a - name or easing object\n\t\t * @param {function} [b] - easing function\n\t\t */\n\t\taddEasing: function(a, b) {\n\t\t\tW._extend(easings, a, b);\n\t\t}\n\t};\n})(Wee);","(function(W, U) {\n\t'use strict';\n\n\tvar groups = {},\n\t\tloaded = {},\n\t\troot = '',\n\t\tgroupId = 1,\n\n\t\t_load = {\n\t\t\t/**\n\t\t\t * Request JavaScript\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t * @param {boolean} [conf.async=false]\n\t\t\t */\n\t\t\tjs: function(path, conf) {\n\t\t\t\tvar js = W._doc.createElement('script');\n\n\t\t\t\tjs.async = conf.async === true;\n\t\t\t\tjs.onload = function() {\n\t\t\t\t\tloaded[js.src] = js;\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t};\n\n\t\t\t\tjs.onerror = function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t};\n\n\t\t\t\tjs.src = path;\n\t\t\t\tW._doc.head.appendChild(js);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Request stylesheet\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t */\n\t\t\tcss: function(path, conf) {\n\t\t\t\tvar link = W._doc.createElement('link');\n\n\t\t\t\tlink.rel = 'stylesheet';\n\t\t\t\tlink.href = path;\n\n\t\t\t\tlink.addEventListener('load', function() {\n\t\t\t\t\tloaded[link.href] = link;\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t}, false);\n\n\t\t\t\tlink.addEventListener('error', function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t}, false);\n\n\t\t\t\tW._doc.head.appendChild(link);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Request image\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t */\n\t\t\timg: function(path, conf) {\n\t\t\t\tvar img = new Image();\n\n\t\t\t\timg.onload = function() {\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t};\n\n\t\t\t\timg.onerror = function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t};\n\n\t\t\t\timg.src = path;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Decrement remaining asset count\n\t\t *\n\t\t * @private\n\t\t * @param {string} group\n\t\t */\n\t\t_done = function(group) {\n\t\t\tgroups[group][0]--;\n\t\t\tW.assets.ready(group, {}, false);\n\t\t},\n\n\t\t/**\n\t\t * Increment failed asset count\n\t\t *\n\t\t * @private\n\t\t * @param {string} group\n\t\t */\n\t\t_fail = function(group) {\n\t\t\tgroups[group][2]++;\n\t\t\t_done(group);\n\t\t};\n\n\tW.assets = {\n\t\t/**\n\t\t * Get current asset root or set with specified value\n\t\t *\n\t\t * @param {string} [value]\n\t\t * @returns {string} root\n\t\t */\n\t\troot: function(value) {\n\t\t\tif (value) {\n\t\t\t\troot = value;\n\t\t\t}\n\n\t\t\treturn root;\n\t\t},\n\n\t\t/**\n\t\t * Load specified assets with set options\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {boolean} [options.async=false]\n\t\t * @param {boolean} [options.cache=false]\n\t\t * @param {(Array|string)} [options.css]\n\t\t * @param {(Array|function|string)} [options.error]\n\t\t * @param {(Array|string)} [options.files]\n\t\t * @param {string} [options.group]\n\t\t * @param {(Array|string)} [options.img]\n\t\t * @param {(Array|string)} [options.js]\n\t\t * @param {string} [options.root]\n\t\t * @param {(Array|function|string)} [options.success]\n\t\t */\n\t\tload: function(options) {\n\t\t\tvar files = W.$toArray(options.files),\n\t\t\t\tjs = W.$toArray(options.js),\n\t\t\t\tcss = W.$toArray(options.css),\n\t\t\t\timg = W.$toArray(options.img),\n\t\t\t\troot = options.root !== U ? options.root : this.root(),\n\t\t\t\tassets = [],\n\t\t\t\ti = 0,\n\t\t\t\ttype;\n\n\t\t\t// Create group name if not specified\n\t\t\tif (! options.group) {\n\t\t\t\toptions.group = 'g' + groupId++;\n\t\t\t}\n\n\t\t\t// Determine file type\n\t\t\tfor (; i < files.length; i++) {\n\t\t\t\tvar ext = files[i].split('.').pop().split(/#|\\?/)[0];\n\t\t\t\ttype = ext == 'js' || ext == 'css' ?\n\t\t\t\t\text : /(gif|jpe?g|png|svg|webp)$/i.test(ext) ?\n\t\t\t\t\t\t'img' : '';\n\n\t\t\t\tif (type) {\n\t\t\t\t\tassets[files[i]] = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < js.length; i++) {\n\t\t\t\tassets[js[i]] = 'js';\n\t\t\t}\n\n\t\t\tfor (i = 0; i < css.length; i++) {\n\t\t\t\tassets[css[i]] = 'css';\n\t\t\t}\n\n\t\t\tfor (i = 0; i < img.length; i++) {\n\t\t\t\tassets[img[i]] = 'img';\n\t\t\t}\n\n\t\t\t// Set file array length to check against\n\t\t\tgroups[options.group] = [\n\t\t\t\tObject.keys(assets).length,\n\t\t\t\toptions,\n\t\t\t\t0\n\t\t\t];\n\n\t\t\t// Request each specified file\n\t\t\tfor (var file in assets) {\n\t\t\t\tvar noCache = options.cache === false,\n\t\t\t\t\ta = W._doc.createElement('a');\n\n\t\t\t\ttype = assets[file];\n\t\t\t\ta.href = (root && /^(https?:)?\\/\\//i.test(file) ? '' : root) +\n\t\t\t\t\tfile;\n\t\t\t\tfile = a.href;\n\n\t\t\t\tif (! loaded[file] || noCache) {\n\t\t\t\t\tif (noCache) {\n\t\t\t\t\t\tfile += (file.indexOf('?') < 0 ? '?' : '&') + Date.now();\n\t\t\t\t\t}\n\n\t\t\t\t\t_load[type](file, options);\n\t\t\t\t} else {\n\t\t\t\t\t_done(options.group);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove one or more files from the DOM\n\t\t *\n\t\t * @param {(Array|string)} files\n\t\t * @param {string} [root='']\n\t\t */\n\t\tremove: function(files, root) {\n\t\t\tfiles = W.$toArray(files);\n\t\t\troot = root || '';\n\n\t\t\tvar a = W._doc.createElement('a'),\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i < files.length; i++) {\n\t\t\t\tvar src = root + files[i];\n\t\t\t\ta.href = src;\n\t\t\t\tsrc = a.href;\n\n\t\t\t\tvar el = loaded[src];\n\n\t\t\t\tif (el !== U) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t\tel = null;\n\t\t\t\t\tdelete loaded[src];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Execute callback when specified references are ready\n\t\t *\n\t\t * @param {string} group\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {(Array|function|string)} [options.error]\n\t\t * @param {object} [options.scope]\n\t\t * @param {(Array|function|string)} [options.success]\n\t\t * @param {boolean} [poll=false]\n\t\t * @returns {boolean} ready\n\t\t */\n\t\tready: function(group, options, poll) {\n\t\t\tvar set = groups[group],\n\t\t\t\tcomplete = set && ! set[0];\n\n\t\t\tif (options === U) {\n\t\t\t\treturn complete;\n\t\t\t}\n\n\t\t\tif (complete) {\n\t\t\t\tvar conf = W.$extend(set[1], options),\n\t\t\t\t\thasErrors = set[2];\n\t\t\t\toptions = {\n\t\t\t\t\targs: conf.args,\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t};\n\n\t\t\t\tif (conf.error && hasErrors) {\n\t\t\t\t\tW.$exec(conf.error, options);\n\t\t\t\t} else if (conf.success && ! hasErrors) {\n\t\t\t\t\tW.$exec(conf.success, options);\n\t\t\t\t}\n\t\t\t} else if (poll) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tW.assets.ready(group, options, true);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Cache existing CSS and JavaScript assets\n\t */\n\tW.$each('link[rel=\"stylesheet\"], script[src]', function(el) {\n\t\tloaded[el.src || el.href] = el;\n\t});\n})(Wee, undefined);","(function(W) {\n\t'use strict';\n\n\tvar version = 1,\n\n\t\t/**\n\t\t * Process the readyState change event\n\t\t *\n\t\t * @private\n\t\t * @param {XMLHttpRequest} x\n\t\t * @param {object} conf\n\t\t * @returns {*}\n\t\t */\n\t\t_change = function(x, conf) {\n\t\t\tif (x.readyState === 4) {\n\t\t\t\tvar code = x.status,\n\t\t\t\t\texec = {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t};\n\n\t\t\t\tif (code >= 200 && code < 400) {\n\t\t\t\t\tif (conf.success) {\n\t\t\t\t\t\t_success(x, conf);\n\t\t\t\t\t}\n\t\t\t\t} else if (conf.error) {\n\t\t\t\t\tW.$exec(conf.error, exec);\n\t\t\t\t}\n\n\t\t\t\tif (conf.complete) {\n\t\t\t\t\tW.$exec(conf.complete, exec);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Execute the request success callback\n\t\t *\n\t\t * @private\n\t\t * @param {XMLHttpRequest} x\n\t\t * @param {object} conf\n\t\t * @returns {boolean}\n\t\t */\n\t\t_success = function(x, conf) {\n\t\t\tvar resp = ! conf.responseType || conf.responseType == 'text' ?\n\t\t\t\t\tx.responseText :\n\t\t\t\t\tx.response,\n\t\t\t\texec = {\n\t\t\t\t\targs: conf.args.slice(0),\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t};\n\n\t\t\t// Parse JSON response if specified\n\t\t\tif (conf.json) {\n\t\t\t\ttry {\n\t\t\t\t\tresp = JSON.parse(resp);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tresp = {};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texec.args.unshift(resp);\n\n\t\t\t// Execute success callback if specified\n\t\t\tW.$exec(conf.success, exec);\n\t\t},\n\n\t\t/**\n\t\t * Process JSONP request\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t */\n\t\t_jsonp = function(conf) {\n\t\t\tvar el = W._doc.createElement('script');\n\n\t\t\tif (conf.success) {\n\t\t\t\tvar fn = conf.jsonpCallback;\n\n\t\t\t\tif (! fn) {\n\t\t\t\t\tfn = 'jsonp' + version;\n\t\t\t\t\tversion++;\n\t\t\t\t}\n\n\t\t\t\tW._win[fn] = function(data) {\n\t\t\t\t\tconf.args.unshift(data);\n\n\t\t\t\t\tW.$exec(conf.success, {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tconf.data[\n\t\t\t\t\tconf.jsonp === true ?\n\t\t\t\t\t\t'callback' :\n\t\t\t\t\t\tconf.jsonp\n\t\t\t\t\t] = fn;\n\t\t\t}\n\n\t\t\tel.src = W.data._getUrl(conf);\n\n\t\t\tif (conf.error) {\n\t\t\t\tel.onerror = function() {\n\t\t\t\t\tW.$exec(conf.error, {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tW._doc.head.appendChild(el);\n\t\t};\n\n\tW.data = {\n\t\t/**\n\t\t * Make request based on specified options\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {Array} [options.args] - callback arguments appended after default values\n\t\t * @param {(Array|function|string)} [options.complete] - callback on request completion\n\t\t * @param {boolean} [options.cache=true] - disable automatic cache-busting query string\n\t\t * @param {object} [options.data] - object to serialize and pass along with request\n\t\t * @param {(Array|function|string)} [options.error] - callback if request fails\n\t\t * @param {object} [options.headers] - request headers\n\t\t * @param {boolean} [options.json=false] - evaluate the response as JSON and return object\n\t\t * @param {(boolean|string)} [options.jsonp=false] - boolean or callback query parameter override\n\t\t * @param {string} [options.jsonpCallback] - override the name of the JSONP callback function\n\t\t * @param {string} [options.method=get] - request verb\n\t\t * @param {boolean} [options.processData=true] - post data in the body\n\t\t * @param {string} [options.responseType] - set the type of the response\n\t\t * @param {string} [options.root=''] - prepended request path\n\t\t * @param {object} [options.scope] - callback scope\n\t\t * @param {(Array|function|string)} [options.send] - executed before Ajax call\n\t\t * @param {(Array|function|string)} [options.success] - callback if request succeeds\n\t\t * @param {string} [options.type] - form, html, json, or xml\n\t\t * @param {string} options.url - endpoint to request\n\t\t */\n\t\trequest: function(options) {\n\t\t\tvar conf = W.$extend({\n\t\t\t\targs: [],\n\t\t\t\tdata: {},\n\t\t\t\theaders: {},\n\t\t\t\tmethod: 'get',\n\t\t\t\troot: ''\n\t\t\t}, options);\n\n\t\t\tif (conf.cache === false) {\n\t\t\t\tconf.data.dt = Date.now();\n\t\t\t}\n\n\t\t\t// Prefix root path to url\n\t\t\tif (conf.root) {\n\t\t\t\tconf.url = conf.root.replace(/\\/$/, '') + '/' +\n\t\t\t\t\tconf.url.replace(/^\\//, '');\n\t\t\t}\n\n\t\t\t// Process JSONP\n\t\t\tif (conf.jsonp) {\n\t\t\t\treturn _jsonp(conf);\n\t\t\t}\n\n\t\t\tvar x = new XMLHttpRequest();\n\n\t\t\t// Inject XHR object as first callback argument\n\t\t\tconf.args.unshift(x);\n\n\t\t\tif (conf.send) {\n\t\t\t\tW.$exec(conf.send, {\n\t\t\t\t\targs: conf.args,\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tx.onreadystatechange = function() {\n\t\t\t\t_change(x, conf);\n\t\t\t};\n\n\t\t\tvar contentTypeHeader = 'Content-Type',\n\t\t\t\tmethod = conf.method.toUpperCase(),\n\t\t\t\tstr = typeof conf.data == 'string',\n\t\t\t\tsend = null,\n\t\t\t\theaders = [];\n\n\t\t\tif (! str && ! conf.type) {\n\t\t\t\tconf.type = 'json';\n\t\t\t}\n\n\t\t\t// Format data based on specified verb\n\t\t\tif (method == 'GET') {\n\t\t\t\tconf.url = this._getUrl(conf);\n\t\t\t} else {\n\t\t\t\tsend = str || conf.processData === false ?\n\t\t\t\t\tconf.data :\n\t\t\t\t\tconf.type == 'json' ?\n\t\t\t\t\t\tJSON.stringify(conf.data) :\n\t\t\t\t\t\tW.$serialize(conf.data);\n\t\t\t}\n\n\t\t\tx.open(method, conf.url, true);\n\n\t\t\t// Add content type header\n\t\t\tif (conf.type == 'json') {\n\t\t\t\theaders[contentTypeHeader] = 'application/json';\n\t\t\t} else if (conf.type == 'xml') {\n\t\t\t\theaders[contentTypeHeader] = 'text/xml';\n\t\t\t} else if (method == 'POST' || conf.type == 'form') {\n\t\t\t\theaders[contentTypeHeader] =\n\t\t\t\t\t'application/x-www-form-urlencoded';\n\t\t\t}\n\n\t\t\t// Accept JSON header\n\t\t\tif (conf.json) {\n\t\t\t\theaders.Accept = 'application/json, text/javascript, */*; q=0.01';\n\t\t\t}\n\n\t\t\t// Add X-Requested-With header for same domain requests\n\t\t\tvar a = W._doc.createElement('a');\n\t\t\ta.href = conf.url;\n\n\t\t\tif (! a.host || a.host == location.host) {\n\t\t\t\theaders['X-Requested-With'] = 'XMLHttpRequest';\n\t\t\t}\n\n\t\t\t// Append character set to content type header\n\t\t\theaders[contentTypeHeader] += '; charset=UTF-8';\n\n\t\t\t// Extend configured headers into defaults\n\t\t\theaders = W.$extend(headers, conf.headers);\n\n\t\t\t// Set request headers\n\t\t\tfor (var key in headers) {\n\t\t\t\tvar val = headers[key];\n\n\t\t\t\tif (val !== false) {\n\t\t\t\t\tx.setRequestHeader(key, val);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set response type\n\t\t\tif (conf.responseType) {\n\t\t\t\tx.responseType = conf.responseType;\n\t\t\t}\n\n\t\t\tx.send(send);\n\t\t},\n\n\t\t/**\n\t\t * Generate final URL\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t */\n\t\t_getUrl: function(conf) {\n\t\t\tvar url = conf.url.replace(/[\\?&]$/, '');\n\n\t\t\tif (conf.data && Object.keys(conf.data).length) {\n\t\t\t\turl += (url.indexOf('?') < 0 ? '?' : '&') +\n\t\t\t\t\tW.$serialize(conf.data);\n\t\t\t}\n\n\t\t\tif (url[0] != '/' && ! /^https?:\\/\\//i.test(url)) {\n\t\t\t\turl = '/' + url;\n\t\t\t}\n\n\t\t\treturn url;\n\t\t}\n\t};\n\n\tW.fetch = W.data;\n})(Wee);","/* jshint maxdepth: 4 */\n\n(function(W, U) {\n\t'use strict';\n\n\t/**\n\t * Get the selected options from a select\n\t *\n\t * @private\n\t * @param {HTMLElement} select\n\t * @returns {Array} selected\n\t */\n\tvar _getSelected = function(select) {\n\t\tvar arr = [];\n\n\t\tW._slice.call(select.options).map(function(el) {\n\t\t\tif (el.selected) {\n\t\t\t\tarr.push(el.value);\n\t\t\t}\n\t\t});\n\n\t\treturn arr;\n\t},\n\n\t/**\n\t * Get class value of element\n\t *\n\t * @private\n\t * @param {HTMLElement} el\n\t * @returns {string}\n\t */\n\t_getClass = function(el) {\n\t\treturn el instanceof SVGElement ?\n\t\t\tel.getAttribute('class') :\n\t\t\tel.className;\n\t},\n\n\t/**\n\t * Set class value of element\n\t *\n\t * @private\n\t * @param {HTMLElement} el\n\t * @param {string} className\n\t */\n\t_setClass = function(el, className) {\n\t\tel instanceof SVGElement ?\n\t\t\tel.setAttribute('class', className) :\n\t\t\tel.className = className;\n\t},\n\n\t/**\n\t * Return either direct previous or next sibling\n\t *\n\t * @private\n\t * @param {($|HTMLElement|string)} target\n\t * @param {int} dir\n\t * @param filter\n\t * @param {object} [options]\n\t * @returns {HTMLElement}\n\t */\n\t_getSibling = function(target, dir, filter, options) {\n\t\tvar match;\n\n\t\tW.$each(target, function(el) {\n\t\t\tvar index = W.$index(el) + dir;\n\n\t\t\tW.$children(W.$parent(el)).forEach(function(el, i) {\n\t\t\t\tif (i === index &&\n\t\t\t\t\t(! filter || filter && W.$is(el, filter, options))) {\n\t\t\t\t\tmatch = el;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn match;\n\t},\n\n\t/**\n\t * Convert dash-separated string to camel-case\n\t *\n\t * @private\n\t * @param {string} name\n\t * @returns {string}\n\t */\n\t_toCamel = function(name) {\n\t\treturn name.toLowerCase()\n\t\t\t.replace(/-(.)/g, function(match, val) {\n\t\t\t\treturn val.toUpperCase();\n\t\t\t});\n\t},\n\n\t/**\n\t * Convert camel-cased string to dash-separated\n\t *\n\t * @private\n\t * @param {string} name\n\t * @returns {string}\n\t */\n\t_toDashed = function(name) {\n\t\treturn name.replace(/[A-Z]/g, function(match) {\n\t\t\treturn '-' + match[0].toLowerCase();\n\t\t});\n\t};\n\n\tW.fn.extend({\n\t\t/**\n\t\t * Add classes to each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t */\n\t\t$addClass: function(target, value) {\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar cn = _getClass(el),\n\t\t\t\t\tname = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, cn],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tvar names = cn.split(' '),\n\t\t\t\t\t\tupd = name.split(' ').filter(function(val) {\n\t\t\t\t\t\t\treturn names.indexOf(val) < 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\tupd.unshift(cn);\n\n\t\t\t\t\t_setClass(el, upd.join(' '));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t */\n\t\t$after: function(target, source, remove) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar aft = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof aft == 'string') {\n\t\t\t\t\taft = W.$parseHTML(aft);\n\t\t\t\t}\n\n\t\t\t\tif (aft) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(aft, function(cel) {\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpar.insertBefore(cel, el.nextSibling);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t}, {\n\t\t\t\t\t\treverse: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (remove) {\n\t\t\t\t\tW.$remove(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t */\n\t\t$append: function(target, source) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar app = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof app == 'string') {\n\t\t\t\t\tapp = W.$parseHTML(app);\n\t\t\t\t}\n\n\t\t\t\tif (app) {\n\t\t\t\t\tW.$each(app, function(cel) {\n\t\t\t\t\t\tel.appendChild(cel);\n\t\t\t\t\t});\n\n\t\t\t\t\tW.$setRef(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get attribute of first matching selection or set attribute\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$attr: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel.setAttribute(key, a[key]);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel.setAttribute(a, func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn W.$(target)[0].getAttribute(a);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t */\n\t\t$before: function(target, source, remove) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar bef = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof bef == 'string') {\n\t\t\t\t\tbef = W.$parseHTML(bef);\n\t\t\t\t}\n\n\t\t\t\tif (bef) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(bef, function(cel) {\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpar.insertBefore(cel, el);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t}, {\n\t\t\t\t\t\treverse: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (remove) {\n\t\t\t\t\tW.$remove(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique direct children of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param filter\n\t\t * @returns {Array}\n\t\t */\n\t\t$children: function(parent, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tvar children = W._slice.call(el.children);\n\n\t\t\t\tarr = arr.concat(\n\t\t\t\t\tfilter ?\n\t\t\t\t\t\tW.$filter(children, filter) :\n\t\t\t\t\t\tchildren\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Clone each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {Array}\n\t\t */\n\t\t$clone: function(target) {\n\t\t\treturn W.$map(target, function(el) {\n\t\t\t\treturn el.cloneNode(true);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique closest ancestors of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param context\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$closest: function(target, filter, context) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\tif (W.$is(el, filter)) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\n\t\t\t\twhile (el !== null) {\n\t\t\t\t\tel = el.parentNode;\n\n\t\t\t\t\tif (el === W._html) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (W.$is(el, filter)) {\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tcontext: context\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Determine if any matching parent contains descendant selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param descendant\n\t\t * @returns {boolean}\n\t\t */\n\t\t$contains: function(parent, descendant) {\n\t\t\tvar b = false;\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tif (W.$(descendant, el).length) {\n\t\t\t\t\tb = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn b;\n\t\t},\n\n\t\t/**\n\t\t * Get unique content of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @returns {Array}\n\t\t */\n\t\t$contents: function(parent) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tarr = arr.concat(W._slice.call(el.childNodes));\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get CSS value of first matching selection or set value\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(object|string)} a\n\t\t * @param {(function|string)} [b]\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$css: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel.style[key] = a[key];\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel.style[a] = func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el.style[a]],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\treturn getComputedStyle(el, null)[a];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get data of first matching selection or set data\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param [b]\n\t\t * @returns {(object|string|undefined)}\n\t\t */\n\t\t$data: function(target, a, b) {\n\t\t\tif (a === U) {\n\t\t\t\tvar el = W.$(target)[0],\n\t\t\t\t\tarr = {};\n\n\t\t\t\tW._slice.call(el.attributes).forEach(function(attr) {\n\t\t\t\t\tif (attr.name.substr(0, 5) == 'data-') {\n\t\t\t\t\t\tarr[_toCamel(attr.name.substr(5))] =\n\t\t\t\t\t\t\tW._castString(attr.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn arr;\n\t\t\t}\n\n\t\t\tif (W.$isObject(a)) {\n\t\t\t\tvar obj = {};\n\n\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\tobj['data-' + _toDashed(key)] = a[key];\n\t\t\t\t});\n\n\t\t\t\ta = obj;\n\t\t\t} else {\n\t\t\t\ta = 'data-' + _toDashed(a);\n\t\t\t}\n\n\t\t\treturn W._castString(W.$attr(target, a, b));\n\t\t},\n\n\t\t/**\n\t\t * Remove child nodes from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$empty: function(target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\twhile (el.firstChild) {\n\t\t\t\t\tel.removeChild(el.firstChild);\n\t\t\t\t}\n\n\t\t\t\tW.$setRef(el);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get indexed node of matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {int} index\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$eq: function(target, index, context) {\n\t\t\tvar el = W.$(target, context);\n\n\t\t\treturn el[index < 0 ? el.length + index : index];\n\t\t},\n\n\t\t/**\n\t\t * Return a filtered subset of elements from a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$filter: function(target, filter, options) {\n\t\t\tvar func = W._canExec(filter);\n\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\tvar match = func ?\n\t\t\t\t\tW.$exec(filter, {\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tW.$is(el, filter, options);\n\n\t\t\t\treturn match ? el : false;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique filtered descendants from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$find: function(parent, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tarr = arr.concat(W.$(filter, el));\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get the first element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$first: function(target, context) {\n\t\t\treturn W.$(target, context)[0];\n\t\t},\n\n\t\t/**\n\t\t * Determine if the matching selection has a class\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {string} className\n\t\t * @returns {boolean}\n\t\t */\n\t\t$hasClass: function(target, className) {\n\t\t\treturn W.$(target).some(function(el) {\n\t\t\t\treturn new RegExp('(^| )' + className + '($| )', 'gim')\n\t\t\t\t\t.test(_getClass(el));\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the height of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(boolean|function|number|string)} value\n\t\t * @returns {number}\n\t\t */\n\t\t$height: function(target, value) {\n\t\t\tvar func = value && W._canExec(value),\n\t\t\t\theight;\n\n\t\t\tif (value === U || value === true || func) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el === W._win) {\n\t\t\t\t\theight = el.innerHeight;\n\t\t\t\t} else if (el === W._doc) {\n\t\t\t\t\theight = el.documentElement.scrollHeight;\n\t\t\t\t} else {\n\t\t\t\t\theight = el.offsetHeight;\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvar style = getComputedStyle(el);\n\t\t\t\t\t\theight += parseFloat(style.marginTop) +\n\t\t\t\t\t\t\tparseFloat(style.marginBottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (! func) {\n\t\t\t\t\treturn height;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvalue = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, height],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (typeof value == 'number') {\n\t\t\t\t\tvalue += 'px';\n\t\t\t\t}\n\n\t\t\t\tW.$css(el, 'height', value);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Hide each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$hide: function(target) {\n\t\t\tW.$addClass(target, 'js-hide');\n\t\t},\n\n\t\t/**\n\t\t * Get inner HTML of first selection or set each matching selection HTML\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$html: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\treturn W.$(target)[0].innerHTML;\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar html = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (html !== false && html !== U) {\n\t\t\t\t\tif (el.nodeName == 'SELECT' && ! W._win.atob) {\n\t\t\t\t\t\tel.outerHTML = el.outerHTML.replace(\n\t\t\t\t\t\t\tel.innerHTML + ' 0) {\n\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t}\n\n\t\t\t\t\tpar.insertBefore(cel, el.nextSibling);\n\n\t\t\t\t\tW.$setRef(par);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element before\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$insertBefore: function(source, target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tW.$each(source, function(cel) {\n\t\t\t\t\tel.parentNode.insertBefore(cel, el);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Determine if at least one matching selection matches\n\t\t * a specified criteria\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {boolean}\n\t\t */\n\t\t$is: function(target, filter, options) {\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\tif (typeof filter == 'string' && filter.slice(0, 4) == 'ref:') {\n\t\t\t\t\treturn W.$(filter).indexOf(el) > -1;\n\t\t\t\t}\n\n\t\t\t\tif (W.$isObject(filter)) {\n\t\t\t\t\tfor (var key in filter) {\n\t\t\t\t\t\tif (filter[key] === el) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(filter)) {\n\t\t\t\t\treturn filter.indexOf(el) > -1;\n\t\t\t\t}\n\n\t\t\t\tif (W._canExec(filter)) {\n\t\t\t\t\treturn W.$exec(filter, W.$extend({\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}, options));\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tel.matches ||\n\t\t\t\t\tel.msMatchesSelector ||\n\t\t\t\t\tel.webkitMatchesSelector ||\n\t\t\t\t\tel.mozMatchesSelector\n\t\t\t\t).call(el, filter);\n\t\t\t}).length > 0;\n\t\t},\n\n\t\t/**\n\t\t * Get the last element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$last: function(target, context) {\n\t\t\treturn W.$eq(target, -1, context);\n\t\t},\n\n\t\t/**\n\t\t * Get the unique next sibling of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$next: function(target, filter, options) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\treturn _getSibling(el, 1, filter, options);\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Returns elements not matching the filtered selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$not: function(target, filter, options) {\n\t\t\tvar func = W._canExec(filter);\n\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\treturn (func ?\n\t\t\t\t\tW.$exec(filter, {\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tW.$is(el, filter, options)) ? false : el;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get the position of a matching selection relative to the document\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|number)} value\n\t\t * @returns {{top: number, left: number}}\n\t\t */\n\t\t$offset: function(target, value) {\n\t\t\tvar rect = W.$(target)[0].getBoundingClientRect(),\n\t\t\t\toffset = {\n\t\t\t\t\ttop: rect.top + W._win.pageYOffset,\n\t\t\t\t\tleft: rect.left + W._win.pageXOffset\n\t\t\t\t};\n\n\t\t\tif (value) {\n\t\t\t\tvar func = W._canExec(value);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tvar set = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, offset],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\t\tif (typeof set.top == 'number') {\n\t\t\t\t\t\tset.top = set.top + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof set.left == 'number') {\n\t\t\t\t\t\tset.left = set.left + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tW.$css(el, set);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn offset;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get unique parent from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} child\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$parent: function(child, filter) {\n\t\t\treturn W.$unique(W.$map(child, function(el) {\n\t\t\t\tvar parent = el.parentNode;\n\t\t\t\treturn ! filter || W.$is(parent, filter) ? parent : false;\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Get unique ancestors of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} child\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$parents: function(child, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(child, function(el) {\n\t\t\t\twhile (el !== null) {\n\t\t\t\t\tel = el.parentNode;\n\n\t\t\t\t\tif (! filter || (filter && W.$is(el, filter))) {\n\t\t\t\t\t\tarr.push(el);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (el === W._html) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get the position of the first matching selection relative\n\t\t * to its offset parent\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {{top: number, left: number}}\n\t\t */\n\t\t$position: function(target) {\n\t\t\tvar el = W.$(target)[0];\n\n\t\t\treturn {\n\t\t\t\ttop: el.offsetTop,\n\t\t\t\tleft: el.offsetLeft\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t */\n\t\t$prepend: function(target, source) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar pre = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof pre == 'string') {\n\t\t\t\t\tpre = W.$parseHTML(pre);\n\t\t\t\t}\n\n\t\t\t\tif (pre) {\n\t\t\t\t\tW.$each(pre, function(cel) {\n\t\t\t\t\t\tel.insertBefore(cel, el.firstChild);\n\t\t\t\t\t});\n\n\t\t\t\t\tW.$setRef(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get the unique previous sibling of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$prev: function(target, filter, options) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\treturn _getSibling(el, -1, filter, options);\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Get property of first matching selection or set property of\n\t\t * each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {*}\n\t\t */\n\t\t$prop: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel[key] = a[key];\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel[a] = func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\treturn el[a];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove each matching selection from the document\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\t$remove: function(target, context) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\tarr.push(el);\n\n\t\t\t\tpar.removeChild(el);\n\n\t\t\t\tW.$setRef(par);\n\t\t\t}, {\n\t\t\t\tcontext: context\n\t\t\t});\n\n\t\t\treturn arr;\n\t\t},\n\n\t\t/**\n\t\t * Remove specified attribute of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {string} name\n\t\t */\n\t\t$removeAttr: function(target, name) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tname.split(/\\s+/).forEach(function(value) {\n\t\t\t\t\tel.removeAttribute(value);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Remove classes from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t */\n\t\t$removeClass: function(target, value) {\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar cn = _getClass(el),\n\t\t\t\t\tname = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, cn],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tvar names = name.split(' ');\n\n\t\t\t\t\t_setClass(el, cn.split(' ').filter(function(val) {\n\t\t\t\t\t\treturn names.indexOf(val) < 0;\n\t\t\t\t\t}).join(' '));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Replace each matching selection with selection or markup\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} source\n\t\t */\n\t\t$replaceWith: function(target, source) {\n\t\t\tW.$after(target, source, true);\n\t\t},\n\n\t\t/**\n\t\t * Get or set the X scroll position of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {number} value\n\t\t * @returns {number}\n\t\t */\n\t\t$scrollLeft: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = target ? W.$(target)[0] : W._win;\n\n\t\t\t\treturn el === W._win ?\n\t\t\t\t\tel.pageXOffset :\n\t\t\t\t\tel.scrollLeft;\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tel.scrollLeft = value;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the Y scroll position of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {number} value\n\t\t * @returns {number}\n\t\t */\n\t\t$scrollTop: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = target ? W.$(target)[0] : W._win;\n\n\t\t\t\treturn el === W._win ?\n\t\t\t\t\tel.pageYOffset :\n\t\t\t\t\tel.scrollTop;\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tel.scrollTop = value;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Serialize input values from first matching form selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {boolean} json\n\t\t * @returns {string}\n\t\t */\n\t\t$serializeForm: function(target, json) {\n\t\t\tvar el = W.$(target)[0],\n\t\t\t\tobj = {},\n\t\t\t\ti = 0;\n\n\t\t\tif (el.nodeName != 'FORM') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfor (; i < el.elements.length; i++) {\n\t\t\t\tvar child = el.elements[i],\n\t\t\t\t\tname = child.name,\n\t\t\t\t\ttype = child.type;\n\n\t\t\t\tif (name && type != 'file' && type != 'reset') {\n\t\t\t\t\tvar arr = name.slice(-2) == '[]';\n\n\t\t\t\t\tif (arr) {\n\t\t\t\t\t\tname = name.slice(0, -2);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type == 'select-multiple') {\n\t\t\t\t\t\tobj[name] = _getSelected(child);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttype != 'submit' && type != 'button' &&\n\t\t\t\t\t\t((type != 'checkbox' && type != 'radio') ||\n\t\t\t\t\t\tchild.checked)) {\n\t\t\t\t\t\tif (arr || (type == 'checkbox' && obj[name])) {\n\t\t\t\t\t\t\tobj[name] = W.$toArray(obj[name]);\n\t\t\t\t\t\t\tobj[name].push(child.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj[name] = child.value;\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\treturn json ? obj : W.$serialize(obj);\n\t\t},\n\n\t\t/**\n\t\t * Show each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$show: function(target) {\n\t\t\tW.$removeClass(target, 'js-hide');\n\t\t},\n\n\t\t/**\n\t\t * Get unique siblings of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$siblings: function(target, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tvar siblings = W._slice.call(el.parentNode.children)\n\t\t\t\t\t.filter(function(a) {\n\t\t\t\t\t\treturn a !== el;\n\t\t\t\t\t});\n\n\t\t\t\tarr = arr.concat(\n\t\t\t\t\tfilter ?\n\t\t\t\t\t\tW.$filter(siblings, filter) :\n\t\t\t\t\t\tsiblings\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get subset of selection matches from specified range\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {int} start\n\t\t * @param {int} end\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$slice: function(target, start, end) {\n\t\t\tif (! target._$) {\n\t\t\t\ttarget = W._selArray(target);\n\t\t\t}\n\n\t\t\treturn W._slice.call(target, start, end);\n\t\t},\n\n\t\t/**\n\t\t * Get inner text of first selection or set each matching selection text\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {string}\n\t\t */\n\t\t$text: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\treturn W.$map(target, function(el) {\n\t\t\t\t\treturn el.textContent.trim();\n\t\t\t\t}).join('');\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tel.textContent = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, el.textContent.trim()],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Toggle the display of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$toggle: function(target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\t! W.$hasClass(el, 'js-hide') ?\n\t\t\t\t\tW.$hide(el) :\n\t\t\t\t\tW.$show(el);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Toggle adding and removing class(es) from the specified element\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} className\n\t\t * @param {boolean} [state]\n\t\t */\n\t\t$toggleClass: function(target, className, state) {\n\t\t\tvar func = W._canExec(className);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tif (func) {\n\t\t\t\t\tclassName = W.$exec(className, {\n\t\t\t\t\t\targs: [i, _getClass(el), state],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (className) {\n\t\t\t\t\tclassName.split(/\\s+/).forEach(function(value) {\n\t\t\t\t\t\tstate === false ||\n\t\t\t\t\t\t(state === U && W.$hasClass(el, value)) ?\n\t\t\t\t\t\t\tW.$removeClass(el, value) :\n\t\t\t\t\t\t\tW.$addClass(el, value);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get value of first matching selection or set match values\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {(Array|string)}\n\t\t */\n\t\t$val: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el.type == 'select-multiple') {\n\t\t\t\t\treturn _getSelected(el);\n\t\t\t\t}\n\n\t\t\t\treturn el.value;\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tif (el.type == 'select-multiple') {\n\t\t\t\t\tvalue = W.$toArray(value);\n\n\t\t\t\t\tW._slice.call(el.options).forEach(function(a) {\n\t\t\t\t\t\tif (value.indexOf(a.value) > -1) {\n\t\t\t\t\t\t\ta.selected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tel.value = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, el.value],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the width of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(boolean|function|number|string)} value\n\t\t * @returns {number}\n\t\t */\n\t\t$width: function(target, value) {\n\t\t\tvar func = value && W._canExec(value),\n\t\t\t\twidth;\n\n\t\t\tif (value === U || value === true || func) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el === W._win) {\n\t\t\t\t\twidth = el.innerWidth;\n\t\t\t\t} else if (el === W._doc) {\n\t\t\t\t\twidth = el.documentElement.scrollWidth;\n\t\t\t\t} else {\n\t\t\t\t\twidth = el.offsetWidth;\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvar style = getComputedStyle(el);\n\t\t\t\t\t\twidth += parseFloat(style.marginLeft) +\n\t\t\t\t\t\t\tparseFloat(style.marginRight);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (! func) {\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvalue = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, width],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (typeof value == 'number') {\n\t\t\t\t\tvalue += 'px';\n\t\t\t\t}\n\n\t\t\t\tW.$css(el, 'width', value);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} html\n\t\t */\n\t\t$wrap: function(target, html) {\n\t\t\tvar func = W._canExec(html);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar wrap = W.$(\n\t\t\t\t\tfunc ?\n\t\t\t\t\t\tW.$exec(html, {\n\t\t\t\t\t\t\targs: i,\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\thtml\n\t\t\t\t);\n\n\t\t\t\tif (wrap) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(wrap, function(cel) {\n\t\t\t\t\t\tcel = cel.cloneNode(true);\n\n\t\t\t\t\t\tpar.insertBefore(cel, el);\n\t\t\t\t\t\tcel.appendChild(el);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around the content of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} html\n\t\t */\n\t\t$wrapInner: function(target, html) {\n\t\t\tvar func = W._canExec(html);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar markup = func ?\n\t\t\t\t\t\tW.$exec(html, {\n\t\t\t\t\t\t\targs: i,\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\thtml,\n\t\t\t\t\twrap = markup ? $(markup) : null;\n\n\t\t\t\tif (wrap) {\n\t\t\t\t\tvar children = W.$children(el);\n\n\t\t\t\t\tif (! children.length) {\n\t\t\t\t\t\tchildren = W.$html(el);\n\n\t\t\t\t\t\tW.$empty(el);\n\t\t\t\t\t\tW.$html(wrap, children);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tW.$each(children, function(cel) {\n\t\t\t\t\t\t\twrap.appendChild(cel);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tW.$append(el, wrap);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(Wee, undefined);","/* jshint maxparams: 5 */\n\n(function(W) {\n\t'use strict';\n\n\tvar bound = [],\n\t\tcustom = {},\n\n\t\t/**\n\t\t * Attach specific event logic to element\n\t\t *\n\t\t * @private\n\t\t * @param {(Array|HTMLElement|object|string)} els\n\t\t * @param {object} obj\n\t\t * @param {object} options\n\t\t */\n\t\t_bind = function(els, obj, options) {\n\t\t\t// Redefine variables when delegating\n\t\t\tif (options && options.delegate) {\n\t\t\t\toptions.targ = els;\n\t\t\t\tels = options.delegate;\n\t\t\t}\n\n\t\t\t// For each element attach events\n\t\t\tW.$each(els, function(el) {\n\t\t\t\t// Loop through object events\n\t\t\t\tfor (var key in obj) {\n\t\t\t\t\tvar evts = key.split(' '),\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < evts.length; i++) {\n\t\t\t\t\t\tvar conf = W.$extend({\n\t\t\t\t\t\t\t\targs: [],\n\t\t\t\t\t\t\t\tonce: false,\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}, options),\n\t\t\t\t\t\t\tfn = obj[key],\n\t\t\t\t\t\t\tevt = evts[i],\n\t\t\t\t\t\t\tev = evt,\n\t\t\t\t\t\t\tparts = ev.split('.'),\n\t\t\t\t\t\t\tf = fn;\n\t\t\t\t\t\tevt = parts[0];\n\n\t\t\t\t\t\tif (parts.length == 1 && conf.namespace) {\n\t\t\t\t\t\t\tev += '.' + conf.namespace;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prepend element to callback arguments if necessary\n\t\t\t\t\t\tif (conf.args[1] !== el) {\n\t\t\t\t\t\t\tconf.args.unshift(0, el);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function(el, evt, fn, f, conf) {\n\t\t\t\t\t\t\tvar cb = function(e) {\n\t\t\t\t\t\t\t\tvar cont = true;\n\t\t\t\t\t\t\t\tconf.args[0] = e;\n\n\t\t\t\t\t\t\t\t// If watch within ancestor make sure the target\n\t\t\t\t\t\t\t\t// matches the selector\n\t\t\t\t\t\t\t\tif (conf.targ) {\n\t\t\t\t\t\t\t\t\tvar targ = conf.targ,\n\t\t\t\t\t\t\t\t\t\tsel = targ._$ ? targ.sel : targ;\n\n\t\t\t\t\t\t\t\t\t// Update refs when targeting ref\n\t\t\t\t\t\t\t\t\tif (typeof sel == 'string' &&\n\t\t\t\t\t\t\t\t\t\tsel.indexOf('ref:') > -1) {\n\t\t\t\t\t\t\t\t\t\tW.$setRef(el);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tcont = W.$toArray(W.$(sel)).some(function(el) {\n\t\t\t\t\t\t\t\t\t\treturn el.contains(e.target) && (targ = el);\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Ensure element argument is the target\n\t\t\t\t\t\t\t\t\tconf.args[1] = conf.scope = targ;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (cont) {\n\t\t\t\t\t\t\t\t\tW.$exec(fn, conf);\n\n\t\t\t\t\t\t\t\t\t// Unbind after first execution\n\t\t\t\t\t\t\t\t\tif (conf.once) {\n\t\t\t\t\t\t\t\t\t\t_off(el, evt, f);\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};\n\n\t\t\t\t\t\t\t// Ensure the specified element, event, and function\n\t\t\t\t\t\t\t// combination hasn't already been bound\n\t\t\t\t\t\t\tif (evt != 'init' && ! W.events.bound(el, ev, f, conf.targ).length) {\n\t\t\t\t\t\t\t\t// Determine if the event is native or custom\n\t\t\t\t\t\t\t\tif ('on' + evt in el) {\n\t\t\t\t\t\t\t\t\tel.addEventListener(evt, cb, false);\n\t\t\t\t\t\t\t\t} else if (custom[evt]) {\n\t\t\t\t\t\t\t\t\tcustom[evt][0](el, fn, conf);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbound.push({\n\t\t\t\t\t\t\t\t\tel: el,\n\t\t\t\t\t\t\t\t\tev: ev,\n\t\t\t\t\t\t\t\t\tevt: evt,\n\t\t\t\t\t\t\t\t\tcb: cb,\n\t\t\t\t\t\t\t\t\tfn: f,\n\t\t\t\t\t\t\t\t\ttarg: conf.targ\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\tif (evt == 'init' || conf.init === true) {\n\t\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})(el, evt, fn, f, conf);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, options);\n\t\t},\n\n\t\t/**\n\t\t * Detach event(s) from element\n\t\t *\n\t\t * @private\n\t\t * @param {(HTMLElement|string)} [sel]\n\t\t * @param {string} [evt]\n\t\t * @param {function} [fn]\n\t\t */\n\t\t_off = function(sel, evt, fn) {\n\t\t\tW.$each(W.events.bound(sel, evt, fn), function(e) {\n\t\t\t\tif ('on' + e.evt in W._doc) {\n\t\t\t\t\te.el.removeEventListener(e.evt, e.cb);\n\t\t\t\t} else if (custom[e.evt]) {\n\t\t\t\t\tcustom[e.evt][1](e.el, e.cb);\n\t\t\t\t}\n\n\t\t\t\tbound.splice(bound.indexOf(e), 1);\n\t\t\t});\n\t\t};\n\n\tW.events = {\n\t\t/**\n\t\t * Bind event function to element\n\t\t *\n\t\t * @param {(HTMLElement|object|string)} target\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {(function|object)} [b] - event callback or options object\n\t\t * @param {(object|string)} [c] - event options\n\t\t * @param {Array} [c.args] - callback arguments\n\t\t * @param {(HTMLElement|string)} [c.context=document]\n\t\t * @param {(HTMLElement|string)} [c.delegate]\n\t\t * @param {boolean} [c.once=false] - remove event after first execution\n\t\t * @param {object} [c.scope]\n\t\t */\n\t\ton: function(target, a, b, c) {\n\t\t\tvar evts = [];\n\n\t\t\tif (W.$isObject(target) && ! target._$) {\n\t\t\t\tvar keys = Object.keys(target),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfor (; i < keys.length; i++) {\n\t\t\t\t\tvar key = keys[i];\n\t\t\t\t\tevts = target[key];\n\n\t\t\t\t\t_bind(key, evts, a);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\tevts[a] = b;\n\t\t\t\t} else {\n\t\t\t\t\tevts = a;\n\t\t\t\t\tc = b;\n\t\t\t\t}\n\n\t\t\t\t_bind(target, evts, c);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove specified event from specified element\n\t\t *\n\t\t * @param {(HTMLElement|string)} [target]\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {function} [b] - specific function to remove\n\t\t */\n\t\toff: function(target, a, b) {\n\t\t\tvar obj = a;\n\n\t\t\tif (a) {\n\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\tobj = [];\n\t\t\t\t\tobj[a] = b;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in obj) {\n\t\t\t\t\tvar evts = key.split(' '),\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < evts.length; i++) {\n\t\t\t\t\t\tvar evt = evts[i],\n\t\t\t\t\t\t\tfn = obj[evt];\n\n\t\t\t\t\t\t_off(target, evt, fn);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_off(target);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get currently bound events to optional specified element and event|function\n\t\t *\n\t\t * @param {(boolean|HTMLElement|string)} [target]\n\t\t * @param {string} [event] - event name to match\n\t\t * @param {function} [fn] - specific function to match\n\t\t * @param {HTMLElement} [delegateTarg] - targets of delegated event\n\t\t * @returns {Array} matches\n\t\t */\n\t\tbound: function(target, event, fn, delegateTarg) {\n\t\t\tvar segs = (event || '').split('.'),\n\t\t\t\tmatches = [];\n\t\t\ttarget = target || [0];\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tObject.keys(bound).forEach(function(e) {\n\t\t\t\t\tvar binding = bound[e],\n\t\t\t\t\t\tparts = binding.ev.split('.'),\n\t\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tif (el && el !== binding.el) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event &&\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tsegs[0] !== '' &&\n\t\t\t\t\t\t\tsegs[0] != parts[0]\n\t\t\t\t\t\t) ||\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tsegs[1] &&\n\t\t\t\t\t\t\tsegs[1] != parts[1]\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fn && String(fn) !== String(binding.fn)) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If delegated event, check against target element\n\t\t\t\t\tif ((delegateTarg && binding.targ) && delegateTarg.sel !== binding.targ.sel) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tmatches.push(binding);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn target ? matches : bound;\n\t\t},\n\n\t\t/**\n\t\t * Execute bound event for each matching selection\n\t\t *\n\t\t * @param {(HTMLElement|string)} target\n\t\t * @param {string} name\n\t\t */\n\t\ttrigger: function(target, name) {\n\t\t\tvar fn = function() {};\n\n\t\t\tthis.bound(target, name).forEach(function(e) {\n\t\t\t\te.cb({\n\t\t\t\t\ttarget: e.el,\n\t\t\t\t\tpreventDefault: fn,\n\t\t\t\t\tstopPropagation: fn\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Add a custom event\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {function} on\n\t\t * @param {function} off\n\t\t */\n\t\taddEvent: function(name, on, off) {\n\t\t\tcustom[name] = [on, off];\n\t\t}\n\t};\n})(Wee);","/* jshint maxparams: 5 */\n\n(function(W, D, E, H, U) {\n\t'use strict';\n\n\tvar support = H && H.pushState,\n\t\tentries = [],\n\t\torder = [],\n\t\tindex = 0,\n\t\tpending = false,\n\t\tsettings = {},\n\t\troot = '',\n\t\tpath = '',\n\n\t\t/**\n\t\t * Return current path\n\t\t *\n\t\t * @private\n\t\t * @param {object} [loc]\n\t\t * @returns {string}\n\t\t */\n\t\t_path = function(loc) {\n\t\t\tloc = loc || location;\n\t\t\treturn loc.pathname + loc.search + loc.hash;\n\t\t},\n\n\t\t/**\n\t\t * Determine if path is valid for history navigation\n\t\t *\n\t\t * @private\n\t\t * @param {HTMLElement} el\n\t\t */\n\t\t_isValid = function(el) {\n\t\t\tif (! el.href ||\n\t\t\t\tel.target == '_blank' ||\n\t\t\t\t! /https?:/.test(el.href) ||\n\t\t\t\tel.hasAttribute('download') ||\n\t\t\t\tel.hasAttribute('data-static') ||\n\t\t\t\t(el.host && el.host != location.host) ||\n\t\t\t\t(el.hash && el.pathname == path)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar exts = settings.extensions,\n\t\t\t\tsegs = path.split('.'),\n\t\t\t\text;\n\n\t\t\tif (segs.length > 1) {\n\t\t\t\text = segs.pop().split(/#|\\?/)[0];\n\t\t\t}\n\n\t\t\treturn ! ext || (exts && exts.indexOf(ext) > -1);\n\t\t},\n\n\t\t/**\n\t\t * Reset references and variables for a given selector\n\t\t *\n\t\t * @private\n\t\t * @param sel\n\t\t */\n\t\t_reset = function(sel) {\n\t\t\tW.$setRef(sel);\n\t\t\tW.$setVar(sel);\n\n\t\t\tW.history.bind(false, sel);\n\t\t},\n\n\t\t/**\n\t\t * Process the history state of the request\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t * @param {object} options\n\t\t */\n\t\t_process = function(conf, options) {\n\t\t\tvar request = conf.request,\n\t\t\t\tmethod = request.method;\n\n\t\t\tif (typeof conf.push == 'string') {\n\t\t\t\tconf.path = conf.push;\n\t\t\t} else if (! method || method == 'get') {\n\t\t\t\tconf.path = D._getUrl(request);\n\t\t\t}\n\n\t\t\tvar key = conf.path,\n\t\t\t\tdir = conf.push ? 1 : -1,\n\t\t\t\tobj = {\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdir: dir,\n\t\t\t\t\t\t\tpath: conf.path,\n\t\t\t\t\t\t\tprev: path,\n\t\t\t\t\t\t\tconf: conf\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\tentries[key] = conf;\n\n\t\t\t// Add entry to HTML5 history\n\t\t\tif (conf.push && support) {\n\t\t\t\tH.pushState(0, '', conf.path);\n\t\t\t}\n\n\t\t\t// Update document title\n\t\t\tif (conf.title) {\n\t\t\t\tW._doc.title = conf.title;\n\t\t\t}\n\n\t\t\t// Update current path\n\t\t\tW.routes.uri(conf.path);\n\t\t\tW.routes.uri({\n\t\t\t\thistory: true\n\t\t\t});\n\n\t\t\torder.push(pending);\n\t\t\tpending = false;\n\t\t\tindex += dir;\n\n\t\t\t// Evaluate routes against updated path\n\t\t\tif (conf.run) {\n\t\t\t\tW.routes.run({\n\t\t\t\t\tevent: 'pop',\n\t\t\t\t\tpath: path\n\t\t\t\t});\n\n\t\t\t\tW.routes.run({\n\t\t\t\t\tpath: conf.path\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpath = conf.path;\n\n\t\t\tif (conf.pushstate) {\n\t\t\t\tW.$exec([\n\t\t\t\t\tsettings.pushstate,\n\t\t\t\t\toptions.pushstate\n\t\t\t\t], obj);\n\t\t\t}\n\n\t\t\tif (conf.popstate) {\n\t\t\t\tW.$exec([\n\t\t\t\t\tsettings.popstate,\n\t\t\t\t\toptions.popstate\n\t\t\t\t], obj);\n\t\t\t}\n\n\t\t\tW.$exec([\n\t\t\t\tsettings.end,\n\t\t\t\toptions.end\n\t\t\t], obj);\n\t\t};\n\n\tW.history = {\n\t\t/**\n\t\t * Set the initial state and popstate event, and bind global actions\n\t\t *\n\t\t * @param {object} [options]\n\t\t * @param {($|boolean|HTMLElement|string)} [options.bind]\n\t\t * @param {Array} [options.extensions]\n\t\t * @param {string} [options.partials='title,main']\n\t\t * @param {boolean} [options.processErrors=false]\n\t\t * @param {boolean} [options.push=true]\n\t\t * @param {object} [options.request]\n\t\t * @param {boolean} [options.run=true]\n\t\t * @param {boolean} [options.useResponseURL=true]\n\t\t */\n\t\tinit: function(options) {\n\t\t\tvar scope = this;\n\n\t\t\tif (! scope.request) {\n\t\t\t\tvar uri = W.routes.uri();\n\t\t\t\tpath = uri.full;\n\t\t\t\tsettings = W.$extend({\n\t\t\t\t\tpartials: 'title,main',\n\t\t\t\t\tpush: true,\n\t\t\t\t\trequest: {},\n\t\t\t\t\trun: true,\n\t\t\t\t\tscrollTarget: W._body,\n\t\t\t\t\tscrollTop: 0\n\t\t\t\t}, options);\n\t\t\t\troot = settings.request.root || '';\n\n\t\t\t\tscope.request = settings.request;\n\t\t\t\tdelete settings.request;\n\n\t\t\t\torder.push(uri);\n\n\t\t\t\tif (support) {\n\t\t\t\t\tH.scrollRestoration = 'manual';\n\n\t\t\t\t\t// Set current state\n\t\t\t\t\tH.replaceState(0, '');\n\n\t\t\t\t\t// Listen for browser navigation\n\t\t\t\t\tE.on(W._win, 'popstate.history', function(e) {\n\t\t\t\t\t\tif (e.state !== null) {\n\t\t\t\t\t\t\tvar url = _path(),\n\t\t\t\t\t\t\t\tprev = entries[path];\n\n\t\t\t\t\t\t\tif (prev) {\n\t\t\t\t\t\t\t\tvar conf = W.$extend(\n\t\t\t\t\t\t\t\t\tentries[url] || {\n\t\t\t\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\t\t\t\troot: ''\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\tpath: url,\n\t\t\t\t\t\t\t\t\t\tpush: false,\n\t\t\t\t\t\t\t\t\t\tpop: true\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\tconf.partials = prev.partials;\n\n\t\t\t\t\t\t\t\t// Restore previous scroll position\n\t\t\t\t\t\t\t\tif (e.state.top) {\n\t\t\t\t\t\t\t\t\tconf.scrollTop = e.state.top;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tW.history.go(conf);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tW._win.location = url;\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\n\t\t\t\t// Bind PJAX actions\n\t\t\t\tscope.bind();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Bind element events and form submit events to PJAX\n\t\t *\n\t\t * @param {(boolean|object)} [events]\n\t\t * @param {($|HTMLElement|Object|string)} [a] - settings or context\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\tbind: function(events, a, context) {\n\t\t\tevents = events || settings.bind;\n\n\t\t\tif (events === true) {\n\t\t\t\tevents = {\n\t\t\t\t\tclick: 'a',\n\t\t\t\t\tsubmit: 'form'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (support && typeof events == 'object') {\n\t\t\t\tvar keys = Object.keys(events),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (! W.$isObject(a)) {\n\t\t\t\t\tcontext = a;\n\t\t\t\t\ta = {};\n\t\t\t\t}\n\n\t\t\t\tfor (; i < keys.length; i++) {\n\t\t\t\t\tvar event = keys[i],\n\t\t\t\t\t\tsel = events[event];\n\n\t\t\t\t\tW.$each(sel, function(el) {\n\t\t\t\t\t\tvar evt = event.split(' ').map(function(val) {\n\t\t\t\t\t\t\t\treturn val + '.history';\n\t\t\t\t\t\t\t}).join(' '),\n\t\t\t\t\t\t\tloc = el.getAttribute('data-url'),\n\t\t\t\t\t\t\tform = el.nodeName == 'FORM',\n\t\t\t\t\t\t\tl = el;\n\n\t\t\t\t\t\tif (loc || form) {\n\t\t\t\t\t\t\tvar attrs = el.attributes,\n\t\t\t\t\t\t\t\tx = 0,\n\t\t\t\t\t\t\t\tattr;\n\t\t\t\t\t\t\tl = W._doc.createElement('a');\n\n\t\t\t\t\t\t\tfor (; x < attrs.length; x++) {\n\t\t\t\t\t\t\t\tattr = attrs[x];\n\t\t\t\t\t\t\t\tl.setAttribute(attr.name, attr.value);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tl.href = loc || el.getAttribute('action') || url;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ensure the path exists and is local\n\t\t\t\t\t\tif (! evt || ! _isValid(l)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar options = W.$extend(true, {}, a);\n\n\t\t\t\t\t\t// Remove existing history events\n\t\t\t\t\t\tE.off(el, '.history');\n\n\t\t\t\t\t\tE.on(el, evt, function(e, el) {\n\t\t\t\t\t\t\tif (! e.metaKey) {\n\t\t\t\t\t\t\t\toptions.path = _path(l);\n\n\t\t\t\t\t\t\t\tif (form) {\n\t\t\t\t\t\t\t\t\tif (el.method.toLowerCase() == 'post') {\n\t\t\t\t\t\t\t\t\t\toptions.request = W.$extend(options.request, {\n\t\t\t\t\t\t\t\t\t\t\tdata: W.$serializeForm(el, true),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'form',\n\t\t\t\t\t\t\t\t\t\t\tmethod: 'post'\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toptions.path += '?' + W.$serializeForm(el);\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\tW.history.go(options);\n\t\t\t\t\t\t\t\te.preventDefault();\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\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get History data at optional index offset\n\t\t *\n\t\t * @param {(boolean|number)} [offset]\n\t\t * @returns {object}\n\t\t */\n\t\tget: function(offset) {\n\t\t\treturn offset === U ? order : (\n\t\t\t\toffset === true ? pending : order[index + offset]\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Navigate to a new path or within the browser history\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {string} [options.action='replace']\n\t\t * @param {Array} [options.extensions]\n\t\t * @param {string} [options.partials='title,main']\n\t\t * @param {string} [options.path=current path]\n\t\t * @param {boolean} [options.push=true]\n\t\t * @param {(boolean|object)} [options.request]\n\t\t * @param {boolean} [options.run=true]\n\t\t * @param {($|boolean|HTMLElement|string)} [options.scrollTarget=body]\n\t\t * @param {($|boolean|HTMLElement|number|string)} [options.scrollTop]\n\t\t * @param {string} [options.title]\n\t\t */\n\t\tgo: function(options) {\n\t\t\tvar scope = this;\n\n\t\t\tif (! scope.request) {\n\t\t\t\tscope.init();\n\t\t\t}\n\n\t\t\tvar req = scope.request,\n\t\t\t\tmock = options.action === false,\n\t\t\t\tconf = W.$extend(\n\t\t\t\t\tW.$copy(settings),\n\t\t\t\t\toptions\n\t\t\t\t),\n\t\t\t\trequest = conf.request || {},\n\t\t\t\troute = conf.run && W.routes;\n\n\t\t\trequest.root = request.root !== U ? request.root : root;\n\t\t\trequest.url = request.url !== U ? request.url : conf.path;\n\n\t\t\t// Navigate to external URL or if history isn't supported\n\t\t\tvar a = W._doc.createElement('a');\n\t\t\ta.href = request.root + request.url;\n\n\t\t\tif ((! support || ! _isValid(a)) && ! conf.force) {\n\t\t\t\tW._win.location = request.url;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Reset URL to exclude root\n\t\t\ta.href = request.url;\n\n\t\t\tvar url = W.routes.parse(request.url);\n\t\t\trequest.url = url.full;\n\t\t\tconf.request = request;\n\n\t\t\tif (conf.begin && W.$exec(conf.begin, {\n\t\t\t\t\targs: conf\n\t\t\t\t}) === false) {\n\t\t\t\tpending = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set current scroll position\n\t\t\tH.replaceState({\n\t\t\t\ttop: W._body.scrollTop\n\t\t\t}, '');\n\n\t\t\tpending = url;\n\n\t\t\t// Evaluate preload routes against target path\n\t\t\tif (route) {\n\t\t\t\tW.routes.run({\n\t\t\t\t\tevent: 'preload',\n\t\t\t\t\tpath: request.url\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar sendEvents = [],\n\t\t\t\tsuccessEvents = [],\n\t\t\t\terrorEvents = [],\n\t\t\t\tcompleteEvents = [],\n\t\t\t\tpartials = conf.partials,\n\t\t\t\ttargets = W.$(partials);\n\n\t\t\t// Setup PJAX headers\n\t\t\trequest.headers = W.$extend({\n\t\t\t\t'X-PJAX': 'true',\n\t\t\t\t'X-Requested-With': false\n\t\t\t}, request.headers);\n\n\t\t\t// Process send events\n\t\t\tif (request.send) {\n\t\t\t\tsendEvents.push(request.send);\n\t\t\t}\n\n\t\t\tif (req.send) {\n\t\t\t\tsendEvents.push(req.send);\n\t\t\t}\n\n\t\t\trequest.send = sendEvents;\n\n\t\t\t// Compile success events\n\t\t\tvar replaceEvent = function(x) {\n\t\t\t\tvar html = x && x.responseText ? x.responseText : x,\n\t\t\t\t\tmodHtml;\n\n\t\t\t\tif (conf.replace) {\n\t\t\t\t\tmodHtml = W.$exec(conf.replace, {\n\t\t\t\t\t\targs: [html, conf]\n\t\t\t\t\t});\n\t\t\t\t\thtml = html === false ? false : modHtml || html;\n\t\t\t\t}\n\n\t\t\t\t// Evaluate unload routes against current path\n\t\t\t\tif (route) {\n\t\t\t\t\tW.routes.run({\n\t\t\t\t\t\tevent: 'unload',\n\t\t\t\t\t\tpath: path\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (html === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (partials) {\n\t\t\t\t\thtml = W.$parseHTML('' + html + '').firstChild;\n\n\t\t\t\t\t// Make partial replacements from response\n\t\t\t\t\tW.$each(partials.split(','), function(sel) {\n\t\t\t\t\t\tW.$each(sel, function(el) {\n\t\t\t\t\t\t\tvar target = W.$(sel)[0];\n\n\t\t\t\t\t\t\tif (target) {\n\t\t\t\t\t\t\t\tvar parent = target.parentNode;\n\n\t\t\t\t\t\t\t\tconf.action == 'append' ?\n\t\t\t\t\t\t\t\t\tparent.appendChild(el) :\n\t\t\t\t\t\t\t\t\tparent.replaceChild(el, target);\n\n\t\t\t\t\t\t\t\t_reset(parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tcontext: html\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttargets.innerHTML = html;\n\n\t\t\t\t\t_reset(targets);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (! mock) {\n\t\t\t\tsuccessEvents.push(replaceEvent);\n\t\t\t}\n\n\t\t\tif (request.success) {\n\t\t\t\tsuccessEvents.push(request.success);\n\t\t\t}\n\n\t\t\tif (req.success) {\n\t\t\t\tsuccessEvents.push(req.success);\n\t\t\t}\n\n\t\t\tvar scrollEvent = function() {\n\t\t\t\tvar st = conf.scrollTop;\n\n\t\t\t\t// Scroll vertically to target\n\t\t\t\tif (st !== false) {\n\t\t\t\t\tvar top = 0,\n\t\t\t\t\t\tanim = W.animate;\n\n\t\t\t\t\tif (a.hash) {\n\t\t\t\t\t\tst = a.hash;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof st == 'function') {\n\t\t\t\t\t\tst = st();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof st == 'number') {\n\t\t\t\t\t\ttop = st;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar el = W.$(st)[0];\n\n\t\t\t\t\t\tif (el) {\n\t\t\t\t\t\t\ttop = el.getBoundingClientRect().top +\n\t\t\t\t\t\t\t\tW._win.pageYOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (anim) {\n\t\t\t\t\t\tanim.tween(conf.scrollTarget, {\n\t\t\t\t\t\t\tscrollTop: top\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(conf.scrollTarget)[0].scrollTop = top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tsuccessEvents.push(scrollEvent);\n\n\t\t\trequest.success = successEvents;\n\n\t\t\t// Compile error events\n\t\t\tif (request.error) {\n\t\t\t\terrorEvents.push(request.error);\n\t\t\t}\n\n\t\t\tif (req.error) {\n\t\t\t\terrorEvents.push(req.error);\n\t\t\t}\n\n\t\t\t// Optionally process error events\n\t\t\tif (conf.processErrors) {\n\t\t\t\terrorEvents.push(replaceEvent);\n\t\t\t\terrorEvents.push(scrollEvent);\n\t\t\t}\n\n\t\t\trequest.error = errorEvents;\n\n\t\t\t// Compile complete events\n\t\t\tif (request.complete) {\n\t\t\t\tcompleteEvents.push(request.complete);\n\t\t\t}\n\n\t\t\tif (req.complete) {\n\t\t\t\tcompleteEvents.push(req.complete);\n\t\t\t}\n\n\t\t\tif (! mock) {\n\t\t\t\tcompleteEvents.push(function(x) {\n\t\t\t\t\tvar code = x.status,\n\t\t\t\t\t\tresponseURL = x.responseURL;\n\n\t\t\t\t\tif (conf.useResponseURL !== false && conf.request.type === 'form' && responseURL) {\n\t\t\t\t\t\tconf.path = '/' + responseURL.replace(/^(?:\\/\\/|[^\\/]+)*\\//, '');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (conf.processErrors || (code >= 200 && code < 400)) {\n\t\t\t\t\t\t_process(conf, options);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\trequest.complete = completeEvents;\n\n\t\t\t// Make Ajax request\n\t\t\trequest.args = request.args || [];\n\t\t\trequest.args.unshift(targets);\n\n\t\t\tif (mock) {\n\t\t\t\tW.$exec(sendEvents.concat(\n\t\t\t\t\tsuccessEvents,\n\t\t\t\t\tcompleteEvents\n\t\t\t\t));\n\n\t\t\t\t_process(conf, options);\n\t\t\t} else {\n\t\t\t\tD.request(request);\n\t\t\t}\n\t\t}\n\t};\n})(Wee, Wee.fetch, Wee.events, history, undefined);\n","/* jshint maxdepth: 6, maxparams: 5 */\n\n(function(W, U) {\n\t'use strict';\n\n\tvar filters = {\n\t\t\tnum: function(seg) {\n\t\t\t\treturn Number(parseInt(seg)) == seg;\n\t\t\t}\n\t\t},\n\t\tany = [],\n\t\troutes,\n\t\tsegs,\n\t\turi,\n\n\t\t/**\n\t\t * Recursively process routes\n\t\t *\n\t\t * @private\n\t\t * @param {string} route - route to evaluate\n\t\t * @param {int} i - current index in iteration\n\t\t * @param {int} total - total number of routes\n\t\t * @param {string} [event='load'] - lifecycle event\n\t\t * @param {array} [parent] - parent route values\n\t\t */\n\t\t_process = function(route, i, total, event, parent) {\n\t\t\tvar seg = segs[i],\n\t\t\t\tkeys = Object.keys(route),\n\t\t\t\tx = 0;\n\t\t\ti++;\n\n\t\t\t// Match against patterns\n\t\t\tfor (; x < keys.length; x++) {\n\t\t\t\tvar key = keys[x],\n\t\t\t\t\tchild = route[key],\n\t\t\t\t\topts = key.split('||'),\n\t\t\t\t\tk = 0,\n\t\t\t\t\ty = i,\n\t\t\t\t\tmatch = false,\n\t\t\t\t\tran = false,\n\t\t\t\t\tobject = W.$isObject(child);\n\n\t\t\t\tfor (; k < opts.length; k++) {\n\t\t\t\t\tvar opt = opts[k],\n\t\t\t\t\t\tparts = opt.split(':'),\n\t\t\t\t\t\thistory = event != U,\n\t\t\t\t\t\tnegate = false,\n\t\t\t\t\t\tpush = false,\n\t\t\t\t\t\teq = false;\n\n\t\t\t\t\t// Ensure event type matches route type\n\t\t\t\t\tif ((! history && (\n\t\t\t\t\t\t\tparts.indexOf('unload') > -1 ||\n\t\t\t\t\t\t\tparts.indexOf('pop') > -1\n\t\t\t\t\t\t)) ||\n\t\t\t\t\t\t(history && (\n\t\t\t\t\t\t\t! object &&\n\t\t\t\t\t\t\tparts.indexOf(event) < 0\n\t\t\t\t\t\t))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set option to rule root\n\t\t\t\t\tif (parts.length > 1) {\n\t\t\t\t\t\topt = parts[0];\n\n\t\t\t\t\t\tif (! opt && parent) {\n\t\t\t\t\t\t\topt = parent[0];\n\t\t\t\t\t\t\tseg = parent[1];\n\t\t\t\t\t\t\ty--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Negate routes prefixed by !\n\t\t\t\t\tif (opt[0] == '!') {\n\t\t\t\t\t\topt = opt.slice(1);\n\t\t\t\t\t\tnegate = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Move the segment pointer back one level\n\t\t\t\t\tif (parts.indexOf('eval') > -1) {\n\t\t\t\t\t\ty--;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opt == seg) {\n\t\t\t\t\t\teq = true;\n\t\t\t\t\t} else if (opt[0] == '$') {\n\t\t\t\t\t\topt = opt.slice(1);\n\n\t\t\t\t\t\tif (opt == 'any') {\n\t\t\t\t\t\t\teq = true;\n\n\t\t\t\t\t\t\tif (parts.indexOf('fire') > -1) {\n\t\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\t} else if (! object) {\n\t\t\t\t\t\t\t\tpush = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (opt == 'root') {\n\t\t\t\t\t\t\tif (! seg) {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (opt[0] == '/') {\n\t\t\t\t\t\t\tvar split = opt.split('/');\n\n\t\t\t\t\t\t\tif (new RegExp(split[1], split[2] || U).test(seg)) {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar filter = filters[opt];\n\n\t\t\t\t\t\t\tif (filter) {\n\t\t\t\t\t\t\t\tif (filter(seg, child, y) === true) {\n\t\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t\t\tpush = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (seg && seg.trim() !== '') {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\topt = '$' + opt;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Invert the equality if the route is negated\n\t\t\t\t\tif (negate) {\n\t\t\t\t\t\teq = ! eq;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (eq) {\n\t\t\t\t\t\t// If ran is true then execute the route immediately\n\t\t\t\t\t\tif (ran && ! object) {\n\t\t\t\t\t\t\tW.$exec(child, {\n\t\t\t\t\t\t\t\targs: seg\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If push is true then push the route to the any queue\n\t\t\t\t\t\tif (push) {\n\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\tany.push([child, seg]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Remove the route if set to once\n\t\t\t\t\t\tif (parts.indexOf('once') > -1) {\n\t\t\t\t\t\t\tdelete route[key];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set match to true and break on match\n\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If matched then process recursively or execute if applicable\n\t\t\t\tif (match) {\n\t\t\t\t\tif (object) {\n\t\t\t\t\t\t_process(child, y, total, event, [opt, seg]);\n\t\t\t\t\t} else if (! ran && y === total) {\n\t\t\t\t\t\tW.$exec(child, {\n\t\t\t\t\t\t\targs: seg\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\tW.routes = {\n\t\t/**\n\t\t * Get current URI values or set with string or value\n\t\t *\n\t\t * @param {(object|string)} [value]\n\t\t * @param {string} [value.full]\n\t\t * @param {string} [value.hash]\n\t\t * @param {boolean} [value.history]\n\t\t * @param {string} [value.path]\n\t\t * @param {object} [value.query]\n\t\t * @param {Array} [value.segments]\n\t\t * @param {string} [value.url]\n\t\t * @returns {object} data\n\t\t */\n\t\turi: function(value) {\n\t\t\tif (! value && uri) {\n\t\t\t\treturn uri;\n\t\t\t}\n\n\t\t\tif (W.$isObject(value)) {\n\t\t\t\treturn W.$extend(this.uri(), value);\n\t\t\t}\n\n\t\t\turi = this.parse(value || location.href);\n\t\t\treturn uri;\n\t\t},\n\n\t\t/**\n\t\t * Parse a URL string into parts\n\t\t *\n\t\t * @param {string} uri\n\t\t */\n\t\tparse: function(uri) {\n\t\t\tvar a = W._doc.createElement('a');\n\t\t\ta.href = uri;\n\n\t\t\tvar search = a.search,\n\t\t\t\tpath = a.pathname.replace(/^\\/|\\/$/g, '');\n\n\t\t\treturn {\n\t\t\t\tfull: '/' + path + search + a.hash,\n\t\t\t\thash: a.hash.slice(1),\n\t\t\t\thistory: false,\n\t\t\t\tpath: '/' + path,\n\t\t\t\tquery: search ? W.$unserialize(search) : {},\n\t\t\t\tsegments: path.split('/'),\n\t\t\t\turl: a.href\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Get all segments or segment at index\n\t\t *\n\t\t * @param {int} [index]\n\t\t * @returns {(Array|string)} segments\n\t\t */\n\t\tsegments: function(index) {\n\t\t\tvar segs = this.uri().segments;\n\n\t\t\treturn index !== U ? (segs[index] || '') : segs;\n\t\t},\n\n\t\t/**\n\t\t * Retrieve or add route endpoints\n\t\t *\n\t\t * @param {object} obj - routes\n\t\t * @param {bool} [init=false] - immediately evaluate routes\n\t\t * @returns {object} routes\n\t\t */\n\t\tmap: function(obj, init) {\n\t\t\tvar curr = routes || {};\n\n\t\t\tif (obj) {\n\t\t\t\troutes = W.$extend(true, curr, obj);\n\n\t\t\t\tif (init) {\n\t\t\t\t\tthis.run({\n\t\t\t\t\t\troutes: routes\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn curr;\n\t\t},\n\n\t\t/**\n\t\t * Add conditional route filter\n\t\t *\n\t\t * @param {(object|string)} a - name or filter object\n\t\t * @param {function} [b]\n\t\t */\n\t\taddFilter: function(a, b) {\n\t\t\tW._extend(filters, a, b);\n\t\t},\n\n\t\t/**\n\t\t * Evaluate routes against URI\n\t\t *\n\t\t * @param {object} [conf]\n\t\t * @param {string} [conf.event='load']\n\t\t * @param {string} [conf.path]\n\t\t * @param {object} [conf.routes]\n\t\t */\n\t\trun: function(conf) {\n\t\t\tconf = conf || {};\n\t\t\tvar rules = conf.routes || routes;\n\n\t\t\tif (rules) {\n\t\t\t\tsegs = conf.path ?\n\t\t\t\t\tconf.path.replace(/^\\/|\\/$/g, '').split(/#|\\?/)[0].split('/') :\n\t\t\t\t\tthis.segments();\n\n\t\t\t\t_process(rules, 0, segs.length, conf.event);\n\n\t\t\t\t// Execute queued init functions on last iteration\n\t\t\t\tif (any.length) {\n\t\t\t\t\tfor (var i = 0; i < any.length; i++) {\n\t\t\t\t\t\tvar rule = any[i];\n\n\t\t\t\t\t\tW.$exec(rule[0], {\n\t\t\t\t\t\t\targs: rule[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear array for next iteration\n\t\t\t\t\tany = [];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n})(Wee, undefined);","(function(W) {\n\t'use strict';\n\n\tvar events = [],\n\t\tid = 0,\n\t\tbound,\n\t\tcurrent,\n\n\t\t/**\n\t\t * Bind individual rule\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf - breakpoint rules\n\t\t * @param {Array} [conf.args] - callback arguments\n\t\t * @param {function} conf.callback\n\t\t * @param {boolean} [conf.each=false] - execute for each matching breakpoint\n\t\t * @param {boolean} [conf.init=true] - check event on load\n\t\t * @param {int} [conf.max] - maximum breakpoint value\n\t\t * @param {int} [conf.min] - minimum breakpoint value\n\t\t * @param {boolean} [conf.once=false] - only execute the callback once\n\t\t * @param {object} [conf.scope] - callback scope\n\t\t * @param {int} [conf.size] - specific breakpoint value\n\t\t * @param {boolean} [conf.watch=true] - check event on screen resize\n\t\t * @param {string} [conf.namespace] - namespace the event\n\t\t */\n\t\t_addRule = function(conf) {\n\t\t\t// Attach unique identifier\n\t\t\tconf.i = id++;\n\n\t\t\t// Only setup watching when enabled\n\t\t\tif (conf.watch !== false) {\n\t\t\t\tevents.push(conf);\n\n\t\t\t\t// Only attach event once\n\t\t\t\tif (! bound) {\n\t\t\t\t\tvar run = _run.bind(this, false, 0, null);\n\t\t\t\t\tbound = 1;\n\t\t\t\t\tevents = [conf];\n\n\t\t\t\t\t// Attach resize event\n\t\t\t\t\tW._win.addEventListener('resize', run);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Evaluate rule immediately if not disabled\n\t\t\tif (conf.init !== false) {\n\t\t\t\t_run(true, [conf]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Check mapped rules for matching conditions\n\t\t *\n\t\t * @private\n\t\t * @param {boolean} [init=false] - initial page load\n\t\t * @param {Array} [rules] - breakpoint rules\n\t\t */\n\t\t_run = function(init, rules, namespace) {\n\t\t\tvar size = W.screen.size(),\n\t\t\t\tevts = rules || events,\n\t\t\t\ti;\n\n\t\t\t// If breakpoint has been hit or resize logic initialized\n\t\t\tif (size && (init || size !== current)) {\n\t\t\t\tif (namespace) {\n\t\t\t\t\tevts = evts.filter(function(obj) {\n\t\t\t\t\t\treturn obj.namespace === namespace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ti = evts.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tvar evt = evts[i];\n\n\t\t\t\t\tif (_eq(evt, size, init)) {\n\t\t\t\t\t\tvar f = init && ! current,\n\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\tdir: f ? 0 : (size > current ? 1 : -1),\n\t\t\t\t\t\t\t\tinit: f,\n\t\t\t\t\t\t\t\tprev: current,\n\t\t\t\t\t\t\t\tsize: size\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\tW.$exec(evt.callback, {\n\t\t\t\t\t\t\targs: evt.args ? [data].concat(evt.args) : [data],\n\t\t\t\t\t\t\tscope: evt.scope\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Disable future execution if once\n\t\t\t\t\t\tif (evt.once) {\n\t\t\t\t\t\t\tevents = events.filter(function(obj) {\n\t\t\t\t\t\t\t\treturn obj.i !== evt.i;\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\n\t\t\t\t// Cache current value\n\t\t\t\tcurrent = size;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Compare event rules against current size\n\t\t *\n\t\t * @private\n\t\t * @param {object} evt\n\t\t * @param {number} size\n\t\t * @param {boolean} init\n\t\t * @returns {boolean}\n\t\t */\n\t\t_eq = function(evt, size, init) {\n\t\t\tvar sz = evt.size,\n\t\t\t\tmn = evt.min,\n\t\t\t\tmx = evt.max,\n\t\t\t\tex = evt.each || init;\n\n\t\t\t// Check match against rules\n\t\t\treturn (! sz && ! mn && ! mx) ||\n\t\t\t\t(sz && sz === size) ||\n\t\t\t\t(mn && size >= mn && (ex || current < mn) && (! mx || size <= mx)) ||\n\t\t\t\t(mx && size <= mx && (ex || current > mx) && (! mn || size >= mn));\n\t\t};\n\n\tW.screen = {\n\t\t/**\n\t\t * Retrieve bound mappings\n\t\t *\n\t\t * @param {string} namespace\n\t\t * @returns {*}\n\t\t */\n\t\tbound: function(namespace) {\n\t\t\tif (! namespace) {\n\t\t\t\treturn events;\n\t\t\t}\n\n\t\t\treturn events.filter(function(obj) {\n\t\t\t\treturn obj.namespace === namespace;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get current breakpoint value\n\t\t *\n\t\t * @returns {number} size\n\t\t */\n\t\tsize: function() {\n\t\t\treturn parseFloat(\n\t\t\t\tgetComputedStyle(W._html, null)\n\t\t\t\t\t.getPropertyValue('font-family')\n\t\t\t\t\t.replace(/[^0-9\\.]+/g, '')\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Map conditional events to breakpoint values\n\t\t *\n\t\t * @param {(Array|object)} rules - breakpoint rules\n\t\t * @param {Array} [rules.args] - callback arguments\n\t\t * @param {function} rules.callback\n\t\t * @param {boolean} [rules.each=false] - execute for each matching breakpoint\n\t\t * @param {boolean} [rules.init=true] - check event on load\n\t\t * @param {int} [rules.max] - maximum breakpoint value\n\t\t * @param {int} [rules.min] - minimum breakpoint value\n\t\t * @param {string} [rules.namespace] - namespace the event\n\t\t * @param {boolean} [rules.once=false] - only execute the callback once\n\t\t * @param {object} [rules.scope] - callback scope\n\t\t * @param {int} [rules.size] - specific breakpoint value\n\t\t * @param {boolean} [rules.watch=true] - check event on screen resize\n\t\t */\n\t\tmap: function(rules) {\n\t\t\tvar sets = W.$toArray(rules),\n\t\t\t\ti = sets.length;\n\n\t\t\twhile (i--) {\n\t\t\t\t_addRule(sets[i]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Evaluate the current breakpoint\n\t\t */\n\t\trun: function(namespace) {\n\t\t\t_run(true, null, namespace);\n\t\t},\n\n\t\t/**\n\t\t * Remove events from bound rules\n\t\t *\n\t\t * @param {string} [namespace] - remove screen events in this namespace\n\t\t */\n\t\treset: function(namespace) {\n\t\t\tevents = events.filter(function(obj) {\n\t\t\t\treturn obj.namespace !== namespace;\n\t\t\t});\n\t\t}\n\t};\n})(Wee);","(function(W, E) {\n\t'use strict';\n\n\tvar events = [\n\t\t['swipeLeft', 'X', 'Y', 1],\n\t\t['swipeRight', 'X', 'Y',-1],\n\t\t['swipeUp', 'Y', 'X', 1],\n\t\t['swipeDown', 'Y','X', -1]\n\t];\n\n\t/**\n\t * Loop through custom events and bind applicable standard events\n\t */\n\tevents.forEach(function(event) {\n\t\tvar ns = event[0],\n\t\t\tstart = 'mousedown.' + ns + ' touchstart.' + ns,\n\t\t\tend = 'mouseup.' + ns + ' touchend.' + ns;\n\n\t\tE.addEvent(ns, function(el, fn, conf) {\n\t\t\tvar scope = this,\n\t\t\t\tdistance = conf.distance || 50,\n\t\t\t\tmovement = conf.movement || 25;\n\n\t\t\tE.on(el, start, function(e) {\n\t\t\t\tvar a = e.touches ? e.touches[0] : e;\n\t\t\t\tscope.start = a['page' + event[1]];\n\t\t\t\tscope.scroll = W._win['page' + event[2] + 'Offset'];\n\t\t\t}, conf);\n\n\t\t\tE.on(el, end, function(e, el) {\n\t\t\t\tvar a = e.changedTouches ? e.changedTouches[0] : e,\n\t\t\t\t\ttravel = (scope.start - a['page' + event[1]]) * event[3],\n\t\t\t\t\tscroll = Math.abs(scope.scroll - W._win['page' + event[2] + 'Offset']);\n\n\t\t\t\tif (travel > distance && scroll < movement) {\n\t\t\t\t\tfn.apply(conf.scope || el, W._slice.call(arguments));\n\t\t\t\t}\n\t\t\t}, conf);\n\t\t}, function(el, fn) {\n\t\t\tE.off(el, start + ' ' + end, fn);\n\t\t});\n\t});\n})(Wee, Wee.events);","/* jshint maxdepth: 5, maxparams: 6 */\n\n(function(W, U) {\n\t'use strict';\n\n\tvar reg = {\n\t\t\targs: /(\\\\?['\"][^'\"]+\\\\?['\"]|[^,]+)/g,\n\t\t\text: /(.[^\\(]+)(?:\\((.*)\\))?/,\n\t\t\tpair: /{{#(\\S+?)(?:\\|(.+?))?}}([\\s\\S]+?){{\\/\\1}}/g,\n\t\t\tpartial: /{{\\s*>(.+?)}}/g,\n\t\t\tshort: /{{([^}]+) +\\? ([^}]+)}}/g,\n\t\t\tsingle: /{{(.+?)}}/g,\n\t\t\tstr: /^\\\\?(\"|')/,\n\t\t\ttags: /{{\\s*(?:([#\\/])([^#{\\|\\n\\s]+)\\s*(\\|[^{\\n]+)?|else)\\s*}}/g\n\t\t},\n\t\thelpers = {\n\t\t\tis: function(a, b) {\n\t\t\t\treturn a === (b !== U ? b : this.val);\n\t\t\t},\n\t\t\tnot: function(a, b) {\n\t\t\t\treturn ! helpers.is.call(this, a, b);\n\t\t\t},\n\t\t\tisEmpty: function(val) {\n\t\t\t\treturn val !== U ? _isEmpty(val) : this.empty;\n\t\t\t},\n\t\t\tnotEmpty: function(val) {\n\t\t\t\treturn ! helpers.isEmpty.call(this, val);\n\t\t\t}\n\t\t},\n\t\tviews = {},\n\t\tesc,\n\n\t\t/**\n\t\t * Determine if value matches empty criteria\n\t\t *\n\t\t * @private\n\t\t * @param {*} val\n\t\t * @returns {boolean}\n\t\t */\n\t\t_isEmpty = function(val) {\n\t\t\treturn val === '' || val === false || val == null ||\n\t\t\t\t(typeof val == 'object' && ! Object.keys(val).length);\n\t\t},\n\n\t\t/**\n\t\t * Make recursive partial replacements\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @returns {string}\n\t\t */\n\t\t_embed = function(temp) {\n\t\t\ttemp = temp.replace(reg.partial, function(m, tag) {\n\t\t\t\treturn views[tag.trim()] || '';\n\t\t\t});\n\n\t\t\tif (reg.partial.test(temp)) {\n\t\t\t\ttemp = _embed(temp);\n\t\t\t}\n\n\t\t\treturn temp;\n\t\t},\n\n\t\t/**\n\t\t * Get specific object value\n\t\t *\n\t\t * @private\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {string} key\n\t\t * @param {string} fb\n\t\t * @param {object} init\n\t\t * @returns {*}\n\t\t */\n\t\t_get = function(data, prev, key, fb, init) {\n\t\t\tkey = key.trim();\n\n\t\t\t// Alter context\n\t\t\tif (key.substr(0, 6) == '$root.') {\n\t\t\t\tkey = key.substr(6);\n\t\t\t\tdata = init;\n\t\t\t} else if (key.substr(0, 3) == '../') {\n\t\t\t\tkey = key.substr(3);\n\t\t\t\tdata = prev;\n\t\t\t}\n\n\t\t\tvar segs = key == '.' ? ['.'] : key.split('.'),\n\t\t\t\torig = data,\n\t\t\t\tlen = segs.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\t// Loop through object segments\n\t\t\tfor (; i <= len; i++) {\n\t\t\t\tkey = segs[i];\n\n\t\t\t\tif (data && data.hasOwnProperty(key)) {\n\t\t\t\t\tdata = data[key];\n\n\t\t\t\t\t// Return value on last segment\n\t\t\t\t\tif (i === len) {\n\t\t\t\t\t\tif (! _isEmpty(data)) {\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (key == '.') {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Process fallback value\n\t\t\tif (fb && fb !== '') {\n\t\t\t\treturn _string(fb) || _get(orig, prev, fb, '', init);\n\t\t\t}\n\n\t\t\treturn fb || (W.$isObject(data) || W.$isArray(data) ? data[key] : data);\n\t\t},\n\n\t\t/**\n\t\t * Process value based on quote enclosure\n\t\t *\n\t\t * @private\n\t\t * @param {string} val\n\t\t * @param {boolean} [wrap=false]\n\t\t * @returns {string}\n\t\t */\n\t\t_string = function(val, wrap) {\n\t\t\tval = val.trim();\n\t\t\tvar match = val.match(reg.str);\n\n\t\t\tif (match) {\n\t\t\t\treturn val.replace(reg.str, '')\n\t\t\t\t\t.replace(new RegExp(match[0] + '$'), '');\n\t\t\t}\n\n\t\t\tif (wrap) {\n\t\t\t\treturn '{{' + val + '}}';\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Parse helper arguments\n\t\t *\n\t\t * @private\n\t\t * @param {string} str\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {object} init\n\t\t * @returns {*}\n\t\t */\n\t\t_parseArgs = function(str, data, prev, init) {\n\t\t\tvar args = str !== U ? str.match(reg.args) || [] : [];\n\n\t\t\treturn args.map(function(arg) {\n\t\t\t\targ = arg.trim();\n\t\t\t\tvar match = arg.match(reg.str);\n\n\t\t\t\tif (match) {\n\t\t\t\t\treturn arg.replace(reg.str, '')\n\t\t\t\t\t\t.replace(new RegExp(match[0] + '$'), '');\n\t\t\t\t}\n\n\t\t\t\targ = W._castString(arg);\n\n\t\t\t\treturn typeof arg == 'string' ?\n\t\t\t\t\t_get(data, prev, arg, '', init) :\n\t\t\t\t\targ;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Parse template string\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {object} init\n\t\t * @param {int} index\n\t\t * @returns {string}\n\t\t */\n\t\t_parse = function(temp, data, prev, init, index) {\n\t\t\treturn temp.replace(reg.pair, function(m, t, helper, inner) {\n\t\t\t\t// Return escaped template tag pairs\n\t\t\t\tif (t == '!') {\n\t\t\t\t\tesc = true;\n\t\t\t\t\treturn inner.replace(/{{/g, '{~');\n\t\t\t\t}\n\n\t\t\t\tvar tag = t.replace(/%\\d+/, ''),\n\t\t\t\t\tcond = inner.split('{{:' + t + '}}');\n\t\t\t\tinner = cond[0];\n\n\t\t\t\tvar val = _get(data, prev, tag, U, init),\n\t\t\t\t\tempty = _isEmpty(val),\n\t\t\t\t\thelp = [],\n\t\t\t\t\teach;\n\n\t\t\t\t// Parse helpers\n\t\t\t\tif (helper || empty) {\n\t\t\t\t\tvar meth = helper ? helper.split('|') : [],\n\t\t\t\t\t\tsec = cond.length > 1 ? cond[1] : '',\n\t\t\t\t\t\tagg = [];\n\n\t\t\t\t\t// Check for root helpers\n\t\t\t\t\tif (empty) {\n\t\t\t\t\t\tvar arg = meth[0] && meth[0][0] == '(';\n\t\t\t\t\t\tmeth.unshift(tag + (arg ? meth[0] : '()'));\n\n\t\t\t\t\t\tif (arg) {\n\t\t\t\t\t\t\tmeth.splice(1, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Capture available aggregates and helpers\n\t\t\t\t\tmeth.forEach(function(el) {\n\t\t\t\t\t\tvar arr = el.match(reg.ext),\n\t\t\t\t\t\t\tname = arr[1].trim();\n\n\t\t\t\t\t\t// Check for each helper\n\t\t\t\t\t\tif (name == 'each') {\n\t\t\t\t\t\t\teach = true;\n\t\t\t\t\t\t} else if (helpers[name]) {\n\t\t\t\t\t\t\tel = [helpers[name], arr[2]];\n\t\t\t\t\t\t\teach ? help.push(el) : agg.push(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Process aggregates\n\t\t\t\t\tif (agg.length) {\n\t\t\t\t\t\tif (! agg.every(function(f) {\n\t\t\t\t\t\t\tvar rv = f[0].apply({\n\t\t\t\t\t\t\t\tval: val,\n\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\tempty: empty,\n\t\t\t\t\t\t\t\tindex: index\n\t\t\t\t\t\t\t}, _parseArgs(f[1], val, prev, init));\n\n\t\t\t\t\t\t\tif (rv === false) {\n\t\t\t\t\t\t\t\treturn rv;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (rv !== true) {\n\t\t\t\t\t\t\t\tval = rv;\n\t\t\t\t\t\t\t\tempty = _isEmpty(val);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t})) {\n\t\t\t\t\t\t\treturn _parse(sec, data, prev, init, index);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (empty) {\n\t\t\t\t\t\treturn _parse(sec, data, prev, init, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process parent context on reserved tag pairs, excluding $root\n\t\t\t\tif (tag[0] == '$' && tag[1] != 'r') {\n\t\t\t\t\tval = data;\n\t\t\t\t}\n\n\t\t\t\tvar isObject = typeof val == 'object';\n\n\t\t\t\tif (! each) {\n\t\t\t\t\tif (! isObject) {\n\t\t\t\t\t\tval = W.$extend({}, data, {\n\t\t\t\t\t\t\t'.': val,\n\t\t\t\t\t\t\t'#': 0,\n\t\t\t\t\t\t\t'##': 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _parse(inner, val, data, init, index);\n\t\t\t\t}\n\n\t\t\t\tif (! empty) {\n\t\t\t\t\t// Loop through objects and arrays\n\t\t\t\t\tif (isObject) {\n\t\t\t\t\t\tvar isPlainObject = W.$isObject(val),\n\t\t\t\t\t\t\tkeys = Object.keys(val),\n\t\t\t\t\t\t\ttotal = keys.length,\n\t\t\t\t\t\t\tresp = '',\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\tfor (; i < total; i++) {\n\t\t\t\t\t\t\tvar key = keys[i],\n\t\t\t\t\t\t\t\tel = val[key];\n\t\t\t\t\t\t\tempty = _isEmpty(el);\n\n\t\t\t\t\t\t\tvar cont = help.every(function(f) {\n\t\t\t\t\t\t\t\tvar rv = f[0].apply({\n\t\t\t\t\t\t\t\t\tval: el,\n\t\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\t\tempty: empty,\n\t\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t\t}, _parseArgs(f[1], el, prev, init));\n\n\t\t\t\t\t\t\t\tif (rv === false) {\n\t\t\t\t\t\t\t\t\treturn rv;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (rv !== true) {\n\t\t\t\t\t\t\t\t\tel = rv;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Merge default properties\n\t\t\t\t\t\t\tvar item = W.$extend({}, W.$isObject(el) ?\n\t\t\t\t\t\t\t\t\tel :\n\t\t\t\t\t\t\t\t\t(isPlainObject ? val : {}),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$key: key,\n\t\t\t\t\t\t\t\t\t$first: ! i,\n\t\t\t\t\t\t\t\t\t$last: i + 1 == total,\n\t\t\t\t\t\t\t\t\t'.': el,\n\t\t\t\t\t\t\t\t\t'#': i,\n\t\t\t\t\t\t\t\t\t'##': i + 1\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\thl = helper.length;\n\n\t\t\t\t\t\t\tcont = (hl && cont) || (! hl && ! empty);\n\n\t\t\t\t\t\t\tif (cont || sec) {\n\t\t\t\t\t\t\t\tresp += _parse(cont ? inner : sec, item, data, init, i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn resp;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inner;\n\t\t\t\t}\n\t\t\t}).replace(reg.single, function(m, set) {\n\t\t\t\tvar split = set.split('||'),\n\t\t\t\t\tfb = split[1],\n\t\t\t\t\tsegs = split[0].split('|'),\n\t\t\t\t\ttag = segs[0].trim(),\n\t\t\t\t\tval = _get(data, prev, tag, fb, init),\n\t\t\t\t\thelps = segs.length > 1 ? segs.slice(1) : segs;\n\n\t\t\t\t// Process helpers\n\t\t\t\thelps.forEach(function(el, i) {\n\t\t\t\t\tvar arr = el.match(reg.ext);\n\t\t\t\t\thelps[i] = el.trim();\n\n\t\t\t\t\tif (arr) {\n\t\t\t\t\t\tvar helper = helpers[arr[1].trim()];\n\n\t\t\t\t\t\tif (helper && (segs.length > 1 ||\n\t\t\t\t\t\t\t! data.hasOwnProperty(tag))) {\n\t\t\t\t\t\t\tval = helper.apply({\n\t\t\t\t\t\t\t\tval: val,\n\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\tfallback: fb\n\t\t\t\t\t\t\t}, _parseArgs(arr[2], data, prev, init));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Encode output by default\n\t\t\t\tif (val === U || typeof val == 'object') {\n\t\t\t\t\tval = '';\n\t\t\t\t} else if (typeof val == 'string') {\n\t\t\t\t\t// Recursively process injected tags\n\t\t\t\t\tif (val.indexOf('{{') > -1) {\n\t\t\t\t\t\tval = _render(val, data);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode HTML characters\n\t\t\t\t\tif (helps.indexOf('raw') < 0) {\n\t\t\t\t\t\tval = val.replace(/&/g, '&')\n\t\t\t\t\t\t\t.replace(/&/g, '&')\n\t\t\t\t\t\t\t.replace(//g, '>')\n\t\t\t\t\t\t\t.replace(/\"/g, '"');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn val;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Render template string\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @param {object} data\n\t\t * @returns {string}\n\t\t */\n\t\t_render = function(temp, data) {\n\t\t\tvar tags = [],\n\t\t\t\tdepth = [];\n\n\t\t\t// Make partial replacements\n\t\t\ttemp = _embed(temp);\n\n\t\t\t// Match tag pairs\n\t\t\ttemp = temp.replace(reg.short, function(m, cond, val) {\n\t\t\t\tcond = cond.trim() + '}}';\n\t\t\t\tvar segs = val.split(' : '),\n\t\t\t\t\tresp = '{{#' + cond + _string(segs[0], true);\n\n\t\t\t\tif (segs.length > 1) {\n\t\t\t\t\tresp += '{{else}}' + _string(segs[1], true);\n\t\t\t\t}\n\n\t\t\t\treturn resp + '{{/' + cond;\n\t\t\t}).replace(reg.tags, function(m, pre, tag, helper) {\n\t\t\t\tvar resp = '{{';\n\n\t\t\t\tif (tag == '!') {\n\t\t\t\t\tesc = pre == '#';\n\t\t\t\t\tresp += pre + tag;\n\t\t\t\t} else if (esc) {\n\t\t\t\t\treturn m;\n\t\t\t\t} else if (pre) {\n\t\t\t\t\tvar segs = tag.split('('),\n\t\t\t\t\t\troot = segs[0],\n\t\t\t\t\t\texists = tags.hasOwnProperty(tag);\n\t\t\t\t\tresp += pre + root + '%';\n\n\t\t\t\t\tif (pre == '#') {\n\t\t\t\t\t\tdepth.push(root);\n\n\t\t\t\t\t\tif (exists) {\n\t\t\t\t\t\t\ttags[root].i++;\n\t\t\t\t\t\t\ttags[root].o.push(tags[root].i);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[root] = {\n\t\t\t\t\t\t\t\ti: 1,\n\t\t\t\t\t\t\t\to: [1]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (segs.length > 1) {\n\t\t\t\t\t\t\thelper = '(' + segs.slice(1).join('(');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresp += tags[root].i + (helper || '');\n\t\t\t\t\t} else if (exists) {\n\t\t\t\t\t\tresp += tags[root].o.pop();\n\t\t\t\t\t\ttags[root].i--;\n\t\t\t\t\t\tdepth.pop();\n\t\t\t\t\t}\n\t\t\t\t} else if (depth.length) {\n\t\t\t\t\ttag = depth.slice(-1)[0];\n\t\t\t\t\tresp += ':' + tag + '%' + tags[tag].i;\n\t\t\t\t}\n\n\t\t\t\treturn resp + '}}';\n\t\t\t});\n\n\t\t\t// Parse template tags\n\t\t\treturn _parse(temp, data, {}, data, 0);\n\t\t};\n\n\tW.app = {\n\t\t/**\n\t\t * Application instance storage\n\t\t */\n\t\tfn: {},\n\n\t\t/**\n\t\t * Create an application\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {object} options\n\t\t * @param {object} options.model\n\t\t * @param {($|HTMLElement|string)} [options.target]\n\t\t * @param {($|HTMLElement|string)} options.view\n\t\t *\n\t\t */\n\t\tmake: function(name, options) {\n\t\t\tvar sel = options.view,\n\t\t\t\ttarg = options.target,\n\t\t\t\tmodel = options.model || {},\n\t\t\t\tviews = W.$(targ || sel).map(function(el) {\n\t\t\t\t\treturn [el, targ ? sel : el.outerHTML];\n\t\t\t\t}),\n\t\t\t\tfn = function(data) {\n\t\t\t\t\tviews.forEach(function(view) {\n\t\t\t\t\t\tW.$setRef(\n\t\t\t\t\t\t\tW.view.diff(view[0], W.$parseHTML(\n\t\t\t\t\t\t\t\tW.view.render(view[1], data)\n\t\t\t\t\t\t\t), targ)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tapp = W.app;\n\n\t\t\t// Create a new application controller\n\t\t\tapp.fn[name] = W._make(name, {}, {}, false, model);\n\t\t\tapp[name] = new app.fn[name]();\n\n\t\t\tfn(model);\n\n\t\t\tW.$extend(app[name], {\n\t\t\t\t/**\n\t\t\t\t * Destroy current application\n\t\t\t\t */\n\t\t\t\t$destroy: function() {\n\t\t\t\t\tif (options._destruct) {\n\t\t\t\t\t\toptions._destruct();\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete app[name];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Pause view updating\n\t\t\t\t */\n\t\t\t\t$pause: function() {\n\t\t\t\t\tapp[name].$unobserve('*');\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Resume view updating\n\t\t\t\t *\n\t\t\t\t * @param {boolean} [update=false]\n\t\t\t\t */\n\t\t\t\t$resume: function(update) {\n\t\t\t\t\tapp[name].$observe('*', fn);\n\n\t\t\t\t\tif (update) {\n\t\t\t\t\t\tfn(app[name].$get());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Initialize app observation\n\t\t\tapp[name].$resume();\n\n\t\t\treturn app[name];\n\t\t}\n\t};\n\n\tW.view = {\n\t\t/**\n\t\t * Parse data into template string\n\t\t *\n\t\t * @param {string} template\n\t\t * @param {object} [data]\n\t\t * @returns {string}\n\t\t */\n\t\trender: function(template, data) {\n\t\t\tesc = false;\n\t\t\ttemplate = _render(views[template] || template, W.$extend(data));\n\n\t\t\treturn esc ?\n\t\t\t\ttemplate.replace(/{~/g, '{{') :\n\t\t\t\ttemplate;\n\t\t},\n\n\t\t/**\n\t\t * Add conditional template handler or tag data modifier\n\t\t *\n\t\t * @param {object|string} name\n\t\t * @param {function} [fn]\n\t\t */\n\t\taddHelper: function(name, fn) {\n\t\t\tW._extend(helpers, name, fn);\n\t\t},\n\n\t\t/**\n\t\t * Check for the existence of a named helper\n\t\t *\n\t\t * @param {string} name\n\t\t * @returns {boolean}\n\t\t */\n\t\thasHelper: function(name) {\n\t\t\treturn typeof helpers[name] !== 'undefined';\n\t\t},\n\n\t\t/**\n\t\t * Add views to store for on-demand reference\n\t\t *\n\t\t * @param {object|string} name\n\t\t * @param {string} [value]\n\t\t */\n\t\taddView: function(name, value) {\n\t\t\tW._extend(views, name, value);\n\t\t}\n\t};\n})(Wee, undefined);","/**\n * Copyright (c) 2016, Patrick Steele-Idem\n * https://github.com/patrick-steele-idem/morphdom\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/* jshint maxdepth: 8 */\n\n(function(W, D) {\n\tvar specialElHandlers = {\n\t\t/**\n\t\t * Needed for IE. Apparently IE doesn't think\n\t\t * that \"selected\" is an attribute when reading\n\t\t * over the attributes using selectEl.attributes\n\t\t */\n\t\tOPTION: function(fromEl, toEl) {\n\t\t\tif (fromEl.selected == toEl.selected) {\n\t\t\t\tfromEl.setAttribute('selected', '');\n\t\t\t} else {\n\t\t\t\tfromEl.removeAttribute('selected');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The \"value\" attribute is special for the element\n\t\t * since it sets the initial value. Changing the \"value\"\n\t\t * attribute without changing the \"value\" property will have\n\t\t * no effect since it is only used to the set the initial value.\n\t\t * Similar for the \"checked\" attribute.\n\t\t */\n\t\tINPUT: function(fromEl, toEl) {\n\t\t\tfromEl.checked = toEl.checked;\n\n\t\t\tif (fromEl.value != toEl.value) {\n\t\t\t\tfromEl.value = toEl.value;\n\t\t\t}\n\n\t\t\tif (! toEl.hasAttribute('checked')) {\n\t\t\t\tfromEl.removeAttribute('checked');\n\t\t\t}\n\n\t\t\tif (! toEl.hasAttribute('value')) {\n\t\t\t\tfromEl.removeAttribute('value');\n\t\t\t}\n\t\t},\n\n\t\tTEXTAREA: function(fromEl, toEl) {\n\t\t\tvar newValue = toEl.value;\n\n\t\t\tif (fromEl.value != newValue) {\n\t\t\t\tfromEl.value = newValue;\n\n\t\t\t\tif (fromEl.firstChild) {\n\t\t\t\t\tfromEl.firstChild.nodeValue = newValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Loop over all of the attributes on the target node and make sure the\n\t * original DOM node has the same attributes. If an attribute\n\t * found on the original node is not on the new node then remove it from\n\t * the original node\n\t *\n\t * @private\n\t * @param {HTMLElement} fromNode\n\t * @param {HTMLElement} toNode\n\t */\n\t_morphAttrs = function(fromNode, toNode) {\n\t\tvar attrs = toNode.attributes,\n\t\t\ti = attrs.length - 1,\n\t\t\tattr,\n\t\t\tattrName,\n\t\t\tattrValue;\n\n\t\tfor (; i >= 0; i--) {\n\t\t\tattr = attrs[i];\n\t\t\tattrName = attr.name;\n\t\t\tattrValue = attr.value;\n\n\t\t\tif (fromNode.getAttribute(attrName) !== attrValue) {\n\t\t\t\tfromNode.setAttribute(attrName, attrValue);\n\t\t\t}\n\t\t}\n\n\t\t// Delete any extra attributes found on the original DOM element\n\t\t// that weren't found on the target element\n\t\tattrs = fromNode.attributes;\n\n\t\tfor (i = attrs.length - 1; i >= 0; i--) {\n\t\t\tattr = attrs[i];\n\n\t\t\tif (attr.specified && ! toNode.hasAttribute(attr.name)) {\n\t\t\t\tfromNode.removeAttributeNode(attr);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Copies the children of one DOM element to another\n\t *\n\t * @private\n\t * @param {HTMLElement} fromEl\n\t * @param {HTMLElement} toEl\n\t * @returns {HTMLElement}\n\t */\n\t_moveChildren = function(fromEl, toEl) {\n\t\tvar curChild = fromEl.firstChild;\n\n\t\twhile (curChild) {\n\t\t\tvar nextChild = curChild.nextSibling;\n\n\t\t\ttoEl.appendChild(curChild);\n\n\t\t\tcurChild = nextChild;\n\t\t}\n\n\t\treturn toEl;\n\t};\n\n\tW.view.diff = function(fromNode, toNode, replace) {\n\t\t// Used to store DOM elements with IDs\n\t\tvar savedEls = {},\n\t\t\tunmatchedEls = {},\n\n\t\t\t/**\n\t\t\t * @param {HTMLElement} node\n\t\t\t * @param {boolean} nestedInSavedEl\n\t\t\t */\n\t\t\tremoveNodeHelper = function(node, nestedInSavedEl) {\n\t\t\t\tvar id = node.id;\n\n\t\t\t\t// If the node has an ID store it for reuse in case the target\n\t\t\t\t// DOM tree has a DOM element with the same ID\n\t\t\t\tif (id) {\n\t\t\t\t\tsavedEls[id] = node;\n\t\t\t\t}\n\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tvar curChild = node.firstChild;\n\n\t\t\t\t\twhile (curChild) {\n\t\t\t\t\t\tremoveNodeHelper(curChild, nestedInSavedEl || id);\n\n\t\t\t\t\t\tcurChild = curChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {HTMLElement} node\n\t\t\t */\n\t\t\twalkDiscardedChildNodes = function(node) {\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tvar curChild = node.firstChild;\n\n\t\t\t\t\twhile (curChild) {\n\t\t\t\t\t\tif (! curChild.id) {\n\t\t\t\t\t\t\twalkDiscardedChildNodes(curChild);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurChild = curChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {HTMLElement} node\n\t\t\t * @param {HTMLElement} parentNode\n\t\t\t * @param {boolean} alreadyVisited\n\t\t\t */\n\t\t\tremoveNode = function(node, parentNode, alreadyVisited) {\n\t\t\t\tparentNode.removeChild(node);\n\n\t\t\t\tif (alreadyVisited) {\n\t\t\t\t\tif (! node.id) {\n\t\t\t\t\t\twalkDiscardedChildNodes(node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremoveNodeHelper(node);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @param {HTMLElement} fromEl\n\t\t\t * @param {HTMLElement} toEl\n\t\t\t * @param {boolean} alreadyVisited\n\t\t\t */\n\t\t\tmorphEl = function(fromEl, toEl, alreadyVisited) {\n\t\t\t\tif (toEl.id) {\n\t\t\t\t\t// If an element with an ID morphed then it will be in the\n\t\t\t\t\t// final DOM so clear it out of the elements collection\n\t\t\t\t\tdelete savedEls[toEl.id];\n\t\t\t\t}\n\n\t\t\t\t// Don't process elements specifically excluded\n\t\t\t\tif (fromEl.hasAttribute('data-ignore')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_morphAttrs(fromEl, toEl);\n\n\t\t\t\tif (fromEl.tagName != 'TEXTAREA') {\n\t\t\t\t\tvar curToNodeChild = toEl.firstChild,\n\t\t\t\t\t\tcurFromNodeChild = fromEl.firstChild,\n\t\t\t\t\t\tcurToNodeId,\n\t\t\t\t\t\tfromNextSibling,\n\t\t\t\t\t\ttoNextSibling,\n\t\t\t\t\t\tsavedEl,\n\t\t\t\t\t\tunmatchedEl;\n\n\t\t\t\t\touter: while (curToNodeChild) {\n\t\t\t\t\t\ttoNextSibling = curToNodeChild.nextSibling;\n\t\t\t\t\t\tcurToNodeId = curToNodeChild.id;\n\n\t\t\t\t\t\twhile (curFromNodeChild) {\n\t\t\t\t\t\t\tvar curFromNodeId = curFromNodeChild.id;\n\t\t\t\t\t\t\tfromNextSibling = curFromNodeChild.nextSibling;\n\n\t\t\t\t\t\t\tif (! alreadyVisited) {\n\t\t\t\t\t\t\t\tif (curFromNodeId && (unmatchedEl = unmatchedEls[curFromNodeId])) {\n\t\t\t\t\t\t\t\t\tunmatchedEl.parentNode.replaceChild(curFromNodeChild, unmatchedEl);\n\t\t\t\t\t\t\t\t\tmorphEl(curFromNodeChild, unmatchedEl, alreadyVisited);\n\n\t\t\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\n\t\t\t\t\t\t\t\t\tcontinue;\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\tvar curFromNodeType = curFromNodeChild.nodeType;\n\n\t\t\t\t\t\t\tif (curFromNodeType === curToNodeChild.nodeType) {\n\t\t\t\t\t\t\t\tvar isCompatible = false;\n\n\t\t\t\t\t\t\t\tif (curFromNodeType === 1) {\n\t\t\t\t\t\t\t\t\t// Both nodes being compared are Element nodes\n\t\t\t\t\t\t\t\t\tif (curFromNodeChild.tagName === curToNodeChild.tagName) {\n\t\t\t\t\t\t\t\t\t\t// We have compatible DOM elements\n\t\t\t\t\t\t\t\t\t\tif (curFromNodeId || curToNodeId) {\n\t\t\t\t\t\t\t\t\t\t\t// If either DOM element has an ID\n\t\t\t\t\t\t\t\t\t\t\t// then we handle those differently\n\t\t\t\t\t\t\t\t\t\t\t// since we want to match up by ID\n\t\t\t\t\t\t\t\t\t\t\tif (curToNodeId === curFromNodeId) {\n\t\t\t\t\t\t\t\t\t\t\t\tisCompatible = true;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tisCompatible = true;\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\tif (isCompatible) {\n\t\t\t\t\t\t\t\t\t\t// We found compatible DOM elements so\n\t\t\t\t\t\t\t\t\t\t// transform the current \"from\" node\n\t\t\t\t\t\t\t\t\t\t// to match the current target DOM node\n\t\t\t\t\t\t\t\t\t\tmorphEl(curFromNodeChild, curToNodeChild, alreadyVisited);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (curFromNodeType === 3) {\n\t\t\t\t\t\t\t\t\t// Both nodes being compared are Text nodes\n\t\t\t\t\t\t\t\t\tisCompatible = true;\n\t\t\t\t\t\t\t\t\t// Simply update nodeValue on the original\n\t\t\t\t\t\t\t\t\t// node to change the text value\n\t\t\t\t\t\t\t\t\tcurFromNodeChild.nodeValue = curToNodeChild.nodeValue;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isCompatible) {\n\t\t\t\t\t\t\t\t\tcurToNodeChild = toNextSibling;\n\t\t\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\n\t\t\t\t\t\t\t\t\tcontinue outer;\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// No compatible match so remove the old node from\n\t\t\t\t\t\t\t// the DOM and continue trying to find a match in\n\t\t\t\t\t\t\t// the original DOM\n\t\t\t\t\t\t\tremoveNode(curFromNodeChild, fromEl, alreadyVisited);\n\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (curToNodeId) {\n\t\t\t\t\t\t\tif ((savedEl = savedEls[curToNodeId])) {\n\t\t\t\t\t\t\t\tmorphEl(savedEl, curToNodeChild, true);\n\t\t\t\t\t\t\t\tcurToNodeChild = savedEl;\n\t\t\t\t\t\t\t\t// We want to append the saved element instead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// The current DOM element in the target tree has an ID\n\t\t\t\t\t\t\t\t// but we did not find a match in any of the corresponding\n\t\t\t\t\t\t\t\t// siblings. We just put the target element in the old DOM tree\n\t\t\t\t\t\t\t\t// but if we later find an element in the old DOM tree that has\n\t\t\t\t\t\t\t\t// a matching ID then we will replace the target element\n\t\t\t\t\t\t\t\t// with the corresponding old element and morph the old element\n\t\t\t\t\t\t\t\tunmatchedEls[curToNodeId] = curToNodeChild;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we got this far then we did not find a candidate match for our \"to node\"\n\t\t\t\t\t\t// and we exhausted all of the children \"from\" nodes. Therefore, we will just\n\t\t\t\t\t\t// append the current \"to node\" to the end\n\t\t\t\t\t\tfromEl.appendChild(curToNodeChild);\n\n\t\t\t\t\t\tcurToNodeChild = toNextSibling;\n\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We have processed all of the \"to nodes\". If\n\t\t\t\t\t// curFromNodeChild is non-null then we still have some from\n\t\t\t\t\t// nodes left over that need to be removed\n\t\t\t\t\twhile (curFromNodeChild) {\n\t\t\t\t\t\tfromNextSibling = curFromNodeChild.nextSibling;\n\t\t\t\t\t\tremoveNode(curFromNodeChild, fromEl, alreadyVisited);\n\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar specialElHandler = specialElHandlers[fromEl.tagName];\n\n\t\t\t\tif (specialElHandler) {\n\t\t\t\t\tspecialElHandler(fromEl, toEl);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmorphedNode = fromNode;\n\n\t\tif (replace) {\n\t\t\tvar el = fromNode.cloneNode(false);\n\n\t\t\t// Place fragment in container\n\t\t\tel.appendChild(toNode);\n\t\t\ttoNode = el;\n\t\t} else {\n\t\t\ttoNode = toNode.firstChild;\n\t\t}\n\n\t\tif (fromNode.tagName !== toNode.tagName) {\n\t\t\tmorphedNode = _moveChildren(fromNode, D.createElement(toNode.tagName));\n\t\t}\n\n\t\tif (morphedNode !== toNode) {\n\t\t\tmorphEl(morphedNode, toNode, false);\n\n\t\t\tfor (var savedElId in savedEls) {\n\t\t\t\tif (savedEls.hasOwnProperty(savedElId)) {\n\t\t\t\t\tvar savedEl = savedEls[savedElId];\n\t\t\t\t\twalkDiscardedChildNodes(savedEl);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (morphedNode !== fromNode && fromNode.parentNode) {\n\t\t\t// If we had to swap out the from node with a new node because the\n\t\t\t// old node was not compatible with the target node then we need to\n\t\t\t// replace the old DOM node in the original DOM tree. This is only\n\t\t\t// possible if the original DOM node was part of a DOM tree which\n\t\t\t// we know is the case if it has a parent node.\n\t\t\tfromNode.parentNode.replaceChild(morphedNode, fromNode);\n\t\t}\n\n\t\treturn morphedNode;\n\t};\n})(Wee, document);","(function(W, A) {\n\t'use strict';\n\n\t/**\n\t * Cast selection as Wee object\n\t *\n\t * @private\n\t * @param {($|HTMLElement|string)} sel\n\t * @param {($|HTMLElement|string)} [context=document]\n\t */\n\tvar Get = function(sel, context) {\n\t\t\tif (sel) {\n\t\t\t\tvar els = Array.isArray(sel) ?\n\t\t\t\t\t\tsel :\n\t\t\t\t\t\tW.$toArray(W.$(sel, context)),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfor (; i < els.length; i++) {\n\t\t\t\t\tvar el = els[i];\n\n\t\t\t\t\tif (el) {\n\t\t\t\t\t\tA.call(this, el);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.sel = sel;\n\t\t\t}\n\t\t},\n\t\t$;\n\n\t/**\n\t * Create chainable Wee object from selection\n\t *\n\t * @param {(HTMLElement|string)} sel\n\t * @param {object} [context=document]\n\t */\n\t$ = W._win[W._$] = function(sel, context) {\n\t\treturn new Get(sel, context);\n\t};\n\n\t// Extend core with chain registration method\n\tW.fn.extend({\n\t\t/**\n\t\t * Register a new chainable method\n\t\t *\n\t\t * @param {(object|string)} a - method name or object\n\t\t * @param {function} b\n\t\t */\n\t\t$chain: function(a, b) {\n\t\t\tif (typeof a == 'string') {\n\t\t\t\t$.fn[a] = b;\n\t\t\t} else {\n\t\t\t\tfor (var key in a) {\n\t\t\t\t\t$.fn[key] = a[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Shortcut core methods from alias\n\tfor (var key in W) {\n\t\tvar val = W[key];\n\n\t\t$[key.replace(/^\\$/, '')] = typeof val == 'function' ?\n\t\t\tval.bind(W) :\n\t\t\tval;\n\t}\n\n\t// Bind core chainable methods\n\t$.fn = Get.prototype = {\n\t\t_$: true,\n\t\tlength: 0,\n\n\t\t/**\n\t\t * Execute function for each object element\n\t\t *\n\t\t * @param fn\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {context} [options.context=document]\n\t\t * @param {bool} [options.reverse=false]\n\t\t * @param {Array} [options.scope]\n\t\t */\n\t\teach: function(fn, options) {\n\t\t\tW.$each(this, fn, options);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Translate object elements to a new array\n\t\t *\n\t\t * @param {function} fn\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {object} [options.scope]\n\t\t * @returns {Array}\n\t\t */\n\t\tmap: function(fn, options) {\n\t\t\treturn W.$map(this, fn, options);\n\t\t},\n\n\t\t/**\n\t\t * Reverse the order of object elements\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\treverse: function() {\n\t\t\tvar copy = W.$copy(this),\n\t\t\t\tx = this.length,\n\t\t\t\ttotal = x,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i < total; i++) {\n\t\t\t\tx--;\n\t\t\t\tthis[i] = copy[x];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add ref elements to datastore\n\t\t */\n\t\tsetRef: function() {\n\t\t\tW.$setRef(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add metadata variables to datastore\n\t\t */\n\t\tsetVar: function() {\n\t\t\tW.$setVar(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Convert selection to standard array\n\t\t */\n\t\ttoArray: function() {\n\t\t\treturn W._slice.call(this);\n\t\t}\n\t};\n\n\t// Map shorthand registration method\n\t$.fn.extend = W.$chain;\n})(Wee, [].push);","(function(W) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Transition an attribute or property value\n\t\t *\n\t\t * @param {object} values\n\t\t * @param {object} [options]\n\t\t * @param {(Array|function|string)} [options.complete]\n\t\t * @param {number} [options.duration=400]\n\t\t * @param {string} [options.ease='ease']\n\t\t * @returns {$} selection\n\t\t */\n\t\ttween: function(values, options) {\n\t\t\tW.animate.tween(this, values, options);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee);","(function(W, U) {\n\t'use strict';\n\n\tvar $ = W._win[W._$];\n\n\tW.$chain({\n\t\t/**\n\t\t * Append additional selection to Wee object\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tadd: function(source) {\n\t\t\tvar orig = [],\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i < this.length; i++) {\n\t\t\t\torig.push(this[i]);\n\t\t\t}\n\n\t\t\treturn $(W.$unique(orig.concat(W.$(source))));\n\t\t},\n\n\t\t/**\n\t\t * Add classes to each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {$}\n\t\t */\n\t\taddClass: function(value) {\n\t\t\tW.$addClass(this, value);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t * @returns {$}\n\t\t */\n\t\tafter: function(source, remove) {\n\t\t\tW.$after(this, source, remove);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tappend: function(source) {\n\t\t\tW.$append(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup to each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tappendTo: function(target) {\n\t\t\tW.$append(target, this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get attribute of first matching selection or set attribute\n\t\t * of each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {($|string)}\n\t\t */\n\t\tattr: function(a, b) {\n\t\t\tvar resp = W.$attr(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : resp;\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t * @returns {$}\n\t\t */\n\t\tbefore: function(source, remove) {\n\t\t\tW.$before(this, source, remove);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get unique direct children of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tchildren: function(filter) {\n\t\t\treturn $(W.$children(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Clone each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tclone: function() {\n\t\t\treturn $(W.$clone(this));\n\t\t},\n\n\t\t/**\n\t\t * Get unique closest ancestors of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param context\n\t\t * @returns {$}\n\t\t */\n\t\tclosest: function(filter, context) {\n\t\t\treturn $(W.$closest(this, filter, context));\n\t\t},\n\n\t\t/**\n\t\t * Determine if any matching parent selection contains descendant selection\n\t\t *\n\t\t * @param descendant\n\t\t * @returns {boolean}\n\t\t */\n\t\tcontains: function(descendant) {\n\t\t\treturn W.$contains(this, descendant);\n\t\t},\n\n\t\t/**\n\t\t * Get unique content of each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tcontents: function() {\n\t\t\treturn $(W.$contents(this));\n\t\t},\n\n\t\t/**\n\t\t * Get CSS value of first matching selection or set value\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {(object|string)} a\n\t\t * @param {(function|string)} [b]\n\t\t * @returns {($|string)}\n\t\t */\n\t\tcss: function(a, b) {\n\t\t\tvar r = W.$css(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get data of first matching selection or set data\n\t\t * of each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param [b]\n\t\t * @returns {($|string)}\n\t\t */\n\t\tdata: function(a, b) {\n\t\t\tvar resp = W.$data(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : resp;\n\t\t},\n\n\t\t/**\n\t\t * Remove child nodes from each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tempty: function() {\n\t\t\tW.$empty(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get indexed node of matching selection\n\t\t *\n\t\t * @param index\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {$}\n\t\t */\n\t\teq: function(index, context) {\n\t\t\treturn $(W.$eq(this, index, context));\n\t\t},\n\n\t\t/**\n\t\t * Return a filtered subset of elements from a matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {$}\n\t\t */\n\t\tfilter: function(filter, options) {\n\t\t\treturn $(W.$filter(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get unique filtered descendants from each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tfind: function(filter) {\n\t\t\treturn $(W.$find(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get the first element of a matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tfirst: function() {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\t/**\n\t\t * Return node from Wee object at specific index\n\t\t *\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\tget: function(index) {\n\t\t\treturn W.$eq(this, index);\n\t\t},\n\n\t\t/**\n\t\t * Determine if the matching selection has a class\n\t\t *\n\t\t * @param className\n\t\t * @returns {boolean}\n\t\t */\n\t\thasClass: function(className) {\n\t\t\treturn W.$hasClass(this, className);\n\t\t},\n\n\t\t/**\n\t\t * Get or set the height of each matching selection\n\t\t *\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {($|number)}\n\t\t */\n\t\theight: function(value) {\n\t\t\tvar r = W.$height(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Hide each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\thide: function() {\n\t\t\tW.$hide(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get inner HTML of first selection or set each matching selection's HTML\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\thtml: function(value) {\n\t\t\tvar r = W.$html(this, value);\n\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get the zero-based index of a matching selection relative\n\t\t * to it's siblings\n\t\t *\n\t\t * @returns {int}\n\t\t */\n\t\tindex: function() {\n\t\t\treturn W.$index(this);\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element after\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tinsertAfter: function(target) {\n\t\t\tW.$insertAfter(this, target);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element before\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tinsertBefore: function(target) {\n\t\t\tW.$insertBefore(this, target);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Determine if at least one matching selection matches\n\t\t * a specified criteria\n\t\t *\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {boolean}\n\t\t */\n\t\tis: function(filter, options) {\n\t\t\treturn W.$is(this, filter, options);\n\t\t},\n\n\t\t/**\n\t\t * Get the last element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {$}\n\t\t */\n\t\tlast: function(context) {\n\t\t\treturn $(W.$last(this, context));\n\t\t},\n\n\t\t/**\n\t\t * Get the unique next sibling of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tnext: function(filter, options) {\n\t\t\treturn $(W.$next(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Returns elements not matching the filtered selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tnot: function(filter, options) {\n\t\t\treturn $(W.$not(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get the offset position of a matching selection relative to the document\n\t\t *\n\t\t * @param {(function|number)} value\n\t\t * @returns {number}\n\t\t */\n\t\toffset: function(value) {\n\t\t\treturn W.$offset(this, value);\n\t\t},\n\n\t\t/**\n\t\t * Get outer height of matching selection\n\t\t *\n\t\t * @returns {number}\n\t\t */\n\t\touterHeight: function() {\n\t\t\treturn W.$height(this, true);\n\t\t},\n\n\t\t/**\n\t\t * Get unique parent from each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tparent: function(filter) {\n\t\t\treturn $(W.$parent(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get unique ancestors of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tparents: function(filter) {\n\t\t\treturn $(W.$parents(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get the position of the first matching selection relative\n\t\t * to its offset parent\n\t\t *\n\t\t * @returns {{top, left}}\n\t\t */\n\t\tposition: function() {\n\t\t\treturn W.$position(this);\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tprepend: function(source) {\n\t\t\tW.$prepend(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup to each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tprependTo: function(target) {\n\t\t\tW.$prepend(target, this.reverse());\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get the unique previous sibling of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tprev: function(filter, options) {\n\t\t\treturn $(W.$prev(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get property of first matching selection or set property of\n\t\t * each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {($|string)}\n\t\t */\n\t\tprop: function(a, b) {\n\t\t\tvar r = W.$prop(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Remove each matching selection from the document\n\t\t *\n\t\t * @returns {$}\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\tremove: function(context) {\n\t\t\tW.$remove(this, context);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove specified attribute of each matching selection\n\t\t *\n\t\t * @param {string} name\n\t\t * @returns {$}\n\t\t */\n\t\tremoveAttr: function(name) {\n\t\t\tW.$removeAttr(this, name);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove classes from each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {$}\n\t\t */\n\t\tremoveClass: function(value) {\n\t\t\tW.$removeClass(this, value);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Replace each matching selection with selection or markup\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\treplaceWith: function(source) {\n\t\t\tW.$replaceWith(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the X scroll position of each matching selection\n\t\t *\n\t\t * @param value\n\t\t * @returns {($|number)}\n\t\t */\n\t\tscrollLeft: function(value) {\n\t\t\tvar r = W.$scrollLeft(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the Y scroll position of each matching selection\n\t\t *\n\t\t * @param value\n\t\t * @returns {($|number)}\n\t\t */\n\t\tscrollTop: function(value) {\n\t\t\tvar r = W.$scrollTop(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Serialize input values from first matching form selection\n\t\t *\n\t\t * @param {boolean} json\n\t\t * @returns {string}\n\t\t */\n\t\tserialize: function(json) {\n\t\t\treturn W.$serializeForm(this, json);\n\t\t},\n\n\t\t/**\n\t\t * Show each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tshow: function() {\n\t\t\tW.$show(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get unique siblings of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tsiblings: function(filter) {\n\t\t\treturn $(W.$siblings(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get subset of selection matches from specified range\n\t\t *\n\t\t * @param start\n\t\t * @param end\n\t\t * @returns {$}\n\t\t */\n\t\tslice: function(start, end) {\n\t\t\treturn $(W.$slice(this, start, end));\n\t\t},\n\n\t\t/**\n\t\t * Get inner text of first selection or set each matching selection's text\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\ttext: function(value) {\n\t\t\tvar r = W.$text(this, value);\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Toggle the display of each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\ttoggle: function() {\n\t\t\tW.$toggle(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Toggle adding and removing class(es) from the specified element\n\t\t *\n\t\t * @param {(function|string)} className\n\t\t * @param {boolean} [state]\n\t\t * @returns {$}\n\t\t */\n\t\ttoggleClass: function(className, state) {\n\t\t\tW.$toggleClass(this, className, state);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get value of first matching selection or set values of\n\t\t * each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\tval: function(value) {\n\t\t\tvar r = W.$val(this, value);\n\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the width of each matching selection\n\t\t *\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {($|number)}\n\t\t */\n\t\twidth: function(value) {\n\t\t\tvar r = W.$width(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around each matching selection\n\t\t *\n\t\t * @param {(function|string)} html\n\t\t * @returns {$}\n\t\t */\n\t\twrap: function(html) {\n\t\t\tW.$wrap(this, html);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around the content of each matching selection\n\t\t *\n\t\t * @param {(function|string)} html\n\t\t * @returns {$}\n\t\t */\n\t\twrapInner: function(html) {\n\t\t\tW.$wrapInner(this, html);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee, undefined);","(function(W, E) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Bind event(s) to selection\n\t\t *\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {(function|object)} [b] - event callback or options object\n\t\t * @param {(object|string)} [c] - event options\n\t\t * @param {Array} [c.args] - callback arguments\n\t\t * @param {(HTMLElement|string)} [c.context=document]\n\t\t * @param {(HTMLElement|string)} [c.delegate]\n\t\t * @param {boolean} [c.once=false] - remove event after first execution\n\t\t * @param {object} [c.scope]\n\t\t * @returns {$} selection\n\t\t */\n\t\ton: function(a, b, c) {\n\t\t\tE.on(this, a, b, c);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove event(s) from selection\n\t\t *\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {function} [b] - specific function to remove\n\t\t * @returns {$} selection\n\t\t */\n\t\toff: function(a, b) {\n\t\t\tE.off(this, a, b);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get currently bound events to optional specified element and event|function\n\t\t *\n\t\t * @param {string} [event] - event name to match\n\t\t * @param {function} [fn] - specific function to match\n\t\t * @returns {Array} matches\n\t\t */\n\t\tbound: function(event, fn) {\n\t\t\treturn E.bound(this, event, fn);\n\t\t},\n\n\t\t/**\n\t\t * Execute bound event for each matching selection\n\t\t *\n\t\t * @param {string} name\n\t\t * @returns {$} selection\n\t\t */\n\t\ttrigger: function(name) {\n\t\t\tE.trigger(this, name);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee, Wee.events);","(function(W) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Bind element events and form submit events to PJAX\n\t\t *\n\t\t * @param {(boolean|object)} [events]\n\t\t * @param {Object} [a] - settings\n\t\t * @returns {$} selection\n\t\t */\n\t\tbind: function(events, a) {\n\t\t\tW.history.bind(events, a, this);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee);","(function(W) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Parse data into DOM selection\n\t\t *\n\t\t * @param {object} data\n\t\t * @returns {$} selection\n\t\t */\n\t\trender: function(data) {\n\t\t\tW.$each(this, function(el) {\n\t\t\t\tW.$html(el, W.view.render(W.$text(el), data));\n\t\t\t});\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee);","Wee.view.addView({\"newsletter-thank\":\"

{{ heading }}

{{ body }}

\",\"thankyou\":\"

{{ heading }}

{{ body }}

\"});","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory();\n } else {\n root.Autogrow = factory();\n }\n})(this, function(){\n return function(textarea, maxLines){\n var self = this;\n\n if(maxLines === undefined){\n maxLines = 999;\n }\n\n /**\n * Calculates the vertical padding of the element\n * @param textarea\n * @returns {number}\n */\n self.getOffset = function(textarea){\n var style = window.getComputedStyle(textarea, null),\n props = ['paddingTop', 'paddingBottom'],\n offset = 0;\n\n for(var i=0; i self.maxAllowedHeight){\n textarea.style.overflowY = 'scroll';\n newHeight = self.maxAllowedHeight;\n }\n else {\n textarea.style.overflowY = 'hidden';\n textarea.style.height = 'auto';\n newHeight = textarea.scrollHeight - offset;\n hasGrown = true;\n }\n textarea.style.height = newHeight + 'px';\n return hasGrown;\n };\n\n var offset = self.getOffset(textarea);\n self.rows = textarea.rows || 1;\n self.lineHeight = (textarea.scrollHeight / self.rows) - (offset / self.rows);\n self.maxAllowedHeight = (self.lineHeight * maxLines) - offset;\n\n // Call autogrowFn() when textarea's value is changed\n textarea.addEventListener('input', self.autogrowFn);\n };\n});","/**\n * Swiper 3.4.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: March 10, 2017\n */\n(function () {\n 'use strict';\n var $;\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 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', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Zoom\n zoom: false,\n zoomMax: 3,\n zoomMin: 1,\n zoomToggle: true,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n mousewheelEventsTarged: 'container',\n // Hash Navigation\n hashnav: false,\n hashnavWatchState: false,\n // History\n history: false,\n // Commong Nav State\n replaceState: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\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 onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\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 // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n normalizeSlideIndex: true,\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\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 bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n paginationClickableClass: 'swiper-pagination-clickable', // NEW\n paginationModifierClass: 'swiper-pagination-', // NEW\n lazyLoadingClass: 'swiper-lazy',\n lazyStatusLoadingClass: 'swiper-lazy-loading',\n lazyStatusLoadedClass: 'swiper-lazy-loaded',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n notificationClass: 'swiper-notification',\n preloaderClass: 'preloader',\n zoomContainerClass: 'swiper-zoom-container',\n\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\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 // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onBeforeResize: function (swiper)\n onAfterResize: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n onKeyPress: function (swiper, keyCode)\n */\n\n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n\n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n\n // Swiper\n var s = this;\n\n // Params\n s.params = params;\n s.originalParams = originalParams;\n\n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n\n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n\n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n\n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n\n s.classNames.push(s.params.containerModifierClass + s.params.direction);\n\n if (s.params.freeMode) {\n s.classNames.push(s.params.containerModifierClass + 'free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push(s.params.containerModifierClass + 'no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push(s.params.containerModifierClass + 'autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Max resistance when touchReleaseOnEdges\n if (s.params.touchReleaseOnEdges) {\n s.params.resistanceRatio = 0;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push(s.params.containerModifierClass + '3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push(s.params.containerModifierClass + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n\n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n\n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n\n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n\n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n\n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n\n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push(s.params.containerModifierClass + 'rtl');\n }\n\n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n\n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push(s.params.containerModifierClass + 'multirow');\n }\n\n // Check for Android\n if (s.device.android) {\n s.classNames.push(s.params.containerModifierClass + 'android');\n }\n\n // Add classes\n s.container.addClass(s.classNames.join(' '));\n\n // Translate\n s.translate = 0;\n\n // Progress\n s.progress = 0;\n\n // Velocity\n s.velocity = 0;\n\n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n if (s.params.allowSwipeToNext === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n if (s.params.grabCursor) s.unsetGrabCursor();\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n if (s.params.allowSwipeToNext === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n if (s.params.grabCursor) s.setGrabCursor();\n };\n\n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n s.setGrabCursor = function(moving) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n s.container[0].style.cursor = moving ? 'grabbing': 'grab';\n };\n s.unsetGrabCursor = function () {\n s.container[0].style.cursor = '';\n };\n if (s.params.grabCursor) {\n s.setGrabCursor();\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n\n s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n\n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);\n }\n };\n\n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n var autoplayDelay = s.params.autoplay;\n var activeSlide = s.slides.eq(s.activeIndex);\n if (activeSlide.attr('data-swiper-autoplay')) {\n autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;\n }\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, autoplayDelay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n var activeSlides = [];\n var newHeight = 0;\n var i;\n\n // Find slides currently in view\n if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {\n var index = s.activeIndex + i;\n if(index > s.slides.length) break;\n activeSlides.push(s.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(s.slides.eq(s.activeIndex)[0]);\n }\n\n // Find new height from heighest slide in view\n for (i = 0; i < activeSlides.length; i++) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n\n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n\n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n\n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n\n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n\n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n\n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n\n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .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 }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css(\n 'margin-' + (s.isHorizontal() ? 'top' : 'left'),\n (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n\n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n\n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n\n\n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n s.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n\n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n\n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n\n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n\n /*=========================\n Dynamic Slides Per View\n ===========================*/\n s.currentSlidesPerView = function () {\n var spv = 1, i, j;\n if (s.params.centeredSlides) {\n var size = s.slides[s.activeIndex].swiperSlideSize;\n var breakLoop;\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slides[i] && !breakLoop) {\n size += s.slides[i].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n for (j = s.activeIndex - 1; j >= 0; j--) {\n if (s.slides[j] && !breakLoop) {\n size += s.slides[j].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n }\n else {\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {\n spv++;\n }\n }\n }\n return spv;\n };\n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n\n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n\n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n\n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n }\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n\n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n s.updateRealIndex();\n };\n s.updateRealIndex = function(){\n s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);\n };\n\n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n nextSlide = s.slides.eq(0);\n nextSlide.addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n prevSlide = s.slides.eq(-1);\n prevSlide.addClass(s.params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n }\n\n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n\n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n\n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n if (!s) return;\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n var newTranslate;\n function forceSetTranslate() {\n var translate = s.rtl ? -s.translate : s.translate;\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n\n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n if (s.params.onBeforeResize) s.params.onBeforeResize(s);\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n\n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n\n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n if (s.params.onAfterResize) s.params.onAfterResize(s);\n };\n\n /*=========================\n Events\n ===========================*/\n\n //Define Touch Events\n s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};\n if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};\n else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end\n };\n\n\n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n\n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n\n var moveCapture = s.params.nested ? true : false;\n\n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n\n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n\n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n\n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n\n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides,\n slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n\n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button, video',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n\n // Animating Flag\n s.animating = false;\n\n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n\n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n\n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n\n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n\n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {\n if (!s.isHorizontal()) {\n // Vertical\n if (\n (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||\n (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n else {\n if (\n (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||\n (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (typeof isScrolling === 'undefined') {\n var touchAngle;\n if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {\n isScrolling = false;\n }\n else {\n touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined') {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n\n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(true);\n }\n }\n isMoved = true;\n\n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n\n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n\n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n\n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n\n\n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n\n if (!s.params.followFinger) return;\n\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n\n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n\n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n\n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n\n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n\n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n\n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\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 if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;\n\n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n\n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n\n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n\n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n\n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n\n } else {\n s.updateProgress(newPosition);\n }\n\n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n\n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n\n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n\n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n\n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n\n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n\n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n\n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n s.updateRealIndex();\n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n\n if (speed === 0 || s.browser.lteIE9) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n\n }\n\n return true;\n };\n\n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n\n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.history && s.history) {\n s.history.setHistory(s.params.history, s.activeIndex);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n\n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n\n s.disableTouchControl = function () {\n s.params.onlyExternal = true;\n return true;\n };\n s.enableTouchControl = function () {\n s.params.onlyExternal = false;\n return true;\n };\n\n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n\n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n\n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n\n s.translate = s.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n\n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n\n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n\n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n\n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n\n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\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)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n\n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\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\n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n\n // Observe container\n initObserver(s.container[0], {childList: false});\n\n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n\n var slides = s.wrapper.children('.' + s.params.slideClass);\n\n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n\n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n\n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n\n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (s.params.loop) {\n s.createLoop();\n }\n\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n\n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n\n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n\n }\n\n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n\n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n\n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\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 s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\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 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n\n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n\n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n\n //Fix for ultra small values\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\n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n\n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n\n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.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 };\n\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n\n var slide = s.slides.eq(index);\n var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');\n if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n\n img.each(function () {\n var _img = $(this);\n _img.addClass(s.params.lazyStatusLoadingClass);\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset'),\n sizes = _img.attr('data-sizes');\n s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (sizes) {\n _img.attr('sizes', sizes);\n _img.removeAttr('data-sizes');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n\n }\n\n _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);\n slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n\n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n\n },\n load: function () {\n var i;\n var slidesPerView = s.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n\n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n\n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n\n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n\n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n\n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n draggableEvents: (function () {\n if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;\n else return s.touchEvents;\n })(),\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(sb.draggableEvents.start, sb.dragStart);\n $(target).on(sb.draggableEvents.move, sb.dragMove);\n $(target).on(sb.draggableEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(sb.draggableEvents.start, sb.dragStart);\n $(target).off(sb.draggableEvents.move, sb.dragMove);\n $(target).off(sb.draggableEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n\n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n\n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n\n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n\n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // 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 var i1, i3;\n var l = this.x.length;\n\n this.interpolate = function (x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\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 translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // 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 controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n\n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n\n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n onHashCange: function (e, a) {\n var newHash = document.location.hash.replace('#', '');\n var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash=\"' + (newHash) + '\"]').index());\n }\n },\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n $(window)[action]('hashchange', s.hashnav.onHashCange);\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n if (s.params.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));\n } else {\n var slide = s.slides.eq(s.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init: function () {\n if (!s.params.hashnav || s.params.history) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n }\n if (s.params.hashnavWatchState) s.hashnav.attachEvents();\n },\n destroy: function () {\n if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);\n }\n };\n\n\n /*=========================\n History Api with fallback to Hashnav\n ===========================*/\n s.history = {\n init: function () {\n if (!s.params.history) return;\n if (!window.history || !window.history.pushState) {\n s.params.history = false;\n s.params.hashnav = true;\n return;\n }\n s.history.initialized = true;\n this.paths = this.getPathValues();\n if (!this.paths.key && !this.paths.value) return;\n this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);\n if (!s.params.replaceState) {\n window.addEventListener('popstate', this.setHistoryPopState);\n }\n },\n setHistoryPopState: function() {\n s.history.paths = s.history.getPathValues();\n s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);\n },\n getPathValues: function() {\n var pathArray = window.location.pathname.slice(1).split('/');\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function (key, index) {\n if (!s.history.initialized || !s.params.history) return;\n var slide = s.slides.eq(index);\n var value = this.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n if (s.params.replaceState) {\n window.history.replaceState(null, null, value);\n } else {\n window.history.pushState(null, null, value);\n }\n },\n slugify: function(text) {\n return text.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function(speed, value, runCallbacks) {\n if (value) {\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHistory = this.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n s.slideTo(0, speed, runCallbacks);\n }\n }\n };\n\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n\n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n s.emit('onKeyPress', s, kc);\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n\n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n function isEventSupported() {\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 &&\n document.implementation &&\n document.implementation.hasFeature &&\n // 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 * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\n function normalizeWheel( /*object*/ event ) /*object*/ {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if( 'detail' in event ) {\n sY = event.detail;\n }\n if( 'wheelDelta' in event ) {\n sY = -event.wheelDelta / 120;\n }\n if( 'wheelDeltaY' in event ) {\n sY = -event.wheelDeltaY / 120;\n }\n if( 'wheelDeltaX' in event ) {\n sX = -event.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if( 'axis' in event && event.axis === event.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 event ) {\n pY = event.deltaY;\n }\n if( 'deltaX' in event ) {\n pX = event.deltaX;\n }\n\n if( (pX || pY) && event.deltaMode ) {\n if( event.deltaMode === 1 ) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if( pX && !sX ) {\n sX = (pX < 1) ? -1 : 1;\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 if (s.params.mousewheelControl) {\n /**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\n s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?\n 'DOMMouseScroll' :\n isEventSupported() ?\n 'wheel' : 'mousewheel';\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n\n var data = normalizeWheel( e );\n\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n else return;\n }\n }\n else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;\n }\n\n if (delta === 0) return;\n\n if (s.params.mousewheelInvert) delta = -delta;\n\n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) {\n s.slideNext();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) {\n s.slidePrev();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n\n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n\n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n\n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n\n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n\n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n // Emit event\n s.emit('onScroll', s, e);\n\n // Stop autoplay\n if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();\n\n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.off(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = false;\n return true;\n };\n\n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.on(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = true;\n return true;\n };\n\n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n\n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n\n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n\n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n\n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n\n\n /*=========================\n Zoom\n ===========================*/\n s.zoom = {\n // \"Global\" Props\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n slide: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n image: undefined,\n imageWrap: undefined,\n zoomMax: s.params.zoomMax\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 // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function (e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX,\n y1 = e.targetTouches[0].pageY,\n x2 = e.targetTouches[1].pageX,\n 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 (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleStart = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.slide || !z.gesture.slide.length) {\n z.gesture.slide = $(this);\n if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;\n if (z.gesture.imageWrap.length === 0) {\n z.gesture.image = undefined;\n return;\n }\n }\n z.gesture.image.transition(0);\n z.isScaling = true;\n },\n onGestureChange: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleMove = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (s.support.gestures) {\n z.scale = e.scale * z.currentScale;\n }\n else {\n z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;\n }\n if (z.scale > z.gesture.zoomMax) {\n z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);\n }\n if (z.scale < s.params.zoomMin) {\n z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);\n }\n z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');\n },\n onGestureEnd: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {\n return;\n }\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);\n z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n z.currentScale = z.scale;\n z.isScaling = false;\n if (z.scale === 1) z.gesture.slide = undefined;\n },\n onTouchStart: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (z.image.isTouched) return;\n if (s.device.os === 'android') e.preventDefault();\n z.image.isTouched = true;\n z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function (e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n s.allowClick = false;\n if (!z.image.isTouched || !z.gesture.slide) return;\n\n if (!z.image.isMoved) {\n z.image.width = z.gesture.image[0].offsetWidth;\n z.image.height = z.gesture.image[0].offsetHeight;\n z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;\n z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;\n z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;\n z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;\n z.gesture.imageWrap.transition(0);\n if (s.rtl) z.image.startX = -z.image.startX;\n if (s.rtl) z.image.startY = -z.image.startY;\n }\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n\n if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;\n\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n\n z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!z.image.isMoved && !z.isScaling) {\n if (s.isHorizontal() &&\n (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||\n (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)\n ) {\n z.image.isTouched = false;\n return;\n }\n else if (!s.isHorizontal() &&\n (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||\n (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)\n ) {\n z.image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n z.image.isMoved = true;\n z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;\n z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;\n\n if (z.image.currentX < z.image.minX) {\n z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);\n }\n if (z.image.currentX > z.image.maxX) {\n z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);\n }\n\n if (z.image.currentY < z.image.minY) {\n z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);\n }\n if (z.image.currentY > z.image.maxY) {\n z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);\n }\n\n //Velocity\n if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;\n if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;\n if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();\n z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;\n z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;\n if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;\n if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;\n z.velocity.prevPositionX = z.image.touchesCurrent.x;\n z.velocity.prevPositionY = z.image.touchesCurrent.y;\n z.velocity.prevTime = Date.now();\n\n z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTouchEnd: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (!z.image.isTouched || !z.image.isMoved) {\n z.image.isTouched = false;\n z.image.isMoved = false;\n return;\n }\n z.image.isTouched = false;\n z.image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = z.velocity.x * momentumDurationX;\n var newPositionX = z.image.currentX + momentumDistanceX;\n var momentumDistanceY = z.velocity.y * momentumDurationY;\n var newPositionY = z.image.currentY + momentumDistanceY;\n\n //Fix duration\n if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);\n if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n z.image.currentX = newPositionX;\n z.image.currentY = newPositionY;\n\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);\n z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);\n\n z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTransitionEnd: function (s) {\n var z = s.zoom;\n if (z.gesture.slide && s.previousIndex !== s.activeIndex) {\n z.gesture.image.transform('translate3d(0,0,0) scale(1)');\n z.gesture.imageWrap.transform('translate3d(0,0,0)');\n z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;\n z.scale = z.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggleZoom: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.slide) {\n z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n\n var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;\n\n if (typeof z.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 }\n else {\n touchX = z.image.touchesStart.x;\n touchY = z.image.touchesStart.y;\n }\n\n if (z.scale && z.scale !== 1) {\n // Zoom Out\n z.scale = z.currentScale = 1;\n z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');\n z.gesture.slide = undefined;\n }\n else {\n // Zoom In\n z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;\n if (e) {\n slideWidth = z.gesture.slide[0].offsetWidth;\n slideHeight = z.gesture.slide[0].offsetHeight;\n offsetX = z.gesture.slide.offset().left;\n offsetY = z.gesture.slide.offset().top;\n diffX = offsetX + slideWidth/2 - touchX;\n diffY = offsetY + slideHeight/2 - touchY;\n\n imageWidth = z.gesture.image[0].offsetWidth;\n imageHeight = z.gesture.image[0].offsetHeight;\n scaledWidth = imageWidth * z.scale;\n scaledHeight = imageHeight * z.scale;\n\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\n translateX = diffX * z.scale;\n translateY = diffY * z.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n }\n else {\n translateX = 0;\n translateY = 0;\n }\n z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n }\n },\n // Attach/Detach Events\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n\n if (s.params.zoom) {\n var target = s.slides;\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n // Scale image\n if (s.support.gestures) {\n s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);\n s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);\n s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);\n }\n else if (s.touchEvents.start === 'touchstart') {\n s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);\n s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);\n s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n s[action]('touchStart', s.zoom.onTouchStart);\n s.slides.each(function (index, slide){\n if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {\n $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);\n }\n });\n s[action]('touchEnd', s.zoom.onTouchEnd);\n\n // Scale Out\n s[action]('transitionEnd', s.zoom.onTransitionEnd);\n if (s.params.zoomToggle) {\n s.on('doubleTap', s.zoom.toggleZoom);\n }\n }\n },\n init: function () {\n s.zoom.attachEvents();\n },\n destroy: function () {\n s.zoom.attachEvents(true);\n }\n };\n\n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n\n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n\n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n\n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n\n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n\n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n\n liveRegion: $(''),\n\n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n\n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n\n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.zoom && s.zoom) {\n s.zoom.init();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history\n if (s.params.hashnavReplaceState) {\n s.params.replaceState = s.params.hashnavReplaceState;\n }\n if (s.params.history) {\n if (s.history) s.history.init();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n\n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n\n // Wrapper\n s.wrapper.removeAttr('style');\n\n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n\n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n\n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n\n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n\n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n\n // Destroy zoom\n if (s.params.zoom && s.zoom) {\n s.zoom.destroy();\n }\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Delete history popstate\n if (s.params.history && !s.params.replaceState) {\n window.removeEventListener('popstate', s.history.setHistoryPopState);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.destroy();\n }\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n\n s.init();\n\n\n\n // Return swiper instance\n return s;\n };\n\n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),\n lteIE9: (function() {\n // create temporary DIV\n var div = document.createElement('div');\n // add content to tmp DIV which is wrapped into the IE HTML conditional statement\n div.innerHTML = '';\n // return true / false value based on what will browser render\n return div.getElementsByTagName('i').length === 1;\n })()\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = window.navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\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 return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n\n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n\n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n\n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })(),\n\n passiveListener: (function () {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {}\n return supportsPassive;\n })(),\n\n gestures: (function () {\n return 'ongesturestart' in window;\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n\n\n /*===========================\n Dom7 Library\n ===========================*/\n var Dom7 = (function () {\n var Dom7 = function (arr) {\n var _this = this, i = 0;\n // Create array-like object\n for (i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n _this.length = arr.length;\n // Return collection with methods\n return this;\n };\n var $ = function (selector, context) {\n var arr = [], i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els, tempParent, html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.split('#')[1])];\n }\n else {\n // Other selectors\n els = (context || document).querySelectorAll(selector);\n }\n for (i = 0; i < els.length; i++) {\n if (els[i]) arr.push(els[i]);\n }\n }\n }\n // Node/element\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n //Array of elements or instance of Dom\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n };\n Dom7.prototype = {\n // Classes and attriutes\n addClass: function (className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.add(classes[i]);\n }\n }\n return this;\n },\n removeClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.remove(classes[i]);\n }\n }\n return this;\n },\n hasClass: function (className) {\n if (!this[0]) return false;\n else return this[0].classList.contains(className);\n },\n toggleClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n },\n attr: function (attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n else return undefined;\n }\n else {\n // Set attrs\n for (var i = 0; i < this.length; i++) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n }\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 return this;\n }\n },\n removeAttr: function (attr) {\n for (var i = 0; i < this.length; i++) {\n this[i].removeAttribute(attr);\n }\n return this;\n },\n data: function (key, value) {\n if (typeof value === 'undefined') {\n // Get value\n if (this[0]) {\n var dataKey = this[0].getAttribute('data-' + key);\n if (dataKey) return dataKey;\n else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];\n else return undefined;\n }\n else return undefined;\n }\n else {\n // Set value\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n },\n // Transforms\n transform : function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n },\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n },\n //Events\n on: function (eventName, targetSelector, listener, capture) {\n function handleLiveEvent(e) {\n var target = e.target;\n if ($(target).is(targetSelector)) listener.call(target, e);\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k++) {\n if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);\n }\n }\n }\n var events = eventName.split(' ');\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n for (j = 0; j < events.length; j++) {\n this[i].addEventListener(events[j], listener, capture);\n }\n }\n else {\n //Live events\n for (j = 0; j < events.length; j++) {\n if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];\n this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});\n this[i].addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n },\n off: function (eventName, targetSelector, listener, capture) {\n var events = eventName.split(' ');\n for (var i = 0; i < events.length; i++) {\n for (var j = 0; j < this.length; j++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n this[j].removeEventListener(events[i], listener, capture);\n }\n else {\n // Live event\n if (this[j].dom7LiveListeners) {\n for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {\n if (this[j].dom7LiveListeners[k].listener === listener) {\n this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);\n }\n }\n }\n }\n }\n }\n return this;\n },\n once: function (eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n targetSelector = false;\n listener = arguments[1];\n capture = arguments[2];\n }\n function proxy(e) {\n listener(e);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function (eventName, eventData) {\n for (var i = 0; i < this.length; i++) {\n var evt;\n try {\n evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});\n }\n catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(eventName, true, true);\n evt.detail = eventData;\n }\n this[i].dispatchEvent(evt);\n }\n return this;\n },\n transitionEnd: function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function () {\n if (this[0] === window) {\n return window.innerWidth;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n else {\n return null;\n }\n }\n },\n outerWidth: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n },\n height: function () {\n if (this[0] === window) {\n return window.innerHeight;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n else {\n return null;\n }\n }\n },\n outerHeight: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));\n else\n return this[0].offsetHeight;\n }\n else return null;\n },\n offset: function () {\n if (this.length > 0) {\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 = window.pageYOffset || el.scrollTop;\n var scrollLeft = window.pageXOffset || el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n else {\n return null;\n }\n },\n css: function (props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n }\n else {\n for (i = 0; i < this.length; i++) {\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i++) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n\n //Dom manipulation\n each: function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback.call(this[i], i, this[i]);\n }\n return this;\n },\n html: function (html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].innerHTML = html;\n }\n return this;\n }\n },\n text: function (text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n else return null;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].textContent = text;\n }\n return this;\n }\n },\n is: function (selector) {\n if (!this[0]) return false;\n var compareWith, i;\n if (typeof selector === 'string') {\n var el = this[0];\n if (el === document) return selector === document;\n if (el === window) return selector === window;\n\n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n else {\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n }\n else if (selector === document) return this[0] === document;\n else if (selector === window) return this[0] === window;\n else {\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n return false;\n }\n\n },\n index: function () {\n if (this[0]) {\n var child = this[0];\n var i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i++;\n }\n return i;\n }\n else return undefined;\n },\n eq: function (index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n else return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].appendChild(newChild[j]);\n }\n }\n else {\n this[i].appendChild(newChild);\n }\n }\n return this;\n },\n prepend: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n // this[i].insertAdjacentHTML('afterbegin', newChild);\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n }\n else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n },\n insertBefore: function (selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n }\n else if (before.length > 1) {\n for (var j = 0; j < before.length; j++) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function (selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n }\n else if (after.length > 1) {\n for (var j = 0; j < after.length; j++) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n nextAll: function (selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var next = el.nextElementSibling;\n if (selector) {\n if($(next).is(selector)) nextEls.push(next);\n }\n else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n prevAll: function (selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling;\n if (selector) {\n if($(prev).is(selector)) prevEls.push(prev);\n }\n else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n },\n parent: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n }\n else {\n parents.push(this[i].parentNode);\n }\n }\n return $($.unique(parents));\n },\n parents: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n var parent = this[i].parentNode;\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n }\n else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $($.unique(parents));\n },\n find : function (selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i++) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j++) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var childNodes = this[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j++) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n }\n else {\n if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);\n }\n }\n }\n return new Dom7($.unique(children));\n },\n remove: function () {\n for (var i = 0; i < this.length; i++) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n },\n add: function () {\n var dom = this;\n var i, j;\n for (i = 0; i < arguments.length; i++) {\n var toAdd = $(arguments[i]);\n for (j = 0; j < toAdd.length; j++) {\n dom[dom.length] = toAdd[j];\n dom.length++;\n }\n }\n return dom;\n }\n };\n $.fn = Dom7.prototype;\n $.unique = function (arr) {\n var unique = [];\n for (var i = 0; i < arr.length; i++) {\n if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);\n }\n return unique;\n };\n\n return $;\n })();\n\n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n\n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n if (!('outerWidth' in domLib.fn)) {\n domLib.fn.outerWidth = function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n };\n }\n }\n\n\n window.Swiper = Swiper;\n})();\n\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n\n//# sourceMappingURL=maps/swiper.js.map\n","// Controller documentation available at https://www.weepower.com/script/core#fnmake\n\nWee.fn.make('common', {\n\t_construct: function() {\n\t\t// ...\n\t},\n\tinit: function() {\n\t\tthis.$private.method();\n\t}\n}, {\n\tmethod: function() {\n\t\t// ...\n\t}\n});\n","Wee.fn.make('form', {\n\tinit: function() {\n\t\tvar priv = this.$private,\n\t\t\t$form = $('ref:submissionForm'),\n\t\t\tmax = 300;\n\n\n\t\tWee.infieldLabels.init();\n\n\t\tnew Autogrow($('ref:message')[0]);\n\n\t\t// Show character count on story submission text area\n\t\t$('ref:characterCount').html(max + ' characters remaining');\n\n\t\t$.events.on({\n\t\t\t'ref:message': {\n\t\t\t\tkeydown: function(e, el) {\n\t\t\t\t\tif (el.value.length >= 300 && e.keyCode !== 8) {\n\t\t\t\t\t\tel.value = el.value.slice(0, 300);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tkeyup: function(e, el) {\n\t\t\t\t\t$('ref:characterCount').html((max - el.value.length) + ' characters remaining');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Bind form submission\n \t$form.on('submit', function(e, el) {\n\t\t\tvar $el = $(el),\n\t\t \t\t$email = $el.find('ref:email'),\n\t\t \t\t$title = $el.find('ref:title');\n\n\t\t\t\t// Submit form via ajax\n\t\t\t\t$.fetch.request({\n\t\t\t\t\tmethod: 'post',\n\t\t\t\t\ttype: 'form',\n\t\t\t\t\tdata: $el.serialize(),\n\t\t\t\t\tjson: true,\n\t\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t\tvar success = response.success,\n\t\t\t\t\t\t\terrors = response.errors;\n\n\t\t\t\t\t\t// Reset error messages\n\t\t\t\t\t\t$('ref:errorMessage').text('');\n\n\t\t\t\t\t\t// Notify user of submission state\n\t\t\t\t\t\tif (! success && Object.keys(errors).length) {\n\t\t\t\t\t\t\tfor (var error in errors) {\n\t\t\t\t\t\t\t\tpriv.insertErrors(error, errors[error]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$el.prepend($.view.render('thankyou', {\n\t\t\t\t\t\t\t\turl: $.get('entryUrl'),\n\t\t\t\t\t\t\t\ttext: $.get('entryText'),\n\t\t\t\t\t\t\t\theading: $.get('storyHeading'),\n\t\t\t\t\t\t\t\tbody: $.get('storyBody')\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t$el.find('ref:close').hide();\n\t\t\t\t\t\t\t$('ref:close').hide();\n\t\t\t\t\t\t\t$el.find('ref:errorMessage').hide();\n\t\t\t\t\t\t\t$el.find('ref:characterCount').hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\n e.preventDefault();\n });\n\t}\n}, {\n\tinsertErrors: function(type, errors) {\n\t\tconsole.log(type, errors[0]);\n\t\t$('ref:' + type +'Error').text(errors[0]);\n\t}\n});\n","Wee.fn.make('landingPage2', {\n\tinit: function() {\n\t\tvar scope = this;\n\n\t\t$.events.on({\n\t\t\t'ref:showVideo': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tscope.showVideo();\n\t\t\t\t}\n\t\t\t},\n\t\t\t'ref:hideVideo': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tscope.hideVideo();\n\t\t\t\t}\n\t\t\t},\n\t\t\t'ref:video': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tscope.hideVideo();\n\t\t\t\t}\n\t\t\t},\n\t\t\t'ref:arrow': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tWee.animate.tween('body', {\n\t\t\t\t\t\tscrollTop: $('ref:submission').offset().top\n\t\t\t\t\t}, {\n\t\t\t\t\t duration: 300\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tnamespace: 'landingPage2'\n\t\t});\n\t},\n\tshowVideo: function() {\n\t\t$('ref:video').show();\n\t\t$('ref:youtube').attr('src', 'https://www.youtube.com/embed/' + $.get('youtubeVideoId') + '?rel=0');\n\n\t\t// Dynamically initlaize youtube analytics through GTM on modal open\n\t\tif ($._win._initYouTubeAnalytics && typeof $._win._initYouTubeAnalytics == 'function') {\n\t\t\t$._win._initYouTubeAnalytics();\n\t\t}\n\n\t},\n\thideVideo: function() {\n\t\t$('ref:video').hide();\n\t\t$('ref:youtube').attr('src', '');\n\t},\n\tunload: function() {\n\t\t$.events.off(null, '.landingPage2');\n\t}\n});\n","Wee.fn.make('modal', {\n\tinit: function() {\n\t\tvar scope = this;\n\n\t\tthis.$modal = $('ref:modalForm');\n\n\t\t$.events.on({\n\t\t\t'ref:modalToggle': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tscope.toggle();\n\t\t\t\t}\n\t\t\t},\n\t\t\t'ref:modalClose': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tscope.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\ttoggle: function(el) {\n\t\tthis.$modal.toggle();\n\t\t$($._body).toggleClass('-is-disabled');\n\t},\n\n\tclose: function() {\n\t\tthis.$modal.hide();\n\t\t$($._body).removeClass('-is-disabled');\n\t}\n});\n","Wee.fn.make('newsletter', {\n\tinit: function() {\n\t\tvar\tscope = this,\n\t\t\t$form = $('ref:newsletterForm'),\n\t\t\tresults = [],\n\t\t\trules = [\n\t\t\t\t[\n\t\t\t\t\t'.js-first-name',\n\t\t\t\t\t'required'\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t'.js-last-name',\n\t\t\t\t\t'required'\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t'.js-email',\n\t\t\t\t\t'required|email'\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t'.js-email-confirm',\n\t\t\t\t\t'required|email|confirm:js-email'\n\t\t\t\t]\n\t\t\t];\n\n\t\tif ($.get('formType') === 'CS') {\n\t\t\trules.push([\n\t\t\t\t'.js-school-name',\n\t\t\t\t'required'\n\t\t\t]);\n\n\t\t\trules.push([\n\t\t\t\t'.js-zipcode',\n\t\t\t\t'required|numeric'\n\t\t\t]);\n\t\t}\n\n\t\tWee.infieldLabels.init();\n\n\t\t$.events.on({\n\t\t\t'ref:newsletterModalToggle': {\n\t\t\t\tclick: function() {\n\t\t\t\t\tvar $email = $('ref:email');\n\n\t\t\t\t\tif ($email.val() === '') {\n\t\t\t\t\t\t$email.val($('ref:initialEmail').val());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'ref:newsletterForm': {\n\t\t\t\tsubmit: function(e, el) {\n\t\t\t\t\tvar $form = $form;\n\n\t\t\t\t\tresults = Wee.validate.run(rules);\n\n\t\t\t\t\t$('.form-input-error').hide();\n\t\t\t\t\t$('.js-modal-input').removeClass('-has-error');\n\n\t\t\t\t\tif (! results.length) {\n\t\t\t\t\t\tscope.submitForm(el);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (i = 0; i < results.length; i++) {\n\t\t\t\t\t\t\tmodifier = '-' + results[i][1] + '-error';\n\n\t\t\t\t\t\t\t$(results[i][0] + modifier).show();\n\t\t\t\t\t\t\t$(results[i][0]).addClass('-has-error');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tsubmitForm: function(el) {\n\t\tvar scope = this,\n\t\t\t$form = $(el);\n\n\t\tscope.toggleButton();\n\n\t\t$.fetch.request({\n\t\t\turl: $form.attr('action'),\n\t\t\tmethod: 'post',\n\t\t\tdata: $form.serialize(),\n\t\t\ttype: 'text',\n\t\t\tsuccess: function(data) {\n\t\t\t\tscope.showSuccessMessage();\n\n\t\t\t\t// Enable button\n\t\t\t\tscope.toggleButton();\n\t\t\t},\n\t\t\terror: function(data) {\n\t\t\t\t$('ref:newsletterGlobalError').text('There was a problem submitting your form');\n\n\t\t\t\t// Enable button\n\t\t\t\tscope.toggleButton();\n\t\t\t}\n\t\t});\n\n\t\tsetTimeout(function() {\n\t\t\tscope.toggleButton();\n\t\t}, 5000);\n\t},\n\n\ttoggleButton: function() {\n\t\tvar $button = $('ref:registerButton');\n\n\t\tif ($button.prop('disabled')) {\n\t\t\t$button.prop('disabled', false)\n\t\t\t\t.text('Submit');\n\t\t} else {\n\t\t\t$button.prop('disabled', true)\n\t\t\t\t.text('Submitting...');\n\t\t}\n\t},\n\n\tshowSuccessMessage: function() {\n\t\tWee.modal.close();\n\n\t\t$('ref:newsletter').html(\n\t\t\t$.view.render('newsletter-thank', {\n\t\t\t\theading: $.get('thankYouHeading'),\n\t\t\t\tbody: $.get('thankYouBody')\n\t\t\t}\n\t\t));\n\t}\n});\n","/* global Swiper */\n\nWee.fn.make('quotes', {\n\tinit: function() {\n\t\tvar scope = this;\n\n\t\tscope.$swiper = $('.swiper-quotes')[0];\n\n\t\t$.screen.map([\n\t\t\t{\n\t\t\t\tmax: 2,\n\t\t\t\tcallback: function() {\n\t\t\t\t\tscope.destroySwiper();\n\t\t\t\t\tscope.initSwiper(1, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmax: 4,\n\t\t\t\tcallback: function() {\n\t\t\t\t\tscope.destroySwiper();\n\t\t\t\t\tscope.initSwiper(2, 2);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tsize: 5,\n\t\t\t\tcallback: function() {\n\t\t\t\t\tscope.destroySwiper();\n\t\t\t\t\tscope.initSwiper(2, 3);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tsize: 6,\n\t\t\t\tcallback: function() {\n\t\t\t\t\tscope.destroySwiper();\n\t\t\t\t\tscope.initSwiper(2, 4);\n\t\t\t\t}\n\t\t\t}\n\t\t]);\n\t},\n\n\tinitSwiper: function(slidesPerColumn, slidesPerView) {\n\t\tthis.quotesSwiper = new Swiper('.swiper-quotes', {\n\t\t\tslidesPerColumn: slidesPerColumn,\n\t\t\tslidesPerView: slidesPerView,\n\t\t\tslidesPerColumnFill: 'row',\n\t\t\tspaceBetween: 20,\n\t\t\tpagination: '.swiper-pagination',\n\t\t\tpaginationClickable: true,\n\t\t\tnextButton: '.swiper-button-next',\n\t\t\tprevButton: '.swiper-button-prev'\n\t\t});\n\n\t\tthis.quotesSwiper.slideTo(0);\n\t},\n\n\tdestroySwiper: function() {\n\t\tif (this.quotesSwiper) {\n\t\t\tthis.quotesSwiper.destroy(true, true);\n\t\t}\n\t},\n\n\tunload: function() {\n\t\tthis.destroySwiper();\n\t}\n});\n","/* globals Wee, moment */\n\nWee.fn.make('validate', {\n\tconfig: {\n\t\tallowWeeObject: true,\n\t\tallowDomObject: true,\n\t\tallowSelector: true\n\t},\n\tparam: function(key, val) {\n\t\tthis.config[key] = val;\n\n\t\treturn this;\n\t},\n\trun: function(validate) {\n\t\tvar results = [],\n\t\tsetIdx;\n\n\t\tfor (setIdx in validate) {\n\t\t\tvar set = validate[setIdx],\n\t\t\t\tvalue = set[0],\n\t\t\t\tresult = this.check(value, set[1]);\n\n\t\t\tif (result.length) {\n\t\t\t\tresults.push([value, result[0]]);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\tcheck: function(value, rules) {\n\t\tvar rulesSet = [],\n\t\t\trulesPairs = [],\n\t\t\trequired = false,\n\t\t\torRule = false,\n\t\t\tresults = [],\n\t\t\torCond,\n\t\t\tresult,\n\t\t\tidx;\n\n\t\t// Test value for wee object, dom object, js selector, or just plain string\n\t\tif (typeof value === 'object') {\n\t\t\tif (this.config.allowWeeObject && typeof value.sel === 'string') {\n\t\t\t\tvalue = value.val();\n\t\t\t} else if (this.config.allowDomObject && typeof value.sel === 'undefined') {\n\t\t\t\tvalue = $(value).val();\n\t\t\t}\n\t\t} else if (rules.indexOf('hasCount') !== -1) {\n\t\t\tvalue = $(value);\n\t\t} else if (this.config.allowSelector && /^(#|\\.|ref:)+/.test(value) && $(value).length) {\n\t\t\tvalue = $(value).val();\n\t\t}\n\n\t\tif (typeof rules === 'string') {\n\t\t\t// Parse out the rules, separating groups, rules, and parameters.\n\t\t\trulesPairs = rules.match(/\\([^)]*\\)/g);\n\t\t\trulesSet = rules.replace(/\\([^)]*\\)/g, '')\n\t\t\t\t.replace(/^(\\|+)?/g, '')\n\t\t\t\t.replace(/(\\|+)?$/g, '')\n\t\t\t\t.split('|');\n\n\t\t\tfor (idx in rulesSet) {\n\t\t\t\tif (rulesSet[idx] === 'required' && ! orCond) {\n\t\t\t\t\trequired = true;\n\t\t\t\t} else if (rulesSet[idx].substr(0, 3) === 'or:') {\n\t\t\t\t\torRule = true;\n\t\t\t\t\trequired = false;\n\t\t\t\t\torCond = rulesSet[idx];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (required || orRule || value.length) {\n\t\t\tresults = this.runSet(value, rulesSet);\n\n\t\t\tfor (idx in rulesPairs) {\n\t\t\t\trulesSet = rulesPairs[idx].replace(/[()]?/g, '').split('|');\n\t\t\t\tresult = this.runSet(value, rulesSet);\n\n\t\t\t\tif (result.length === rulesSet.length) {\n\t\t\t\t\tresults = results.concat(result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Catch cases that pass an Or: rule but might fail another rule\n\t\t\tif (orRule && ! value.length && results.length === 1 && results[0] !== orCond) {\n\t\t\t\tresults = [];\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\trunSet: function(value, rulesSet) {\n\t\tvar results = [],\n\t\t\tresult,\n\t\t\tidx;\n\n\t\tfor (idx in rulesSet) {\n\t\t\tresult = this.runRule(value, rulesSet[idx].split(':'));\n\n\t\t\tif (result.length) {\n\t\t\t\tresults.push(result);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\trunRule: function(value, rulePair) {\n\t\tvar rule = rulePair[0],\n\t\t\tparams = [\n\t\t\t\tvalue\n\t\t\t],\n\t\t\tresult;\n\n\t\tif (rulePair.length === 2) {\n\t\t\tparams.push(rulePair[1]);\n\t\t}\n\n\t\tresult = this.$private.rules[rule].apply(this, params);\n\n\t\tif (! result) {\n\t\t\treturn rule;\n\t\t}\n\n\t\treturn '';\n\t}\n}, {\n\trules: {\n\t\tafter: function(value, set) {\n\t\t\tvar $startEl = $(set),\n\t\t\t\tstartDate = ($startEl.length && $startEl.val().length) ? moment($startEl.val()) : false,\n\t\t\t\tendDate = moment(value);\n\n\t\t\tif (! startDate || endDate.isAfter(startDate)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tbefore: function(value, set) {\n\t\t\tvar $endEl = $(set),\n\t\t\t\tstartDate = moment(value),\n\t\t\t\tendDate = ($endEl.length && $endEl.val().length) ? moment($endEl.val()) : false;\n\n\t\t\tif (! endDate || startDate.isBefore(endDate)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tcurrency: function(value) {\n\t\t\treturn /^\\$?[\\d,]+$/.test(value);\n\t\t},\n\t\tdate: function(value) {\n\t\t\treturn moment(value).isValid();\n\t\t},\n\t\temail: function(value) {\n\t\t\treturn /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(value);\n\t\t},\n\t\tin: function(value, set) {\n\t\t\treturn set.split(',').indexOf(value) !== -1;\n\t\t},\n\t\tmatch: function(value, set) {\n\t\t\tvar check = new RegExp('^' + set + '$', 'i');\n\n\t\t\treturn check.test(value);\n\t\t},\n\t\tnumeric: function(value) {\n\t\t\treturn /^[\\d]+\\.?[\\d]+$/.test(value);\n\t\t},\n\t\tor: function(value, set) {\n\t\t\tvar $el = $(set),\n\t\t\t\totherVal = $el.length ? $el.val() : '';\n\n\t\t\treturn value.length || otherVal.length;\n\t\t},\n\t\tphone: function(value) {\n\t\t\tvar len = value.replace(/[^\\d]*/g, '').length;\n\n\t\t\t// Allow standard 7-digit; with area code; with country code; with extension\n\t\t\treturn len === 7 || len === 10 || len >= 11;\n\t\t},\n\t\trequired: function(value) {\n\t\t\treturn typeof value !== 'undefined' && value.length !== 0;\n\t\t},\n\t\thasCount: function(value, check) {\n\t\t\tif (check === null) {\n\t\t\t\tcheck = 1;\n\t\t\t} else {\n\t\t\t\tcheck = parseInt(check);\n\t\t\t}\n\n\t\t\treturn typeof value !== 'undefined' && value.length >= check;\n\t\t},\n\t\tconfirm: function(value, selector) {\n\t\t\treturn value === $('.' + selector).val();\n\t\t},\n\t\thasCountExact: function(value, check) {\n\t\t\tif (check === null) {\n\t\t\t\tcheck = 1;\n\t\t\t} else {\n\t\t\t\tcheck = parseInt(check);\n\t\t\t}\n\n\t\t\treturn typeof value !== 'undefined' && value.length === check;\n\t\t}\n\t}\n});\n","Wee.routes.map({\n\t'we-see-a-teacher': {\n\t\t'$slug': [\n\t\t\t'common',\n\t\t\t'landingPage2',\n\t\t\t'form',\n\t\t\t'newsletter',\n\t\t\t'quotes',\n\t\t\t'modal',\n\t\t\tfunction() {\n\t\t\t\t$('ref:form').csrf(),\n\t\t\t\t$('ref:newsletter').csrf();\n\t\t\t}\n\t\t]\n\t}\n});\n\nWee.ready('routes:run');\n","Wee.fn.make('csrf', {\n\t_construct: function() {\n\t\tvar scope = this;\n\n\t\t$.chain('csrf', function(options) {\n\t\t\tif (typeof options === 'undefined') {\n\t\t\t\toptions = {};\n\t\t\t}\n\n\t\t\toptions.selector = this;\n\n\t\t\tscope.init(options);\n\n\t\t\treturn this;\n\t\t});\n\t},\n\n\t/**\n\t * Generate CSRF token and prepend to form\n\t *\n\t * @param {object} options\n\t * @param {object|string} [options.selector=ref:csrfForm]\n\t * @param {string} [options.endpoint=/ajax/csrf]\n\t */\n\tinit: function(options) {\n\t\tvar priv = this.$private,\n\t\t\tconf = $.extend({\n\t\t\t\tselector: 'ref:csrfForm',\n\t\t\t\tendpoint: '/ajax/csrf'\n\t\t\t}, options),\n\t\t\tselector = conf.selector,\n\t\t\t$form = typeof selector != 'object' ? $(selector) : selector;\n\n\t\tif ($.get('csrf')) {\n\t\t\tpriv.insertInput($form);\n\t\t} else {\n\t\t\t$.fetch.request({\n\t\t\t\turl: conf.endpoint,\n\t\t\t\tjson: true,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t$.set('csrf', response);\n\n\t\t\t\t\tpriv.insertInput($form);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}, {\n\t/**\n\t * Insert CSRF input into form\n\t *\n\t * @param {object} $form\n\t */\n\tinsertInput: function($form) {\n\t\tvar csrf = $.get('csrf'),\n\t\t\t$existingToken = $form.find('input[name=\"' + csrf.name + '\"]');\n\n\t\tif ($existingToken.length) {\n\t\t\t// If a token already exists, strip it out\n\t\t\t$existingToken.remove();\n\t\t}\n\n\t\t$form.prepend(\n\t\t\t$.view.render(\n\t\t\t\t'',\n\t\t\t\tcsrf\n\t\t\t)\n\t\t);\n\t}\n});","Wee.fn.make('infieldLabels', {\n\t_construct: function() {\n\t\tthis.namespace = 'infieldLabels';\n\t},\n\n\t/**\n\t * Init infield labels module\n\t *\n\t * @param {object} options\n\t * @param {string} [options.selector=ref:infieldInput] - Selector for the infield label input.\n\t * @param {string} [options.focusClass=-is-focused] - Class added when input is focused.\n\t * @param {string} [options.activeClass=-is-active] - Class added when the input has a value.\n\t */\n\tinit: function(options) {\n\t\tvar settings = $.extend({\n\t\t\t\tselector: 'ref:infieldInput',\n\t\t\t\tfocusClass: '-is-focused',\n\t\t\t\tactiveClass: '-is-active'\n\t\t\t}, options),\n\t\t\t$selector = $(settings.selector),\n\t\t\tfocusClass = settings.focusClass,\n\t\t\tactiveClass = settings.activeClass;\n\n\t\t$selector.each(function(el) {\n\t\t\tvar $el = $(el);\n\n\t\t\tif ($el.val()) {\n\t\t\t\t$el.parent()\n\t\t\t\t\t.addClass(activeClass);\n\t\t\t}\n\t\t});\n\n\t\t$selector.on('focus.' + this.namespace, function(e, el) {\n\t\t\t$(el).parent()\n\t\t\t\t.addClass(activeClass + ' ' + focusClass);\n\t\t});\n\n\t\t$selector.on('blur.' + this.namespace, function(e, el) {\n\t\t\tvar $el = $(el);\n\n\t\t\t$el.parent()\n\t\t\t\t.removeClass(focusClass);\n\n\t\t\tif (! $el.val()) {\n\t\t\t\t$el.parent()\n\t\t\t\t\t.removeClass(activeClass);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Destroy infield label bind events\n\t */\n\tdestroy: function() {\n\t\t$.events.off(false, '.' + this.namespace);\n\t}\n});"]}