{"version":3,"sources":["framework7.js"],"names":["window","Dom7","$$1","selector","context","arr","i","els","tempParent","html","trim","indexOf","toCreate","document","createElement","innerHTML","childNodes","length","push","match","querySelectorAll","getElementById","split","nodeType","parseUrlQuery","url","params","param","query","urlToParse","location","href","replace","filter","paramsPart","decodeURIComponent","undefined","isArray","Array","each","obj","callback","prop","hasOwnProperty","unique","uniqueArray","serializeObject","parents","varName","name","parentParts","j","encodeURIComponent","varValue","value","newParents","resultArray","Object","keys","forEach","toPush","slice","String","join","toCamelCase","string","toLowerCase","group1","toUpperCase","dataset","el","requestAnimationFrame","webkitRequestAnimationFrame","setTimeout","cancelAnimationFrame","id","webkitCancelAnimationFrame","clearTimeout","isObject","o","constructor","extend","args","len$1","arguments","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","animate","initialProps","initialParams","this","a","props","duration","easing","elements","animating","que","easingProgress","progress","Math","cos","PI","stop","frameId","index","dom7AnimateInstance","done","complete","shift","render","time","Date","getTime","easeProgress","began","begin","startTime","max","min","element","ref","initialValue","finalValue","unit","currentValue","container","style","propsDone","elementsDone","initialFullValue","finalFullValue","getComputedStyle","getPropertyValue","parseFloat","animateInstance","ajaxSetup","options","type","method","optionName","optionValue","globalAjaxOptions","ajax","fireAjaxCallback","eventName","eventData","callbackName","trigger","globals","defaults","data","async","cache","user","password","headers","xhrFields","statusCode","processData","dataType","contentType","timeout","callbacks","globalOptionName","globalOptionValue","defaultValue","toString","paramsPrefix","stringData","abortTimeout","now","jsonpRequests","callbackSplit","requestUrl","addVars","script","onerror","scripterror","src","parentNode","removeChild","querySelector","appendChild","xhr","XMLHttpRequest","requestParameters","open","postData","postDataInstances","ArrayBuffer","Blob","Document","FormData","boundary","setRequestHeader","newData","headerName","headerCallback","crossDomain","test","RegExp","$2","host","fieldName","fieldValue","xhrTimeout","onload","status","responseData","JSON","parse","responseText","err","parseerror","responseType","response","error","onabort","abort","send","ajaxShortcut","success","assign","assign$1","get","unshift","apply","post","getJSON","self","fn","prototype","Class","use","methods","isUtils","methodName","defaultDiacriticsRemovalap","base","letters","diacriticsMap","Utils","__utils","parseQuery","removeDiacritics","str","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","transform","webkitTransform","map","m41","m42","Methods","addClass","className","this$1","classes","classList","add","removeClass","remove","hasClass","contains","toggleClass","toggle","attr","attrs","arguments$1","setAttribute","attrName","getAttribute","removeAttr","removeAttribute","propName","key","dom7ElementDataStorage","dataKey","removeData","dataset$$1","attributes","val","i$1","multiple","nodeName","values","selectedOptions","transform$1","elStyle","transition","webkitTransitionDuration","transitionDuration","on","handleLiveEvent","e","target","dom7EventData","is","targetSelector","listener","k","handleEvent","eventType","capture","events","dom7LiveListeners","proxyListener","addEventListener","dom7Listeners","off","k$1","removeEventListener","once","proxy","dom","evt","CustomEvent","detail","bubbles","cancelable","createEvent","initEvent","dataIndex","dispatchEvent","transitionEnd","fireCallBack","call","animationEnd","width","innerWidth","css","outerWidth","includeMargins","styles","offsetWidth","height","innerHeight","outerHeight","offsetHeight","offset","box","getBoundingClientRect","body","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","hide","display","show","toArray","matchedItems","modifiedItems","html$1","text","text$1","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","appendTo","parent","prepend","insertBefore","prependTo","before","cloneNode","insertAfter","after","nextSibling","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","siblings","closest","find","foundElements","found","children","detach","toAdd","empty","shortcuts","notTrigger","Scroll","scrollTo","animateTop","currentTop","newTop","animateLeft","currentLeft","newLeft","maxTop","maxLeft","scrollHeight","scrollWidth","Animate","Ajax","Template7","isFunction","func","escape","template7Context","helperToSlices","shiftIndex","helperParts","slices","part","blockQuoteRegExp","openingQuote","quoteDoubleRexExp","quoteSingleRexExp","hashParts","hashName","hashContent","hash","stringToBlocks","blocks","stringBlocks","block","content","contextName","helperSlices","helperName","isPartial","helperContext","helperHash","helperContent","elseContent","toSkip","foundClosed","foundElse","depth","inverseContent","parseJsVariable","expression","object","stringify","variable","partName","parseJsParents","levelsUp","parentData","t7","template","instance","rendered","compile","global","getCompileVar","ctx","parts","newDepth","dataLevel","isFinite","getCompiledArguments","contextArray","getCompileFn","getCompileInverse","t","Error","resultString","compiledArguments","level","parentsString","helpers","eval","compiled","partials","_partial","partialName","p","root","if","inverse","unless","ret","reverse","first","last","with","delimiter","delimeter","js","execute","re1","re2","js_if","js_compare","registerHelper","unregisterHelper","registerPartial","unregisterPartial","Framework7","handleInfiniteScroll","virtualList","inf","$","distance","virtualListContainer","onTop","parseInt","f7VirtualList","reachEnd","updatableScroll","_fixIpadBodyScrolLeft","app","device","ipad","version","cacheIgnore","cacheIgnoreGetParameters","cacheDuration","preloadPreviousPage","uniqueHistory","uniqueHistoryIgnoreGetParameters","dynamicPageUrl","allowDuplicateUrls","router","routerRemoveTimeout","routerRemoveWithTimeout","pushState","pushStateRoot","pushStateNoAnimation","pushStateSeparator","pushStateOnLoad","fastClicks","fastClicksDistanceThreshold","fastClicksDelayBetweenClicks","fastClicksExclude","tapHold","tapHoldDelay","tapHoldPreventClicks","activeState","activeStateElements","animateNavBackIcon","swipeBackPage","swipeBackPageThreshold","swipeBackPageActiveArea","swipeBackPageAnimateShadow","swipeBackPageAnimateOpacity","ajaxLinks","externalLinks","sortable","hideNavbarOnPageScroll","hideToolbarOnPageScroll","hideTabbarOnPageScroll","showBarsOnPageScrollEnd","showBarsOnPageScrollTop","swipeout","swipeoutActionsNoFold","swipeoutNoFollow","swipeoutRemoveWithTimeout","smartSelectOpenIn","smartSelectBackText","smartSelectPopupCloseText","smartSelectPickerCloseText","smartSelectSearchbar","smartSelectBackOnSelect","scrollTopOnNavbarClick","scrollTopOnStatusbarClick","panelLeftBreakpoint","panelRightBreakpoint","swipePanel","swipePanelActiveArea","swipePanelCloseOpposite","swipePanelOnlyClose","swipePanelNoFollow","swipePanelThreshold","panelsCloseByOutside","modalButtonOk","modalButtonCancel","modalUsernamePlaceholder","modalPasswordPlaceholder","modalTitle","modalCloseByOutside","actionsCloseByOutside","popupCloseByOutside","popoverCloseByOutside","modalPreloaderTitle","modalStack","modalsMoveToRoot","imagesLazyLoadThreshold","imagesLazyLoadSequential","viewClass","viewMainClass","viewsClass","notificationCloseOnClick","notificationCloseIcon","notificationCloseButtonText","animatePages","templates","template7Data","template7Pages","precompileTemplates","material","materialPageLoadDelay","materialPreloaderSvg","materialPreloaderHtml","materialRipple","materialRippleElements","init","_compiledTemplates","touchEvents","start","support","touch","move","end","ls","localStorage","rtl","statusbarOverlay","ios","cordova","phonegap","needsStatusBar","views","View","dynamicNavbar","domCache","linksView","reloadPages","def","view","main","contentCache","contextCache","pagesCache","pageElementsCache","f7View","pagesContainer","initialPages","initialPagesUrl","initialNavbars","allowPageChange","docLocation","history","viewURL","currentPage","currentPageData","activePage","f7PageData","navbarInnerContainer","isScrolling","viewContainerWidth","touchesDiff","touchStartTime","activeNavElements","previousNavElements","activeNavBackIcon","previousNavBackIcon","pageShadow","pageOpacity","isTouched","isMoved","touchesStart","previousPage","allowViewTouchMove","activeNavbar","previousNavbar","handleTouchStart","swipeoutOpenedEl","x","targetTouches","pageX","y","pageY","handleTouchMove","abs","f7PreventSwipeBack","preventSwipeBack","cancel","notFromBorder","android","closeModal","f7PreventPanelSwipe","preventDefault","inverter","percentage","callbackData","onSwipeBackMove","activePageTranslate","previousPageTranslate","pixelRatio","round","opacity","activeNavTranslate","f7NavbarRightOffset","previousNavTranslate","f7NavbarLeftOffset","handleTouchEnd","timeDiff","pageChanged","translate","sliding","pageBackCallback","pageContainer","position","newPage","oldPage","swipeBack","pageAnimCallback","onSwipeBackBeforeChange","onSwipeBackBeforeReset","back","afterBack","onSwipeBackAfterChange","onSwipeBackAfterReset","attachEvents","action","passiveListener","passive","activeListener","detachEvents","mainView","load","loadPage","pageName","loadContent","reloadPage","reload","reloadContent","reloadPreviousPage","reloadPrevious","reloadPreviousContent","refreshPage","ignoreCache","refreshPreviousPage","hideNavbar","animated","showNavbar","hideToolbar","showToolbar","pushStateUrl","pushStateUrlSplit","pushStateAnimatePages","historyState","state","destroy","splice","pluginHook","addView","getCurrentView","popoverView","popupView","panelView","appViews","appView","currentViews","navbarInitCallback","navbarContainer","f7NavbarInitialized","navbarData","innerContainer","pageData","page","navbar","reinitNavbar","initNavbar","navbarRemoveCallback","initSearchbar","initNavbarWithCallback","viewContainer","pages","sizeNavbars","n","currLeft","diff","right","center","subnavbar","noLeft","noRight","leftWidth","rightWidth","centerWidth","navbarStyles","navbarWidth","paddingLeft","paddingRight","onLeft","requiredLeft","activeNavbarBackLink","offsetLeft","centerLeft","toolbarContainer","toolbar","Searchbar","preventSubmit","input","clearButton","cancelButton","searchList","searchIn","searchBy","notFound","overlay","ignore","customSearch","hideDividers","hideGroups","s","active","isVirtualList","cancelMarginProp","cancelButtonHasMargin","setCancelButtonMargin","triggerEvent","enable","_enable","disable","_disable","blur","clear","previousQuery","focus","handleInput","search","internal","_vlQuery","foundItems","resetFilter","searchAll","items","searchByItem","compareWithText","itemText","wordsMatch","title","nextElements","nextEl","group","filterItems","f7Searchbar","searchbar","onBeforeRemove","sb","Messagebar","textarea","maxHeight","m","pageContent","pageContentPadding","initialBarHeight","initialAreaHeight","sizeTextarea","clientHeight","newAreaHeight","newBarHeight","maxBarHeight","onBottom","bottom","padding-bottom","textareaTimeout","handleTextarea","f7Messagebar","messagebar","initPageMessagebar","pageBeforeRemove","mb","removeFromCache","_url","beforeSend","onAjaxStart","onAjaxComplete","onAjaxError","pageCallbacks","onPage","pageNames","returnCallbacks","removeIndex","pageCallbacksNames","capitalized","triggerPageCallbacks","allPagesCallbacks","pageInitCallback","f7PageInitialized","pageQuery","from","fromPage","oldNavbarInnerContainer","reinitPage","onPageReinit","preloadOnly","onPageBeforeInit","initPage","onPageInit","pageRemoveCallback","pageContext","onPageBeforeRemove","onPageAfterBack","onPageBack","onPageAfterAnimation","tabBar","onPageBeforeAnimation","initPageMessages","initFormsStorage","initSmartSelects","initPageSwiper","initPullToRefresh","initPageInfiniteScroll","initPageScrollToolbars","initImagesLazyLoad","initPageProgressbar","initPageResizableTextarea","initPageDataTables","initPageMaterialPreloader","initPageMaterialInputs","initPageMaterialTabbar","reinitPageSwiper","reinitLazyLoad","initPageWithCallback","_remove","_modalsSelector","temporaryDom","findElement","notCached","leftPage","rightPage","direction","removeClasses","prepareNavbar","newNavbarInner","oldNavbarInner","newNavbarPosition","slidingOffset","animateNavbars","leftNavbarInner","rightNavbarInner","rightText","preprocess","pluginProcess","preroute","isBack","template7Render","t7_ctx","t7_template","t7_rendered_content","template7Cache","_ctx_path","_ctx","pageNameMatch","templateName","url_query","console","_load","afterAnimation","pushStateClearQueue","historyBecameUnique","pagesInView","reloadPosition","t7_rendered","isDynamicPage","pageElement","ci","f7RelatedNavbar","f7RelatedPage","navbarInner","newPageName","viewIndex","lastUrl","_history","lastIndexOf","proceed","routerPreOptions","component","componentLoader","newOptions","_back","animateBack","parseNewPage","setPages","navbarInners","force","pageToRemove","navbarToRemove","removeNavbar","manipulateDom","newNavbar","previousURL","pop","inners","oldNavbar","pageUrl","preloadUrl","_modalTemplateTempDiv","modalStackClearQueue","modal","modalHTML","modalTemplate","buttonsHTML","buttons","bold","titleHTML","textHTML","afterTextHTML","afterText","noButtons","verticalButtons","modalButtonsHTML","cssClass","close","onClick","openModal","alert","callbackOk","confirm","callbackCancel","prompt","modalLogin","username","modalPassword","showPreloader","hidePreloader","showIndicator","hideIndicator","actions","groupSelector","buttonSelector","toPopover","actionsToPopoverTemplate","modalActionsToPopoverTemplate","actionsToPopover","popoverHTML","popover","modalActionsTemplate","button","buttonClass","label","color","bg","disabled","groupIndex","clickTarget","buttonIndex","buttonParams","removeOnClose","closeByOutside","sizePopover","modalAngle","modalAngleLeft","modalAngleTop","modalWidth","modalHeight","modalAngleSize","targetWidth","targetHeight","targetOffset","targetOffsetLeft","targetOffsetTop","targetParentPage","modalTop","modalLeft","modalPosition","diffX","diffY","_modal","onResize","offResize","popup","pickerModal","loginScreen","isModal","isPopover","isPopup","isLoginScreen","isPickerModal","isActions","modalType","modalParent","marginTop","keepOnClose","setProgressbar","speed","progressbar","showProgressbar","hideProgressbar","allowPanelOpen","openPanel","panelPosition","panelTransitionEnd","transitionEndTarget","panel","panelOverlay","closePanel","effect","activePanel","initPanelsBreakpoints","setPanels","panelLeft","wasVisible","margin-left","panelRight","margin-right","initSwipePanels","side","opened","panelWidth","threshold","overlayOpacity","edge","loadImage","onLoad","imageIsLoading","imagesSequence","onLazyLoaded","onError","placeholderSrc","onLazyError","image","Image","onLazyLoad","lazyHandler","lazyLoadImages","isElementInViewport","rect","imagesLazyLoadPlaceholder","f7DestroyImagesLazyLoad","destroyImagesLazyLoad","reinitImagesLazyLoad","Messages","autoLayout","newMessagesFirst","scrollMessages","scrollMessagesOnlyOnEdge","messageTemplate","layout","message","onlyPic","isSent","appendMessage","addMessage","prependMessage","addMessages","newMessages","newMessagesHTML","hasImage","onlyImage","scrollHeightBefore","heightBefore","scrollBefore","onEdge","messages","messagesToReturn","removeMessage","removeMessages","clean","newScroll","currentScroll","f7Messages","allowSwipeout","initSwipeout","swipeoutEl","swipeOutEl","swipeOutContent","actionsRight","actionsLeft","actionsLeftWidth","actionsRightWidth","buttonsLeft","buttonsRight","overswipeRightButton","overswipeLeftButton","noFoldLeft","noFoldRight","openedActions","buttonOffset","swipeoutClose","swipeoutOpen","overswipeLeft","overswipeRight","$button","pow","_buttonOffset","actionsWidth","newTranslate","click","closed","dir","swipeOutActions","swipeOutActionsWidth","onSwipeoutClose","closeTO","swipeoutDelete","virtualIndex","f7VirtualListIndex","deleteItem","sortableToggle","sortableContainer","sortableOpen","sortableClose","initSortable","touchStartY","sortingEl","startIndex","sortingItems","minTop","offsetTop","sortingElHeight","currentEl","currentElOffset","currentElHeight","sortingElOffset","oldIndex","newIndex","moveItem","selects","smartSelect","$select","select","displayAs","valueText","selected","itemAfter","selectedText","smartSelectAddOption","option","selectName","smartSelectOpen","reLayout","closeOnHTMLClick","checkMaxLength","maxLength","checked","handleInputs","virtualListInstance","smartSelectItemTemplate","virtualListHeight","item","openIn","backOnSelect","inputName","picker","optionText","inputType","pageInit","f7SmartSelectPicker","closeText","smartSelectData","pageTitle","backText","pickerCloseText","popupCloseText","formTheme","smartSelectFormTheme","navbarTheme","smartSelectNavbarTheme","toolbarTheme","smartSelectToolbarTheme","pickerHeight","smartSelectPickerHeight","$selectData","optionHasMedia","optionImage","optionIcon","optionGroup","optionGroupLabel","optionIsLabel","previousGroup","optionColor","optionClassName","optionData","optionClass","groupLabel","isLabel","icon","hasMedia","checkbox","smartSelectItem","inputsHTML","navbarHTML","navbarLayout","toolbarHTML","noNavbar","noToolbar","noTabbar","smartSelectToolbar","smartSelectToolbarTemplate","inPicker","smartSelectNavbar","smartSelectNavbarTemplate","inPopup","inPage","leftTemplate","smartSelectPopupCloseTemplate","smartSelectBackTemplate","searchbarPlaceholder","searchbarCancel","useSearchbar","searchbarHTML","pageHTML","newPaddingBottom","paddingTop","paddingBottom","pageHeight","pageScrollHeight","inputTop","VirtualList","listBlock","cols","dynamicHeightBufferSize","showFilteredItemsOnly","renderExternal","vl","filteredItems","renderItem","osVersion","ul","displayDomCache","tempDomElement","lastRepaintY","fragment","createDocumentFragment","indexes","resetScrollTop","update","rowsPerScreen","rowsBefore","rowsAfter","rowsToRender","listHeight","maxBufferHeight","dynamicHeight","setListSize","heights","itemHeight","ceil","forceScrollTop","fromIndex","toIndex","heightBeforeFirstItem","heightBeforeLastItem","itemTop","topPosition","renderExternalItems","currentFromIndex","currentToIndex","onItemBeforeInsert","onBeforeClear","onItemsBeforeInsert","emptyTemplate","onItemsAfterInsert","scrollToItem","listTop","handleScroll","_isVisible","getClientRects","handleResize","appendItems","appendItem","replaceAllItems","replaceItem","prependItems","newCache","cached","prependItem","cachedIndex","leftIndex","rightIndex","indexShift","insertItemBefore","deleteItems","prevIndex","deletedItem","deleteAllItems","clearCache","reinitVirtualList","vlists","vlistInstance","os","pullStarted","wasScrolled","touchId","identifier","touches","dynamicTriggerDistance","triggerDistance","startTranslate","useTranslate","refresh","event","changedTouches","pullToRefreshDone","destroyPullToRefresh","destroyTarget","eventsTarget","hasNavbar","f7DestroyPullToRefresh","pullToRefreshTrigger","pullToRefreshContent","attachInfiniteScroll","infiniteContent","detachInfiniteScroll","scrollContent","bottomBarHeight","navbarHidden","toolbarHidden","tabbarHidden","tabbar","previousScroll","hasToolbar","hasTabbar","hideTabbar","toolbarHeight","tabbarHeight","f7ScrollToolbarsHandler","destroyScrollToolbars","materialTabbarSetHighlight","activeLink","tabLinkWidth","highlightTranslate","tabbarSetHighlight","initMaterialTabbar","showTab","tab","tabLink","newTab","tabs","isAnimatedTabs","tabTranslate","swiper","isSwipeableTabs","activeIndex","slideTo","oldTab","oldTabLink","oldTabId","accordionToggle","accordionClose","accordionOpen","list","expandedItem","initFastClicks","findActivableElement","activable","isInsideScrollableView","activeTimeout","rippleTimeout","addActive","activableElement","removeActive","isFormElement","nodes","androidNeedsBlur","noBlur","activeElement","targetNeedsFastClick","$el","targetNeedsFocus","tag","skipInputs","readOnly","targetNeedsPrevent","prevent","handleMouseDown","which","touchStartX","rippleTouchStart","handleMouseMove","rippleTouchMove","handleMouseUp","rippleTouchEnd","findRippleElement","needsRipple","rippleParent","createRipple","diameter","rippleWave","rippleTransform","removeRipple","toRemove","removeTimeout","rippleTarget","sendClick","targetElement","initMouseEvent","screenX","screenY","clientX","clientY","forwardedTouchEvent","navigator","standalone","elementFromPoint","tapHoldFired","tapHoldTimeout","needsFastClickTimeOut","needsFastClick","trackClick","selection","getSelection","rangeCount","focusNode","isCollapsed","activeSelection","scrollParent","f7ScrollTop","timeStamp","lastClickTime","_isMoved","webView","handleTouchCancel","handleClick","allowClick","stopImmediatePropagation","stopPropagation","androidChrome","initClickEvents","handleScrollTop","clicked","handleClicks","isLink","clickedData","pickerToClose","pickerToOpen","isTabLink","confirmTitle","closeOnCancel","accordionItem","validUrl","preventScrolling","appResizeCallbacks","getSize","resize","orientationchange","minimalUi","orientation","initResize","formsData","formStoreData","formId","formJSON","formDeleteData","removeItem","formGetData","formToData","form","formData","skipTypes","skipNames","formToJSON","formFromData","formFromJSON","storeForm","forms","resizeTextarea","resizableTextarea","f7DestroyResizableTextarea","destroyResizableTextarea","itemInput","notInputs","initMaterialWatchInputs","addFocusState","removeFocusState","watchChangeState","pushStateQueue","queue","stateUrl","stateContent","statePageName","initPushState","handlePopState","blockPopstate","readyState","Swiper","destroySwiperOnRemove","slider","destroySwiper","swipers","initialSlide","onSlideChangeStart","slides","sliders","sliderInstance","PhotoBrowser","pb","photos","spaceBetween","zoom","zoomMax","zoomMin","exposition","expositionHideCaptions","theme","swipeToClose","backLinkText","ofText","loop","lazyLoading","lazyLoadingInPrevNext","lazyLoadingOnTransitionStart","maxZoom","minZoom","iconsColorClass","iconsColor","preloaderColorClass","photoTemplate","photoLazyTemplate","lazyPhotoTemplate","objectTemplate","captionTemplate","navbarTemplate","toolbarTemplate","htmlTemplate","openIndex","onPopupClose","onOpen","swiperContainer","onClose","swiperWrapper","onSliderTransitionStart","current","total","loopedSlides","isBeginning","isEnd","captions","captionsContainer","captionIndex","previousSlideVideo","previousIndex","pause","onTransitionStart","onSliderTransitionEnd","onTransitionEnd","sliderSettings","nextButton","prevButton","indexButton","preloadImages","onTap","toggleExposition","onDoubleTap","onSlideChangeEnd","onLazyImageLoad","slide","img","onLazyImageReady","onTouchStart","swipeCloseTouchStart","onTouchMoveOpposite","swipeCloseTouchMove","onTouchEnd","swipeCloseTouchEnd","exposed","enableExposition","disableExposition","swipeToCloseDiff","swipeToCloseStart","swipeToCloseCurrent","swipeToCloseActiveSlide","swipeToCloseTimeStart","swipeToCloseIsTouched","allowSwipeToClose","swipeToCloseStarted","onSwipeToClose","photoBrowser","Autocomplete","handleInputValue","source","itemsHTML","limit","regExp","highlightMatches","itemValue","valueProperty","textProperty","dropdownItemTemplate","dropdownPlaceholderText","dropdownPlaceholderTemplate","dropdown","handleDropdownClick","clickedItem","updateInputValueOnSelect","onChange","searchbarPlaceholderText","searchbarCancelText","openWithAnimation","autoFocus","notFoundText","requestSourceOnOpen","expandInput","preloaderColor","preloader","opener","itemTemplate","dropdownTemplate","positionDropDown","listBlockOffsetLeft","inputOffsetLeft","inputOffsetTop","onSource","aValue","updateValues","valuesHTML","onSearch","isValues","bind","initEvents","autocomplete","Picker","convertToPopover","onlyInPopover","inline","inPopover","resizeCols","divider","calcSize","setValue","openOnInput","scrollToInput","onPickerClose","destroyPickerCol","updateValuesOnMomentum","updateValuesOnTouchmove","rotateEffect","momentumRatio","freeMode","closeByOutsideClick","inputReadOnly","toolbarCloseText","initialized","originBug","userAgent","arrValues","valueIndex","updateValue","forceValues","column","newValue","newDisplayValue","noDividerColumns","displayValues","displayValue","formatValue","initPickerCol","colElement","updateItems","updateDuringScroll","animationFrameId","col","touchCurrentY","allowItemClick","currentTranslate","wrapper","returnTo","minTranslate","maxTranslate","velocityTranslate","prevTranslate","velocityTime","touchEndTime","floor","colContainer","colIndex","wrapperHeight","itemsHeight","replaceValues","destroyEvents","newItemsHTML","columnHTML","colWidth","colHeight","valueCallbacks","newActiveIndex","previousActiveIndex","selectedItem","itemOffsetTop","translateOffset","itemOffset","itemsFit","angle","f7DestroyPickerCol","onlyItems","columnItemsHTML","textAlign","pickerHTML","pickerClass","colsHTML","f7Picker","Calendar","formatDate","date","year","getFullYear","month","getMonth","month1","day","getDate","weekDay","getDay","dateFormat","substring","monthNames","monthNamesShort","dayNames","dayNamesShort","destroyCalendarEvents","firstDay","weekendDays","rangePicker","minDate","maxDate","rangesClasses","touchMove","closeOnSelect","monthPicker","monthPickerTemplate","yearPicker","yearPickerTemplate","weekHeader","headerPlaceholder","header","footer","headerTemplate","footerTemplate","isH","addValue","inValuesIndex","sort","b","onlyHeader","inputValue","valueDate","initCalendarEvents","monthsTranslate","touchCurrentX","wrapperWidth","resetMonth","nextMonth","prevMonth","handleDayClick","dateYear","dateMonth","dateDay","onDayClick","prevYear","nextYear","f7DestroyCalendarEvents","dateInRange","dayDate","range","daysInMonth","d","monthHTML","daysInPrevMonth","firstDayOfMonthIndex","hasEvent","currentValues","dayIndex","today","setHours","rowHTML","dayNumber","weekDayIndex","dayYear","dayMonth","updateCurrentMonthYear","currentMonth","months","currentYear","onMonthChangeStart","currentIndex","onMonthYearChangeStart","onMonthChangeEnd","rebuildBoth","nextMonthHTML","prevMonthHTML","newMonthHTML","setMonthsTranslate","onMonthAdd","onMonthYearChangeEnd","prevMonthTranslate","currentMonthTranslate","nextMonthTranslate","nextDate","nextDateTime","transitionEndCallback","prevDate","prevDateTime","setYearMonth","targetDate","currentDate","monthTranslate","wrapperTranslate","layoutDate","currentMonthHTML","monthsHTML","weekHeaderHTML","dayName","f7Calendar","calendar","_tempNotificationElement","addNotification","media","notificationMedia","notificationTitle","subtitle","notificationSubtitle","closeIcon","hold","notificationHold","closeOnClick","notificationTemplate","notification","closeNotification","additionalClass","marginBottom","initDataTable","table","checkSelectedHeader","tableHeader","tableHeaderSelected","checkedItems","toggleRowSelected","_sentByF7DataTable","headerCell","columnIndex","currentSort","cell","isActive","collpsibleTitle","dataTables","initTemplate7Templates","_plugins","initPlugins","plugin","plugins","hook","hooks","pluginPrevent","prevents","process","processed","getDeviceInfo","onAppInit","DocumentTouch","supportsPassive","opts","defineProperty","ua","windows","ipod","iphone","osVersionArr","windowWidth","windowHeight","screen","statusBar","classNames","devicePixelRatio","major","autoplay","autoplayDelay","activeSlide","autoplayTimeoutId","fixLoop","_slideNext","emit","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","_el","initObserver","ObserverFunc","MutationObserver","WebkitMutationObserver","observer","mutations","mutation","observe","childList","characterData","observers","setParallaxTransform","pX","pY","rtlFactor","isHorizontal","normalizeEventName","touchEventsTarget","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeSticky","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","coverflow","rotate","stretch","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","mousewheelReleaseOnEdges","mousewheelInvert","mousewheelForceToAxis","mousewheelSensitivity","mousewheelEventsTarged","hashnav","hashnavWatchState","replaceState","breakpoints","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNextAmount","updateOnImagesReady","loopAdditionalSlides","control","controlInverse","controlBy","normalizeSlideIndex","allowSwipeToPrev","allowSwipeToNext","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideClass","slideActiveClass","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","jQuery","deepParam","deepDef","Zepto","currentBreakpoint","getActiveBreakpoint","point","breakpoint","points","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","flexbox","transforms3d","paginationContainer","wrongRTL","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","cursor","imagesToLoad","imagesLoaded","imgElement","srcset","sizes","checkForComplete","onReady","_onReady","currentSrc","autoplaying","autoplayPaused","startAutoplay","pauseAutoplay","snapGrid","updateAutoHeight","activeSlides","newHeight","updateContainerSize","clientWidth","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","slidesNumberEvenToRows","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","currentSlidesPerView","spv","breakLoop","updateSlidesProgress","offsetCenter","slideProgress","slideBefore","slideAfter","updateProgress","translatesDiff","wasBeginning","wasEnd","updateActiveIndex","snapIndex","updateClasses","updateRealIndex","realIndex","nextSlide","prevSlide","bullets","scale","scaleX","scaleY","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","setWrapperTranslate","set","controller","spline","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","lazy","onAfterResize","touchEventsDesktop","pointerEnabled","msPointerEnabled","actionDom","moveCapture","nested","browser","ie","onTouchMove","onClickNext","onEnterKey","onClickPrev","onClickIndex","slideNext","slidePrev","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToIndex","allowTouchCallbacks","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","velocities","startX","startY","currentX","currentY","isTouchEvent","startMoving","originalEvent","swipeDirection","preventedByNestedSwiper","atan2","getWrapperTranslate","setWrapperTransition","disableParentSwiper","currentPos","lastMoveEvent","velocityEvent","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","slideReset","stopIndex","groupSize","ratio","slideIndex","runCallbacks","lteIE9","setHistory","setHash","_slidePrev","disableTouchControl","enableTouchControl","byController","effects","setTransition","setTranslate","MozTransform","OTransform","MsTransform","msTransform","initObservers","containerParents","disconnectObservers","disconnect","createLoop","prependSlides","appendSlides","updatePosition","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","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","scale1","scale2","zFactor","isSafari","isUiWebView","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","pointerPosition","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","returnValue","dragEnd","draggableEvents","enableDraggable","disableDraggable","trackSize","newPos","newSize","LinearSpline","binarySearch","guess","array","lastIndex","i1","i3","interpolate","x2","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","setControlledTransition","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","sqrt","onGestureStart","z","gestures","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","offsetX","offsetY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","callPlugins","emitterEventListeners","handler","_handler","makeFocusable","addRole","role","addLabel","keyCode","notify","liveRegion","bullet","enableKeyboardControl","enableMousewheelControl","hashnavReplaceState","cleanupStyles","deleteInstance","disableKeyboardControl","disableMousewheelControl","setHistoryPopState","ieTouch","msMaxTouchPoints","maxTouchPoints","div","getElementsByTagName","Modernizr","csstransforms3d"],"mappings":"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","file":"framework7.min.js","sourcesContent":["/**\n * Framework7 1.6.5\n * Full featured mobile HTML framework for building iOS & Android apps\n * \n * http://framework7.io/\n * \n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: September 7, 2017\n */\nwindow.Dom7 = (function () {\n'use strict';\n\nvar Dom7 = function Dom7(arr) {\n var self = this;\n // Create array-like object\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n};\n\nfunction $$1(selector, context) {\n var arr = [];\n var 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;\n var tempParent;\n var 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.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || document).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) { arr.push(els[i]); }\n }\n }\n } else if (selector.nodeType || selector === window || selector === document) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n}\n\n$$1.fn = Dom7.prototype;\n$$1.Class = Dom7;\n\n$$1.use = function use() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args.forEach(function (methods) {\n var isUtils = '__utils' in methods;\n Object.keys(methods).forEach(function (methodName) {\n if (methodName === '__utils') { return; }\n if (isUtils) {\n $$1[methodName] = methods[methodName];\n } else {\n $$1.fn[methodName] = methods[methodName];\n }\n });\n });\n};\n\n// Remove Diacritics\nvar defaultDiacriticsRemovalap = [\n { base: 'A', letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F' },\n { base: 'AA', letters: '\\uA732' },\n { base: 'AE', letters: '\\u00C6\\u01FC\\u01E2' },\n { base: 'AO', letters: '\\uA734' },\n { base: 'AU', letters: '\\uA736' },\n { base: 'AV', letters: '\\uA738\\uA73A' },\n { base: 'AY', letters: '\\uA73C' },\n { base: 'B', letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181' },\n { base: 'C', letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E' },\n { base: 'D', letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779' },\n { base: 'DZ', letters: '\\u01F1\\u01C4' },\n { base: 'Dz', letters: '\\u01F2\\u01C5' },\n { base: 'E', letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E' },\n { base: 'F', letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B' },\n { base: 'G', letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E' },\n { base: 'H', letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D' },\n { base: 'I', letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197' },\n { base: 'J', letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248' },\n { base: 'K', letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2' },\n { base: 'L', letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780' },\n { base: 'LJ', letters: '\\u01C7' },\n { base: 'Lj', letters: '\\u01C8' },\n { base: 'M', letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C' },\n { base: 'N', letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4' },\n { base: 'NJ', letters: '\\u01CA' },\n { base: 'Nj', letters: '\\u01CB' },\n { base: 'O', letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C' },\n { base: 'OI', letters: '\\u01A2' },\n { base: 'OO', letters: '\\uA74E' },\n { base: 'OU', letters: '\\u0222' },\n { base: 'OE', letters: '\\u008C\\u0152' },\n { base: 'oe', letters: '\\u009C\\u0153' },\n { base: 'P', letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754' },\n { base: 'Q', letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A' },\n { base: 'R', letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782' },\n { base: 'S', letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784' },\n { base: 'T', letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786' },\n { base: 'TZ', letters: '\\uA728' },\n { base: 'U', letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244' },\n { base: 'V', letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245' },\n { base: 'VY', letters: '\\uA760' },\n { base: 'W', letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72' },\n { base: 'X', letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C' },\n { base: 'Y', letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE' },\n { base: 'Z', letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762' },\n { base: 'a', letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250' },\n { base: 'aa', letters: '\\uA733' },\n { base: 'ae', letters: '\\u00E6\\u01FD\\u01E3' },\n { base: 'ao', letters: '\\uA735' },\n { base: 'au', letters: '\\uA737' },\n { base: 'av', letters: '\\uA739\\uA73B' },\n { base: 'ay', letters: '\\uA73D' },\n { base: 'b', letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253' },\n { base: 'c', letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184' },\n { base: 'd', letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A' },\n { base: 'dz', letters: '\\u01F3\\u01C6' },\n { base: 'e', letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD' },\n { base: 'f', letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C' },\n { base: 'g', letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F' },\n { base: 'h', letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265' },\n { base: 'hv', letters: '\\u0195' },\n { base: 'i', letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131' },\n { base: 'j', letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249' },\n { base: 'k', letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3' },\n { base: 'l', letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747' },\n { base: 'lj', letters: '\\u01C9' },\n { base: 'm', letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F' },\n { base: 'n', letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5' },\n { base: 'nj', letters: '\\u01CC' },\n { base: 'o', letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275' },\n { base: 'oi', letters: '\\u01A3' },\n { base: 'ou', letters: '\\u0223' },\n { base: 'oo', letters: '\\uA74F' },\n { base: 'p', letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755' },\n { base: 'q', letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759' },\n { base: 'r', letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783' },\n { base: 's', letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B' },\n { base: 't', letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787' },\n { base: 'tz', letters: '\\uA729' },\n { base: 'u', letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289' },\n { base: 'v', letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C' },\n { base: 'vy', letters: '\\uA761' },\n { base: 'w', letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73' },\n { base: 'x', letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D' },\n { base: 'y', letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF' },\n { base: 'z', letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763' } ];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < defaultDiacriticsRemovalap.length; i += 1) {\n var letters = defaultDiacriticsRemovalap[i].letters;\n for (var j = 0; j < letters.length; j += 1) {\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;\n }\n}\n\nfunction parseUrlQuery(url) {\n var query = {};\n var urlToParse = url || window.location.href;\n var i;\n var params;\n var param;\n var length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n}\nfunction isArray(arr) {\n return Array.isArray(arr);\n}\nfunction each(obj, callback) {\n // Check it's iterable\n // TODO: Should probably raise a value error here\n if (typeof obj !== 'object') { return; }\n // Don't bother continuing without a callback\n if (!callback) { return; }\n if (Array.isArray(obj) || obj instanceof Dom7) {\n // Array\n for (var i = 0; i < obj.length; i += 1) {\n // If callback returns false\n if (callback(i, obj[i]) === false) {\n // Break out of the loop\n return;\n }\n }\n } else {\n // Object\n for (var prop in obj) {\n // Check the propertie belongs to the object\n // not it's prototype\n if (obj.hasOwnProperty(prop)) {\n // If the callback returns false\n if (callback(prop, obj[prop]) === false) {\n // Break out of the loop;\n return;\n }\n }\n }\n }\n}\nfunction unique(arr) {\n var uniqueArray = [];\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n }\n return uniqueArray;\n}\nfunction serializeObject(obj, parents) {\n if ( parents === void 0 ) parents = [];\n\n if (typeof obj === 'string') { return obj; }\n var resultArray = [];\n var separator = '&';\n var newParents;\n function varName(name) {\n if (parents.length > 0) {\n var parentParts = '';\n for (var j = 0; j < parents.length; j += 1) {\n if (j === 0) { parentParts += parents[j]; }\n else { parentParts += \"[\" + (encodeURIComponent(parents[j])) + \"]\"; }\n }\n return (parentParts + \"[\" + (encodeURIComponent(name)) + \"]\");\n }\n return encodeURIComponent(name);\n }\n function varValue(value) {\n return encodeURIComponent(value);\n }\n Object.keys(obj).forEach(function (prop) {\n var toPush;\n if (Array.isArray(obj[prop])) {\n toPush = [];\n for (var i = 0; i < obj[prop].length; i += 1) {\n if (!Array.isArray(obj[prop][i]) && typeof obj[prop][i] === 'object') {\n newParents = parents.slice();\n newParents.push(prop);\n newParents.push(String(i));\n toPush.push(serializeObject(obj[prop][i], newParents));\n } else {\n toPush.push(((varName(prop)) + \"[]=\" + (varValue(obj[prop][i]))));\n }\n }\n if (toPush.length > 0) { resultArray.push(toPush.join(separator)); }\n } else if (obj[prop] === null || obj[prop] === '') {\n resultArray.push(((varName(prop)) + \"=\"));\n } else if (typeof obj[prop] === 'object') {\n // Object, convert to named array\n newParents = parents.slice();\n newParents.push(prop);\n toPush = serializeObject(obj[prop], newParents);\n if (toPush !== '') { resultArray.push(toPush); }\n } else if (typeof obj[prop] !== 'undefined' && obj[prop] !== '') {\n // Should be string or plain value\n resultArray.push(((varName(prop)) + \"=\" + (varValue(obj[prop]))));\n } else if (obj[prop] === '') { resultArray.push(varName(prop)); }\n });\n return resultArray.join(separator);\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group1) { return group1.toUpperCase(); });\n}\nfunction dataset(el) {\n return $$1(el).dataset();\n}\nfunction requestAnimationFrame(callback) {\n if (window.requestAnimationFrame) { return window.requestAnimationFrame(callback); }\n else if (window.webkitRequestAnimationFrame) { return window.webkitRequestAnimationFrame(callback); }\n return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n if (window.cancelAnimationFrame) { return window.cancelAnimationFrame(id); }\n else if (window.webkitCancelAnimationFrame) { return window.webkitCancelAnimationFrame(id); }\n return window.clearTimeout(id);\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\nfunction extend() {\n var args = [], len$1 = arguments.length;\n while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n var to = Object(args[0]);\n for (var i = 1; i < args.length; i += 1) {\n var nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nvar Utils = {\n __utils: true,\n parseUrlQuery: parseUrlQuery,\n parseQuery: parseUrlQuery,\n isArray: isArray,\n each: each,\n unique: unique,\n serializeObject: serializeObject,\n param: serializeObject,\n toCamelCase: toCamelCase,\n dataset: dataset,\n requestAnimationFrame: requestAnimationFrame,\n cancelAnimationFrame: cancelAnimationFrame,\n extend: extend,\n removeDiacritics: function removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007E]/g, function (a) { return diacriticsMap[a] || a; });\n },\n getTranslate: function getTranslate(el, axis) {\n if ( axis === void 0 ) axis = 'x';\n\n var curStyle = window.getComputedStyle(el, null);\n var matrix;\n var curTransform;\n var transformMatrix;\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function map(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 } else {\n transformMatrix = curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[4]); }\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[5]); }\n }\n\n return curTransform || 0;\n },\n};\n\nvar Methods = {\n // Classes and attributes\n addClass: function addClass(className) {\n var this$1 = this;\n\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.add(classes[i]); }\n }\n }\n return this;\n },\n removeClass: function removeClass(className) {\n var this$1 = this;\n\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.remove(classes[i]); }\n }\n }\n return this;\n },\n hasClass: function hasClass(className) {\n if (!this[0]) { return false; }\n return this[0].classList.contains(className);\n },\n toggleClass: function toggleClass(className) {\n var this$1 = this;\n\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.toggle(classes[i]); }\n }\n }\n return this;\n },\n attr: function attr(attrs, value) {\n var arguments$1 = arguments;\n var this$1 = this;\n\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) { return this[0].getAttribute(attrs); }\n return undefined;\n }\n\n // Set attrs\n for (var i = 0; i < this.length; i += 1) {\n if (arguments$1.length === 2) {\n // String\n this$1[i].setAttribute(attrs, value);\n } else {\n // Object\n for (var attrName in attrs) {\n this$1[i][attrName] = attrs[attrName];\n this$1[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n },\n removeAttr: function removeAttr(attr) {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n this$1[i].removeAttribute(attr);\n }\n return this;\n },\n prop: function prop(props, value) {\n var arguments$1 = arguments;\n var this$1 = this;\n\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) { return this[0][props]; }\n } else {\n // Set props\n for (var i = 0; i < this.length; i += 1) {\n if (arguments$1.length === 2) {\n // String\n this$1[i][props] = value;\n } else {\n // Object\n for (var propName in props) {\n this$1[i][propName] = props[propName];\n }\n }\n }\n return this;\n }\n },\n data: function data(key, value) {\n var this$1 = this;\n\n var el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute((\"data-\" + key));\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (var i = 0; i < this.length; i += 1) {\n el = this$1[i];\n if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n },\n removeData: function removeData(key) {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this$1[i];\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n },\n dataset: function dataset$$1() {\n var el = this[0];\n if (!el) { return undefined; }\n var dataset$$1 = {};\n if (el.dataset) {\n for (var dataKey in el.dataset) {\n dataset$$1[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (var i = 0; i < el.attributes.length; i += 1) {\n var attr = el.attributes[i];\n if (attr.name.indexOf('data-') >= 0) {\n dataset$$1[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n for (var key in dataset$$1) {\n if (dataset$$1[key] === 'false') { dataset$$1[key] = false; }\n else if (dataset$$1[key] === 'true') { dataset$$1[key] = true; }\n else if (parseFloat(dataset$$1[key]) === dataset$$1[key] * 1) { dataset$$1[key] *= 1; }\n }\n return dataset$$1;\n },\n val: function val(value) {\n var this$1 = this;\n\n if (typeof value === 'undefined') {\n if (this[0]) {\n if (this[0].multiple && this[0].nodeName.toLowerCase() === 'select') {\n var values = [];\n for (var i = 0; i < this[0].selectedOptions.length; i += 1) {\n values.push(this$1[0].selectedOptions[i].value);\n }\n return values;\n }\n return this[0].value;\n }\n return undefined;\n }\n\n for (var i$1 = 0; i$1 < this.length; i$1 += 1) {\n this$1[i$1].value = value;\n }\n return this;\n },\n // Transforms\n transform: function transform(transform$1) {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this$1[i].style;\n elStyle.webkitTransform = transform$1;\n elStyle.transform = transform$1;\n }\n return this;\n },\n transition: function transition(duration) {\n var this$1 = this;\n\n if (typeof duration !== 'string') {\n duration = duration + \"ms\";\n }\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this$1[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n },\n // Events\n on: function on() {\n var this$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var eventType = args[0];\n var targetSelector;\n var listener;\n var capture = false;\n if (typeof args[1] === 'function') {\n targetSelector = false;\n listener = args[1];\n capture = args[2];\n } else {\n targetSelector = args[1];\n listener = args[2];\n capture = args[3];\n }\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) { return; }\n var eventData = e.target.dom7EventData || [];\n eventData.unshift(e);\n if ($$1(target).is(targetSelector)) { listener.apply(target, eventData); }\n else {\n var parents = $$1(target).parents();\n for (var k = 0; k < parents.length; k += 1) {\n if ($$1(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n }\n }\n }\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n eventData.unshift(e);\n listener.apply(this, eventData);\n }\n var events = eventType.split(' ');\n var j;\n for (var i = 0; i < this.length; i += 1) {\n var el = this$1[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n if (!el.dom7Listeners) { el.dom7Listeners = []; }\n el.dom7Listeners.push({\n type: eventType,\n listener: listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(events[j], handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n if (!el.dom7LiveListeners) { el.dom7LiveListeners = []; }\n el.dom7LiveListeners.push({\n type: eventType,\n listener: listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n return this;\n },\n off: function off() {\n var this$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var eventType = args[0];\n var targetSelector;\n var listener;\n var capture = false;\n if (typeof args[1] === 'function') {\n targetSelector = false;\n listener = args[1];\n capture = args[2];\n } else {\n targetSelector = args[1];\n listener = args[2];\n capture = args[3];\n }\n var events = eventType.split(' ');\n for (var i = 0; i < events.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n var el = this$1[j];\n if (!targetSelector) {\n if (el.dom7Listeners) {\n for (var k = 0; k < el.dom7Listeners.length; k += 1) {\n if (listener) {\n if (el.dom7Listeners[k].listener === listener) {\n el.removeEventListener(events[i], el.dom7Listeners[k].proxyListener, capture);\n }\n } else if (el.dom7Listeners[k].type === events[i]) {\n el.removeEventListener(events[i], el.dom7Listeners[k].proxyListener, capture);\n }\n }\n }\n } else if (el.dom7LiveListeners) {\n for (var k$1 = 0; k$1 < el.dom7LiveListeners.length; k$1 += 1) {\n if (listener) {\n if (el.dom7LiveListeners[k$1].listener === listener) {\n el.removeEventListener(events[i], el.dom7LiveListeners[k$1].proxyListener, capture);\n }\n } else if (el.dom7LiveListeners[k$1].type === events[i]) {\n el.removeEventListener(events[i], el.dom7LiveListeners[k$1].proxyListener, capture);\n }\n }\n }\n }\n }\n return this;\n },\n once: function once(eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2];\n targetSelector = false;\n }\n function proxy(e) {\n var eventData = e.target.dom7EventData || [];\n listener.apply(this, eventData);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n return dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function trigger() {\n var this$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var events = args[0].split(' ');\n var eventData = args[1];\n for (var i = 0; i < events.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n var evt = (void 0);\n try {\n evt = new window.CustomEvent(events[i], { detail: eventData, bubbles: true, cancelable: true });\n } catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(events[i], true, true);\n evt.detail = eventData;\n }\n this$1[j].dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n this$1[j].dispatchEvent(evt);\n this$1[j].dom7EventData = [];\n delete this$1[j].dom7EventData;\n }\n }\n return this;\n },\n transitionEnd: function transitionEnd(callback) {\n var events = ['webkitTransitionEnd', 'transitionend'];\n var dom = this;\n var i;\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 += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n animationEnd: function animationEnd(callback) {\n var events = ['webkitAnimationEnd', 'animationend'];\n var dom = this;\n var i;\n function fireCallBack(e) {\n if (e.target !== this) { return; }\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function width() {\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n },\n outerWidth: function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n },\n height: function height() {\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n },\n outerHeight: function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n },\n offset: function offset() {\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 = el === window ? window.scrollY : el.scrollTop;\n var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n },\n hide: function hide() {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n this$1[i].style.display = 'none';\n }\n return this;\n },\n show: function show() {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this$1[i];\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n return this;\n },\n styles: function styles() {\n if (this[0]) { return window.getComputedStyle(this[0], null); }\n return {};\n },\n css: function css(props, value) {\n var this$1 = this;\n\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 } else {\n for (i = 0; i < this.length; i += 1) {\n for (var prop in props) {\n this$1[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 += 1) {\n this$1[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n\n // Dom manipulation\n toArray: function toArray() {\n var this$1 = this;\n\n var arr = [];\n for (var i = 0; i < this.length; i += 1) {\n arr.push(this$1[i]);\n }\n return arr;\n },\n // Iterate over the collection passing elements to `callback`\n each: function each$$1(callback) {\n var this$1 = this;\n\n // Don't bother continuing without a callback\n if (!callback) { return this; }\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this$1[i], i, this$1[i]) === false) {\n // End the loop early\n return this$1;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n },\n forEach: function forEach(callback) {\n var this$1 = this;\n\n // Don't bother continuing without a callback\n if (!callback) { return this; }\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this$1[i], this$1[i], i) === false) {\n // End the loop early\n return this$1;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n },\n filter: function filter(callback) {\n var matchedItems = [];\n var dom = this;\n for (var i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }\n }\n return new Dom7(matchedItems);\n },\n map: function map(callback) {\n var modifiedItems = [];\n var dom = this;\n for (var i = 0; i < dom.length; i += 1) {\n modifiedItems.push(callback.call(dom[i], i, dom[i]));\n }\n return new Dom7(modifiedItems);\n },\n html: function html(html$1) {\n var this$1 = this;\n\n if (typeof html$1 === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this$1[i].innerHTML = html$1;\n }\n return this;\n },\n text: function text(text$1) {\n var this$1 = this;\n\n if (typeof text$1 === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this$1[i].textContent = text$1;\n }\n return this;\n },\n is: function is(selector) {\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') { return false; }\n if (typeof selector === 'string') {\n if (el.matches) { return el.matches(selector); }\n else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n compareWith = $$1(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n } else if (selector === document) { return el === document; }\n else if (selector === window) { return el === window; }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n }\n return false;\n },\n indexOf: function indexOf(el) {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n if (this$1[i] === el) { return i; }\n }\n },\n index: function index() {\n var child = this[0];\n var i;\n if (child) {\n i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) { i += 1; }\n }\n return i;\n }\n },\n eq: function eq(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 return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function append() {\n var this$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var newChild;\n\n for (var k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this$1[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this$1[i].appendChild(newChild[j]);\n }\n } else {\n this$1[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n },\n appendTo: function appendTo(parent) {\n $$1(parent).append(this);\n return this;\n },\n prepend: function prepend(newChild) {\n var this$1 = this;\n\n var i;\n var j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this$1[i].insertBefore(tempDiv.childNodes[j], this$1[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this$1[i].insertBefore(newChild[j], this$1[i].childNodes[0]);\n }\n } else {\n this$1[i].insertBefore(newChild, this$1[i].childNodes[0]);\n }\n }\n return this;\n },\n prependTo: function prependTo(parent) {\n $$1(parent).prepend(this);\n return this;\n },\n insertBefore: function insertBefore(selector) {\n var this$1 = this;\n\n var before = $$1(selector);\n for (var i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this$1[i], before[0]);\n } else if (before.length > 1) {\n for (var j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this$1[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function insertAfter(selector) {\n var this$1 = this;\n\n var after = $$1(selector);\n for (var i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this$1[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (var j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this$1[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $$1(this[0].nextElementSibling).is(selector)) { return new Dom7([this[0].nextElementSibling]); }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n },\n nextAll: function nextAll(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 ($$1(next).is(selector)) { nextEls.push(next); }\n } else { nextEls.push(next); }\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n if (selector) {\n if (el.previousElementSibling && $$1(el.previousElementSibling).is(selector)) { return new Dom7([el.previousElementSibling]); }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n },\n prevAll: function prevAll(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 ($$1(prev).is(selector)) { prevEls.push(prev); }\n } else { prevEls.push(prev); }\n el = prev;\n }\n return new Dom7(prevEls);\n },\n siblings: function siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n },\n parent: function parent(selector) {\n var this$1 = this;\n\n var parents = [];\n for (var i = 0; i < this.length; i += 1) {\n if (this$1[i].parentNode !== null) {\n if (selector) {\n if ($$1(this$1[i].parentNode).is(selector)) { parents.push(this$1[i].parentNode); }\n } else {\n parents.push(this$1[i].parentNode);\n }\n }\n }\n return $$1(unique(parents));\n },\n parents: function parents(selector) {\n var this$1 = this;\n\n var parents = [];\n for (var i = 0; i < this.length; i += 1) {\n var parent = this$1[i].parentNode;\n while (parent) {\n if (selector) {\n if ($$1(parent).is(selector)) { parents.push(parent); }\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $$1(unique(parents));\n },\n closest: function closest(selector) {\n var closest = this;\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n },\n find: function find(selector) {\n var this$1 = this;\n\n var foundElements = [];\n for (var i = 0; i < this.length; i += 1) {\n var found = this$1[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function children(selector) {\n var this$1 = this;\n\n var children = [];\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this$1[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n } else if (childNodes[j].nodeType === 1 && $$1(childNodes[j]).is(selector)) { children.push(childNodes[j]); }\n }\n }\n return new Dom7(unique(children));\n },\n remove: function remove() {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n if (this$1[i].parentNode) { this$1[i].parentNode.removeChild(this$1[i]); }\n }\n return this;\n },\n detach: function detach() {\n return this.remove();\n },\n add: function add() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var dom = this;\n var i;\n var j;\n for (i = 0; i < args.length; i += 1) {\n var toAdd = $$1(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n },\n empty: function empty() {\n var this$1 = this;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this$1[i];\n if (el.nodeType === 1) {\n for (var j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n el.textContent = '';\n }\n }\n return this;\n },\n};\n\n// Shortcuts\nvar shortcuts = ('click blur focus focusin focusout keyup keydown keypress submit change mousedown mousemove mouseup mouseenter mouseleave mouseout mouseover touchstart touchend touchmove resize scroll').split(' ');\nvar notTrigger = ('resize scroll').split(' ');\nfunction createMethod(name) {\n Methods[name] = function eventShortcut(targetSelector, listener, capture) {\n var this$1 = this;\n\n if (typeof targetSelector === 'undefined') {\n for (var i = 0; i < this.length; i += 1) {\n if (notTrigger.indexOf(name) < 0) {\n if (name in this$1[i]) { this$1[i][name](); }\n else {\n $$1(this$1[i]).trigger(name);\n }\n }\n }\n return this;\n }\n return this.on(name, targetSelector, listener, capture);\n };\n}\nfor (var i = 0; i < shortcuts.length; i += 1) {\n createMethod(shortcuts[i]);\n}\n\nvar Scroll = {\n scrollTo: function scrollTo() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var left = args[0];\n var top = args[1];\n var duration = args[2];\n var easing = args[3];\n var callback = args[4];\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n var assign;\n (assign = args, left = assign[0], top = assign[1], duration = assign[2], callback = assign[3], easing = assign[4]);\n }\n if (typeof easing === 'undefined') { easing = 'swing'; }\n\n return this.each(function animate() {\n var el = this;\n var currentTop;\n var currentLeft;\n var maxTop;\n var maxLeft;\n var newTop;\n var newLeft;\n var scrollTop;\n var scrollLeft;\n var animateTop = top > 0 || top === 0;\n var animateLeft = left > 0 || left === 0;\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n if (animateTop) {\n currentTop = el.scrollTop;\n if (!duration) {\n el.scrollTop = top;\n }\n }\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n if (!duration) { return; }\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n var startTime = null;\n if (animateTop && newTop === currentTop) { animateTop = false; }\n if (animateLeft && newLeft === currentLeft) { animateLeft = false; }\n function render(time) {\n if ( time === void 0 ) time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n var done;\n if (animateTop) { scrollTop = currentTop + (easeProgress * (newTop - currentTop)); }\n if (animateLeft) { scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft)); }\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) { callback(); }\n return;\n }\n if (animateTop) { el.scrollTop = scrollTop; }\n if (animateLeft) { el.scrollLeft = scrollLeft; }\n requestAnimationFrame(render);\n }\n requestAnimationFrame(render);\n });\n },\n // scrollTop(top, duration, easing, callback) {\n scrollTop: function scrollTop() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var top = args[0];\n var duration = args[1];\n var easing = args[2];\n var callback = args[3];\n if (args.length === 3 && typeof easing === 'function') {\n var assign;\n (assign = args, top = assign[0], duration = assign[1], callback = assign[2], easing = assign[3]);\n }\n var dom = this;\n if (typeof top === 'undefined') {\n if (dom.length > 0) { return dom[0].scrollTop; }\n return null;\n }\n return dom.scrollTo(undefined, top, duration, easing, callback);\n },\n scrollLeft: function scrollLeft() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var left = args[0];\n var duration = args[1];\n var easing = args[2];\n var callback = args[3];\n if (args.length === 3 && typeof easing === 'function') {\n var assign;\n (assign = args, left = assign[0], duration = assign[1], callback = assign[2], easing = assign[3]);\n }\n var dom = this;\n if (typeof left === 'undefined') {\n if (dom.length > 0) { return dom[0].scrollLeft; }\n return null;\n }\n return dom.scrollTo(left, undefined, duration, easing, callback);\n },\n};\n\nfunction animate(initialProps, initialParams) {\n var els = this;\n var a = {\n props: $$1.extend({}, initialProps),\n params: $$1.extend({\n duration: 300,\n easing: 'swing', // or 'linear'\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n }, initialParams),\n\n elements: els,\n animating: false,\n que: [],\n\n easingProgress: function easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - (Math.cos(progress * Math.PI) / 2);\n }\n if (typeof easing === 'function') {\n return easing(progress);\n }\n return progress;\n },\n stop: function stop() {\n if (a.frameId) {\n cancelAnimationFrame(a.frameId);\n }\n a.animating = false;\n a.elements.each(function (index, el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done: function done(complete) {\n a.animating = false;\n a.elements.each(function (index, el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) { complete(els); }\n if (a.que.length > 0) {\n var que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate: function animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n var elements = [];\n\n // Define & Cache Initials & Units\n a.elements.each(function (index, el) {\n var initialFullValue;\n var initialValue;\n var unit;\n var finalValue;\n var finalFullValue;\n\n if (!el.dom7AnimateInstance) { a.elements[index].dom7AnimateInstance = a; }\n\n elements[index] = {\n container: el,\n };\n Object.keys(props).forEach(function (prop) {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue: initialFullValue,\n initialValue: initialValue,\n unit: unit,\n finalValue: finalValue,\n finalFullValue: finalFullValue,\n currentValue: initialValue,\n };\n });\n });\n\n var startTime = null;\n var time;\n var elementsDone = 0;\n var propsDone = 0;\n var done;\n var began = false;\n\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n var progress;\n var easeProgress;\n // let el;\n if (!began) {\n began = true;\n if (params.begin) { params.begin(els); }\n }\n if (startTime === null) {\n startTime = time;\n }\n if (params.progress) {\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n }\n\n elements.forEach(function (element) {\n var el = element;\n if (done || el.done) { return; }\n Object.keys(props).forEach(function (prop) {\n if (done || el.done) { return; }\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n var ref = el[prop];\n var initialValue = ref.initialValue;\n var finalValue = ref.finalValue;\n var unit = ref.unit;\n el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n var currentValue = el[prop].currentValue;\n\n if (\n (finalValue > initialValue && currentValue >= finalValue) ||\n (finalValue < initialValue && currentValue <= finalValue)) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n if (done) {\n a.done(params.complete);\n return;\n }\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) { return; }\n // Then call\n a.frameId = requestAnimationFrame(render);\n }\n a.frameId = requestAnimationFrame(render);\n return a;\n },\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n var animateInstance;\n for (var i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else { a.elements[i].dom7AnimateInstance = a; }\n }\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n var els = this;\n for (var i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nvar Animate = {\n animate: animate,\n stop: stop,\n};\n\n// Global Ajax Setup\nvar globalAjaxOptions = {};\nfunction ajaxSetup(options) {\n if (options.type && !options.method) { options.method = options.type; }\n each(options, function (optionName, optionValue) {\n globalAjaxOptions[optionName] = optionValue;\n });\n}\n\n// JSONP Requests\nvar jsonpRequests = 0;\n\n// Ajax\nfunction ajax(options) {\n var defaults = {\n method: 'GET',\n data: false,\n async: true,\n cache: true,\n user: '',\n password: '',\n headers: {},\n xhrFields: {},\n statusCode: {},\n processData: true,\n dataType: 'text',\n contentType: 'application/x-www-form-urlencoded',\n timeout: 0,\n };\n var callbacks = ['beforeSend', 'error', 'complete', 'success', 'statusCode'];\n\n // For jQuery guys\n if (options.type) { options.method = options.type; }\n\n // Global options\n var globals = globalAjaxOptions;\n\n // Merge global and defaults\n each(globals, function (globalOptionName, globalOptionValue) {\n if (callbacks.indexOf(globalOptionName) < 0) { defaults[globalOptionName] = globalOptionValue; }\n });\n\n // Function to run XHR callbacks and events\n function fireAjaxCallback(eventName, eventData, callbackName) {\n var a = arguments;\n if (eventName) { $$1(document).trigger(eventName, eventData); }\n if (callbackName) {\n // Global callback\n if (callbackName in globals) { globals[callbackName](a[3], a[4], a[5], a[6]); }\n // Options callback\n if (options[callbackName]) { options[callbackName](a[3], a[4], a[5], a[6]); }\n }\n }\n\n // Merge options and defaults\n each(defaults, function (prop, defaultValue) {\n if (!(prop in options)) { options[prop] = defaultValue; }\n });\n\n // Default URL\n if (!options.url) {\n options.url = window.location.toString();\n }\n // Parameters Prefix\n var paramsPrefix = options.url.indexOf('?') >= 0 ? '&' : '?';\n\n // UC method\n var method = options.method.toUpperCase();\n\n // Data to modify GET URL\n if ((method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') && options.data) {\n var stringData;\n if (typeof options.data === 'string') {\n // Should be key=value string\n if (options.data.indexOf('?') >= 0) { stringData = options.data.split('?')[1]; }\n else { stringData = options.data; }\n } else {\n // Should be key=value object\n stringData = serializeObject(options.data);\n }\n if (stringData.length) {\n options.url += paramsPrefix + stringData;\n if (paramsPrefix === '?') { paramsPrefix = '&'; }\n }\n }\n // JSONP\n if (options.dataType === 'json' && options.url.indexOf('callback=') >= 0) {\n var callbackName = \"f7jsonp_\" + (Date.now() + ((jsonpRequests += 1)));\n var abortTimeout;\n var callbackSplit = options.url.split('callback=');\n var requestUrl = (callbackSplit[0]) + \"callback=\" + callbackName;\n if (callbackSplit[1].indexOf('&') >= 0) {\n var addVars = callbackSplit[1].split('&').filter(function (el) { return el.indexOf('=') > 0; }).join('&');\n if (addVars.length > 0) { requestUrl += \"&\" + addVars; }\n }\n\n // Create script\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.onerror = function onerror() {\n clearTimeout(abortTimeout);\n fireAjaxCallback(undefined, undefined, 'error', null, 'scripterror');\n fireAjaxCallback('ajaxComplete ajax:complete', { scripterror: true }, 'complete', null, 'scripterror');\n };\n script.src = requestUrl;\n\n // Handler\n window[callbackName] = function jsonpCallback(data) {\n clearTimeout(abortTimeout);\n fireAjaxCallback(undefined, undefined, 'success', data);\n script.parentNode.removeChild(script);\n script = null;\n delete window[callbackName];\n };\n document.querySelector('head').appendChild(script);\n\n if (options.timeout > 0) {\n abortTimeout = setTimeout(function () {\n script.parentNode.removeChild(script);\n script = null;\n fireAjaxCallback(undefined, undefined, 'error', null, 'timeout');\n }, options.timeout);\n }\n\n return;\n }\n\n // Cache for GET/HEAD requests\n if (method === 'GET' || method === 'HEAD' || method === 'OPTIONS' || method === 'DELETE') {\n if (options.cache === false) {\n options.url += paramsPrefix + \"_nocache\" + (Date.now());\n }\n }\n\n // Create XHR\n var xhr = new XMLHttpRequest();\n\n // Save Request URL\n xhr.requestUrl = options.url;\n xhr.requestParameters = options;\n\n // Open XHR\n xhr.open(method, options.url, options.async, options.user, options.password);\n\n // Create POST Data\n var postData = null;\n\n if ((method === 'POST' || method === 'PUT' || method === 'PATCH') && options.data) {\n if (options.processData) {\n var postDataInstances = [ArrayBuffer, Blob, Document, FormData];\n // Post Data\n if (postDataInstances.indexOf(options.data.constructor) >= 0) {\n postData = options.data;\n } else {\n // POST Headers\n var boundary = \"---------------------------\" + (Date.now().toString(16));\n\n if (options.contentType === 'multipart/form-data') {\n xhr.setRequestHeader('Content-Type', (\"multipart/form-data; boundary=\" + boundary));\n } else {\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n postData = '';\n var data = serializeObject(options.data);\n if (options.contentType === 'multipart/form-data') {\n data = data.split('&');\n var newData = [];\n for (var i = 0; i < data.length; i += 1) {\n newData.push((\"Content-Disposition: form-data; name=\\\"\" + (data[i].split('=')[0]) + \"\\\"\\r\\n\\r\\n\" + (data[i].split('=')[1]) + \"\\r\\n\"));\n }\n postData = \"--\" + boundary + \"\\r\\n\" + (newData.join((\"--\" + boundary + \"\\r\\n\"))) + \"--\" + boundary + \"--\\r\\n\";\n } else {\n postData = data;\n }\n }\n } else {\n postData = options.data;\n }\n }\n\n // Additional headers\n if (options.headers) {\n each(options.headers, function (headerName, headerCallback) {\n xhr.setRequestHeader(headerName, headerCallback);\n });\n }\n\n // Check for crossDomain\n if (typeof options.crossDomain === 'undefined') {\n options.crossDomain = /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(options.url) && RegExp.$2 !== window.location.host;\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.xhrFields) {\n each(options.xhrFields, function (fieldName, fieldValue) {\n xhr[fieldName] = fieldValue;\n });\n }\n\n var xhrTimeout;\n // Handle XHR\n xhr.onload = function onload() {\n if (xhrTimeout) { clearTimeout(xhrTimeout); }\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {\n var responseData;\n if (options.dataType === 'json') {\n try {\n responseData = JSON.parse(xhr.responseText);\n fireAjaxCallback('ajaxSuccess ajax:success', { xhr: xhr }, 'success', responseData, xhr.status, xhr);\n } catch (err) {\n fireAjaxCallback('ajaxError ajax:error', { xhr: xhr, parseerror: true }, 'error', xhr, 'parseerror');\n }\n } else {\n responseData = xhr.responseType === 'text' || xhr.responseType === '' ? xhr.responseText : xhr.response;\n fireAjaxCallback('ajaxSuccess ajax:success', { xhr: xhr }, 'success', responseData, xhr.status, xhr);\n }\n } else {\n fireAjaxCallback('ajaxError ajax:error', { xhr: xhr }, 'error', xhr, xhr.status);\n }\n if (options.statusCode) {\n if (globals.statusCode && globals.statusCode[xhr.status]) { globals.statusCode[xhr.status](xhr); }\n if (options.statusCode[xhr.status]) { options.statusCode[xhr.status](xhr); }\n }\n fireAjaxCallback('ajaxComplete ajax:complete', { xhr: xhr }, 'complete', xhr, xhr.status);\n };\n\n xhr.onerror = function onerror() {\n if (xhrTimeout) { clearTimeout(xhrTimeout); }\n fireAjaxCallback('ajaxError ajax:error', { xhr: xhr }, 'error', xhr, xhr.status);\n fireAjaxCallback('ajaxComplete ajax:complete', { xhr: xhr, error: true }, 'complete', xhr, 'error');\n };\n\n // Ajax start callback\n fireAjaxCallback('ajaxStart ajax:start', { xhr: xhr }, 'start', xhr);\n fireAjaxCallback(undefined, undefined, 'beforeSend', xhr);\n\n // Timeout\n if (options.timeout > 0) {\n xhr.onabort = function onabort() {\n if (xhrTimeout) { clearTimeout(xhrTimeout); }\n };\n xhrTimeout = setTimeout(function () {\n xhr.abort();\n fireAjaxCallback('ajaxError ajax:error', { xhr: xhr, timeout: true }, 'error', xhr, 'timeout');\n fireAjaxCallback('ajaxComplete ajax:complete', { xhr: xhr, timeout: true }, 'complete', xhr, 'timeout');\n }, options.timeout);\n }\n\n // Send XHR\n xhr.send(postData);\n\n // Return XHR object\n return xhr;\n}\n\nfunction ajaxShortcut(method) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n var url;\n var data;\n var success;\n var error;\n var dataType;\n if (typeof args[1] === 'function') {\n var assign;\n (assign = args, url = assign[0], success = assign[1], error = assign[2], dataType = assign[3]);\n } else {\n var assign$1;\n (assign$1 = args, url = assign$1[0], data = assign$1[1], success = assign$1[2], error = assign$1[3], dataType = assign$1[4]);\n }\n [success, error].forEach(function (callback) {\n if (typeof callback === 'string') {\n dataType = callback;\n if (callback === success) { success = undefined; }\n else { error = undefined; }\n }\n });\n dataType = dataType || (method === 'getJSON' ? 'json' : undefined);\n return ajax({\n url: url,\n method: method === 'post' ? 'POST' : 'GET',\n data: data,\n success: success,\n error: error,\n dataType: dataType,\n });\n}\n\nfunction get() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args.unshift('get');\n return ajaxShortcut.apply(this, args);\n}\nfunction post() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args.unshift('post');\n return ajaxShortcut.apply(this, args);\n}\nfunction getJSON() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args.unshift('getJSON');\n return ajaxShortcut.apply(this, args);\n}\n\nvar Ajax = {\n __utils: true,\n ajaxSetup: ajaxSetup,\n ajax: ajax,\n get: get,\n post: post,\n getJSON: getJSON,\n};\n\n// Utils & Helpers\n$$1.use(Utils, Methods, Scroll, Animate, Ajax);\n\nreturn $$1;\n\n}());\n\nwindow.Template7 = (function () {\n'use strict';\n\nvar template7Context;\nif (typeof window !== 'undefined') {\n template7Context = window;\n} else if (typeof global !== 'undefined') {\n template7Context = global;\n} else {\n template7Context = undefined;\n}\nfunction isArray(arr) {\n return Array.isArray ? Array.isArray(arr) : Object.prototype.toString.apply(arr) === '[object Array]';\n}\nfunction isFunction(func) {\n return typeof func === 'function';\n}\nfunction escape(string) {\n return (typeof template7Context !== 'undefined' && template7Context.escape ? template7Context.escape(string) : string)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"');\n}\nvar quoteSingleRexExp = new RegExp('\\'', 'g');\nvar quoteDoubleRexExp = new RegExp('\"', 'g');\nfunction helperToSlices(string) {\n var helperParts = string.replace(/[{}#}]/g, '').split(' ');\n var slices = [];\n var shiftIndex;\n var i;\n var j;\n for (i = 0; i < helperParts.length; i += 1) {\n var part = helperParts[i];\n var blockQuoteRegExp = (void 0);\n var openingQuote = (void 0);\n if (i === 0) { slices.push(part); }\n else if (part.indexOf('\"') === 0 || part.indexOf('\\'') === 0) {\n blockQuoteRegExp = part.indexOf('\"') === 0 ? quoteDoubleRexExp : quoteSingleRexExp;\n openingQuote = part.indexOf('\"') === 0 ? '\"' : '\\'';\n // Plain String\n if (part.match(blockQuoteRegExp).length === 2) {\n // One word string\n slices.push(part);\n } else {\n // Find closed Index\n shiftIndex = 0;\n for (j = i + 1; j < helperParts.length; j += 1) {\n part += \" \" + (helperParts[j]);\n if (helperParts[j].indexOf(openingQuote) >= 0) {\n shiftIndex = j;\n slices.push(part);\n break;\n }\n }\n if (shiftIndex) { i = shiftIndex; }\n }\n } else if (part.indexOf('=') > 0) {\n // Hash\n var hashParts = part.split('=');\n var hashName = hashParts[0];\n var hashContent = hashParts[1];\n if (!blockQuoteRegExp) {\n blockQuoteRegExp = hashContent.indexOf('\"') === 0 ? quoteDoubleRexExp : quoteSingleRexExp;\n openingQuote = hashContent.indexOf('\"') === 0 ? '\"' : '\\'';\n }\n if (hashContent.match(blockQuoteRegExp).length !== 2) {\n shiftIndex = 0;\n for (j = i + 1; j < helperParts.length; j += 1) {\n hashContent += \" \" + (helperParts[j]);\n if (helperParts[j].indexOf(openingQuote) >= 0) {\n shiftIndex = j;\n break;\n }\n }\n if (shiftIndex) { i = shiftIndex; }\n }\n var hash = [hashName, hashContent.replace(blockQuoteRegExp, '')];\n slices.push(hash);\n } else {\n // Plain variable\n slices.push(part);\n }\n }\n return slices;\n}\nfunction stringToBlocks(string) {\n var blocks = [];\n var i;\n var j;\n if (!string) { return []; }\n var stringBlocks = string.split(/({{[^{^}]*}})/);\n for (i = 0; i < stringBlocks.length; i += 1) {\n var block = stringBlocks[i];\n if (block === '') { continue; }\n if (block.indexOf('{{') < 0) {\n blocks.push({\n type: 'plain',\n content: block,\n });\n } else {\n if (block.indexOf('{/') >= 0) {\n continue;\n }\n if (block.indexOf('{#') < 0 && block.indexOf(' ') < 0 && block.indexOf('else') < 0) {\n // Simple variable\n blocks.push({\n type: 'variable',\n contextName: block.replace(/[{}]/g, ''),\n });\n continue;\n }\n // Helpers\n var helperSlices = helperToSlices(block);\n var helperName = helperSlices[0];\n var isPartial = helperName === '>';\n var helperContext = [];\n var helperHash = {};\n for (j = 1; j < helperSlices.length; j += 1) {\n var slice = helperSlices[j];\n if (isArray(slice)) {\n // Hash\n helperHash[slice[0]] = slice[1] === 'false' ? false : slice[1];\n } else {\n helperContext.push(slice);\n }\n }\n\n if (block.indexOf('{#') >= 0) {\n // Condition/Helper\n var helperContent = '';\n var elseContent = '';\n var toSkip = 0;\n var shiftIndex = (void 0);\n var foundClosed = false;\n var foundElse = false;\n var depth = 0;\n for (j = i + 1; j < stringBlocks.length; j += 1) {\n if (stringBlocks[j].indexOf('{{#') >= 0) {\n depth += 1;\n }\n if (stringBlocks[j].indexOf('{{/') >= 0) {\n depth -= 1;\n }\n if (stringBlocks[j].indexOf((\"{{#\" + helperName)) >= 0) {\n helperContent += stringBlocks[j];\n if (foundElse) { elseContent += stringBlocks[j]; }\n toSkip += 1;\n } else if (stringBlocks[j].indexOf((\"{{/\" + helperName)) >= 0) {\n if (toSkip > 0) {\n toSkip -= 1;\n helperContent += stringBlocks[j];\n if (foundElse) { elseContent += stringBlocks[j]; }\n } else {\n shiftIndex = j;\n foundClosed = true;\n break;\n }\n } else if (stringBlocks[j].indexOf('else') >= 0 && depth === 0) {\n foundElse = true;\n } else {\n if (!foundElse) { helperContent += stringBlocks[j]; }\n if (foundElse) { elseContent += stringBlocks[j]; }\n }\n }\n if (foundClosed) {\n if (shiftIndex) { i = shiftIndex; }\n blocks.push({\n type: 'helper',\n helperName: helperName,\n contextName: helperContext,\n content: helperContent,\n inverseContent: elseContent,\n hash: helperHash,\n });\n }\n } else if (block.indexOf(' ') > 0) {\n if (isPartial) {\n helperName = '_partial';\n if (helperContext[0]) { helperContext[0] = \"\\\"\" + (helperContext[0].replace(/\"|'/g, '')) + \"\\\"\"; }\n }\n blocks.push({\n type: 'helper',\n helperName: helperName,\n contextName: helperContext,\n hash: helperHash,\n });\n }\n }\n }\n return blocks;\n}\nfunction parseJsVariable(expression, replace, object) {\n return expression.split(/([+ -*/^])/g).map(function (part) {\n if (part.indexOf(replace) < 0) { return part; }\n if (!object) { return JSON.stringify(''); }\n var variable = object;\n if (part.indexOf((replace + \".\")) >= 0) {\n part.split((replace + \".\"))[1].split('.').forEach(function (partName) {\n if (variable[partName]) { variable = variable[partName]; }\n else { variable = 'undefined'; }\n });\n }\n return JSON.stringify(variable);\n }).join('');\n}\nfunction parseJsParents(expression, parents) {\n return expression.split(/([+ -*^])/g).map(function (part) {\n if (part.indexOf('../') < 0) { return part; }\n if (!parents || parents.length === 0) { return JSON.stringify(''); }\n var levelsUp = part.split('../').length - 1;\n var parentData = levelsUp > parents.length ? parents[parents.length - 1] : parents[levelsUp - 1];\n\n var variable = parentData;\n var parentPart = part.replace(/..\\//g, '');\n parentPart.split('.').forEach(function (partName) {\n if (variable[partName]) { variable = variable[partName]; }\n else { variable = 'undefined'; }\n });\n return JSON.stringify(variable);\n }).join('');\n}\nvar Template7 = function Template7(template) {\n var t = this;\n t.template = template;\n\n function getCompileVar(name, ctx, data) {\n if ( data === void 0 ) data = 'data_1';\n\n var variable = ctx;\n var parts;\n var levelsUp = 0;\n var newDepth;\n if (name.indexOf('../') === 0) {\n levelsUp = name.split('../').length - 1;\n newDepth = variable.split('_')[1] - levelsUp;\n variable = \"ctx_\" + (newDepth >= 1 ? newDepth : 1);\n parts = name.split('../')[levelsUp].split('.');\n } else if (name.indexOf('@global') === 0) {\n variable = 'Template7.global';\n parts = name.split('@global.')[1].split('.');\n } else if (name.indexOf('@root') === 0) {\n variable = 'root';\n parts = name.split('@root.')[1].split('.');\n } else {\n parts = name.split('.');\n }\n for (var i = 0; i < parts.length; i += 1) {\n var part = parts[i];\n if (part.indexOf('@') === 0) {\n var dataLevel = data.split('_')[1];\n if (levelsUp > 0) {\n dataLevel = newDepth;\n }\n if (i > 0) {\n variable += \"[(data_\" + dataLevel + \" && data_\" + dataLevel + \".\" + (part.replace('@', '')) + \")]\";\n } else {\n variable = \"(data_\" + dataLevel + \" && data_\" + dataLevel + \".\" + (part.replace('@', '')) + \")\";\n }\n } else if (isFinite(part)) {\n variable += \"[\" + part + \"]\";\n } else if (part === 'this' || part.indexOf('this.') >= 0 || part.indexOf('this[') >= 0 || part.indexOf('this(') >= 0) {\n variable = part.replace('this', ctx);\n } else {\n variable += \".\" + part;\n }\n }\n return variable;\n }\n function getCompiledArguments(contextArray, ctx, data) {\n var arr = [];\n for (var i = 0; i < contextArray.length; i += 1) {\n if (/^['\"]/.test(contextArray[i])) { arr.push(contextArray[i]); }\n else if (/^(true|false|\\d+)$/.test(contextArray[i])) { arr.push(contextArray[i]); }\n else {\n arr.push(getCompileVar(contextArray[i], ctx, data));\n }\n }\n\n return arr.join(', ');\n }\n function compile(template, depth) {\n if ( template === void 0 ) template = t.template;\n if ( depth === void 0 ) depth = 1;\n\n if (typeof template !== 'string') {\n throw new Error('Template7: Template must be a string');\n }\n var blocks = stringToBlocks(template);\n var ctx = \"ctx_\" + depth;\n var data = \"data_\" + depth;\n if (blocks.length === 0) {\n return function empty() { return ''; };\n }\n\n function getCompileFn(block, newDepth) {\n if (block.content) { return compile(block.content, newDepth); }\n return function empty() { return ''; };\n }\n function getCompileInverse(block, newDepth) {\n if (block.inverseContent) { return compile(block.inverseContent, newDepth); }\n return function empty() { return ''; };\n }\n\n var resultString = '';\n if (depth === 1) {\n resultString += \"(function (\" + ctx + \", \" + data + \", root) {\\n\";\n } else {\n resultString += \"(function (\" + ctx + \", \" + data + \") {\\n\";\n }\n if (depth === 1) {\n resultString += 'function isArray(arr){return Object.prototype.toString.apply(arr) === \\'[object Array]\\';}\\n';\n resultString += 'function isFunction(func){return (typeof func === \\'function\\');}\\n';\n resultString += 'function c(val, ctx) {if (typeof val !== \"undefined\" && val !== null) {if (isFunction(val)) {return val.call(ctx);} else return val;} else return \"\";}\\n';\n resultString += 'root = root || ctx_1 || {};\\n';\n }\n resultString += 'var r = \\'\\';\\n';\n var i;\n for (i = 0; i < blocks.length; i += 1) {\n var block = blocks[i];\n // Plain block\n if (block.type === 'plain') {\n resultString += \"r +='\" + ((block.content).replace(/\\r/g, '\\\\r').replace(/\\n/g, '\\\\n').replace(/'/g, '\\\\' + '\\'')) + \"';\";\n continue;\n }\n var variable = (void 0);\n var compiledArguments = (void 0);\n // Variable block\n if (block.type === 'variable') {\n variable = getCompileVar(block.contextName, ctx, data);\n resultString += \"r += c(\" + variable + \", \" + ctx + \");\";\n }\n // Helpers block\n if (block.type === 'helper') {\n var parents = (void 0);\n if (ctx !== 'ctx_1') {\n var level = ctx.split('_')[1];\n var parentsString = \"ctx_\" + (level - 1);\n for (var j = level - 2; j >= 1; j -= 1) {\n parentsString += \", ctx_\" + j;\n }\n parents = \"[\" + parentsString + \"]\";\n } else {\n parents = \"[\" + ctx + \"]\";\n }\n if (block.helperName in t.helpers) {\n compiledArguments = getCompiledArguments(block.contextName, ctx, data);\n resultString += \"r += (Template7.helpers.\" + (block.helperName) + \").call(\" + ctx + \", \" + (compiledArguments && ((compiledArguments + \", \"))) + \"{hash:\" + (JSON.stringify(block.hash)) + \", data: \" + data + \" || {}, fn: \" + (getCompileFn(block, depth + 1)) + \", inverse: \" + (getCompileInverse(block, depth + 1)) + \", root: root, parents: \" + parents + \"});\";\n } else if (block.contextName.length > 0) {\n throw new Error((\"Template7: Missing helper: \\\"\" + (block.helperName) + \"\\\"\"));\n } else {\n variable = getCompileVar(block.helperName, ctx, data);\n resultString += \"if (\" + variable + \") {\";\n resultString += \"if (isArray(\" + variable + \")) {\";\n resultString += \"r += (Template7.helpers.each).call(\" + ctx + \", \" + variable + \", {hash:\" + (JSON.stringify(block.hash)) + \", data: \" + data + \" || {}, fn: \" + (getCompileFn(block, depth + 1)) + \", inverse: \" + (getCompileInverse(block, depth + 1)) + \", root: root, parents: \" + parents + \"});\";\n resultString += '}else {';\n resultString += \"r += (Template7.helpers.with).call(\" + ctx + \", \" + variable + \", {hash:\" + (JSON.stringify(block.hash)) + \", data: \" + data + \" || {}, fn: \" + (getCompileFn(block, depth + 1)) + \", inverse: \" + (getCompileInverse(block, depth + 1)) + \", root: root, parents: \" + parents + \"});\";\n resultString += '}}';\n }\n }\n }\n resultString += '\\nreturn r;})';\n return eval.call(template7Context, resultString);\n }\n t.compile = function _compile(template) {\n if (!t.compiled) {\n t.compiled = compile(template);\n }\n return t.compiled;\n };\n};\n\nTemplate7.prototype = {\n options: {},\n partials: {},\n helpers: {\n _partial: function _partial(partialName, options) {\n var p = Template7.prototype.partials[partialName];\n if (!p || (p && !p.template)) { return ''; }\n if (!p.compiled) {\n p.compiled = new Template7(p.template).compile();\n }\n var ctx = this;\n for (var hashName in options.hash) {\n ctx[hashName] = options.hash[hashName];\n }\n return p.compiled(ctx, options.data, options.root);\n },\n escape: function escape$1(context, options) {\n if (typeof context !== 'string') {\n throw new Error('Template7: Passed context to \"escape\" helper should be a string');\n }\n return escape(context);\n },\n if: function if$1(context, options) {\n var ctx = context;\n if (isFunction(ctx)) { ctx = ctx.call(this); }\n if (ctx) {\n return options.fn(this, options.data);\n }\n\n return options.inverse(this, options.data);\n },\n unless: function unless(context, options) {\n var ctx = context;\n if (isFunction(ctx)) { ctx = ctx.call(this); }\n if (!ctx) {\n return options.fn(this, options.data);\n }\n\n return options.inverse(this, options.data);\n },\n each: function each(context, options) {\n var ctx = context;\n var ret = '';\n var i = 0;\n if (isFunction(ctx)) { ctx = ctx.call(this); }\n if (isArray(ctx)) {\n if (options.hash.reverse) {\n ctx = ctx.reverse();\n }\n for (i = 0; i < ctx.length; i += 1) {\n ret += options.fn(ctx[i], { first: i === 0, last: i === ctx.length - 1, index: i });\n }\n if (options.hash.reverse) {\n ctx = ctx.reverse();\n }\n } else {\n for (var key in ctx) {\n i += 1;\n ret += options.fn(ctx[key], { key: key });\n }\n }\n if (i > 0) { return ret; }\n return options.inverse(this);\n },\n with: function with$1(context, options) {\n var ctx = context;\n if (isFunction(ctx)) { ctx = context.call(this); }\n return options.fn(ctx);\n },\n join: function join(context, options) {\n var ctx = context;\n if (isFunction(ctx)) { ctx = ctx.call(this); }\n return ctx.join(options.hash.delimiter || options.hash.delimeter);\n },\n js: function js(expression, options) {\n var data = options.data;\n var func;\n var execute = expression;\n ('index first last key').split(' ').forEach(function (prop) {\n if (typeof data[prop] !== 'undefined') {\n var re1 = new RegExp((\"this.@\" + prop), 'g');\n var re2 = new RegExp((\"@\" + prop), 'g');\n execute = execute\n .replace(re1, JSON.stringify(data[prop]))\n .replace(re2, JSON.stringify(data[prop]));\n }\n });\n if (options.root && execute.indexOf('@root') >= 0) {\n execute = parseJsVariable(execute, '@root', options.root);\n }\n if (execute.indexOf('@global') >= 0) {\n execute = parseJsVariable(execute, '@global', template7Context.Template7.global);\n }\n if (execute.indexOf('../') >= 0) {\n execute = parseJsParents(execute, options.parents);\n }\n if (execute.indexOf('return') >= 0) {\n func = \"(function(){\" + execute + \"})\";\n } else {\n func = \"(function(){return (\" + execute + \")})\";\n }\n return eval.call(this, func).call(this);\n },\n js_if: function js_if(expression, options) {\n var data = options.data;\n var func;\n var execute = expression;\n ('index first last key').split(' ').forEach(function (prop) {\n if (typeof data[prop] !== 'undefined') {\n var re1 = new RegExp((\"this.@\" + prop), 'g');\n var re2 = new RegExp((\"@\" + prop), 'g');\n execute = execute\n .replace(re1, JSON.stringify(data[prop]))\n .replace(re2, JSON.stringify(data[prop]));\n }\n });\n if (options.root && execute.indexOf('@root') >= 0) {\n execute = parseJsVariable(execute, '@root', options.root);\n }\n if (execute.indexOf('@global') >= 0) {\n execute = parseJsVariable(execute, '@global', Template7.global);\n }\n if (execute.indexOf('../') >= 0) {\n execute = parseJsParents(execute, options.parents);\n }\n if (execute.indexOf('return') >= 0) {\n func = \"(function(){\" + execute + \"})\";\n } else {\n func = \"(function(){return (\" + execute + \")})\";\n }\n var condition = eval.call(this, func).call(this);\n if (condition) {\n return options.fn(this, options.data);\n }\n\n return options.inverse(this, options.data);\n },\n },\n};\nTemplate7.prototype.helpers.js_compare = Template7.prototype.helpers.js_if;\nfunction t7(template, data) {\n if (arguments.length === 2) {\n var instance = new Template7(template);\n var rendered = instance.compile()(data);\n instance = null;\n return (rendered);\n }\n return new Template7(template);\n}\nt7.registerHelper = function registerHelper(name, fn) {\n Template7.prototype.helpers[name] = fn;\n};\nt7.unregisterHelper = function unregisterHelper(name) {\n Template7.prototype.helpers[name] = undefined;\n delete Template7.prototype.helpers[name];\n};\nt7.registerPartial = function registerPartial(name, template) {\n Template7.prototype.partials[name] = { template: template };\n};\nt7.unregisterPartial = function unregisterPartial(name) {\n if (Template7.prototype.partials[name]) {\n Template7.prototype.partials[name] = undefined;\n delete Template7.prototype.partials[name];\n }\n};\nt7.compile = function compile(template, options) {\n var instance = new Template7(template, options);\n return instance.compile();\n};\n\nt7.options = Template7.prototype.options;\nt7.helpers = Template7.prototype.helpers;\nt7.partials = Template7.prototype.partials;\n\nreturn t7;\n\n}());\n\n(function () {\n\n 'use strict';\n /*===========================\n Framework 7\n ===========================*/\n window.Framework7 = function (params) {\n // App\n var app = this;\n \n // Version\n app.version = '1.6.0';\n \n // Default Parameters\n app.params = {\n //\n root: 'body',\n //\n cache: true,\n cacheIgnore: [],\n cacheIgnoreGetParameters: false,\n cacheDuration: 1000 * 60 * 10, // Ten minutes\n preloadPreviousPage: true,\n uniqueHistory: false,\n uniqueHistoryIgnoreGetParameters: false,\n dynamicPageUrl: 'content-{{index}}',\n allowDuplicateUrls: false,\n router: true,\n routerRemoveTimeout: false,\n routerRemoveWithTimeout: false,\n // Push State\n pushState: false,\n pushStateRoot: undefined,\n pushStateNoAnimation: false,\n pushStateSeparator: '#!/',\n pushStateOnLoad: true,\n // Fast clicks\n fastClicks: true,\n fastClicksDistanceThreshold: 10,\n fastClicksDelayBetweenClicks: 50,\n fastClicksExclude: '', // CSS selector\n // Tap Hold\n tapHold: false,\n tapHoldDelay: 750,\n tapHoldPreventClicks: true,\n // Active State\n activeState: true,\n activeStateElements: 'a, button, label, span',\n // Animate Nav Back Icon\n animateNavBackIcon: false,\n // Swipe Back\n swipeBackPage: true,\n swipeBackPageThreshold: 0,\n swipeBackPageActiveArea: 30,\n swipeBackPageAnimateShadow: true,\n swipeBackPageAnimateOpacity: true,\n // Ajax\n ajaxLinks: undefined, // or CSS selector\n // External Links\n externalLinks: '.external', // CSS selector\n // Sortable\n sortable: true,\n // Scroll toolbars\n hideNavbarOnPageScroll: false,\n hideToolbarOnPageScroll: false,\n hideTabbarOnPageScroll: false,\n showBarsOnPageScrollEnd: true,\n showBarsOnPageScrollTop: true,\n // Swipeout\n swipeout: true,\n swipeoutActionsNoFold: false,\n swipeoutNoFollow: false,\n swipeoutRemoveWithTimeout: false,\n // Smart Select Back link template\n smartSelectOpenIn: 'page', // or 'popup' or 'picker'\n smartSelectBackText: 'Back',\n smartSelectPopupCloseText: 'Close',\n smartSelectPickerCloseText: 'Done',\n smartSelectSearchbar: false,\n smartSelectBackOnSelect: false,\n // Tap Navbar or Statusbar to scroll to top\n scrollTopOnNavbarClick: false,\n scrollTopOnStatusbarClick: false,\n // Panels\n panelLeftBreakpoint: null,\n panelRightBreakpoint: null,\n swipePanel: false, // or 'left' or 'right'\n swipePanelActiveArea: 0,\n swipePanelCloseOpposite: true,\n swipePanelOnlyClose: false,\n swipePanelNoFollow: false,\n swipePanelThreshold: 0,\n panelsCloseByOutside: true,\n // Modals\n modalButtonOk: 'OK',\n modalButtonCancel: 'Cancel',\n modalUsernamePlaceholder: 'Username',\n modalPasswordPlaceholder: 'Password',\n modalTitle: 'Framework7',\n modalCloseByOutside: false,\n actionsCloseByOutside: true,\n popupCloseByOutside: true,\n popoverCloseByOutside: true,\n modalPreloaderTitle: 'Loading... ',\n modalStack: true,\n modalsMoveToRoot: true,\n // Lazy Load\n imagesLazyLoadThreshold: 0,\n imagesLazyLoadSequential: true,\n // Name space\n viewClass: 'view',\n viewMainClass: 'view-main',\n viewsClass: 'views',\n // Notifications defaults\n notificationCloseOnClick: false,\n notificationCloseIcon: true,\n notificationCloseButtonText: 'Close',\n // Animate Pages\n animatePages: true,\n // Template7\n templates: {},\n template7Data: {},\n template7Pages: false,\n precompileTemplates: false,\n // Material\n material: false,\n materialPageLoadDelay: 0,\n materialPreloaderSvg: '',\n materialPreloaderHtml:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n materialRipple: true,\n materialRippleElements: '.ripple, a.link, a.item-link, .button, .modal-button, .tab-link, .label-radio, .label-checkbox, .actions-modal-button, a.searchbar-clear, a.floating-button, .floating-button > a, .speed-dial-buttons a, .form-checkbox, .form-radio, .data-table .sortable-cell',\n // Auto init\n init: true,\n };\n \n // Extend defaults with parameters\n for (var param in params) {\n app.params[param] = params[param];\n }\n \n // DOM lib\n var $ = Dom7;\n \n // Template7 lib\n var t7 = Template7;\n app._compiledTemplates = {};\n \n // App Root\n app.root = $(app.params.root);\n app.root.eq(0).addClass('framework7-root');\n \n // Touch events\n app.touchEvents = {\n start: app.support.touch ? 'touchstart' : 'mousedown',\n move: app.support.touch ? 'touchmove' : 'mousemove',\n end: app.support.touch ? 'touchend' : 'mouseup'\n };\n \n // Link to local storage\n app.ls = window.localStorage;\n \n // RTL\n app.rtl = $('body').css('direction') === 'rtl';\n if (app.rtl) $('html').attr('dir', 'rtl');\n \n // Overwrite statusbar overlay\n if (typeof app.params.statusbarOverlay !== 'undefined') {\n if (app.params.statusbarOverlay) $('html').addClass('with-statusbar-overlay');\n else $('html').removeClass('with-statusbar-overlay');\n }\n else if (app.device.ios && (window.cordova || window.phonegap)) {\n $(document).on('resume', function () {\n if (app.device.needsStatusBar()) {\n $('html').addClass('with-statusbar-overlay');\n }\n }, false);\n }\n \n\n /*======================================================\n ************ Views ************\n ======================================================*/\n app.views = [];\n var View = function (selector, params) {\n var defaults = {\n dynamicNavbar: false,\n domCache: false,\n linksView: undefined,\n reloadPages: false,\n uniqueHistory: app.params.uniqueHistory,\n uniqueHistoryIgnoreGetParameters: app.params.uniqueHistoryIgnoreGetParameters,\n allowDuplicateUrls: app.params.allowDuplicateUrls,\n swipeBackPage: app.params.swipeBackPage,\n swipeBackPageAnimateShadow: app.params.swipeBackPageAnimateShadow,\n swipeBackPageAnimateOpacity: app.params.swipeBackPageAnimateOpacity,\n swipeBackPageActiveArea: app.params.swipeBackPageActiveArea,\n swipeBackPageThreshold: app.params.swipeBackPageThreshold,\n animatePages: app.params.animatePages,\n preloadPreviousPage: app.params.preloadPreviousPage\n };\n var i;\n \n // Params\n params = params || {};\n \n // Disable dynamic navbar for material theme\n if (params.dynamicNavbar && app.params.material) params.dynamicNavbar = false;\n \n // Extend params with defaults\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n // View\n var view = this;\n view.params = params;\n \n // Selector\n view.selector = selector;\n \n // Container\n var container = $(selector);\n view.container = container[0];\n \n // Fix Selector\n \n if (typeof selector !== 'string') {\n // Supposed to be HTMLElement or Dom7\n selector = (container.attr('id') ? '#' + container.attr('id') : '') + (container.attr('class') ? '.' + container.attr('class').replace(/ /g, '.').replace('.active', '') : '');\n view.selector = selector;\n }\n \n // Is main\n view.main = container.hasClass(app.params.viewMainClass);\n \n // Content cache\n view.contentCache = {};\n \n // Context cache\n view.contextCache = {};\n \n // Pages cache\n view.pagesCache = {};\n view.pageElementsCache = {};\n \n // Store View in element for easy access\n container[0].f7View = view;\n \n // Pages\n view.pagesContainer = container.find('.pages')[0];\n view.initialPages = [];\n view.initialPagesUrl = [];\n view.initialNavbars = [];\n if (view.params.domCache) {\n var initialPages = container.find('.page');\n for (i = 0; i < initialPages.length; i++) {\n view.initialPages.push(initialPages[i]);\n view.initialPagesUrl.push('#' + initialPages.eq(i).attr('data-page'));\n }\n if (view.params.dynamicNavbar) {\n var initialNavbars = container.find('.navbar-inner');\n for (i = 0; i < initialNavbars.length; i++) {\n view.initialNavbars.push(initialNavbars[i]);\n }\n }\n \n }\n \n view.allowPageChange = true;\n \n // Location\n var docLocation = document.location.href;\n \n // History\n view.history = [];\n var viewURL = docLocation;\n var pushStateSeparator = app.params.pushStateSeparator;\n var pushStateRoot = app.params.pushStateRoot;\n if (app.params.pushState && view.main) {\n if (pushStateRoot) {\n viewURL = pushStateRoot;\n }\n else {\n if (pushStateSeparator && viewURL.indexOf(pushStateSeparator) >= 0 && viewURL.indexOf(pushStateSeparator + '#') < 0) viewURL = viewURL.split(pushStateSeparator)[0];\n }\n \n }\n \n // Active Page\n var currentPage, currentPageData;\n if (!view.activePage) {\n currentPage = $(view.pagesContainer).find('.page-on-center');\n if (currentPage.length === 0) {\n currentPage = $(view.pagesContainer).find('.page:not(.cached)');\n currentPage = currentPage.eq(currentPage.length - 1);\n }\n if (currentPage.length > 0) {\n currentPageData = currentPage[0].f7PageData;\n }\n }\n \n // View startup URL\n if (view.params.domCache && currentPage) {\n view.url = container.attr('data-url') || view.params.url || '#' + currentPage.attr('data-page');\n view.pagesCache[view.url] = currentPage.attr('data-page');\n }\n else view.url = container.attr('data-url') || view.params.url || viewURL;\n \n // Update current page Data\n if (currentPageData) {\n currentPageData.view = view;\n currentPageData.url = view.url;\n if (view.params.domCache && view.params.dynamicNavbar && !currentPageData.navbarInnerContainer) {\n currentPageData.navbarInnerContainer = view.initialNavbars[view.initialPages.indexOf(currentPageData.container)];\n }\n view.activePage = currentPageData;\n currentPage[0].f7PageData = currentPageData;\n }\n \n // Store to history main view's url\n if (view.url) {\n view.history.push(view.url);\n }\n \n // Touch events\n var isTouched = false,\n isMoved = false,\n touchesStart = {},\n isScrolling,\n activePage = [],\n previousPage = [],\n viewContainerWidth,\n touchesDiff,\n allowViewTouchMove = true,\n touchStartTime,\n activeNavbar = [],\n previousNavbar = [],\n activeNavElements,\n previousNavElements,\n activeNavBackIcon,\n previousNavBackIcon,\n dynamicNavbar,\n pageShadow,\n pageOpacity,\n el;\n \n view.handleTouchStart = function (e) {\n if (!allowViewTouchMove || !view.params.swipeBackPage || isTouched || app.swipeoutOpenedEl || !view.allowPageChange) return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = (new Date()).getTime();\n dynamicNavbar = view.params.dynamicNavbar && container.find('.navbar-inner').length > 1;\n };\n \n view.handleTouchMove = function (e) {\n if (!isTouched) return;\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling || e.f7PreventSwipeBack || app.preventSwipeBack) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n var cancel = false;\n // Calc values during first move fired\n viewContainerWidth = container.width();\n var target = $(e.target);\n var swipeout = target.hasClass('swipeout') ? target : target.parents('.swipeout');\n if (swipeout.length > 0) {\n if (!app.rtl && swipeout.find('.swipeout-actions-left').length > 0) cancel = true;\n if (app.rtl && swipeout.find('.swipeout-actions-right').length > 0) cancel = true;\n }\n activePage = target.is('.page') ? target : target.parents('.page');\n if (activePage.hasClass('no-swipeback')) cancel = true;\n previousPage = container.find('.page-on-left:not(.cached)');\n var notFromBorder = touchesStart.x - container.offset().left > view.params.swipeBackPageActiveArea;\n if (app.rtl) {\n notFromBorder = touchesStart.x < container.offset().left - container[0].scrollLeft + viewContainerWidth - view.params.swipeBackPageActiveArea;\n }\n else {\n notFromBorder = touchesStart.x - container.offset().left > view.params.swipeBackPageActiveArea;\n }\n if (notFromBorder) cancel = true;\n if (previousPage.length === 0 || activePage.length === 0) cancel = true;\n if (cancel) {\n isTouched = false;\n return;\n }\n \n if (view.params.swipeBackPageAnimateShadow && !app.device.android) {\n pageShadow = activePage.find('.swipeback-page-shadow');\n if (pageShadow.length === 0) {\n pageShadow = $('
');\n activePage.append(pageShadow);\n }\n }\n if (view.params.swipeBackPageAnimateOpacity) {\n pageOpacity = previousPage.find('.swipeback-page-opacity');\n if (pageOpacity.length === 0) {\n pageOpacity = $('
');\n previousPage.append(pageOpacity);\n }\n }\n \n if (dynamicNavbar) {\n activeNavbar = container.find('.navbar-on-center:not(.cached)');\n previousNavbar = container.find('.navbar-on-left:not(.cached)');\n activeNavElements = activeNavbar.find('.left, .center, .right, .subnavbar, .fading');\n previousNavElements = previousNavbar.find('.left, .center, .right, .subnavbar, .fading');\n if (app.params.animateNavBackIcon) {\n activeNavBackIcon = activeNavbar.find('.left.sliding .back .icon');\n previousNavBackIcon = previousNavbar.find('.left.sliding .back .icon');\n }\n }\n \n // Close/Hide Any Picker\n if ($('.picker-modal.modal-in').length > 0) {\n app.closeModal($('.picker-modal.modal-in'));\n }\n }\n e.f7PreventPanelSwipe = true;\n isMoved = true;\n e.preventDefault();\n \n // RTL inverter\n var inverter = app.rtl ? -1 : 1;\n \n // Touches diff\n touchesDiff = (pageX - touchesStart.x - view.params.swipeBackPageThreshold) * inverter;\n if (touchesDiff < 0) touchesDiff = 0;\n var percentage = touchesDiff / viewContainerWidth;\n \n // Swipe Back Callback\n var callbackData = {\n percentage: percentage,\n activePage: activePage[0],\n previousPage: previousPage[0],\n activeNavbar: activeNavbar[0],\n previousNavbar: previousNavbar[0]\n };\n if (view.params.onSwipeBackMove) {\n view.params.onSwipeBackMove(callbackData);\n }\n container.trigger('swipeBackMove swipeback:move', callbackData);\n \n // Transform pages\n var activePageTranslate = touchesDiff * inverter;\n var previousPageTranslate = (touchesDiff / 5 - viewContainerWidth / 5) * inverter;\n if (app.device.pixelRatio === 1) {\n activePageTranslate = Math.round(activePageTranslate);\n previousPageTranslate = Math.round(previousPageTranslate);\n }\n \n activePage.transform('translate3d(' + activePageTranslate + 'px,0,0)');\n if (view.params.swipeBackPageAnimateShadow && !app.device.android) pageShadow[0].style.opacity = 1 - 1 * percentage;\n \n previousPage.transform('translate3d(' + previousPageTranslate + 'px,0,0)');\n if (view.params.swipeBackPageAnimateOpacity) pageOpacity[0].style.opacity = 1 - 1 * percentage;\n \n // Dynamic Navbars Animation\n if (dynamicNavbar) {\n var i;\n for (i = 0; i < activeNavElements.length; i++) {\n el = $(activeNavElements[i]);\n if (!el.is('.subnavbar.sliding')) el[0].style.opacity = (1 - percentage * 1.3);\n if (el[0].className.indexOf('sliding') >= 0) {\n var activeNavTranslate = percentage * el[0].f7NavbarRightOffset;\n if (app.device.pixelRatio === 1) activeNavTranslate = Math.round(activeNavTranslate);\n el.transform('translate3d(' + activeNavTranslate + 'px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (el[0].className.indexOf('left') >= 0 && activeNavBackIcon.length > 0) {\n activeNavBackIcon.transform('translate3d(' + -activeNavTranslate + 'px,0,0)');\n }\n }\n }\n }\n for (i = 0; i < previousNavElements.length; i++) {\n el = $(previousNavElements[i]);\n if (!el.is('.subnavbar.sliding')) el[0].style.opacity = percentage * 1.3 - 0.3;\n if (el[0].className.indexOf('sliding') >= 0) {\n var previousNavTranslate = el[0].f7NavbarLeftOffset * (1 - percentage);\n if (app.device.pixelRatio === 1) previousNavTranslate = Math.round(previousNavTranslate);\n el.transform('translate3d(' + previousNavTranslate + 'px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (el[0].className.indexOf('left') >= 0 && previousNavBackIcon.length > 0) {\n previousNavBackIcon.transform('translate3d(' + -previousNavTranslate + 'px,0,0)');\n }\n }\n }\n }\n }\n };\n \n view.handleTouchEnd = function (e) {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n if (touchesDiff === 0) {\n $([activePage[0], previousPage[0]]).transform('');\n if (dynamicNavbar) {\n activeNavElements.transform('').css({opacity: ''});\n previousNavElements.transform('').css({opacity: ''});\n if (activeNavBackIcon && activeNavBackIcon.length > 0) activeNavBackIcon.transform('');\n if (previousNavBackIcon && activeNavBackIcon.length > 0) previousNavBackIcon.transform('');\n }\n return;\n }\n var timeDiff = (new Date()).getTime() - touchStartTime;\n var pageChanged = false;\n // Swipe back to previous page\n if (\n timeDiff < 300 && touchesDiff > 10 ||\n timeDiff >= 300 && touchesDiff > viewContainerWidth / 2\n ) {\n activePage.removeClass('page-on-center').addClass('page-on-right');\n previousPage.removeClass('page-on-left').addClass('page-on-center');\n if (dynamicNavbar) {\n activeNavbar.removeClass('navbar-on-center').addClass('navbar-on-right');\n previousNavbar.removeClass('navbar-on-left').addClass('navbar-on-center');\n }\n pageChanged = true;\n }\n // Reset custom styles\n // Add transitioning class for transition-duration\n $([activePage[0], previousPage[0]]).transform('').addClass('page-transitioning');\n if (dynamicNavbar) {\n activeNavElements.css({opacity: ''})\n .each(function () {\n var translate = pageChanged ? this.f7NavbarRightOffset : 0;\n var sliding = $(this);\n sliding.transform('translate3d(' + translate + 'px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && activeNavBackIcon.length > 0) {\n activeNavBackIcon.addClass('page-transitioning').transform('translate3d(' + -translate + 'px,0,0)');\n }\n }\n \n }).addClass('page-transitioning');\n \n previousNavElements.transform('').css({opacity: ''}).each(function () {\n var translate = pageChanged ? 0 : this.f7NavbarLeftOffset;\n var sliding = $(this);\n sliding.transform('translate3d(' + translate + 'px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && previousNavBackIcon.length > 0) {\n previousNavBackIcon.addClass('page-transitioning').transform('translate3d(' + -translate + 'px,0,0)');\n }\n }\n }).addClass('page-transitioning');\n }\n allowViewTouchMove = false;\n view.allowPageChange = false;\n // Swipe Back Callback\n var callbackData = {\n activePage: activePage[0],\n previousPage: previousPage[0],\n activeNavbar: activeNavbar[0],\n previousNavbar: previousNavbar[0]\n };\n if (pageChanged) {\n // Update View's URL\n var url = view.history[view.history.length - 2];\n view.url = url;\n \n // Page before animation callback\n app.pageBackCallback('before', view, {pageContainer: activePage[0], url: url, position: 'center', newPage: previousPage, oldPage: activePage, swipeBack: true});\n app.pageAnimCallback('before', view, {pageContainer: previousPage[0], url: url, position: 'left', newPage: previousPage, oldPage: activePage, swipeBack: true});\n \n if (view.params.onSwipeBackBeforeChange) {\n view.params.onSwipeBackBeforeChange(callbackData);\n }\n container.trigger('swipeBackBeforeChange swipeback:beforechange', callbackData);\n }\n else {\n if (view.params.onSwipeBackBeforeReset) {\n view.params.onSwipeBackBeforeReset(callbackData);\n }\n container.trigger('swipeBackBeforeReset swipeback:beforereset', callbackData);\n }\n \n activePage.transitionEnd(function () {\n $([activePage[0], previousPage[0]]).removeClass('page-transitioning');\n if (dynamicNavbar) {\n activeNavElements.removeClass('page-transitioning').css({opacity: ''});\n previousNavElements.removeClass('page-transitioning').css({opacity: ''});\n if (activeNavBackIcon && activeNavBackIcon.length > 0) activeNavBackIcon.removeClass('page-transitioning');\n if (previousNavBackIcon && previousNavBackIcon.length > 0) previousNavBackIcon.removeClass('page-transitioning');\n }\n allowViewTouchMove = true;\n view.allowPageChange = true;\n if (pageChanged) {\n if (app.params.pushState && view.main) history.back();\n // Page after animation callback\n app.pageBackCallback('after', view, {pageContainer: activePage[0], url: url, position: 'center', newPage: previousPage, oldPage: activePage, swipeBack: true});\n app.pageAnimCallback('after', view, {pageContainer: previousPage[0], url: url, position: 'left', newPage: previousPage, oldPage: activePage, swipeBack: true});\n app.router.afterBack(view, activePage, previousPage);\n \n if (view.params.onSwipeBackAfterChange) {\n view.params.onSwipeBackAfterChange(callbackData);\n }\n container.trigger('swipeBackAfterChange swipeback:afterchange', callbackData);\n }\n else {\n if (view.params.onSwipeBackAfterReset) {\n view.params.onSwipeBackAfterReset(callbackData);\n }\n container.trigger('swipeBackAfterReset swipeback:afterreset', callbackData);\n }\n if (pageShadow && pageShadow.length > 0) pageShadow.remove();\n if (pageOpacity && pageOpacity.length > 0) pageOpacity.remove();\n });\n };\n view.attachEvents = function (detach) {\n var action = detach ? 'off' : 'on';\n var passiveListener = app.touchEvents.start === 'touchstart' && app.support.passiveListener ? {passive: true, capture: false} : false;\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n container[action](app.touchEvents.start, view.handleTouchStart, passiveListener);\n container[action](app.touchEvents.move, view.handleTouchMove, activeListener);\n container[action](app.touchEvents.end, view.handleTouchEnd, passiveListener);\n };\n view.detachEvents = function () {\n view.attachEvents(true);\n };\n \n // Init\n if (view.params.swipeBackPage && !app.params.material) {\n view.attachEvents();\n }\n \n // Check view name to delete unwanted characters\n if (view.params.name) view.params.name = view.params.name.replace(/[^a-zA-Z]/g, '');\n \n // Add view to app\n app.views.push(view);\n if (view.main) {\n app.mainView = view;\n app.views.main = view;\n }\n else if(view.params.name) {\n app[view.params.name + 'View'] = view;\n app.views[view.params.name] = view;\n }\n \n // Router\n view.router = {\n load: function (options) {\n return app.router.load(view, options);\n },\n back: function (options) {\n return app.router.back(view, options);\n },\n // Shortcuts\n loadPage: function (options) {\n options = options || {};\n if (typeof options === 'string') {\n var url = options;\n options = {};\n if (url && url.indexOf('#') === 0 && view.params.domCache) {\n options.pageName = url.split('#')[1];\n }\n else options.url = url;\n }\n return app.router.load(view, options);\n },\n loadContent: function (content) {\n return app.router.load(view, {content: content});\n },\n reloadPage: function (url) {\n return app.router.load(view, {url: url, reload: true});\n },\n reloadContent: function (content) {\n return app.router.load(view, {content: content, reload: true});\n },\n reloadPreviousPage: function (url) {\n return app.router.load(view, {url: url, reloadPrevious: true, reload: true});\n },\n reloadPreviousContent: function (content) {\n return app.router.load(view, {content: content, reloadPrevious: true, reload: true});\n },\n refreshPage: function () {\n var options = {\n url: view.url,\n reload: true,\n ignoreCache: true\n };\n if (options.url && options.url.indexOf('#') === 0) {\n if (view.params.domCache && view.pagesCache[options.url]) {\n options.pageName = view.pagesCache[options.url];\n options.url = undefined;\n delete options.url;\n }\n else if (view.contentCache[options.url]) {\n options.content = view.contentCache[options.url];\n options.url = undefined;\n delete options.url;\n }\n }\n return app.router.load(view, options);\n },\n refreshPreviousPage: function () {\n var options = {\n url: view.history[view.history.length - 2],\n reload: true,\n reloadPrevious: true,\n ignoreCache: true\n };\n if (options.url && options.url.indexOf('#') === 0 && view.params.domCache && view.pagesCache[options.url]) {\n options.pageName = view.pagesCache[options.url];\n options.url = undefined;\n delete options.url;\n }\n return app.router.load(view, options);\n }\n };\n \n // Aliases for temporary backward compatibility\n view.loadPage = view.router.loadPage;\n view.loadContent = view.router.loadContent;\n view.reloadPage = view.router.reloadPage;\n view.reloadContent = view.router.reloadContent;\n view.reloadPreviousPage = view.router.reloadPreviousPage;\n view.reloadPreviousContent = view.router.reloadPreviousContent;\n view.refreshPage = view.router.refreshPage;\n view.refreshPreviousPage = view.router.refreshPreviousPage;\n view.back = view.router.back;\n \n // Bars methods\n view.hideNavbar = function (animated) {\n return app.hideNavbar(container.find('.navbar'), animated);\n };\n view.showNavbar = function (animated) {\n return app.showNavbar(container.find('.navbar'), animated);\n };\n view.hideToolbar = function (animated) {\n return app.hideToolbar(container.find('.toolbar'), animated);\n };\n view.showToolbar = function (animated) {\n return app.showToolbar(container.find('.toolbar'), animated);\n };\n \n // Push State on load\n if (app.params.pushState && app.params.pushStateOnLoad && view.main) {\n var pushStateUrl;\n var pushStateUrlSplit = docLocation.split(pushStateSeparator)[1];\n if (pushStateRoot) {\n pushStateUrl = docLocation.split(app.params.pushStateRoot + pushStateSeparator)[1];\n }\n else if (pushStateSeparator && docLocation.indexOf(pushStateSeparator) >= 0 && docLocation.indexOf(pushStateSeparator + '#') < 0) {\n pushStateUrl = pushStateUrlSplit;\n }\n var pushStateAnimatePages = app.params.pushStateNoAnimation ? false : undefined;\n var historyState = history.state;\n if (pushStateUrl) {\n if (pushStateUrl.indexOf('#') >= 0 && view.params.domCache && historyState && historyState.pageName && 'viewIndex' in historyState) {\n app.router.load(view, {pageName: historyState.pageName, url: historyState.url, animatePages: pushStateAnimatePages, pushState: false});\n }\n else if (pushStateUrl.indexOf('#') >= 0 && view.params.domCache && view.initialPagesUrl.indexOf(pushStateUrl) >= 0) {\n app.router.load(view, {pageName: pushStateUrl.replace('#',''), animatePages: pushStateAnimatePages, pushState: false});\n }\n else app.router.load(view, {url: pushStateUrl, animatePages: pushStateAnimatePages, pushState: false});\n }\n else if (view.params.domCache && docLocation.indexOf(pushStateSeparator + '#') >= 0) {\n if (historyState && historyState.pageName && 'viewIndex' in historyState) {\n app.router.load(view, {pageName: historyState.pageName, url: historyState.url, animatePages: pushStateAnimatePages, pushState: false});\n }\n else if (pushStateSeparator && pushStateUrlSplit.indexOf('#') === 0) {\n if (view.initialPagesUrl.indexOf(pushStateUrlSplit)) {\n app.router.load(view, {pageName: pushStateUrlSplit.replace('#', ''), animatePages: pushStateAnimatePages, pushState: false});\n }\n }\n }\n }\n \n // Destroy\n view.destroy = function () {\n view.detachEvents();\n if (view.main) {\n app.mainView = null;\n delete app.mainView;\n app.views.main = null;\n delete app.views.main;\n }\n else if(view.params.name) {\n app[view.params.name + 'View'] = null;\n delete app[view.params.name + 'View'];\n app.views[view.params.name] = null;\n delete app.views[view.params.name];\n }\n container.removeAttr('data-page');\n container[0].f7View = null;\n delete container[0].f7View;\n \n app.views.splice(app.views.indexOf(view), 1);\n \n // Delete props & methods\n for (var prop in view) {\n if (view.hasOwnProperty(prop)) {\n view[prop] = null;\n delete view[prop];\n }\n }\n view = null;\n };\n \n // Plugin hook\n app.pluginHook('addView', view);\n \n // Return view\n return view;\n };\n \n app.addView = function (selector, params) {\n return new View(selector, params);\n };\n \n app.getCurrentView = function (index) {\n var popoverView = $('.popover.modal-in .view');\n var popupView = $('.popup.modal-in .view');\n var panelView = $('.panel.active .view');\n var appViews = $('.views');\n // Find active view as tab\n var appView = appViews.children('.view');\n // Propably in tabs or split view\n if (appView.length > 1) {\n if (appView.hasClass('tab')) {\n // Tabs\n appView = appViews.children('.view.active');\n }\n else {\n // Split View, leave appView intact\n }\n }\n if (popoverView.length > 0 && popoverView[0].f7View) return popoverView[0].f7View;\n if (popupView.length > 0 && popupView[0].f7View) return popupView[0].f7View;\n if (panelView.length > 0 && panelView[0].f7View) return panelView[0].f7View;\n if (appView.length > 0) {\n if (appView.length === 1 && appView[0].f7View) return appView[0].f7View;\n if (appView.length > 1) {\n var currentViews = [];\n for (var i = 0; i < appView.length; i++) {\n if (appView[i].f7View) currentViews.push(appView[i].f7View);\n }\n if (currentViews.length > 0 && typeof index !== 'undefined') return currentViews[index];\n if (currentViews.length > 1) return currentViews;\n if (currentViews.length === 1) return currentViews[0];\n return undefined;\n }\n }\n return undefined;\n };\n \n\n /*======================================================\n ************ Navbars && Toolbars ************\n ======================================================*/\n // On Navbar Init Callback\n app.navbarInitCallback = function (view, pageContainer, navbarContainer, navbarInnerContainer) {\n if (!navbarContainer && navbarInnerContainer) navbarContainer = $(navbarInnerContainer).parent('.navbar')[0];\n if (!navbarInnerContainer || navbarInnerContainer.f7NavbarInitialized && view && !view.params.domCache) return;\n var navbarData = {\n container: navbarContainer,\n innerContainer: navbarInnerContainer\n };\n var pageData = pageContainer && pageContainer.f7PageData;\n \n var eventData = {\n page: pageData,\n navbar: navbarData\n };\n \n if (navbarInnerContainer.f7NavbarInitialized && ((view && view.params.domCache) || (!view && $(navbarContainer).parents('.popup, .popover, .login-screen, .modal, .actions-modal, .picker-modal').length > 0))) {\n // Reinit Navbar\n app.reinitNavbar(navbarContainer, navbarInnerContainer);\n \n // Plugin hook\n app.pluginHook('navbarReinit', eventData);\n \n // Event\n $(navbarInnerContainer).trigger('navbarReinit navbar:reinit', eventData);\n return;\n }\n navbarInnerContainer.f7NavbarInitialized = true;\n // Before Init\n app.pluginHook('navbarBeforeInit', navbarData, pageData);\n $(navbarInnerContainer).trigger('navbarBeforeInit navbar:beforeinit', eventData);\n \n // Initialize Navbar\n app.initNavbar(navbarContainer, navbarInnerContainer);\n \n // On init\n app.pluginHook('navbarInit', navbarData, pageData);\n $(navbarInnerContainer).trigger('navbarInit navbar:init', eventData);\n };\n // Navbar Remove Callback\n app.navbarRemoveCallback = function (view, pageContainer, navbarContainer, navbarInnerContainer) {\n if (!navbarContainer && navbarInnerContainer) navbarContainer = $(navbarInnerContainer).parent('.navbar')[0];\n var navbarData = {\n container: navbarContainer,\n innerContainer: navbarInnerContainer\n };\n var pageData;\n if (pageContainer) {\n pageData = pageContainer.f7PageData;\n }\n \n var eventData = {\n page: pageData,\n navbar: navbarData\n };\n app.pluginHook('navbarBeforeRemove', navbarData, pageData);\n $(navbarInnerContainer).trigger('navbarBeforeRemove navbar:beforeremove', eventData);\n navbarData = null;\n pageData = null;\n };\n app.initNavbar = function (navbarContainer, navbarInnerContainer) {\n // Init Subnavbar Searchbar\n if (app.initSearchbar) app.initSearchbar(navbarInnerContainer);\n };\n app.reinitNavbar = function (navbarContainer, navbarInnerContainer) {\n // Re init navbar methods\n };\n app.initNavbarWithCallback = function (navbarContainer) {\n navbarContainer = $(navbarContainer);\n var viewContainer = navbarContainer.parents('.' + app.params.viewClass);\n var view;\n if (viewContainer.length === 0) return;\n if (navbarContainer.parents('.navbar-through').length === 0 && viewContainer.find('.navbar-through').length === 0) return;\n view = viewContainer[0].f7View || undefined;\n \n navbarContainer.find('.navbar-inner').each(function () {\n var navbarInnerContainer = this;\n var pageContainer;\n if ($(navbarInnerContainer).attr('data-page')) {\n // For dom cache\n pageContainer = viewContainer.find('.page[data-page=\"' + $(navbarInnerContainer).attr('data-page') + '\"]')[0];\n }\n if (!pageContainer) {\n var pages = viewContainer.find('.page');\n if (pages.length === 1) {\n pageContainer = pages[0];\n }\n else {\n viewContainer.find('.page').each(function () {\n if (this.f7PageData && this.f7PageData.navbarInnerContainer === navbarInnerContainer) {\n pageContainer = this;\n }\n });\n }\n }\n app.navbarInitCallback(view, pageContainer, navbarContainer[0], navbarInnerContainer);\n });\n };\n \n // Size Navbars\n app.sizeNavbars = function (viewContainer) {\n if (app.params.material) return;\n var navbarInner = viewContainer ? $(viewContainer).find('.navbar .navbar-inner:not(.cached)') : $('.navbar .navbar-inner:not(.cached)');\n navbarInner.each(function () {\n var n = $(this);\n if (n.hasClass('cached')) return;\n var left = app.rtl ? n.find('.right') : n.find('.left'),\n right = app.rtl ? n.find('.left') : n.find('.right'),\n center = n.find('.center'),\n subnavbar = n.find('.subnavbar'),\n noLeft = left.length === 0,\n noRight = right.length === 0,\n leftWidth = noLeft ? 0 : left.outerWidth(true),\n rightWidth = noRight ? 0 : right.outerWidth(true),\n centerWidth = center.outerWidth(true),\n navbarStyles = n.styles(),\n navbarWidth = n[0].offsetWidth - parseInt(navbarStyles.paddingLeft, 10) - parseInt(navbarStyles.paddingRight, 10),\n onLeft = n.hasClass('navbar-on-left'),\n currLeft, diff;\n \n if (noRight) {\n currLeft = navbarWidth - centerWidth;\n }\n if (noLeft) {\n currLeft = 0;\n }\n if (!noLeft && !noRight) {\n currLeft = (navbarWidth - rightWidth - centerWidth + leftWidth) / 2;\n }\n var requiredLeft = (navbarWidth - centerWidth) / 2;\n if (navbarWidth - leftWidth - rightWidth > centerWidth) {\n if (requiredLeft < leftWidth) {\n requiredLeft = leftWidth;\n }\n if (requiredLeft + centerWidth > navbarWidth - rightWidth) {\n requiredLeft = navbarWidth - rightWidth - centerWidth;\n }\n diff = requiredLeft - currLeft;\n }\n else {\n diff = 0;\n }\n // RTL inverter\n var inverter = app.rtl ? -1 : 1;\n \n if (center.hasClass('sliding')) {\n center[0].f7NavbarLeftOffset = -(currLeft + diff) * inverter;\n center[0].f7NavbarRightOffset = (navbarWidth - currLeft - diff - centerWidth) * inverter;\n if (onLeft) {\n if (app.params.animateNavBackIcon) {\n var activeNavbarBackLink = n.parent().find('.navbar-on-center').find('.left.sliding .back .icon ~ span');\n if (activeNavbarBackLink.length > 0) {\n center[0].f7NavbarLeftOffset += activeNavbarBackLink[0].offsetLeft;\n }\n }\n center.transform('translate3d(' + center[0].f7NavbarLeftOffset + 'px, 0, 0)');\n }\n }\n if (!noLeft && left.hasClass('sliding')) {\n if (app.rtl) {\n left[0].f7NavbarLeftOffset = -(navbarWidth - left[0].offsetWidth) / 2 * inverter;\n left[0].f7NavbarRightOffset = leftWidth * inverter;\n }\n else {\n left[0].f7NavbarLeftOffset = -leftWidth;\n left[0].f7NavbarRightOffset = (navbarWidth - left[0].offsetWidth) / 2;\n if (app.params.animateNavBackIcon && left.find('.back .icon').length > 0) {\n left[0].f7NavbarRightOffset -= left.find('.back .icon')[0].offsetWidth;\n }\n }\n if (onLeft) left.transform('translate3d(' + left[0].f7NavbarLeftOffset + 'px, 0, 0)');\n }\n if (!noRight && right.hasClass('sliding')) {\n if (app.rtl) {\n right[0].f7NavbarLeftOffset = -rightWidth * inverter;\n right[0].f7NavbarRightOffset = (navbarWidth - right[0].offsetWidth) / 2 * inverter;\n }\n else {\n right[0].f7NavbarLeftOffset = -(navbarWidth - right[0].offsetWidth) / 2;\n right[0].f7NavbarRightOffset = rightWidth;\n }\n if (onLeft) right.transform('translate3d(' + right[0].f7NavbarLeftOffset + 'px, 0, 0)');\n }\n if (subnavbar.length && subnavbar.hasClass('sliding')) {\n subnavbar[0].f7NavbarLeftOffset = app.rtl ? subnavbar[0].offsetWidth : -subnavbar[0].offsetWidth;\n subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset;\n }\n \n // Center left\n var centerLeft = diff;\n if (app.rtl && noLeft && noRight && center.length > 0) centerLeft = -centerLeft;\n center.css({left: centerLeft + 'px'});\n \n });\n };\n \n // Hide/Show Navbars/Toolbars\n app.hideNavbar = function (navbarContainer, animated) {\n if (typeof animated === 'undefined') animated = true;\n $(navbarContainer).addClass('navbar-hidden' + (!animated ? (' not-animated') : ''));\n return true;\n };\n app.showNavbar = function (navbarContainer, animated) {\n if (typeof animated === 'undefined') animated = true;\n var navbar = $(navbarContainer);\n if (animated) {\n navbar.removeClass('not-animated');\n navbar.addClass('navbar-hiding').removeClass('navbar-hidden').transitionEnd(function () {\n navbar.removeClass('navbar-hiding');\n });\n }\n else {\n navbar.removeClass('navbar-hidden navbar-hiding not-animated');\n }\n return true;\n };\n app.hideToolbar = function (toolbarContainer, animated) {\n if (typeof animated === 'undefined') animated = true;\n $(toolbarContainer).addClass('toolbar-hidden' + (!animated ? (' not-animated') : ''));\n return true;\n };\n app.showToolbar = function (toolbarContainer, animated) {\n if (typeof animated === 'undefined') animated = true;\n var toolbar = $(toolbarContainer);\n if (animated) {\n toolbar.removeClass('not-animated');\n toolbar.addClass('toolbar-hiding').removeClass('toolbar-hidden').transitionEnd(function () {\n toolbar.removeClass('toolbar-hiding' + (!animated ? (' not-animated') : ''));\n });\n }\n else {\n toolbar.removeClass('toolbar-hidden toolbar-hiding not-animated');\n }\n \n };\n \n\n /*======================================================\n ************ Searchbar ************\n ======================================================*/\n var Searchbar = function (container, params) {\n var defaults = {\n input: null,\n clearButton: null,\n cancelButton: null,\n searchList: null,\n searchIn: '.item-title',\n searchBy: '',\n found: null,\n notFound: null,\n overlay: null,\n ignore: '.searchbar-ignore',\n customSearch: false,\n removeDiacritics: true,\n hideDividers: true,\n hideGroups: true,\n /* Callbacks\n onSearch\n onEnable\n onDisable\n onClear\n */\n \n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined' || params[def] === null && defaults.hasOwnProperty(def)) {\n params[def] = defaults[def];\n }\n }\n \n // Instance\n var s = this;\n \n // Material\n s.material = app.params.material;\n \n // Params\n s.params = params;\n \n // Container\n container = $(container);\n s.container = container;\n \n // Active\n s.active = false;\n \n // Input\n s.input = s.params.input ? $(s.params.input) : s.container.find('input[type=\"search\"]');\n s.clearButton = s.params.clearButton ? $(s.params.clearButton) : s.container.find('.searchbar-clear');\n s.cancelButton = s.params.cancelButton ? $(s.params.cancelButton) : s.container.find('.searchbar-cancel');\n \n // Search List\n s.searchList = $(s.params.searchList);\n \n // Is Virtual List\n s.isVirtualList = s.searchList.hasClass('virtual-list');\n \n // Is In Page\n s.pageContainer = s.container.parents('.page').eq(0);\n \n // Overlay\n if (!s.params.overlay) {\n s.overlay = s.pageContainer.length > 0 ? s.pageContainer.find('.searchbar-overlay') : $('.searchbar-overlay');\n }\n else {\n s.overlay = $(s.params.overlay);\n }\n // Found and not found\n if (!s.params.found) {\n s.found = s.pageContainer.length > 0 ? s.pageContainer.find('.searchbar-found') : $('.searchbar-found');\n }\n else {\n s.found = $(s.params.found);\n }\n if (!s.params.notFound) {\n s.notFound = s.pageContainer.length > 0 ? s.pageContainer.find('.searchbar-not-found') : $('.searchbar-not-found');\n }\n else {\n s.notFound = $(s.params.notFound);\n }\n \n // Set Cancel button\n var cancelMarginProp = app.rtl ? 'margin-left' : 'margin-right';\n var cancelButtonHasMargin = false;\n s.setCancelButtonMargin = function () {\n s.cancelButton.transition(0).show();\n s.cancelButton.css(cancelMarginProp, -s.cancelButton[0].offsetWidth + 'px');\n var clientLeft = s.cancelButton[0].clientLeft;\n s.cancelButton.transition('');\n cancelButtonHasMargin = true;\n };\n \n // Trigger\n s.triggerEvent = function (eventName, callbackName, eventData) {\n s.container.trigger(eventName, eventData);\n if (s.searchList.length > 0) s.searchList.trigger(eventName, eventData);\n if (callbackName && s.params[callbackName]) s.params[callbackName](s, eventData);\n };\n \n // Enable/disalbe\n s.enable = function (e) {\n function _enable() {\n if ((s.searchList.length || s.params.customSearch) && !s.container.hasClass('searchbar-active') && !s.query) s.overlay.addClass('searchbar-overlay-active');\n s.container.addClass('searchbar-active');\n if (s.cancelButton.length > 0 && !s.material) {\n if (!cancelButtonHasMargin) {\n s.setCancelButtonMargin();\n }\n s.cancelButton.css(cancelMarginProp, '0px');\n }\n s.triggerEvent('enableSearch searchbar:enable', 'onEnable');\n s.active = true;\n }\n if (app.device.ios && !app.params.material && e && e.type === 'focus') {\n setTimeout(function () {\n _enable();\n }, 400);\n }\n else {\n _enable();\n }\n };\n \n s.disable = function () {\n s.input.val('').trigger('change');\n s.container.removeClass('searchbar-active searchbar-not-empty');\n if (s.cancelButton.length > 0 && !s.material) s.cancelButton.css(cancelMarginProp, -s.cancelButton[0].offsetWidth + 'px');\n \n if (s.searchList.length || s.params.customSearch) s.overlay.removeClass('searchbar-overlay-active');\n \n s.active = false;\n function _disable() {\n s.input.blur();\n }\n if (app.device.ios) {\n setTimeout(function () {\n _disable();\n }, 400);\n }\n else {\n _disable();\n }\n s.triggerEvent('disableSearch searchbar:disable', 'onDisable');\n };\n \n // Clear\n s.clear = function (e) {\n if (!s.query && e && $(e.target).hasClass('searchbar-clear')) {\n s.disable();\n return;\n }\n var previousQuery = s.value;\n s.input.val('').trigger('change').focus();\n s.triggerEvent('clearSearch searchbar:clear', 'onClear', {previousQuery: previousQuery});\n };\n \n // Search\n s.handleInput = function () {\n setTimeout(function () {\n var value = s.input.val().trim();\n if ((s.searchList.length > 0 || s.params.customSearch) && (s.params.searchIn || s.isVirtualList)) s.search(value, true);\n }, 0);\n };\n \n var previousQuery = '';\n var virtualList;\n s.search = function (query, internal) {\n if (previousQuery && query.trim() === previousQuery) return;\n previousQuery = query.trim();\n \n if (!internal) {\n if (!s.active) {\n s.enable();\n }\n s.input.val(query);\n }\n s.query = s.value = query;\n // Add active/inactive classes on overlay\n if (query.length === 0) {\n s.container.removeClass('searchbar-not-empty');\n if (s.searchList.length && s.container.hasClass('searchbar-active')) s.overlay.addClass('searchbar-overlay-active');\n }\n else {\n s.container.addClass('searchbar-not-empty');\n if (s.searchList.length && s.container.hasClass('searchbar-active')) s.overlay.removeClass('searchbar-overlay-active');\n }\n \n if (s.params.customSearch) {\n s.triggerEvent('search searchbar:search', 'onSearch', {query: query});\n return;\n }\n \n var foundItems = [], _vlQuery;\n if (s.isVirtualList) {\n virtualList = s.searchList[0].f7VirtualList;\n if (query.trim() === '') {\n virtualList.resetFilter();\n s.notFound.hide();\n s.found.show();\n return;\n }\n _vlQuery = s.params.removeDiacritics ? $.removeDiacritics(query) : query;\n if (virtualList.params.searchAll) {\n foundItems = virtualList.params.searchAll(_vlQuery, virtualList.items) || [];\n }\n else if (virtualList.params.searchByItem) {\n for (var i = 0; i < virtualList.items.length; i++) {\n if(virtualList.params.searchByItem(_vlQuery, i, virtualList.params.items[i])) {\n foundItems.push(i);\n }\n }\n }\n }\n else {\n var values;\n if (s.params.removeDiacritics) values = $.removeDiacritics(query.trim().toLowerCase()).split(' ');\n else {\n values = query.trim().toLowerCase().split(' ');\n }\n s.searchList.find('li').removeClass('hidden-by-searchbar').each(function (index, el) {\n el = $(el);\n var compareWithText = [];\n el.find(s.params.searchIn).each(function () {\n var itemText = $(this).text().trim().toLowerCase();\n if (s.params.removeDiacritics) itemText = $.removeDiacritics(itemText);\n compareWithText.push(itemText);\n });\n compareWithText = compareWithText.join(' ');\n var wordsMatch = 0;\n for (var i = 0; i < values.length; i++) {\n if (compareWithText.indexOf(values[i]) >= 0) wordsMatch++;\n }\n if (wordsMatch !== values.length && !(s.params.ignore && el.is(s.params.ignore))) {\n el.addClass('hidden-by-searchbar');\n }\n else {\n foundItems.push(el[0]);\n }\n });\n \n if (s.params.hideDividers) {\n s.searchList.find('.item-divider, .list-group-title').each(function () {\n var title = $(this);\n var nextElements = title.nextAll('li');\n var hide = true;\n for (var i = 0; i < nextElements.length; i++) {\n var nextEl = $(nextElements[i]);\n if (nextEl.hasClass('list-group-title') || nextEl.hasClass('item-divider')) break;\n if (!nextEl.hasClass('hidden-by-searchbar')) {\n hide = false;\n }\n }\n var ignore = s.params.ignore && title.is(s.params.ignore);\n if (hide && !ignore) title.addClass('hidden-by-searchbar');\n else title.removeClass('hidden-by-searchbar');\n });\n }\n if (s.params.hideGroups) {\n s.searchList.find('.list-group').each(function () {\n var group = $(this);\n var ignore = s.params.ignore && group.is(s.params.ignore);\n var notHidden = group.find('li:not(.hidden-by-searchbar)');\n if (notHidden.length === 0 && !ignore) {\n group.addClass('hidden-by-searchbar');\n }\n else {\n group.removeClass('hidden-by-searchbar');\n }\n });\n }\n }\n s.triggerEvent('search searchbar:search', 'onSearch', {query: query, foundItems: foundItems});\n if (foundItems.length === 0) {\n s.notFound.show();\n s.found.hide();\n }\n else {\n s.notFound.hide();\n s.found.show();\n }\n if (s.isVirtualList) {\n virtualList.filterItems(foundItems);\n }\n };\n \n // Events\n function preventSubmit(e) {\n e.preventDefault();\n }\n \n s.attachEvents = function (destroy) {\n var method = destroy ? 'off' : 'on';\n s.container[method]('submit', preventSubmit);\n if (!s.material) s.cancelButton[method]('click', s.disable);\n s.overlay[method]('click', s.disable);\n s.input[method]('focus', s.enable);\n s.input[method]('change keydown keypress keyup compositionend', s.handleInput);\n s.clearButton[method]('click', s.clear);\n \n };\n s.detachEvents = function() {\n s.attachEvents(true);\n };\n \n // Init Destroy\n s.init = function () {\n s.attachEvents();\n };\n s.destroy = function () {\n if (!s) return;\n s.detachEvents();\n s = null;\n };\n \n // Init\n s.init();\n \n s.container[0].f7Searchbar = s;\n return s;\n \n };\n app.searchbar = function (container, params) {\n return new Searchbar(container, params);\n };\n app.initSearchbar = function (container) {\n container = $(container);\n var searchbar = container.hasClass('searchbar') ? container : container.find('.searchbar');\n if (searchbar.length === 0) return;\n if (!searchbar.hasClass('searchbar-init')) return;\n \n var sb = app.searchbar(searchbar, searchbar.dataset());\n \n function onBeforeRemove() {\n if (sb) sb.destroy();\n }\n if (container.hasClass('page')) {\n container.once('pageBeforeRemove', onBeforeRemove);\n }\n else if (container.hasClass('navbar-inner')) {\n container.once('navbarBeforeRemove', onBeforeRemove);\n }\n };\n \n\n /*======================================================\n ************ Messagebar ************\n ======================================================*/\n var Messagebar = function (container, params) {\n var defaults = {\n textarea: null,\n maxHeight: null,\n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined' || params[def] === null) {\n params[def] = defaults[def];\n }\n }\n \n // Instance\n var m = this;\n \n // Params\n m.params = params;\n \n // Container\n m.container = $(container);\n if (m.container.length === 0) return;\n \n // Textarea\n m.textarea = m.params.textarea ? $(m.params.textarea) : m.container.find('textarea');\n \n // Is In Page\n m.pageContainer = m.container.parents('.page').eq(0);\n m.pageContent = m.pageContainer.find('.page-content');\n \n // Initial Sizes\n m.pageContentPadding = parseInt(m.pageContent.css('padding-bottom'));\n m.initialBarHeight = m.container[0].offsetHeight;\n m.initialAreaHeight = m.textarea[0].offsetHeight;\n \n \n // Resize textarea\n m.sizeTextarea = function () {\n // Reset\n m.textarea.css({'height': ''});\n \n var height = m.textarea[0].offsetHeight;\n var diff = height - m.textarea[0].clientHeight;\n var scrollHeight = m.textarea[0].scrollHeight;\n \n // Update\n if (scrollHeight + diff > height) {\n var newAreaHeight = scrollHeight + diff;\n var newBarHeight = m.initialBarHeight + (newAreaHeight - m.initialAreaHeight);\n var maxBarHeight = m.params.maxHeight || m.container.parents('.view')[0].offsetHeight - 88;\n if (newBarHeight > maxBarHeight) {\n newBarHeight = parseInt(maxBarHeight, 10);\n newAreaHeight = newBarHeight - m.initialBarHeight + m.initialAreaHeight;\n }\n m.textarea.css('height', newAreaHeight + 'px');\n m.container.css('height', newBarHeight + 'px');\n var onBottom = (m.pageContent[0].scrollTop === m.pageContent[0].scrollHeight - m.pageContent[0].offsetHeight);\n if (m.pageContent.length > 0) {\n m.pageContent.css('padding-bottom', newBarHeight + 'px');\n if (m.pageContent.find('.messages-new-first').length === 0 && onBottom) {\n m.pageContent.scrollTop(m.pageContent[0].scrollHeight - m.pageContent[0].offsetHeight);\n }\n }\n }\n else {\n if (m.pageContent.length > 0) {\n m.container.css({'height': '', 'bottom': ''});\n m.pageContent.css({'padding-bottom': ''});\n }\n }\n };\n \n // Clear\n m.clear = function () {\n m.textarea.val('').trigger('change');\n };\n m.value = function (value) {\n if (typeof value === 'undefined') return m.textarea.val();\n else m.textarea.val(value).trigger('change');\n };\n \n // Handle textarea\n m.textareaTimeout = undefined;\n m.handleTextarea = function (e) {\n clearTimeout(m.textareaTimeout);\n m.textareaTimeout = setTimeout(function () {\n m.sizeTextarea();\n }, 0);\n };\n \n //Events\n function preventSubmit(e) {\n e.preventDefault();\n }\n \n m.attachEvents = function (destroy) {\n var method = destroy ? 'off' : 'on';\n m.container[method]('submit', preventSubmit);\n m.textarea[method]('change keydown keypress keyup paste cut', m.handleTextarea);\n };\n m.detachEvents = function () {\n m.attachEvents(true);\n };\n \n // Init Destroy\n m.init = function () {\n m.attachEvents();\n };\n m.destroy = function () {\n m.detachEvents();\n m = null;\n };\n \n // Init\n m.init();\n \n m.container[0].f7Messagebar = m;\n return m;\n };\n app.messagebar = function (container, params) {\n return new Messagebar(container, params);\n };\n app.initPageMessagebar = function (pageContainer) {\n pageContainer = $(pageContainer);\n var messagebar = pageContainer.hasClass('messagebar') ? pageContainer : pageContainer.find('.messagebar');\n if (messagebar.length === 0) return;\n if (!messagebar.hasClass('messagebar-init')) return;\n var mb = app.messagebar(messagebar, messagebar.dataset());\n \n // Destroy on page remove\n function pageBeforeRemove() {\n mb.destroy();\n pageContainer.off('page:beforeremove', pageBeforeRemove);\n }\n if (pageContainer.hasClass('page')) {\n pageContainer.on('page:beforeremove', pageBeforeRemove);\n }\n };\n \n\n /*======================================================\n ************ XHR ************\n ======================================================*/\n // XHR Caching\n app.cache = [];\n app.removeFromCache = function (url) {\n var index = false;\n for (var i = 0; i < app.cache.length; i++) {\n if (app.cache[i].url === url) index = i;\n }\n if (index !== false) app.cache.splice(index, 1);\n };\n \n // XHR\n app.xhr = false;\n app.get = function (url, view, ignoreCache, callback) {\n // should we ignore get params or not\n var _url = url;\n if (app.params.cacheIgnoreGetParameters && url.indexOf('?') >= 0) {\n _url = url.split('?')[0];\n }\n if (app.params.cache && !ignoreCache && url.indexOf('nocache') < 0 && app.params.cacheIgnore.indexOf(_url) < 0) {\n // Check is the url cached\n for (var i = 0; i < app.cache.length; i++) {\n if (app.cache[i].url === _url) {\n // Check expiration\n if ((new Date()).getTime() - app.cache[i].time < app.params.cacheDuration) {\n // Load from cache\n callback(app.cache[i].content);\n return false;\n }\n }\n }\n }\n \n app.xhr = $.ajax({\n url: url,\n method: 'GET',\n beforeSend: app.params.onAjaxStart,\n complete: function (xhr, status) {\n if (status !== 'error' && status !== 'timeout' && (xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {\n if (app.params.cache && xhr.responseText !== '') {\n app.removeFromCache(_url);\n app.cache.push({\n url: _url,\n time: (new Date()).getTime(),\n content: xhr.responseText\n });\n }\n callback(xhr.responseText, false);\n }\n else {\n callback(xhr.responseText, true);\n }\n if (app.params.onAjaxComplete) app.params.onAjaxComplete(xhr);\n },\n error: function (xhr) {\n callback(xhr.responseText, true);\n if (app.params.onAjaxError) app.params.onAjaxError(xhr);\n }\n });\n if (view) view.xhr = app.xhr;\n \n return app.xhr;\n };\n \n\n /*======================================================\n ************ Pages ************\n ======================================================*/\n // Page Callbacks API\n app.pageCallbacks = {};\n \n app.onPage = function (callbackName, pageName, callback) {\n if (pageName && pageName.split(' ').length > 1) {\n var pageNames = pageName.split(' ');\n var returnCallbacks = [];\n for (var i = 0; i < pageNames.length; i++) {\n returnCallbacks.push(app.onPage(callbackName, pageNames[i], callback));\n }\n returnCallbacks.remove = function () {\n for (var i = 0; i < returnCallbacks.length; i++) {\n returnCallbacks[i].remove();\n }\n };\n returnCallbacks.trigger = function () {\n for (var i = 0; i < returnCallbacks.length; i++) {\n returnCallbacks[i].trigger();\n }\n };\n return returnCallbacks;\n }\n var callbacks = app.pageCallbacks[callbackName][pageName];\n if (!callbacks) {\n callbacks = app.pageCallbacks[callbackName][pageName] = [];\n }\n app.pageCallbacks[callbackName][pageName].push(callback);\n return {\n remove: function () {\n var removeIndex;\n for (var i = 0; i < callbacks.length; i++) {\n if (callbacks[i].toString() === callback.toString()) {\n removeIndex = i;\n }\n }\n if (typeof removeIndex !== 'undefined') callbacks.splice(removeIndex, 1);\n },\n trigger: callback\n };\n };\n \n //Create callbacks methods dynamically\n function createPageCallback(callbackName) {\n var capitalized = callbackName.replace(/^./, function (match) {\n return match.toUpperCase();\n });\n app['onPage' + capitalized] = function (pageName, callback) {\n return app.onPage(callbackName, pageName, callback);\n };\n }\n \n var pageCallbacksNames = ('beforeInit init reinit beforeAnimation afterAnimation back afterBack beforeRemove').split(' ');\n for (var i = 0; i < pageCallbacksNames.length; i++) {\n app.pageCallbacks[pageCallbacksNames[i]] = {};\n createPageCallback(pageCallbacksNames[i]);\n }\n \n app.triggerPageCallbacks = function (callbackName, pageName, pageData) {\n var allPagesCallbacks = app.pageCallbacks[callbackName]['*'];\n if (allPagesCallbacks) {\n for (var j = 0; j < allPagesCallbacks.length; j++) {\n allPagesCallbacks[j](pageData);\n }\n }\n var callbacks = app.pageCallbacks[callbackName][pageName];\n if (!callbacks || callbacks.length === 0) return;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](pageData);\n }\n };\n \n // On Page Init Callback\n app.pageInitCallback = function (view, params) {\n var pageContainer = params.pageContainer;\n if (!pageContainer) return;\n if (pageContainer.f7PageInitialized && view && !view.params.domCache) return;\n \n var pageQuery = params.query;\n if (!pageQuery) {\n if (params.url && params.url.indexOf('?') > 0) {\n pageQuery = $.parseUrlQuery(params.url || '');\n }\n else if (pageContainer.f7PageData && pageContainer.f7PageData.query) {\n pageQuery = pageContainer.f7PageData.query;\n }\n else {\n pageQuery = {};\n }\n }\n \n // Page Data\n var pageData = {\n container: pageContainer,\n url: params.url,\n query: pageQuery,\n name: $(pageContainer).attr('data-page'),\n view: view,\n from: params.position,\n context: params.context,\n navbarInnerContainer: params.navbarInnerContainer,\n fromPage: params.fromPage\n };\n if (params.fromPage && !params.fromPage.navbarInnerContainer && params.oldNavbarInnerContainer) {\n params.fromPage.navbarInnerContainer = params.oldNavbarInnerContainer;\n }\n \n if (pageContainer.f7PageInitialized && ((view && view.params.domCache) || (!view && $(pageContainer).parents('.popup, .popover, .login-screen, .modal, .actions-modal, .picker-modal').length > 0))) {\n // Reinit Page\n app.reinitPage(pageContainer);\n \n // Callbacks\n app.pluginHook('pageReinit', pageData);\n if (app.params.onPageReinit) app.params.onPageReinit(app, pageData);\n app.triggerPageCallbacks('reinit', pageData.name, pageData);\n $(pageData.container).trigger('pageReinit page:reinit', {page: pageData});\n return;\n }\n pageContainer.f7PageInitialized = true;\n \n // Store pagedata in page\n pageContainer.f7PageData = pageData;\n \n // Update View's activePage\n if (view && !params.preloadOnly && !params.reloadPrevious) {\n // Add data-page on view\n $(view.container).attr('data-page', pageData.name);\n // Update View active page data\n view.activePage = pageData;\n }\n \n // Before Init Callbacks\n app.pluginHook('pageBeforeInit', pageData);\n if (app.params.onPageBeforeInit) app.params.onPageBeforeInit(app, pageData);\n app.triggerPageCallbacks('beforeInit', pageData.name, pageData);\n $(pageData.container).trigger('pageBeforeInit page:beforeinit', {page: pageData});\n \n // Init page\n app.initPage(pageContainer);\n \n // Init Callback\n app.pluginHook('pageInit', pageData);\n if (app.params.onPageInit) app.params.onPageInit(app, pageData);\n app.triggerPageCallbacks('init', pageData.name, pageData);\n $(pageData.container).trigger('pageInit page:init', {page: pageData});\n };\n app.pageRemoveCallback = function (view, pageContainer, position) {\n var pageContext;\n if (!pageContainer) return;\n if (pageContainer.f7PageData) pageContext = pageContainer.f7PageData.context;\n // Page Data\n var pageData = {\n container: pageContainer,\n name: $(pageContainer).attr('data-page'),\n view: view,\n url: pageContainer.f7PageData && pageContainer.f7PageData.url,\n query: pageContainer.f7PageData && pageContainer.f7PageData.query,\n navbarInnerContainer: pageContainer.f7PageData && pageContainer.f7PageData.navbarInnerContainer,\n from: position,\n context: pageContext\n };\n // Before Init Callback\n app.pluginHook('pageBeforeRemove', pageData);\n if (app.params.onPageBeforeRemove) app.params.onPageBeforeRemove(app, pageData);\n app.triggerPageCallbacks('beforeRemove', pageData.name, pageData);\n $(pageData.container).trigger('pageBeforeRemove page:beforeremove', {page: pageData});\n pageData = null;\n };\n app.pageBackCallback = function (callback, view, params) {\n // Page Data\n var pageContainer = params.pageContainer;\n var pageContext;\n if (!pageContainer) return;\n if (pageContainer.f7PageData) pageContext = pageContainer.f7PageData.context;\n \n var pageData = {\n container: pageContainer,\n name: $(pageContainer).attr('data-page'),\n url: pageContainer.f7PageData && pageContainer.f7PageData.url,\n query: pageContainer.f7PageData && pageContainer.f7PageData.query,\n view: view,\n from: params.position,\n context: pageContext,\n navbarInnerContainer: pageContainer.f7PageData && pageContainer.f7PageData.navbarInnerContainer,\n swipeBack: params.swipeBack\n };\n \n if (callback === 'after') {\n app.pluginHook('pageAfterBack', pageData);\n if (app.params.onPageAfterBack) app.params.onPageAfterBack(app, pageData);\n app.triggerPageCallbacks('afterBack', pageData.name, pageData);\n $(pageContainer).trigger('pageAfterBack page:afterback', {page: pageData});\n \n }\n if (callback === 'before') {\n app.pluginHook('pageBack', pageData);\n if (app.params.onPageBack) app.params.onPageBack(app, pageData);\n app.triggerPageCallbacks('back', pageData.name, pageData);\n $(pageData.container).trigger('pageBack page:back', {page: pageData});\n }\n };\n app.pageAnimCallback = function (callback, view, params) {\n var pageContainer = params.pageContainer;\n var pageContext;\n if (!pageContainer) return;\n if (pageContainer.f7PageData) pageContext = pageContainer.f7PageData.context;\n \n var pageQuery = params.query;\n if (!pageQuery) {\n if (params.url && params.url.indexOf('?') > 0) {\n pageQuery = $.parseUrlQuery(params.url || '');\n }\n else if (pageContainer.f7PageData && pageContainer.f7PageData.query) {\n pageQuery = pageContainer.f7PageData.query;\n }\n else {\n pageQuery = {};\n }\n }\n // Page Data\n var pageData = {\n container: pageContainer,\n url: params.url,\n query: pageQuery,\n name: $(pageContainer).attr('data-page'),\n view: view,\n from: params.position,\n context: pageContext,\n swipeBack: params.swipeBack,\n navbarInnerContainer: pageContainer.f7PageData && pageContainer.f7PageData.navbarInnerContainer,\n fromPage: params.fromPage\n };\n var oldPage = params.oldPage,\n newPage = params.newPage;\n \n // Update page date\n pageContainer.f7PageData = pageData;\n \n if (callback === 'after') {\n app.pluginHook('pageAfterAnimation', pageData);\n if (app.params.onPageAfterAnimation) app.params.onPageAfterAnimation(app, pageData);\n app.triggerPageCallbacks('afterAnimation', pageData.name, pageData);\n $(pageData.container).trigger('pageAfterAnimation page:afteranimation', {page: pageData});\n \n }\n if (callback === 'before') {\n // Add data-page on view\n $(view.container).attr('data-page', pageData.name);\n \n // Update View's activePage\n if (view) view.activePage = pageData;\n \n // Hide/show navbar dynamically\n if (newPage.hasClass('no-navbar') && !oldPage.hasClass('no-navbar')) {\n view.hideNavbar();\n }\n if (!newPage.hasClass('no-navbar') && (oldPage.hasClass('no-navbar') || oldPage.hasClass('no-navbar-by-scroll'))) {\n view.showNavbar();\n }\n // Hide/show navbar toolbar\n if (newPage.hasClass('no-toolbar') && !oldPage.hasClass('no-toolbar')) {\n view.hideToolbar();\n }\n if (!newPage.hasClass('no-toolbar') && (oldPage.hasClass('no-toolbar') || oldPage.hasClass('no-toolbar-by-scroll'))) {\n view.showToolbar();\n }\n // Hide/show tabbar\n var tabBar;\n if (newPage.hasClass('no-tabbar') && !oldPage.hasClass('no-tabbar')) {\n tabBar = $(view.container).find('.tabbar');\n if (tabBar.length === 0) tabBar = $(view.container).parents('.' + app.params.viewsClass).find('.tabbar');\n app.hideToolbar(tabBar);\n }\n if (!newPage.hasClass('no-tabbar') && (oldPage.hasClass('no-tabbar') || oldPage.hasClass('no-tabbar-by-scroll'))) {\n tabBar = $(view.container).find('.tabbar');\n if (tabBar.length === 0) tabBar = $(view.container).parents('.' + app.params.viewsClass).find('.tabbar');\n app.showToolbar(tabBar);\n }\n \n oldPage.removeClass('no-navbar-by-scroll no-toolbar-by-scroll');\n // Callbacks\n app.pluginHook('pageBeforeAnimation', pageData);\n if (app.params.onPageBeforeAnimation) app.params.onPageBeforeAnimation(app, pageData);\n app.triggerPageCallbacks('beforeAnimation', pageData.name, pageData);\n $(pageData.container).trigger('pageBeforeAnimation page:beforeanimation', {page: pageData});\n }\n };\n \n // Init Page Events and Manipulations\n app.initPage = function (pageContainer) {\n pageContainer = $(pageContainer);\n if (pageContainer.length === 0) return;\n // Size navbars on page load\n if (app.sizeNavbars) app.sizeNavbars(pageContainer.parents('.' + app.params.viewClass)[0]);\n // Init messages\n if (app.initPageMessages) app.initPageMessages(pageContainer);\n // Init forms storage\n if (app.initFormsStorage) app.initFormsStorage(pageContainer);\n // Init smart select\n if (app.initSmartSelects) app.initSmartSelects(pageContainer);\n // Init slider\n if (app.initPageSwiper) app.initPageSwiper(pageContainer);\n // Init pull to refres\n if (app.initPullToRefresh) app.initPullToRefresh(pageContainer);\n // Init infinite scroll\n if (app.initPageInfiniteScroll) app.initPageInfiniteScroll(pageContainer);\n // Init searchbar\n if (app.initSearchbar) app.initSearchbar(pageContainer);\n // Init message bar\n if (app.initPageMessagebar) app.initPageMessagebar(pageContainer);\n // Init scroll toolbars\n if (app.initPageScrollToolbars) app.initPageScrollToolbars(pageContainer);\n // Init lazy images\n if (app.initImagesLazyLoad) app.initImagesLazyLoad(pageContainer);\n // Init progress bars\n if (app.initPageProgressbar) app.initPageProgressbar(pageContainer);\n // Init resizeable textareas\n if (app.initPageResizableTextarea) app.initPageResizableTextarea(pageContainer);\n // Init Data Table\n if (app.initPageDataTables) app.initPageDataTables(pageContainer);\n // Init Material Preloader\n if (app.params.material && app.initPageMaterialPreloader) app.initPageMaterialPreloader(pageContainer);\n // Init Material Inputs\n if (app.params.material && app.initPageMaterialInputs) app.initPageMaterialInputs(pageContainer);\n // Init Material Tabbar\n if (app.params.material && app.initPageMaterialTabbar) app.initPageMaterialTabbar(pageContainer);\n };\n app.reinitPage = function (pageContainer) {\n pageContainer = $(pageContainer);\n if (pageContainer.length === 0) return;\n // Size navbars on page reinit\n if (app.sizeNavbars) app.sizeNavbars(pageContainer.parents('.' + app.params.viewClass)[0]);\n // Reinit slider\n if (app.reinitPageSwiper) app.reinitPageSwiper(pageContainer);\n // Reinit lazy load\n if (app.reinitLazyLoad) app.reinitLazyLoad(pageContainer);\n };\n app.initPageWithCallback = function (pageContainer) {\n pageContainer = $(pageContainer);\n var viewContainer = pageContainer.parents('.' + app.params.viewClass);\n if (viewContainer.length === 0) return;\n var view = viewContainer[0].f7View || undefined;\n var url = view && view.url ? view.url : undefined;\n if (viewContainer && pageContainer.attr('data-page')) {\n viewContainer.attr('data-page', pageContainer.attr('data-page'));\n }\n app.pageInitCallback(view, {pageContainer: pageContainer[0], url: url, position: 'center'});\n };\n \n\n /*======================================================\n ************ Navigation / Router ************\n ======================================================*/\n app.router = {\n _remove: function (el) {\n if (app.params.routerRemoveTimeout || app.params.routerRemoveWithTimeout) {\n setTimeout(function () {\n $(el).remove();\n }, 0);\n }\n else $(el).remove();\n },\n _modalsSelector: '.popup, .modal, .popover, .actions-modal, .picker-modal, .login-screen',\n // Temporary DOM Element\n temporaryDom: document.createElement('div'),\n \n // Find page or navbar in passed container which are related to View\n findElement: function (selector, container, view, notCached) {\n container = $(container);\n if (notCached) selector = selector + ':not(.cached)';\n var found = container.find(selector).filter(function (index, el) {\n return $(el).parents(app.router._modalsSelector).length === 0;\n });\n if (found.length > 1) {\n if (typeof view.selector === 'string') {\n // Search in related view\n found = container.find(view.selector + ' ' + selector);\n }\n if (found.length > 1) {\n // Search in main view\n found = container.find('.' + app.params.viewMainClass + ' ' + selector);\n }\n }\n if (found.length === 1) return found;\n else {\n // Try to find non cached\n if (!notCached) found = app.router.findElement(selector, container, view, true);\n if (found && found.length === 1) return found;\n if (found && found.length > 1) return $(found[0]);\n else return undefined;\n }\n },\n \n // Set pages classes for animationEnd\n animatePages: function (leftPage, rightPage, direction) {\n // Loading new page\n var removeClasses = 'page-on-center page-on-right page-on-left';\n if (direction === 'to-left') {\n leftPage.removeClass(removeClasses).addClass('page-from-center-to-left');\n rightPage.removeClass(removeClasses).addClass('page-from-right-to-center');\n }\n // Go back\n if (direction === 'to-right') {\n leftPage.removeClass(removeClasses).addClass('page-from-left-to-center');\n rightPage.removeClass(removeClasses).addClass('page-from-center-to-right');\n \n }\n },\n \n // Prepare navbar before animarion\n prepareNavbar: function (newNavbarInner, oldNavbarInner, newNavbarPosition) {\n $(newNavbarInner).find('.sliding').each(function () {\n var sliding = $(this);\n var slidingOffset = newNavbarPosition === 'right' ? this.f7NavbarRightOffset : this.f7NavbarLeftOffset;\n \n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && sliding.find('.back .icon').length > 0) {\n sliding.find('.back .icon').transform('translate3d(' + (-slidingOffset) + 'px,0,0)');\n }\n }\n sliding.transform('translate3d(' + slidingOffset + 'px,0,0)');\n });\n },\n \n // Set navbars classes for animation\n animateNavbars: function (leftNavbarInner, rightNavbarInner, direction) {\n // Loading new page\n var removeClasses = 'navbar-on-right navbar-on-center navbar-on-left';\n if (direction === 'to-left') {\n rightNavbarInner.removeClass(removeClasses).addClass('navbar-from-right-to-center');\n rightNavbarInner.find('.sliding').each(function () {\n var sliding = $(this);\n sliding.transform('translate3d(0px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && sliding.find('.back .icon').length > 0) {\n sliding.find('.back .icon').transform('translate3d(0px,0,0)');\n }\n }\n });\n \n leftNavbarInner.removeClass(removeClasses).addClass('navbar-from-center-to-left');\n leftNavbarInner.find('.sliding').each(function () {\n var sliding = $(this);\n var rightText;\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('center') && rightNavbarInner.find('.sliding.left .back .icon').length > 0) {\n rightText = rightNavbarInner.find('.sliding.left .back span');\n if (rightText.length > 0) this.f7NavbarLeftOffset += rightText[0].offsetLeft;\n }\n if (sliding.hasClass('left') && sliding.find('.back .icon').length > 0) {\n sliding.find('.back .icon').transform('translate3d(' + (-this.f7NavbarLeftOffset) + 'px,0,0)');\n }\n }\n sliding.transform('translate3d(' + (this.f7NavbarLeftOffset) + 'px,0,0)');\n });\n }\n // Go back\n if (direction === 'to-right') {\n leftNavbarInner.removeClass(removeClasses).addClass('navbar-from-left-to-center');\n leftNavbarInner.find('.sliding').each(function () {\n var sliding = $(this);\n sliding.transform('translate3d(0px,0,0)');\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && sliding.find('.back .icon').length > 0) {\n sliding.find('.back .icon').transform('translate3d(0px,0,0)');\n }\n }\n });\n \n rightNavbarInner.removeClass(removeClasses).addClass('navbar-from-center-to-right');\n rightNavbarInner.find('.sliding').each(function () {\n var sliding = $(this);\n if (app.params.animateNavBackIcon) {\n if (sliding.hasClass('left') && sliding.find('.back .icon').length > 0) {\n sliding.find('.back .icon').transform('translate3d(' + (-this.f7NavbarRightOffset) + 'px,0,0)');\n }\n }\n sliding.transform('translate3d(' + (this.f7NavbarRightOffset) + 'px,0,0)');\n });\n }\n },\n \n preprocess: function(view, content, url, next) {\n // Plugin hook\n app.pluginHook('routerPreprocess', view, content, url, next);\n \n // Preprocess by plugin\n content = app.pluginProcess('preprocess', content);\n \n if (view && view.params && view.params.preprocess) {\n content = view.params.preprocess(content, url, next);\n if (typeof content !== 'undefined') {\n next(content);\n }\n }\n else if (app.params.preprocess) {\n content = app.params.preprocess(content, url, next);\n if (typeof content !== 'undefined') {\n next(content);\n }\n }\n else {\n next(content);\n }\n },\n preroute: function(view, options, isBack) {\n if (isBack) options.isBack = true;\n app.pluginHook('routerPreroute', view, options);\n if ((app.params.preroute && app.params.preroute(view, options) === false) || (view && view.params.preroute && view.params.preroute(view, options) === false)) {\n return true;\n }\n else {\n return false;\n }\n },\n \n template7Render: function (view, options) {\n var url = options.url,\n content = options.content, //initial content\n t7_rendered_content = options.content, // will be rendered using Template7\n context = options.context, // Context data for Template7\n contextName = options.contextName,\n template = options.template; // Template 7 compiled template\n \n var t7_ctx, t7_template;\n if (typeof content === 'string') {\n if (url) {\n if (app.template7Cache[url] && !options.ignoreCache) t7_template = t7.cache[url];\n else {\n t7_template = t7.compile(content);\n t7.cache[url] = t7_template;\n }\n }\n else t7_template = t7.compile(content);\n }\n else if (template) {\n t7_template = template;\n }\n \n if (context) {\n t7_ctx = context;\n if (context && url) {\n view.contextCache[url] = context;\n }\n }\n else {\n if (contextName) {\n if (contextName.indexOf('.') >= 0) {\n var _ctx_path = contextName.split('.');\n var _ctx = t7.data[_ctx_path[0]];\n for (var i = 1; i < _ctx_path.length; i++) {\n if (_ctx_path[i]) _ctx = _ctx[_ctx_path[i]];\n }\n t7_ctx = _ctx;\n }\n else t7_ctx = t7.data[contextName];\n }\n if (!t7_ctx && url) {\n t7_ctx = t7.data['url:' + url];\n }\n if (!t7_ctx && typeof content === 'string' && !template) {\n //try to find by page name in content\n var pageNameMatch = content.match(/(data-page=[\"'][^\"^']*[\"'])/);\n if (pageNameMatch) {\n var page = pageNameMatch[0].split('data-page=')[1].replace(/['\"]/g, '');\n if (page) t7_ctx = t7.data['page:' + page];\n }\n }\n if (!t7_ctx && template && t7.templates) {\n // Try to find matched template name in t7.templates\n for (var templateName in t7.templates) {\n if (t7.templates[templateName] === template) t7_ctx = t7.data[templateName];\n }\n }\n if (!t7_ctx && url && url in view.contextCache) {\n t7_ctx = view.contextCache[url];\n }\n if (!t7_ctx) {\n t7_ctx = {};\n }\n }\n \n if (t7_template && t7_ctx) {\n if (typeof t7_ctx === 'function') t7_ctx = t7_ctx();\n if (url) {\n // Extend data with URL query\n var query = $.parseUrlQuery(url);\n t7_ctx.url_query = {};\n for (var key in query) {\n t7_ctx.url_query[key] = query[key];\n }\n }\n try {\n t7_rendered_content = t7_template(t7_ctx);\n }\n catch (e) {\n t7_rendered_content = '';\n if (window.console && window.console.error) {\n console.error(e);\n }\n }\n }\n \n return {content: t7_rendered_content, context: t7_ctx};\n }\n };\n \n \n app.router._load = function (view, options) {\n // Plugin hook\n app.pluginHook('routerLoad', view, options);\n \n var url = options.url,\n content = options.content, //initial content\n t7_rendered = {content: options.content},\n template = options.template, // Template 7 compiled template\n pageName = options.pageName,\n viewContainer = $(view.container),\n pagesContainer = $(view.pagesContainer),\n animatePages = options.animatePages,\n newPage, oldPage, pagesInView, i, oldNavbarInner, newNavbarInner, navbar, dynamicNavbar, reloadPosition,\n isDynamicPage = typeof url === 'undefined' && content || template,\n pushState = options.pushState,\n pageElement = options.pageElement;\n \n if (typeof animatePages === 'undefined') animatePages = view.params.animatePages;\n \n // Render with Template7\n if (app.params.template7Pages && typeof content === 'string' || template) {\n t7_rendered = app.router.template7Render(view, options);\n if (t7_rendered.content && !content) {\n content = t7_rendered.content;\n }\n }\n \n app.router.temporaryDom.innerHTML = '';\n \n // Parse DOM\n if (!pageName && !pageElement) {\n if ((typeof content === 'string') || (url && (typeof content === 'string'))) {\n app.router.temporaryDom.innerHTML = t7_rendered.content;\n } else {\n if ('length' in content && content.length > 1) {\n for (var ci = 0; ci < content.length; ci++) {\n $(app.router.temporaryDom).append(content[ci]);\n }\n } else {\n $(app.router.temporaryDom).append(content);\n }\n }\n }\n \n // Reload position\n reloadPosition = options.reload && (options.reloadPrevious ? 'left' : 'center');\n \n // Find new page\n if (pageName) newPage = pagesContainer.find('.page[data-page=\"' + pageName + '\"]');\n else {\n if (pageElement) newPage = $(pageElement);\n else newPage = app.router.findElement('.page', app.router.temporaryDom, view);\n }\n // If page not found exit\n if (!newPage || newPage.length === 0 || (pageName && view.activePage && view.activePage.name === pageName)) {\n view.allowPageChange = true;\n return;\n }\n \n newPage.addClass(options.reload ? 'page-on-' + reloadPosition : 'page-on-right');\n \n // Find old page (should be the last one) and remove older pages\n pagesInView = pagesContainer.children('.page:not(.cached)');\n if (pageElement) {\n pagesInView = pagesInView.filter(function (index, page) {\n if (page !== pageElement) return page;\n });\n }\n \n if (options.reload && options.reloadPrevious && pagesInView.length === 1) {\n view.allowPageChange = true;\n return;\n }\n \n if (options.reload) {\n oldPage = pagesInView.eq(pagesInView.length - 1);\n }\n else {\n if (pagesInView.length > 1) {\n for (i = 0; i < pagesInView.length - 2; i++) {\n if (!view.params.domCache) {\n app.pageRemoveCallback(view, pagesInView[i], 'left');\n app.router._remove(pagesInView[i]);\n }\n else {\n $(pagesInView[i]).addClass('cached');\n }\n }\n if (!view.params.domCache) {\n app.pageRemoveCallback(view, pagesInView[i], 'left');\n app.router._remove(pagesInView[i]);\n }\n else {\n $(pagesInView[i]).addClass('cached');\n }\n }\n oldPage = pagesContainer.children('.page:not(.cached)');\n }\n if (pageElement && oldPage.length > 1) {\n oldPage = oldPage.filter(function (index, page) {\n if (page !== pageElement) return page;\n });\n }\n if(view.params.domCache || pageElement) newPage.removeClass('cached');\n \n // Dynamic navbar\n if (view.params.dynamicNavbar) {\n dynamicNavbar = true;\n // Find navbar\n if (pageName) {\n newNavbarInner = viewContainer.find('.navbar-inner[data-page=\"' + pageName + '\"]');\n }\n else {\n newNavbarInner = app.router.findElement('.navbar-inner', app.router.temporaryDom, view);\n }\n if (!newNavbarInner || newNavbarInner.length === 0) {\n // Look in page\n newNavbarInner = newPage.find('.navbar-inner');\n if (!newNavbarInner || newNavbarInner.length === 0) {\n // Set false\n dynamicNavbar = false;\n }\n else {\n if (newNavbarInner.parent('.navbar').length > 0) {\n newNavbarInner.prependTo(newPage);\n }\n }\n }\n if (dynamicNavbar && newPage.find('.navbar').length > 0) {\n app.router._remove(newPage.find('.navbar').filter(function(index, el){\n return $(el).parents(app.router._modalsSelector).length === 0;\n }));\n }\n navbar = viewContainer.children('.navbar');\n if (options.reload) {\n oldNavbarInner = navbar.find('.navbar-inner:not(.cached):last-child');\n }\n else {\n oldNavbarInner = navbar.find('.navbar-inner:not(.cached)');\n \n if (oldNavbarInner.length > 0) {\n for (i = 0; i < oldNavbarInner.length - 1; i++) {\n if (!view.params.domCache) {\n app.navbarRemoveCallback(view, pagesInView[i], navbar[0], oldNavbarInner[i]);\n app.router._remove(oldNavbarInner[i]);\n }\n else\n $(oldNavbarInner[i]).addClass('cached');\n }\n if (!newNavbarInner && oldNavbarInner.length === 1) {\n if (!view.params.domCache) {\n app.navbarRemoveCallback(view, pagesInView[0], navbar[0], oldNavbarInner[0]);\n app.router._remove(oldNavbarInner[0]);\n }\n else\n $(oldNavbarInner[0]).addClass('cached');\n }\n oldNavbarInner = navbar.find('.navbar-inner:not(.cached)');\n }\n }\n }\n if (dynamicNavbar) {\n newNavbarInner.addClass(options.reload ? 'navbar-on-' + reloadPosition : 'navbar-on-right');\n if(view.params.domCache || pageElement) newNavbarInner.removeClass('cached');\n newPage[0].f7RelatedNavbar = newNavbarInner[0];\n newNavbarInner[0].f7RelatedPage = newPage[0];\n }\n \n // save content areas into view's cache\n if (!url) {\n var newPageName = pageName || newPage.attr('data-page');\n if (isDynamicPage) url = '#' + app.params.dynamicPageUrl.replace(/{{name}}/g, newPageName).replace(/{{index}}/g, view.history.length - (options.reload ? 1 : 0));\n else url = '#' + newPageName;\n if (!view.params.domCache) {\n view.contentCache[url] = content;\n }\n if (view.params.domCache && pageName) {\n view.pagesCache[url] = pageName;\n }\n }\n else if (url && pageElement) {\n view.pageElementsCache[url] = {\n page: newPage,\n navbarInner: newNavbarInner\n };\n }\n \n // Push State\n if (app.params.pushState && !options.reloadPrevious && view.main) {\n if (typeof pushState === 'undefined') pushState = true;\n var pushStateRoot = app.params.pushStateRoot || '';\n var method = options.reload ? 'replaceState' : 'pushState';\n if (pushState) {\n if (!isDynamicPage && !pageName) {\n history[method]({url: url, viewIndex: app.views.indexOf(view)}, '', pushStateRoot + app.params.pushStateSeparator + url);\n }\n else if (isDynamicPage && content) {\n history[method]({content: typeof content === 'string' ? content : '', url: url, viewIndex: app.views.indexOf(view)}, '', pushStateRoot + app.params.pushStateSeparator + url);\n }\n else if (pageName) {\n history[method]({pageName: pageName, url: url, viewIndex: app.views.indexOf(view)}, '', pushStateRoot + app.params.pushStateSeparator + url);\n }\n }\n }\n \n // Update View history\n view.url = url;\n if (options.reload) {\n var lastUrl = view.history[view.history.length - (options.reloadPrevious ? 2 : 1)];\n if (lastUrl &&\n lastUrl.indexOf('#') === 0 &&\n lastUrl in view.contentCache &&\n lastUrl !== url &&\n view.history.indexOf(lastUrl) === -1) {\n view.contentCache[lastUrl] = null;\n delete view.contentCache[lastUrl];\n }\n else if (lastUrl &&\n lastUrl in view.pageElementsCache &&\n lastUrl !== url &&\n (view.history.indexOf(lastUrl) === -1 || view.history.indexOf(lastUrl) === view.history.length - 1)) {\n view.pageElementsCache[lastUrl] = null;\n delete view.pageElementsCache[lastUrl];\n }\n if (lastUrl &&\n lastUrl in view.contextCache &&\n lastUrl !== url &&\n (view.history.indexOf(lastUrl) === -1 || view.history.indexOf(lastUrl) === view.history.length - 1)) {\n view.contextCache[lastUrl] = null;\n delete view.contextCache[lastUrl];\n }\n view.history[view.history.length - (options.reloadPrevious ? 2 : 1)] = url;\n }\n else {\n view.history.push(url);\n }\n \n // Unique history\n var historyBecameUnique = false;\n if (view.params.uniqueHistory) {\n var _history = view.history;\n var _url = url;\n if (view.params.uniqueHistoryIgnoreGetParameters) {\n _history = [];\n _url = url.split('?')[0];\n for (i = 0; i < view.history.length; i++) {\n _history.push(view.history[i].split('?')[0]);\n }\n }\n \n if (_history.indexOf(_url) !== _history.lastIndexOf(_url)) {\n view.history = view.history.slice(0, _history.indexOf(_url));\n view.history.push(url);\n historyBecameUnique = true;\n }\n }\n // Dom manipulations\n if (options.reloadPrevious) {\n oldPage = oldPage.prev('.page');\n newPage.insertBefore(oldPage);\n if (dynamicNavbar) {\n oldNavbarInner = oldNavbarInner.prev('.navbar-inner');\n newNavbarInner.insertAfter(oldNavbarInner);\n }\n }\n else {\n pagesContainer.append(newPage[0]);\n if (dynamicNavbar) navbar.append(newNavbarInner[0]);\n }\n // Remove Old Page And Navbar\n if (options.reload) {\n if (view.params.domCache && view.initialPages.indexOf(oldPage[0]) >= 0) {\n oldPage.addClass('cached');\n if (dynamicNavbar) oldNavbarInner.addClass('cached');\n }\n else {\n app.pageRemoveCallback(view, oldPage[0], reloadPosition);\n if (dynamicNavbar) app.navbarRemoveCallback(view, oldPage[0], navbar[0], oldNavbarInner[0]);\n app.router._remove(oldPage);\n if (dynamicNavbar) app.router._remove(oldNavbarInner);\n }\n }\n \n // Page Init Events\n app.pageInitCallback(view, {\n pageContainer: newPage[0],\n url: url,\n position: options.reload ? reloadPosition : 'right',\n navbarInnerContainer: dynamicNavbar ? newNavbarInner && newNavbarInner[0] : undefined,\n oldNavbarInnerContainer: dynamicNavbar ? oldNavbarInner && oldNavbarInner[0] : undefined,\n context: t7_rendered.context || options.context,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData,\n reload: options.reload,\n reloadPrevious: options.reloadPrevious\n });\n \n // Navbar init event\n if (dynamicNavbar) {\n app.navbarInitCallback(view, newPage[0], navbar[0], newNavbarInner[0], url, options.reload ? reloadPosition : 'right');\n }\n \n if (options.reload) {\n view.allowPageChange = true;\n if (historyBecameUnique) view.refreshPreviousPage();\n return;\n }\n \n if (dynamicNavbar && animatePages) {\n app.router.prepareNavbar(newNavbarInner, oldNavbarInner, 'right');\n }\n // Force reLayout\n var clientLeft = newPage[0].clientLeft;\n \n // Before Anim Callback\n app.pageAnimCallback('before', view, {\n pageContainer: newPage[0],\n url: url,\n position: 'right',\n oldPage: oldPage,\n newPage: newPage,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData\n });\n \n function afterAnimation() {\n view.allowPageChange = true;\n newPage.removeClass('page-from-right-to-center page-on-right page-on-left').addClass('page-on-center');\n oldPage.removeClass('page-from-center-to-left page-on-center page-on-right').addClass('page-on-left');\n if (dynamicNavbar) {\n newNavbarInner.removeClass('navbar-from-right-to-center navbar-on-left navbar-on-right').addClass('navbar-on-center');\n oldNavbarInner.removeClass('navbar-from-center-to-left navbar-on-center navbar-on-right').addClass('navbar-on-left');\n }\n app.pageAnimCallback('after', view, {\n pageContainer: newPage[0],\n url: url,\n position: 'right',\n oldPage: oldPage,\n newPage: newPage,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData\n });\n if (app.params.pushState && view.main) app.pushStateClearQueue();\n if (!(view.params.swipeBackPage || view.params.preloadPreviousPage)) {\n if (view.params.domCache) {\n oldPage.addClass('cached');\n if (dynamicNavbar) oldNavbarInner.addClass('cached');\n }\n else {\n if (!(url.indexOf('#') === 0 && newPage.attr('data-page').indexOf('smart-select-') === 0)) {\n app.pageRemoveCallback(view, oldPage[0], 'left');\n if (dynamicNavbar) app.navbarRemoveCallback(view, oldPage[0], navbar[0], oldNavbarInner[0]);\n app.router._remove(oldPage);\n if (dynamicNavbar) app.router._remove(oldNavbarInner);\n }\n }\n }\n if (view.params.uniqueHistory && historyBecameUnique) {\n view.refreshPreviousPage();\n }\n }\n if (animatePages) {\n // Set pages before animation\n if (app.params.material && app.params.materialPageLoadDelay) {\n setTimeout(function () {\n app.router.animatePages(oldPage, newPage, 'to-left', view);\n }, app.params.materialPageLoadDelay);\n }\n else {\n app.router.animatePages(oldPage, newPage, 'to-left', view);\n }\n \n // Dynamic navbar animation\n if (dynamicNavbar) {\n setTimeout(function() {\n app.router.animateNavbars(oldNavbarInner, newNavbarInner, 'to-left', view);\n }, 0);\n }\n newPage.animationEnd(function () {\n afterAnimation();\n });\n }\n else {\n if (dynamicNavbar) newNavbarInner.find('.sliding, .sliding .back .icon').transform('');\n afterAnimation();\n }\n \n };\n \n app.router.load = function (view, options) {\n options = options || {};\n if (app.routerPreOptions) {\n options = app.routerPreOptions(view, options) || {};\n }\n if (options.component && app.componentLoader) {\n try {\n app.componentLoader(view, options, function (newOptions) {\n app.router.load(view, newOptions);\n });\n } catch (e) {}\n return;\n }\n if (app.router.preroute(view, options)) {\n return false;\n }\n var url = options.url;\n var content = options.content;\n var pageName = options.pageName;\n var pageElement = options.pageElement;\n if (pageName) {\n if (pageName.indexOf('?') > 0) {\n options.query = $.parseUrlQuery(pageName);\n options.pageName = pageName = pageName.split('?')[0];\n }\n }\n var template = options.template;\n if (view.params.reloadPages === true) options.reload = true;\n \n if (!view.allowPageChange) return false;\n if (url && view.url === url && !options.reload && !view.params.allowDuplicateUrls) return false;\n view.allowPageChange = false;\n if (app.xhr && view.xhr && view.xhr === app.xhr) {\n app.xhr.abort();\n app.xhr = false;\n }\n function proceed(content) {\n app.router.preprocess(view, content, url, function (content) {\n options.content = content;\n app.router._load(view, options);\n });\n }\n if (content || pageName || pageElement) {\n proceed(content);\n return;\n }\n else if (template) {\n app.router._load(view, options);\n return;\n }\n \n if (!options.url || options.url === '#') {\n view.allowPageChange = true;\n return;\n }\n app.get(options.url, view, options.ignoreCache, function (content, error) {\n if (error) {\n view.allowPageChange = true;\n return;\n }\n proceed(content);\n });\n };\n \n app.router._back = function (view, options) {\n options = options || {};\n \n app.pluginHook('routerBack', view, options);\n \n var url = options.url,\n content = options.content,\n t7_rendered = {content: options.content}, // will be rendered using Template7\n template = options.template, // Template 7 compiled template\n animatePages = options.animatePages,\n preloadOnly = options.preloadOnly,\n pushState = options.pushState,\n ignoreCache = options.ignoreCache,\n force = options.force,\n pageName = options.pageName,\n pageElement = options.pageElement;\n \n var viewContainer = $(view.container),\n pagesContainer = $(view.pagesContainer),\n pagesInView = pagesContainer.children('.page:not(.cached)'),\n oldPage, newPage, oldNavbarInner, newNavbarInner, navbar, navbarInners, dynamicNavbar, manipulateDom = true;\n \n if (typeof animatePages === 'undefined') animatePages = view.params.animatePages;\n \n // Render with Template7\n if (app.params.template7Pages && typeof content === 'string' || template) {\n t7_rendered = app.router.template7Render(view, options);\n if (t7_rendered.content && !content) {\n content = t7_rendered.content;\n }\n }\n \n // Animation\n function afterAnimation() {\n app.pageBackCallback('after', view, {\n pageContainer: oldPage[0],\n url: url,\n position: 'center',\n oldPage: oldPage,\n newPage: newPage,\n });\n app.pageAnimCallback('after', view, {\n pageContainer: newPage[0],\n url: url,\n position: 'left',\n oldPage: oldPage,\n newPage: newPage,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData\n });\n app.router.afterBack(view, oldPage[0], newPage[0]);\n }\n function animateBack() {\n // Page before animation callback\n app.pageBackCallback('before', view, {\n pageContainer: oldPage[0],\n url: url,\n position: 'center',\n oldPage: oldPage,\n newPage: newPage,\n });\n app.pageAnimCallback('before', view, {\n pageContainer: newPage[0],\n url: url,\n position: 'left',\n oldPage: oldPage,\n newPage: newPage,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData\n });\n \n if (animatePages) {\n // Set pages before animation\n app.router.animatePages(newPage, oldPage, 'to-right', view);\n \n // Dynamic navbar animation\n if (dynamicNavbar) {\n setTimeout(function () {\n app.router.animateNavbars(newNavbarInner, oldNavbarInner, 'to-right', view);\n }, 0);\n }\n \n newPage.animationEnd(function () {\n afterAnimation();\n });\n }\n else {\n if (dynamicNavbar) newNavbarInner.find('.sliding, .sliding .back .icon').transform('');\n afterAnimation();\n }\n }\n \n function parseNewPage() {\n app.router.temporaryDom.innerHTML = '';\n // Parse DOM\n if ((typeof content === 'string') || (url && (typeof content === 'string'))) {\n app.router.temporaryDom.innerHTML = t7_rendered.content;\n } else {\n if ('length' in content && content.length > 1) {\n for (var ci = 0; ci < content.length; ci++) {\n $(app.router.temporaryDom).append(content[ci]);\n }\n } else {\n $(app.router.temporaryDom).append(content);\n }\n }\n if (pageElement) newPage = $(pageElement);\n else newPage = app.router.findElement('.page', app.router.temporaryDom, view);\n \n if (view.params.dynamicNavbar) {\n // Find navbar\n newNavbarInner = app.router.findElement('.navbar-inner', app.router.temporaryDom, view);\n }\n }\n function setPages() {\n // If pages not found or there are still more than one, exit\n if (!newPage || newPage.length === 0) {\n view.allowPageChange = true;\n return;\n }\n if (view.params.dynamicNavbar && typeof dynamicNavbar === 'undefined') {\n if (!newNavbarInner || newNavbarInner.length === 0) {\n dynamicNavbar = false;\n }\n else {\n dynamicNavbar = true;\n }\n }\n \n newPage.addClass('page-on-left').removeClass('cached');\n if (dynamicNavbar) {\n navbar = viewContainer.children('.navbar');\n navbarInners = navbar.find('.navbar-inner:not(.cached)');\n newNavbarInner.addClass('navbar-on-left').removeClass('cached');\n }\n // Remove/hide previous page in force mode\n if (force) {\n var pageToRemove, navbarToRemove;\n pageToRemove = $(pagesInView[pagesInView.length - 2]);\n \n if (dynamicNavbar) navbarToRemove = $(pageToRemove[0] && pageToRemove[0].f7RelatedNavbar || navbarInners[navbarInners.length - 2]);\n if (view.params.domCache && view.initialPages.indexOf(pageToRemove[0]) >= 0) {\n if (pageToRemove.length && pageToRemove[0] !== newPage[0]) pageToRemove.addClass('cached');\n if (dynamicNavbar && navbarToRemove.length && navbarToRemove[0] !== newNavbarInner[0]) {\n navbarToRemove.addClass('cached');\n }\n }\n else {\n var removeNavbar = dynamicNavbar && navbarToRemove.length;\n if (pageToRemove.length) {\n app.pageRemoveCallback(view, pageToRemove[0], 'right');\n if (removeNavbar) {\n app.navbarRemoveCallback(view, pageToRemove[0], navbar[0], navbarToRemove[0]);\n }\n app.router._remove(pageToRemove);\n if (removeNavbar) app.router._remove(navbarToRemove);\n }\n else if (removeNavbar) {\n app.navbarRemoveCallback(view, pageToRemove[0], navbar[0], navbarToRemove[0]);\n app.router._remove(navbarToRemove);\n }\n }\n pagesInView = pagesContainer.children('.page:not(.cached)');\n if (dynamicNavbar) {\n navbarInners = viewContainer.children('.navbar').find('.navbar-inner:not(.cached)');\n }\n if (view.history.indexOf(url) >= 0) {\n view.history = view.history.slice(0, view.history.indexOf(url) + 2);\n }\n else {\n if (view.history[[view.history.length - 2]]) {\n view.history[view.history.length - 2] = url;\n }\n else {\n view.history.unshift(url);\n }\n }\n }\n \n oldPage = $(pagesInView[pagesInView.length - 1]);\n if (view.params.domCache) {\n if (oldPage[0] === newPage[0]) {\n oldPage = pagesContainer.children('.page.page-on-center');\n if (oldPage.length === 0 && view.activePage) oldPage = $(view.activePage.container);\n }\n }\n \n if (dynamicNavbar && !oldNavbarInner) {\n oldNavbarInner = $(navbarInners[navbarInners.length - 1]);\n if (view.params.domCache) {\n if (oldNavbarInner[0] === newNavbarInner[0]) {\n oldNavbarInner = navbar.children('.navbar-inner.navbar-on-center:not(.cached)');\n }\n if (oldNavbarInner.length === 0) {\n oldNavbarInner = navbar.children('.navbar-inner[data-page=\"'+oldPage.attr('data-page')+'\"]');\n }\n }\n if (oldNavbarInner.length === 0 || newNavbarInner[0] === oldNavbarInner[0]) dynamicNavbar = false;\n }\n \n if (dynamicNavbar) {\n if (manipulateDom) newNavbarInner.insertBefore(oldNavbarInner);\n newNavbarInner[0].f7RelatedPage = newPage[0];\n newPage[0].f7RelatedNavbar = newNavbarInner[0];\n }\n if (manipulateDom) newPage.insertBefore(oldPage);\n \n // Page Init Events\n app.pageInitCallback(view, {\n pageContainer: newPage[0],\n url: url,\n position: 'left',\n navbarInnerContainer: dynamicNavbar ? newNavbarInner[0] : undefined,\n oldNavbarInnerContainer: dynamicNavbar ? oldNavbarInner && oldNavbarInner[0] : undefined,\n context: t7_rendered.context,\n query: options.query,\n fromPage: oldPage && oldPage.length && oldPage[0].f7PageData,\n preloadOnly: preloadOnly\n });\n if (dynamicNavbar) {\n app.navbarInitCallback(view, newPage[0], navbar[0], newNavbarInner[0], url, 'right');\n }\n \n if (dynamicNavbar && newNavbarInner.hasClass('navbar-on-left') && animatePages) {\n app.router.prepareNavbar(newNavbarInner, oldNavbarInner, 'left');\n }\n \n if (preloadOnly) {\n view.allowPageChange = true;\n return;\n }\n \n // Update View's URL\n view.url = url;\n \n // Force reLayout\n var clientLeft = newPage[0].clientLeft;\n \n animateBack();\n \n // Push state\n if (app.params.pushState && view.main) {\n if (typeof pushState === 'undefined') pushState = true;\n if (!preloadOnly && history.state && pushState) {\n history.back();\n }\n }\n return;\n }\n \n // Simple go back when we have pages on left\n if (pagesInView.length > 1 && !force) {\n // Exit if only preloadOnly\n if (preloadOnly) {\n view.allowPageChange = true;\n return;\n }\n // Update View's URL\n view.url = view.history[view.history.length - 2];\n url = view.url;\n \n // Define old and new pages\n newPage = $(pagesInView[pagesInView.length - 2]);\n oldPage = $(pagesInView[pagesInView.length - 1]);\n \n // Dynamic navbar\n if (view.params.dynamicNavbar) {\n dynamicNavbar = true;\n // Find navbar\n navbarInners = viewContainer.children('.navbar').find('.navbar-inner:not(.cached)');\n newNavbarInner = $(navbarInners[0]);\n oldNavbarInner = $(navbarInners[1]);\n if (newNavbarInner.length === 0 || oldNavbarInner.length === 0 || oldNavbarInner[0] === newNavbarInner[0]) {\n dynamicNavbar = false;\n }\n }\n manipulateDom = false;\n setPages();\n return;\n }\n \n if (!force) {\n // Go back when there is no pages on left\n if (!preloadOnly) {\n view.url = view.history[view.history.length - 2];\n url = view.url;\n }\n \n if (content) {\n parseNewPage();\n setPages();\n return;\n }\n else if (pageName) {\n // Get dom cached pages\n newPage = $(viewContainer).find('.page[data-page=\"' + pageName + '\"]');\n if (view.params.dynamicNavbar) {\n newNavbarInner = $(viewContainer).children('.navbar').find('.navbar-inner[data-page=\"' + pageName + '\"]');\n if (newNavbarInner.length === 0 && newPage[0].f7RelatedNavbar) {\n newNavbarInner = $(newPage[0].f7RelatedNavbar);\n }\n if (newNavbarInner.length === 0 && newPage[0].f7PageData) {\n newNavbarInner = $(newPage[0].f7PageData.navbarInnerContainer);\n }\n }\n setPages();\n return;\n }\n else if (url && url in view.pageElementsCache) {\n newPage = view.pageElementsCache[url].page;\n newNavbarInner = view.pageElementsCache[url].navbarInner;\n setPages();\n return;\n }\n else {\n view.allowPageChange = true;\n return;\n }\n }\n else {\n if (url && url === view.url || pageName && view.activePage && view.activePage.name === pageName) {\n view.allowPageChange = true;\n return;\n }\n // Go back with force url\n if (content) {\n parseNewPage();\n setPages();\n return;\n }\n else if (pageName && view.params.domCache) {\n if (pageName) url = '#' + pageName;\n \n newPage = $(viewContainer).find('.page[data-page=\"' + pageName + '\"]');\n if (newPage[0].f7PageData && newPage[0].f7PageData.url) {\n url = newPage[0].f7PageData.url;\n }\n if (view.params.dynamicNavbar) {\n newNavbarInner = $(viewContainer).children('.navbar').find('.navbar-inner[data-page=\"' + pageName + '\"]');\n if (newNavbarInner.length === 0 && newPage[0].f7RelatedNavbar) {\n newNavbarInner = $(newPage[0].f7RelatedNavbar);\n }\n if (newNavbarInner.length === 0 && newPage[0].f7PageData) {\n newNavbarInner = $(newPage[0].f7PageData.navbarInnerContainer);\n }\n }\n setPages();\n return;\n }\n else if (pageElement && url) {\n newPage = $(pageElement);\n if (view.params.dynamicNavbar) {\n newNavbarInner = newPage.find('.navbar-inner').filter(function (index, el) {\n return $(el).parents(app.router._modalsSelector).length === 0;\n });\n if (newNavbarInner.length > 0) {\n newPage.prepend(newNavbarInner);\n app.router._remove(newPage.find('.navbar').filter(function (index, el) {\n return $(el).parents(app.router._modalsSelector).length === 0;\n }));\n }\n }\n setPages();\n return;\n }\n else {\n view.allowPageChange = true;\n return;\n }\n }\n \n };\n app.router.back = function (view, options) {\n options = options || {};\n if (app.routerPreOptions) {\n options = app.routerPreOptions(view, options) || {};\n }\n if (options.component && app.componentLoader) {\n try {\n app.componentLoader(view, options, function (newOptions) {\n app.router.load(view, newOptions);\n });\n } catch (e) {}\n return;\n }\n if (app.router.preroute(view, options, true)) {\n return false;\n }\n var url = options.url;\n var content = options.content;\n var pageName = options.pageName;\n var pageElement = options.pageElement;\n if (pageName) {\n if (pageName.indexOf('?') > 0) {\n options.query = $.parseUrlQuery(pageName);\n options.pageName = pageName = pageName.split('?')[0];\n }\n }\n var force = options.force;\n if (!view.allowPageChange) return false;\n view.allowPageChange = false;\n if (app.xhr && view.xhr && view.xhr === app.xhr) {\n app.xhr.abort();\n app.xhr = false;\n }\n var pagesInView = $(view.pagesContainer).find('.page:not(.cached)');\n \n function proceed(content) {\n app.router.preprocess(view, content, url, function (content) {\n options.content = content;\n app.router._back(view, options);\n });\n }\n if (pagesInView.length > 1 && !force) {\n // Simple go back to previos page in view\n app.router._back(view, options);\n return;\n }\n if (!force) {\n url = view.history[view.history.length - 2] || options.url;\n if (!options.url) options.url = url;\n if (!url) {\n view.allowPageChange = true;\n return;\n }\n if (url.indexOf('#') === 0 && view.contentCache[url]) {\n proceed(view.contentCache[url]);\n return;\n }\n else if (url.indexOf('#') === 0 && view.params.domCache) {\n if (!pageName) options.pageName = url.split('#')[1];\n proceed();\n return;\n }\n else if (url && url in view.pageElementsCache) {\n proceed();\n }\n else if (url.indexOf('#') !== 0) {\n // Load ajax page\n app.get(options.url, view, options.ignoreCache, function (content, error) {\n if (error) {\n view.allowPageChange = true;\n return;\n }\n proceed(content);\n });\n return;\n }\n }\n else {\n // Go back with force url\n if (!url && content) {\n proceed(content);\n return;\n }\n else if (!url && pageName) {\n if (pageName) url = '#' + pageName;\n proceed();\n return;\n }\n else if (url && pageElement) {\n proceed();\n return;\n }\n else if (url) {\n app.get(options.url, view, options.ignoreCache, function (content, error) {\n if (error) {\n view.allowPageChange = true;\n return;\n }\n proceed(content);\n });\n return;\n }\n }\n view.allowPageChange = true;\n return;\n };\n \n app.router.afterBack = function (view, oldPage, newPage) {\n // Remove old page and set classes on new one\n oldPage = $(oldPage);\n newPage = $(newPage);\n \n if (view.params.domCache && view.initialPages.indexOf(oldPage[0]) >= 0) {\n oldPage.removeClass('page-from-center-to-right').addClass('cached');\n }\n else {\n app.pageRemoveCallback(view, oldPage[0], 'right');\n app.router._remove(oldPage);\n }\n \n newPage.removeClass('page-from-left-to-center page-on-left').addClass('page-on-center');\n view.allowPageChange = true;\n \n // Update View's History\n var previousURL = view.history.pop();\n \n var newNavbar;\n \n // Updated dynamic navbar\n if (view.params.dynamicNavbar) {\n var inners = $(view.container).children('.navbar').find('.navbar-inner:not(.cached)');\n var oldNavbar = $(oldPage[0].f7RelatedNavbar || inners[1]);\n if (view.params.domCache && view.initialNavbars.indexOf(oldNavbar[0]) >= 0) {\n oldNavbar.removeClass('navbar-from-center-to-right').addClass('cached');\n }\n else {\n app.navbarRemoveCallback(view, oldPage[0], undefined, oldNavbar[0]);\n app.router._remove(oldNavbar);\n }\n newNavbar = $(inners[0]).removeClass('navbar-on-left navbar-from-left-to-center').addClass('navbar-on-center');\n }\n \n // Remove pages in dom cache\n if (view.params.domCache) {\n $(view.container).find('.page.cached').each(function () {\n var page = $(this);\n var pageUrl = page[0].f7PageData && page[0].f7PageData.url;\n if (pageUrl && view.history.indexOf(pageUrl) < 0 && view.initialPages.indexOf(this) < 0) {\n app.pageRemoveCallback(view, page[0], 'right');\n if (page[0].f7RelatedNavbar && view.params.dynamicNavbar) app.navbarRemoveCallback(view, page[0], undefined, page[0].f7RelatedNavbar);\n app.router._remove(page);\n if (page[0].f7RelatedNavbar && view.params.dynamicNavbar) app.router._remove(page[0].f7RelatedNavbar);\n }\n });\n }\n \n // Check previous page is content based only and remove it from content cache\n if (!view.params.domCache &&\n previousURL &&\n previousURL.indexOf('#') > -1 &&\n (previousURL in view.contentCache) &&\n // If the same page is in the history multiple times, don't remove it.\n view.history.indexOf(previousURL) === -1) {\n view.contentCache[previousURL] = null;\n delete view.contentCache[previousURL];\n }\n if (previousURL &&\n (previousURL in view.pageElementsCache) &&\n // If the same page is in the history multiple times, don't remove it.\n view.history.indexOf(previousURL) === -1) {\n view.pageElementsCache[previousURL] = null;\n delete view.pageElementsCache[previousURL];\n }\n // Check for context cache\n if (previousURL &&\n (previousURL in view.contextCache) &&\n // If the same page is in the history multiple times, don't remove it.\n view.history.indexOf(previousURL) === -1) {\n view.contextCache[previousURL] = null;\n delete view.contextCache[previousURL];\n }\n \n if (app.params.pushState && view.main) app.pushStateClearQueue();\n \n // Preload previous page\n if (view.params.preloadPreviousPage) {\n if (view.params.domCache && view.history.length > 1) {\n var preloadUrl = view.history[view.history.length - 2];\n var previousPage;\n var previousNavbar;\n if (preloadUrl && view.pagesCache[preloadUrl]) {\n // Load by page name\n previousPage = $(view.container).find('.page[data-page=\"' + view.pagesCache[preloadUrl] + '\"]');\n if (previousPage.next('.page')[0] !== newPage[0]) previousPage.insertBefore(newPage);\n if (newNavbar) {\n previousNavbar = $(view.container).children('.navbar').find('.navbar-inner[data-page=\"' + view.pagesCache[preloadUrl] + '\"]');\n if(!previousNavbar || previousNavbar.length === 0) previousNavbar = newNavbar.prev('.navbar-inner.cached');\n if (previousNavbar.next('.navbar-inner')[0] !== newNavbar[0]) previousNavbar.insertBefore(newNavbar);\n }\n }\n else {\n // Just load previous page\n previousPage = newPage.prev('.page.cached');\n if (newNavbar) previousNavbar = newNavbar.prev('.navbar-inner.cached');\n }\n if (previousPage && previousPage.length > 0) previousPage.removeClass('cached page-on-right page-on-center').addClass('page-on-left');\n if (previousNavbar && previousNavbar.length > 0) previousNavbar.removeClass('cached navbar-on-right navbar-on-center').addClass('navbar-on-left');\n }\n else {\n app.router.back(view, {preloadOnly: true});\n }\n }\n };\n \n\n /*======================================================\n ************ Modals ************\n ======================================================*/\n var _modalTemplateTempDiv = document.createElement('div');\n app.modalStack = [];\n app.modalStackClearQueue = function () {\n if (app.modalStack.length) {\n (app.modalStack.shift())();\n }\n };\n app.modal = function (params) {\n params = params || {};\n var modalHTML = '';\n if (app.params.modalTemplate) {\n if (!app._compiledTemplates.modal) app._compiledTemplates.modal = t7.compile(app.params.modalTemplate);\n modalHTML = app._compiledTemplates.modal(params);\n }\n else {\n var buttonsHTML = '';\n if (params.buttons && params.buttons.length > 0) {\n for (var i = 0; i < params.buttons.length; i++) {\n buttonsHTML += '' + params.buttons[i].text + '';\n }\n }\n var titleHTML = params.title ? '
' + params.title + '
' : '';\n var textHTML = params.text ? '
' + params.text + '
' : '';\n var afterTextHTML = params.afterText ? params.afterText : '';\n var noButtons = !params.buttons || params.buttons.length === 0 ? 'modal-no-buttons' : '';\n var verticalButtons = params.verticalButtons ? 'modal-buttons-vertical': '';\n var modalButtonsHTML = params.buttons && params.buttons.length > 0 ? '
' + buttonsHTML + '
' : '';\n modalHTML = '
' + (titleHTML + textHTML + afterTextHTML) + '
' + modalButtonsHTML + '
';\n }\n \n _modalTemplateTempDiv.innerHTML = modalHTML;\n \n var modal = $(_modalTemplateTempDiv).children();\n \n app.root.append(modal[0]);\n \n // Add events on buttons\n modal.find('.modal-button').each(function (index, el) {\n $(el).on('click', function (e) {\n if (params.buttons[index].close !== false) app.closeModal(modal);\n if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\n if (params.onClick) params.onClick(modal, index);\n });\n });\n app.openModal(modal);\n return modal[0];\n };\n app.alert = function (text, title, callbackOk) {\n if (typeof title === 'function') {\n callbackOk = arguments[1];\n title = undefined;\n }\n return app.modal({\n text: text || '',\n title: typeof title === 'undefined' ? app.params.modalTitle : title,\n buttons: [ {text: app.params.modalButtonOk, bold: true, onClick: callbackOk} ]\n });\n };\n app.confirm = function (text, title, callbackOk, callbackCancel) {\n if (typeof title === 'function') {\n callbackCancel = arguments[2];\n callbackOk = arguments[1];\n title = undefined;\n }\n return app.modal({\n text: text || '',\n title: typeof title === 'undefined' ? app.params.modalTitle : title,\n buttons: [\n {text: app.params.modalButtonCancel, onClick: callbackCancel},\n {text: app.params.modalButtonOk, bold: true, onClick: callbackOk}\n ]\n });\n };\n app.prompt = function (text, title, callbackOk, callbackCancel) {\n if (typeof title === 'function') {\n callbackCancel = arguments[2];\n callbackOk = arguments[1];\n title = undefined;\n }\n return app.modal({\n text: text || '',\n title: typeof title === 'undefined' ? app.params.modalTitle : title,\n afterText: '
',\n buttons: [\n {\n text: app.params.modalButtonCancel\n },\n {\n text: app.params.modalButtonOk,\n bold: true\n }\n ],\n onClick: function (modal, index) {\n if (index === 0 && callbackCancel) callbackCancel($(modal).find('.modal-text-input').val());\n if (index === 1 && callbackOk) callbackOk($(modal).find('.modal-text-input').val());\n }\n });\n };\n app.modalLogin = function (text, title, callbackOk, callbackCancel) {\n if (typeof title === 'function') {\n callbackCancel = arguments[2];\n callbackOk = arguments[1];\n title = undefined;\n }\n return app.modal({\n text: text || '',\n title: typeof title === 'undefined' ? app.params.modalTitle : title,\n afterText: '
',\n buttons: [\n {\n text: app.params.modalButtonCancel\n },\n {\n text: app.params.modalButtonOk,\n bold: true\n }\n ],\n onClick: function (modal, index) {\n var username = $(modal).find('.modal-text-input[name=\"modal-username\"]').val();\n var password = $(modal).find('.modal-text-input[name=\"modal-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(username, password);\n if (index === 1 && callbackOk) callbackOk(username, password);\n }\n });\n };\n app.modalPassword = function (text, title, callbackOk, callbackCancel) {\n if (typeof title === 'function') {\n callbackCancel = arguments[2];\n callbackOk = arguments[1];\n title = undefined;\n }\n return app.modal({\n text: text || '',\n title: typeof title === 'undefined' ? app.params.modalTitle : title,\n afterText: '
',\n buttons: [\n {\n text: app.params.modalButtonCancel\n },\n {\n text: app.params.modalButtonOk,\n bold: true\n }\n ],\n onClick: function (modal, index) {\n var password = $(modal).find('.modal-text-input[name=\"modal-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(password);\n if (index === 1 && callbackOk) callbackOk(password);\n }\n });\n };\n app.showPreloader = function (title) {\n return app.modal({\n title: title || app.params.modalPreloaderTitle,\n text: '
' + (app.params.material ? app.params.materialPreloaderHtml : '') + '
',\n cssClass: 'modal-preloader'\n });\n };\n app.hidePreloader = function () {\n app.closeModal('.modal-preloader');\n };\n app.showIndicator = function () {\n if ($('.preloader-indicator-overlay').length > 0) return;\n app.root.append('
' + (app.params.material ? app.params.materialPreloaderHtml : '') + '
');\n };\n app.hideIndicator = function () {\n $('.preloader-indicator-overlay, .preloader-indicator-modal').remove();\n };\n // Action Sheet\n app.actions = function (target, params, animated) {\n var toPopover = false, modal, groupSelector, buttonSelector;\n if (arguments.length === 1 || arguments.length === 2 && typeof arguments[1] === 'boolean') {\n // Actions\n params = arguments[0];\n animated = arguments[1];\n }\n else {\n // Popover\n if (app.device.ios) {\n if (app.device.ipad) toPopover = true;\n }\n else {\n if (app.width >= 768) toPopover = true;\n }\n }\n if (typeof animated === 'undefined') animated = true;\n \n params = params || [];\n \n if (params.length > 0 && !Array.isArray(params[0])) {\n params = [params];\n }\n var modalHTML;\n if (toPopover) {\n var actionsToPopoverTemplate = app.params.modalActionsToPopoverTemplate ||\n '
' +\n '
' +\n '{{#each this}}' +\n '
' +\n '
    ' +\n '{{#each this}}' +\n '{{#if label}}' +\n '
  • {{text}}
  • ' +\n '{{else}}' +\n '
  • {{text}}
  • ' +\n '{{/if}}' +\n '{{/each}}' +\n '
' +\n '
' +\n '{{/each}}' +\n '
' +\n '
';\n if (!app._compiledTemplates.actionsToPopover) {\n app._compiledTemplates.actionsToPopover = t7.compile(actionsToPopoverTemplate);\n }\n var popoverHTML = app._compiledTemplates.actionsToPopover(params);\n modal = $(app.popover(popoverHTML, target, true, animated));\n groupSelector = '.list-block ul';\n buttonSelector = '.list-button';\n }\n else {\n if (app.params.modalActionsTemplate) {\n if (!app._compiledTemplates.actions) app._compiledTemplates.actions = t7.compile(app.params.modalActionsTemplate);\n modalHTML = app._compiledTemplates.actions(params);\n }\n else {\n var buttonsHTML = '';\n for (var i = 0; i < params.length; i++) {\n for (var j = 0; j < params[i].length; j++) {\n if (j === 0) buttonsHTML += '
';\n var button = params[i][j];\n var buttonClass = button.label ? 'actions-modal-label' : 'actions-modal-button';\n if (button.bold) buttonClass += ' actions-modal-button-bold';\n if (button.color) buttonClass += ' color-' + button.color;\n if (button.bg) buttonClass += ' bg-' + button.bg;\n if (button.disabled) buttonClass += ' disabled';\n buttonsHTML += '
' + button.text + '
';\n if (j === params[i].length - 1) buttonsHTML += '
';\n }\n }\n modalHTML = '
' + buttonsHTML + '
';\n }\n _modalTemplateTempDiv.innerHTML = modalHTML;\n modal = $(_modalTemplateTempDiv).children();\n app.root.append(modal[0]);\n groupSelector = '.actions-modal-group';\n buttonSelector = '.actions-modal-button';\n }\n \n var groups = modal.find(groupSelector);\n groups.each(function (index, el) {\n var groupIndex = index;\n $(el).children().each(function (index, el) {\n var buttonIndex = index;\n var buttonParams = params[groupIndex][buttonIndex];\n var clickTarget;\n if (!toPopover && $(el).is(buttonSelector)) clickTarget = $(el);\n if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\n \n if (clickTarget) {\n clickTarget.on('click', function (e) {\n if (buttonParams.close !== false) app.closeModal(modal);\n if (buttonParams.onClick) buttonParams.onClick(modal, e);\n });\n }\n });\n });\n if (!toPopover) app.openModal(modal, animated);\n return modal[0];\n };\n app.popover = function (modal, target, removeOnClose, animated, closeByOutside) {\n if (typeof removeOnClose === 'undefined') removeOnClose = true;\n if (typeof closeByOutside === 'undefined') closeByOutside = true;\n if (typeof animated === 'undefined') animated = true;\n if (typeof modal === 'string' && modal.indexOf('<') >= 0) {\n var _modal = document.createElement('div');\n _modal.innerHTML = modal.trim();\n if (_modal.childNodes.length > 0) {\n modal = _modal.childNodes[0];\n if (removeOnClose) modal.classList.add('remove-on-close');\n if (!closeByOutside) modal.classList.add('ignore-close-by-outside');\n app.root.append(modal);\n }\n else return false; //nothing found\n }\n modal = $(modal);\n target = $(target);\n if (modal.length === 0 || target.length === 0) return false;\n if (modal.parents('body').length === 0) {\n if (removeOnClose) modal.addClass('remove-on-close');\n if (!closeByOutside) modal.addClass.add('ignore-close-by-outside');\n app.root.append(modal[0]);\n }\n if (modal.find('.popover-angle').length === 0 && !app.params.material) {\n modal.append('
');\n }\n modal.show();\n \n var material = app.params.material;\n \n function sizePopover() {\n modal.css({left: '', top: ''});\n var modalWidth = modal.width();\n var modalHeight = modal.height(); // 13 - height of angle\n var modalAngle, modalAngleSize = 0, modalAngleLeft, modalAngleTop;\n if (!material) {\n modalAngle = modal.find('.popover-angle');\n modalAngleSize = modalAngle.width() / 2;\n modalAngle.removeClass('on-left on-right on-top on-bottom').css({left: '', top: ''});\n }\n else {\n modal.removeClass('popover-on-left popover-on-right popover-on-top popover-on-bottom').css({left: '', top: ''});\n }\n \n var targetWidth = target.outerWidth();\n var targetHeight = target.outerHeight();\n var targetOffset = target.offset();\n var targetOffsetLeft = targetOffset.left - app.left;\n var targetOffsetTop = targetOffset.top - app.top;\n var targetParentPage = target.parents('.page');\n if (targetParentPage.length > 0) {\n targetOffsetTop = targetOffsetTop - targetParentPage[0].scrollTop;\n }\n \n var modalTop = 0;\n var modalLeft = 0;\n var diff = 0;\n // Top Position\n var modalPosition = material ? 'bottom' : 'top';\n if (material) {\n if (modalHeight < app.height - targetOffsetTop - targetHeight) {\n // On bottom\n modalPosition = 'bottom';\n modalTop = targetOffsetTop;\n }\n else if (modalHeight < targetOffsetTop) {\n // On top\n modalTop = targetOffsetTop - modalHeight + targetHeight;\n modalPosition = 'top';\n }\n else {\n // On middle\n modalPosition = 'bottom';\n modalTop = targetOffsetTop;\n }\n \n if (modalTop <= 0) {\n modalTop = 8;\n }\n else if (modalTop + modalHeight >= app.height) {\n modalTop = app.height - modalHeight - 8;\n }\n \n // Horizontal Position\n modalLeft = targetOffsetLeft;\n if (modalLeft + modalWidth >= app.width - 8) {\n modalLeft = targetOffsetLeft + targetWidth - modalWidth - 8;\n }\n if (modalLeft < 8) {\n modalLeft = 8;\n }\n if (modalPosition === 'top') {\n modal.addClass('popover-on-top');\n }\n if (modalPosition === 'bottom') {\n modal.addClass('popover-on-bottom');\n }\n if (target.hasClass('floating-button-to-popover') && !modal.hasClass('modal-in')) {\n modal.addClass('popover-floating-button');\n var diffX = (modalLeft + modalWidth / 2) - (targetOffsetLeft + targetWidth / 2),\n diffY = (modalTop + modalHeight / 2) - (targetOffsetTop + targetHeight / 2);\n target\n .addClass('floating-button-to-popover-in')\n .transform('translate3d(' + diffX + 'px, ' + diffY + 'px,0)')\n .transitionEnd(function (e) {\n if (!target.hasClass('floating-button-to-popover-in')) return;\n target\n .addClass('floating-button-to-popover-scale')\n .transform('translate3d(' + diffX + 'px, ' + diffY + 'px,0) scale(' + (modalWidth/targetWidth) + ', ' + (modalHeight/targetHeight) + ')');\n });\n \n modal.once('popover:close', function () {\n target\n .removeClass('floating-button-to-popover-in floating-button-to-popover-scale')\n .addClass('floating-button-to-popover-out')\n .transform('')\n .transitionEnd(function (e) {\n target.removeClass('floating-button-to-popover-out');\n });\n });\n modal.once('popover:closed', function () {\n modal.removeClass('popover-floating-button');\n });\n }\n else if (target.hasClass('floating-button-to-popover') && modal.hasClass('modal-in')) {\n modalLeft = targetOffsetLeft;\n modalTop = targetOffsetTop;\n }\n \n }\n else {\n if ((modalHeight + modalAngleSize) < targetOffsetTop) {\n // On top\n modalTop = targetOffsetTop - modalHeight - modalAngleSize;\n }\n else if ((modalHeight + modalAngleSize) < app.height - targetOffsetTop - targetHeight) {\n // On bottom\n modalPosition = 'bottom';\n modalTop = targetOffsetTop + targetHeight + modalAngleSize;\n }\n else {\n // On middle\n modalPosition = 'middle';\n modalTop = targetHeight / 2 + targetOffsetTop - modalHeight / 2;\n diff = modalTop;\n if (modalTop <= 0) {\n modalTop = 5;\n }\n else if (modalTop + modalHeight >= app.height) {\n modalTop = app.height - modalHeight - 5;\n }\n diff = diff - modalTop;\n }\n \n // Horizontal Position\n if (modalPosition === 'top' || modalPosition === 'bottom') {\n modalLeft = targetWidth / 2 + targetOffsetLeft - modalWidth / 2;\n diff = modalLeft;\n if (modalLeft < 5) modalLeft = 5;\n if (modalLeft + modalWidth > app.width) modalLeft = app.width - modalWidth - 5;\n if (modalPosition === 'top') {\n modalAngle.addClass('on-bottom');\n }\n if (modalPosition === 'bottom') {\n modalAngle.addClass('on-top');\n }\n diff = diff - modalLeft;\n modalAngleLeft = (modalWidth / 2 - modalAngleSize + diff);\n modalAngleLeft = Math.max(Math.min(modalAngleLeft, modalWidth - modalAngleSize * 2 - 13), 13);\n modalAngle.css({left: modalAngleLeft + 'px'});\n \n }\n else if (modalPosition === 'middle') {\n modalLeft = targetOffsetLeft - modalWidth - modalAngleSize;\n modalAngle.addClass('on-right');\n if (modalLeft < 5 || (modalLeft + modalWidth > app.width)) {\n if (modalLeft < 5) modalLeft = targetOffsetLeft + targetWidth + modalAngleSize;\n if (modalLeft + modalWidth > app.width) modalLeft = app.width - modalWidth - 5;\n modalAngle.removeClass('on-right').addClass('on-left');\n }\n modalAngleTop = (modalHeight / 2 - modalAngleSize + diff);\n modalAngleTop = Math.max(Math.min(modalAngleTop, modalHeight - modalAngleSize * 2 - 13), 13);\n modalAngle.css({top: modalAngleTop + 'px'});\n }\n }\n \n \n // Apply Styles\n modal.css({top: modalTop + 'px', left: modalLeft + 'px'});\n }\n \n sizePopover();\n \n app.onResize(sizePopover);\n \n modal.on('popover:close', function () {\n app.offResize(sizePopover);\n });\n \n app.openModal(modal, animated);\n return modal[0];\n };\n app.popup = function (modal, removeOnClose, animated) {\n if (typeof removeOnClose === 'undefined') removeOnClose = true;\n if (typeof animated === 'undefined') animated = true;\n if (typeof modal === 'string' && modal.indexOf('<') >= 0) {\n var _modal = document.createElement('div');\n _modal.innerHTML = modal.trim();\n if (_modal.childNodes.length > 0) {\n modal = _modal.childNodes[0];\n if (removeOnClose) modal.classList.add('remove-on-close');\n app.root.append(modal);\n }\n else return false; //nothing found\n }\n modal = $(modal);\n if (modal.length === 0) return false;\n if (modal.parents('body').length === 0) {\n if (removeOnClose) modal.addClass('remove-on-close');\n app.root.append(modal[0]);\n }\n modal.show();\n \n app.openModal(modal, animated);\n return modal[0];\n };\n app.pickerModal = function (modal, removeOnClose, animated) {\n if (typeof removeOnClose === 'undefined') removeOnClose = true;\n if (typeof animated === 'undefined') animated = true;\n if (typeof modal === 'string' && modal.indexOf('<') >= 0) {\n modal = $(modal);\n if (modal.length > 0) {\n if (removeOnClose) modal.addClass('remove-on-close');\n app.root.append(modal[0]);\n }\n else return false; //nothing found\n }\n modal = $(modal);\n if (modal.length === 0) return false;\n if (modal.parents('body').length === 0) {\n if (removeOnClose) modal.addClass('remove-on-close');\n app.root.append(modal[0]);\n }\n if ($('.picker-modal.modal-in:not(.modal-out)').length > 0 && !modal.hasClass('modal-in')) {\n app.closeModal('.picker-modal.modal-in:not(.modal-out)');\n }\n modal.show();\n app.openModal(modal, animated);\n return modal[0];\n };\n app.loginScreen = function (modal, animated) {\n if (!modal) modal = '.login-screen';\n if (typeof animated === 'undefined') animated = true;\n modal = $(modal);\n if (modal.length === 0) return false;\n if ($('.login-screen.modal-in:not(.modal-out)').length > 0 && !modal.hasClass('modal-in')) {\n app.closeModal('.login-screen.modal-in:not(.modal-out)');\n }\n modal.show();\n \n app.openModal(modal, animated);\n return modal[0];\n };\n app.openModal = function (modal, animated) {\n if (typeof animated === 'undefined') animated = true;\n modal = $(modal);\n modal[animated ? 'removeClass' : 'addClass']('not-animated');\n \n var isModal = modal.hasClass('modal');\n var isPopover = modal.hasClass('popover');\n var isPopup = modal.hasClass('popup');\n var isLoginScreen = modal.hasClass('login-screen');\n var isPickerModal = modal.hasClass('picker-modal');\n var isActions = modal.hasClass('actions-modal');\n \n // Modal Event Prefix\n var modalType = 'modal';\n if (isPopover) modalType = 'popover';\n if (isPopup) modalType = 'popup';\n if (isLoginScreen) modalType = 'loginscreen';\n if (isPickerModal) modalType = 'picker';\n if (isActions) modalType = 'actions';\n \n if ($('.modal.modal-in:not(.modal-out)').length && app.params.modalStack && isModal) {\n app.modalStack.push(function () {\n app.openModal(modal);\n });\n return;\n }\n \n // do nothing if this modal already shown\n if (true === modal.data('f7-modal-shown')) {\n return;\n }\n modal.data('f7-modal-shown', true);\n \n // Move modal\n var modalParent = modal.parent();\n if (app.params.modalsMoveToRoot && !modalParent.is(app.root)) {\n app.root.append(modal);\n modal.once(modalType + ':closed', function() {\n modalParent.append(modal);\n });\n }\n \n modal.once(modalType + ':close', function() {\n modal.removeData('f7-modal-shown');\n });\n \n if (isModal) {\n modal.show();\n modal.css({\n marginTop: - Math.round(modal.outerHeight() / 2) + 'px'\n });\n }\n \n var overlay;\n if (!isLoginScreen && !isPickerModal) {\n if ($('.modal-overlay').length === 0 && !isPopup) {\n app.root.append('
');\n }\n if ($('.popup-overlay').length === 0 && isPopup) {\n app.root.append('
');\n }\n overlay = isPopup ? $('.popup-overlay') : $('.modal-overlay');\n }\n if (app.params.material && isPickerModal) {\n if (modal.hasClass('picker-calendar')) {\n if ($('.picker-modal-overlay').length === 0 && !isPopup) {\n app.root.append('
');\n }\n overlay = $('.picker-modal-overlay');\n }\n }\n if (overlay) {\n overlay[animated ? 'removeClass' : 'addClass']('not-animated');\n }\n \n //Make sure that styles are applied, trigger relayout;\n var clientLeft = modal[0].clientLeft;\n \n // Trugger open event\n modal.trigger('open ' + modalType + ':open');\n \n // Picker modal body class\n if (isPickerModal) {\n $('body').addClass('with-picker-modal');\n }\n \n // Init Pages and Navbars in modal\n if (modal.find('.' + app.params.viewClass).length > 0) {\n modal.find('.page').each(function () {\n app.initPageWithCallback(this);\n });\n modal.find('.navbar').each(function () {\n app.initNavbarWithCallback(this);\n });\n }\n \n // Classes for transition in\n if (!isLoginScreen && !isPickerModal) overlay.addClass('modal-overlay-visible');\n if (app.params.material && isPickerModal && overlay) overlay.addClass('modal-overlay-visible');\n if (animated) {\n modal.removeClass('modal-out').addClass('modal-in').transitionEnd(function (e) {\n if (modal.hasClass('modal-out')) modal.trigger('closed ' + modalType + ':closed');\n else modal.trigger('opened ' + modalType + ':opened');\n });\n }\n else {\n modal.removeClass('modal-out').addClass('modal-in');\n modal.trigger('opened ' + modalType + ':opened');\n }\n return true;\n };\n app.closeModal = function (modal, animated) {\n if (typeof animated === 'undefined') animated = true;\n modal = $(modal || '.modal-in');\n if (typeof modal !== 'undefined' && modal.length === 0) {\n return;\n }\n modal[animated ? 'removeClass' : 'addClass']('not-animated');\n var isModal = modal.hasClass('modal');\n var isPopover = modal.hasClass('popover');\n var isPopup = modal.hasClass('popup');\n var isLoginScreen = modal.hasClass('login-screen');\n var isPickerModal = modal.hasClass('picker-modal');\n var isActions = modal.hasClass('actions-modal');\n \n // Modal Event Prefix\n var modalType = 'modal';\n if (isPopover) modalType = 'popover';\n if (isPopup) modalType = 'popup';\n if (isLoginScreen) modalType = 'loginscreen';\n if (isPickerModal) modalType = 'picker';\n if (isActions) modalType = 'actions';\n \n var removeOnClose = modal.hasClass('remove-on-close');\n \n // ignore close popover\n if (isPopover && !removeOnClose && modal.hasClass('ignore-close-by-outside')) {\n \treturn;\n }\n \n // For Actions\n var keepOnClose = modal.hasClass('keep-on-close');\n \n var overlay;\n \n if (isPopup) overlay = $('.popup-overlay');\n else {\n if (isPickerModal && app.params.material) overlay = $('.picker-modal-overlay');\n else if (!isPickerModal) overlay = $('.modal-overlay');\n }\n \n if (isPopup){\n if (modal.length === $('.popup.modal-in').length) {\n overlay.removeClass('modal-overlay-visible');\n }\n }\n else if (overlay && overlay.length > 0) {\n overlay.removeClass('modal-overlay-visible');\n }\n if (overlay) overlay[animated ? 'removeClass' : 'addClass']('not-animated');\n \n modal.trigger('close ' + modalType + ':close');\n \n // Picker modal body class\n if (isPickerModal) {\n $('body').removeClass('with-picker-modal');\n $('body').addClass('picker-modal-closing');\n }\n \n if (!(isPopover && !app.params.material)) {\n if (animated) {\n modal.removeClass('modal-in').addClass('modal-out').transitionEnd(function (e) {\n if (modal.hasClass('modal-out')) modal.trigger('closed ' + modalType + ':closed');\n else {\n modal.trigger('opened ' + modalType + ':opened');\n if (isPopover) return;\n }\n \n if (isPickerModal) {\n $('body').removeClass('picker-modal-closing');\n }\n if (isPopup || isLoginScreen || isPickerModal || isPopover) {\n modal.removeClass('modal-out').hide();\n if (removeOnClose && modal.length > 0) {\n modal.remove();\n }\n }\n else if (!keepOnClose) {\n modal.remove();\n }\n });\n }\n else {\n modal.trigger('closed ' + modalType + ':closed');\n modal.removeClass('modal-in modal-out');\n if (isPickerModal) {\n $('body').removeClass('picker-modal-closing');\n }\n if (isPopup || isLoginScreen || isPickerModal || isPopover) {\n modal.hide();\n if (removeOnClose && modal.length > 0) {\n modal.remove();\n }\n }\n else if (!keepOnClose) {\n modal.remove();\n }\n }\n if (isModal && app.params.modalStack) {\n app.modalStackClearQueue();\n }\n }\n else {\n modal.removeClass('modal-in modal-out not-animated').trigger('closed ' + modalType + ':closed').hide();\n if (removeOnClose) {\n modal.remove();\n }\n }\n return true;\n };\n \n\n /*===============================================================================\n ************ Progress Bar ************\n ===============================================================================*/\n app.setProgressbar = function (container, progress, speed) {\n container = $(container || app.root);\n if (container.length === 0) return;\n if (progress) progress = Math.min(Math.max(progress, 0), 100);\n var progressbar;\n if (container.hasClass('progressbar')) progressbar = container;\n else {\n progressbar = container.children('.progressbar');\n }\n if (progressbar.length === 0 || progressbar.hasClass('progressbar-infinite')) return;\n var clientLeft = progressbar[0].clientLeft;\n progressbar.children('span').transform('translate3d(' + (-100 + progress) + '%,0,0)');\n if (typeof speed !== 'undefined') {\n progressbar.children('span').transition(speed);\n }\n else {\n progressbar.children('span').transition('');\n }\n return progressbar[0];\n };\n app.showProgressbar = function (container, progress, color) {\n if (typeof container === 'number') {\n container = app.root;\n progress = arguments[0];\n color = arguments[1];\n }\n if (progress && typeof progress === 'string' && parseFloat(progress) !== progress * 1) {\n color = progress;\n progress = undefined;\n }\n container = $(container || app.root);\n if (container.length === 0) return;\n var progressbar;\n if (container.hasClass('progressbar')) progressbar = container;\n else {\n progressbar = container.children('.progressbar:not(.progressbar-out), .progressbar-infinite:not(.progressbar-out)');\n if (progressbar.length === 0) {\n // Create one\n if (typeof progress !== 'undefined') {\n // Determined\n progressbar = $('');\n }\n else {\n // Infinite\n progressbar = $('');\n }\n container.append(progressbar);\n }\n }\n if (progress) app.setProgressbar(container, progress);\n return progressbar[0];\n };\n app.hideProgressbar = function (container) {\n container = $(container || app.root);\n if (container.length === 0) return;\n var progressbar;\n if (container.hasClass('progressbar')) progressbar = container;\n else {\n progressbar = container.children('.progressbar, .progressbar-infinite');\n }\n if (progressbar.length === 0 || !progressbar.hasClass('progressbar-in') || progressbar.hasClass('progressbar-out')) return;\n progressbar.removeClass('progressbar-in').addClass('progressbar-out').animationEnd(function () {\n progressbar.remove();\n progressbar = null;\n });\n return;\n };\n app.initPageProgressbar = function (pageContainer) {\n pageContainer = $(pageContainer);\n pageContainer.find('.progressbar').each(function () {\n var p = $(this);\n if (p.children('span').length === 0) p.append('');\n if (p.attr('data-progress')) app.setProgressbar(p, p.attr('data-progress'));\n });\n };\n\n /*======================================================\n ************ Panels ************\n ======================================================*/\n app.allowPanelOpen = true;\n app.openPanel = function (panelPosition, animated) {\n if (typeof animated === 'undefined') animated = true;\n if (!app.allowPanelOpen) return false;\n var panel = $('.panel-' + panelPosition);\n if (panel.length === 0 || panel.hasClass('active') || panel.hasClass('panel-visible-by-breakpoint')) return false;\n app.closePanel(); // Close if some panel is opened\n app.allowPanelOpen = false;\n var effect = panel.hasClass('panel-reveal') ? 'reveal' : 'cover';\n panel[animated ? 'removeClass' : 'addClass']('not-animated');\n panel.css({display: 'block'}).addClass('active');\n panel.trigger('open panel:open');\n \n var panelOverlay = $('.panel-overlay');\n panelOverlay[animated ? 'removeClass' : 'addClass']('not-animated');\n panelOverlay.show();\n \n if (panel.find('.' + app.params.viewClass).length > 0) {\n if (app.sizeNavbars) app.sizeNavbars(panel.find('.' + app.params.viewClass)[0]);\n }\n \n // Trigger reLayout\n var clientLeft = panel[0].clientLeft;\n \n // Transition End;\n var transitionEndTarget = effect === 'reveal' ? $('.' + app.params.viewsClass) : panel;\n \n function panelTransitionEnd() {\n transitionEndTarget.transitionEnd(function (e) {\n if ($(e.target).is(transitionEndTarget)) {\n if (panel.hasClass('active')) {\n panel.trigger('opened panel:opened');\n }\n else {\n panel.trigger('closed panel:closed');\n }\n panelOverlay.css({display: ''});\n app.allowPanelOpen = true;\n }\n else panelTransitionEnd();\n });\n }\n if (animated) {\n panelTransitionEnd();\n }\n else {\n panel.trigger('opened panel:opened');\n panelOverlay.css({display: ''});\n app.allowPanelOpen = true;\n }\n \n $('body').addClass('with-panel-' + panelPosition + '-' + effect);\n return true;\n };\n app.closePanel = function (animated) {\n if (typeof animated === 'undefined') animated = true;\n var activePanel = $('.panel.active');\n if (activePanel.length === 0 || activePanel.hasClass('panel-visible-by-breakpoint')) return false;\n var effect = activePanel.hasClass('panel-reveal') ? 'reveal' : 'cover';\n var panelPosition = activePanel.hasClass('panel-left') ? 'left' : 'right';\n activePanel[animated ? 'removeClass' : 'addClass']('not-animated');\n activePanel.removeClass('active');\n \n var panelOverlay = $('.panel-overlay');\n panelOverlay.removeClass('not-animated');\n \n var transitionEndTarget = effect === 'reveal' ? $('.' + app.params.viewsClass) : activePanel;\n activePanel.trigger('close panel:close');\n app.allowPanelOpen = false;\n if (animated) {\n transitionEndTarget.transitionEnd(function () {\n if (activePanel.hasClass('active')) return;\n activePanel.css({display: ''});\n activePanel.trigger('closed panel:closed');\n $('body').removeClass('panel-closing');\n app.allowPanelOpen = true;\n });\n $('body').addClass('panel-closing').removeClass('with-panel-' + panelPosition + '-' + effect);\n }\n else {\n activePanel.css({display: ''});\n activePanel.trigger('closed panel:closed');\n activePanel.removeClass('not-animated');\n $('body').removeClass('with-panel-' + panelPosition + '-' + effect);\n app.allowPanelOpen = true;\n }\n };\n /*======================================================\n ************ Panels breakpoints ************\n ======================================================*/\n app.initPanelsBreakpoints = function () {\n var panelLeft = $('.panel-left');\n var panelRight = $('.panel-right');\n var views = app.root.children('.views');\n var wasVisible;\n function setPanels() {\n // Left Panel\n if (app.params.panelLeftBreakpoint && panelLeft.length > 0) {\n wasVisible = panelLeft.hasClass('panel-visible-by-breakpoint');\n if (app.width >= app.params.panelLeftBreakpoint) {\n if (!wasVisible) {\n $('body').removeClass('with-panel-left-reveal with-panel-left-cover');\n panelLeft.css('display', '').addClass('panel-visible-by-breakpoint').removeClass('active');\n panelLeft.trigger('open panel:open opened panel:opened');\n views.css({\n 'margin-left': panelLeft.width() + 'px'\n });\n app.allowPanelOpen = true;\n }\n }\n else {\n if (wasVisible) {\n panelLeft.css('display', '').removeClass('panel-visible-by-breakpoint active');\n panelLeft.trigger('close panel:close closed panel:closed');\n views.css({\n 'margin-left': ''\n });\n app.allowPanelOpen = true;\n }\n }\n }\n // Right Panel\n if (app.params.panelRightBreakpoint && panelRight.length > 0) {\n wasVisible = panelRight.hasClass('panel-visible-by-breakpoint');\n if (app.width >= app.params.panelRightBreakpoint) {\n if (!wasVisible) {\n $('body').removeClass('with-panel-right-reveal with-panel-right-cover');\n panelRight.css('display', '').addClass('panel-visible-by-breakpoint').removeClass('active');\n panelRight.trigger('open panel:open opened panel:opened');\n views.css({\n 'margin-right': panelRight.width() + 'px'\n });\n app.allowPanelOpen = true;\n }\n }\n else {\n if (wasVisible) {\n panelRight.css('display', '').removeClass('panel-visible-by-breakpoint active');\n panelRight.trigger('close panel:close closed panel:closed');\n views.css({\n 'margin-right': ''\n });\n app.allowPanelOpen = true;\n }\n }\n }\n }\n app.onResize(setPanels);\n setPanels();\n };\n /*======================================================\n ************ Swipe panels ************\n ======================================================*/\n app.initSwipePanels = function () {\n var panel, side;\n if (app.params.swipePanel) {\n panel = $('.panel.panel-' + app.params.swipePanel);\n side = app.params.swipePanel;\n if (panel.length === 0 && side !== 'both') return;\n }\n else {\n if (app.params.swipePanelOnlyClose) {\n if ($('.panel').length === 0) return;\n }\n else return;\n }\n \n var panelOverlay = $('.panel-overlay');\n var isTouched, isMoved, isScrolling, touchesStart = {}, touchStartTime, touchesDiff, translate, overlayOpacity, opened, panelWidth, effect, direction;\n var views = $('.' + app.params.viewsClass);\n \n function handleTouchStart(e) {\n if (!app.allowPanelOpen || (!app.params.swipePanel && !app.params.swipePanelOnlyClose) || isTouched) return;\n if ($('.modal-in, .photo-browser-in').length > 0) return;\n if (!(app.params.swipePanelCloseOpposite || app.params.swipePanelOnlyClose)) {\n if ($('.panel.active').length > 0 && !panel.hasClass('active')) return;\n }\n if (e.target && e.target.nodeName.toLowerCase() === 'input' && e.target.type === 'range') return;\n if ($(e.target).closest('.tabs-swipeable-wrap').length > 0) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n if (app.params.swipePanelCloseOpposite || app.params.swipePanelOnlyClose) {\n if ($('.panel.active').length > 0) {\n side = $('.panel.active').hasClass('panel-left') ? 'left' : 'right';\n }\n else {\n if (app.params.swipePanelOnlyClose) return;\n side = app.params.swipePanel;\n }\n if (!side) return;\n }\n panel = $('.panel.panel-' + side);\n opened = panel.hasClass('active');\n if (app.params.swipePanelActiveArea && !opened) {\n if (side === 'left') {\n if (touchesStart.x > app.params.swipePanelActiveArea) return;\n }\n if (side === 'right') {\n if (touchesStart.x < app.width - app.params.swipePanelActiveArea) return;\n }\n }\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n \n touchStartTime = (new Date()).getTime();\n direction = undefined;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n if (e.f7PreventPanelSwipe) return;\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!direction) {\n if (pageX > touchesStart.x) {\n direction = 'to-right';\n }\n else {\n direction = 'to-left';\n }\n \n if(side === 'both'){\n if ($('.panel.active').length > 0) {\n side = $('.panel.active').hasClass('panel-left') ? 'left' : 'right';\n }\n else {\n side = direction === 'to-right' ? 'left' : 'right';\n }\n if (app.params.swipePanelActiveArea > 0) {\n if (side === 'left' && touchesStart.x > app.params.swipePanelActiveArea) {\n isTouched = false;\n return;\n }\n if (side === 'right' && touchesStart.x < app.width - app.params.swipePanelActiveArea) {\n isTouched = false;\n return;\n }\n }\n panel = $('.panel.panel-' + side);\n }\n if (panel.hasClass('panel-visible-by-breakpoint')) {\n isTouched = false;\n return;\n }\n \n if (\n side === 'left' &&\n (\n direction === 'to-left' && !panel.hasClass('active')\n ) ||\n side === 'right' &&\n (\n direction === 'to-right' && !panel.hasClass('active')\n )\n )\n {\n isTouched = false;\n return;\n }\n }\n \n if (app.params.swipePanelNoFollow) {\n var timeDiff = (new Date()).getTime() - touchStartTime;\n if (timeDiff < 300) {\n if (direction === 'to-left') {\n if (side === 'right') app.openPanel(side);\n if (side === 'left' && panel.hasClass('active')) app.closePanel();\n }\n if (direction === 'to-right') {\n if (side === 'left') app.openPanel(side);\n if (side === 'right' && panel.hasClass('active')) app.closePanel();\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n \n if (!isMoved) {\n effect = panel.hasClass('panel-cover') ? 'cover' : 'reveal';\n if (!opened) {\n panel.show();\n panelOverlay.show();\n }\n panelWidth = panel[0].offsetWidth;\n panel.transition(0);\n if (panel.find('.' + app.params.viewClass).length > 0) {\n if (app.sizeNavbars) app.sizeNavbars(panel.find('.' + app.params.viewClass)[0]);\n }\n }\n \n isMoved = true;\n \n e.preventDefault();\n var threshold = opened ? 0 : -app.params.swipePanelThreshold;\n if (side === 'right') threshold = -threshold;\n \n touchesDiff = pageX - touchesStart.x + threshold;\n \n if (side === 'right') {\n if (effect === 'cover') {\n translate = touchesDiff + (opened ? 0 : panelWidth);\n if (translate < 0) translate = 0;\n if (translate > panelWidth) {\n translate = panelWidth;\n }\n }\n else {\n translate = touchesDiff - (opened ? panelWidth : 0);\n if (translate > 0) translate = 0;\n if (translate < -panelWidth) {\n translate = -panelWidth;\n }\n }\n }\n else {\n translate = touchesDiff + (opened ? panelWidth : 0);\n if (translate < 0) translate = 0;\n if (translate > panelWidth) {\n translate = panelWidth;\n }\n }\n if (effect === 'reveal') {\n views.transform('translate3d(' + translate + 'px,0,0)').transition(0);\n panelOverlay.transform('translate3d(' + translate + 'px,0,0)').transition(0);\n \n panel.trigger('panel:swipe', {progress: Math.abs(translate / panelWidth)});\n app.pluginHook('swipePanelSetTransform', views[0], panel[0], Math.abs(translate / panelWidth));\n }\n else {\n if (side === 'left') translate = translate - panelWidth;\n panel.transform('translate3d(' + (translate) + 'px,0,0)').transition(0);\n \n panelOverlay.transition(0);\n overlayOpacity = 1 - Math.abs(translate/panelWidth);\n panelOverlay.css({opacity: overlayOpacity});\n \n panel.trigger('panel:swipe', {progress: Math.abs(translate / panelWidth)});\n app.pluginHook('swipePanelSetTransform', views[0], panel[0], Math.abs(translate / panelWidth));\n }\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n var timeDiff = (new Date()).getTime() - touchStartTime;\n var action;\n var edge = (translate === 0 || Math.abs(translate) === panelWidth);\n \n if (!opened) {\n if (effect === 'cover') {\n if (translate === 0) {\n action = 'swap'; //open\n }\n else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; //open\n }\n else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'swap'; //open\n }\n else {\n action = 'reset'; //close\n }\n }\n else {\n if (translate === 0) {\n action = 'reset';\n }\n else if (\n timeDiff < 300 && Math.abs(translate) > 0 ||\n timeDiff >= 300 && (Math.abs(translate) >= panelWidth / 2)\n ) {\n action = 'swap';\n }\n else {\n action = 'reset';\n }\n }\n }\n else {\n if (effect === 'cover') {\n if (translate === 0) {\n action = 'reset'; //open\n }\n else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; //open\n }\n else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'reset'; //open\n }\n else {\n action = 'swap'; //close\n }\n }\n else {\n if (translate === -panelWidth) {\n action = 'reset';\n }\n else if (\n timeDiff < 300 && Math.abs(translate) >= 0 ||\n timeDiff >= 300 && (Math.abs(translate) <= panelWidth / 2)\n ) {\n if (side === 'left' && translate === panelWidth) action = 'reset';\n else action = 'swap';\n }\n else {\n action = 'reset';\n }\n }\n }\n if (action === 'swap') {\n app.allowPanelOpen = true;\n if (opened) {\n app.closePanel();\n if (edge) {\n panel.css({display: ''});\n $('body').removeClass('panel-closing');\n }\n }\n else {\n app.openPanel(side);\n }\n if (edge) app.allowPanelOpen = true;\n }\n if (action === 'reset') {\n if (opened) {\n app.allowPanelOpen = true;\n app.openPanel(side);\n }\n else {\n app.closePanel();\n if (edge) {\n app.allowPanelOpen = true;\n panel.css({display: ''});\n }\n else {\n var target = effect === 'reveal' ? views : panel;\n panel.trigger('close panel:close');\n $('body').addClass('panel-closing');\n target.transitionEnd(function () {\n if (panel.hasClass('active')) return;\n panel.trigger('close panel:closed');\n panel.css({display: ''});\n $('body').removeClass('panel-closing');\n app.allowPanelOpen = true;\n });\n }\n }\n }\n if (effect === 'reveal') {\n views.transition('');\n views.transform('');\n }\n panel.transition('').transform('');\n panelOverlay.css({display: ''}).transform('').transition('').css('opacity', '');\n }\n var passiveListener = app.touchEvents.start === 'touchstart' && app.support.passiveListener ? {passive: true, capture: false} : false;\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n $(document).on(app.touchEvents.start, handleTouchStart, passiveListener);\n $(document).on(app.touchEvents.move, handleTouchMove, activeListener);\n $(document).on(app.touchEvents.end, handleTouchEnd, passiveListener);\n };\n \n\n /*======================================================\n ************ Image Lazy Loading ************\n ************ Based on solution by Marc Godard, https://github.com/MarcGodard ************\n ======================================================*/\n app.initImagesLazyLoad = function (pageContainer) {\n pageContainer = $(pageContainer);\n \n // Lazy images\n var lazyLoadImages;\n if (pageContainer.hasClass('lazy')) {\n lazyLoadImages = pageContainer;\n pageContainer = lazyLoadImages.parents('.page');\n }\n else {\n lazyLoadImages = pageContainer.find('.lazy');\n }\n if (lazyLoadImages.length === 0) return;\n \n // Scrollable page content\n var pageContent;\n if (pageContainer.hasClass('page-content')) {\n pageContent = pageContainer;\n pageContainer = pageContainer.parents('.page');\n }\n else {\n pageContent = pageContainer.find('.page-content');\n }\n if (pageContent.length === 0) return;\n \n // Placeholder\n var placeholderSrc = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEXCwsK592mkAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==';\n if (typeof app.params.imagesLazyLoadPlaceholder === 'string') {\n placeholderSrc = app.params.imagesLazyLoadPlaceholder;\n }\n if (app.params.imagesLazyLoadPlaceholder !== false) lazyLoadImages.each(function(){\n if ($(this).attr('data-src') && !$(this).attr('src')) $(this).attr('src', placeholderSrc);\n });\n \n // load image\n var imagesSequence = [];\n var imageIsLoading = false;\n function loadImage(el) {\n el = $(el);\n \n var bg = el.attr('data-background');\n var src = bg ? bg : el.attr('data-src');\n if (!src) return;\n \n function onLoad() {\n el.removeClass('lazy').addClass('lazy-loaded');\n if (bg) {\n el.css('background-image', 'url(' + src + ')');\n }\n else {\n el.attr('src', src);\n }\n \n if (app.params.imagesLazyLoadSequential) {\n imageIsLoading = false;\n if (imagesSequence.length > 0) {\n loadImage(imagesSequence.shift());\n }\n }\n el.trigger('lazy-loaded');\n if (app.params.onLazyLoaded) app.params.onLazyLoaded(el);\n }\n \n function onError() {\n el.removeClass('lazy').addClass('lazy-loaded');\n if (bg) {\n el.css('background-image', 'url(' + placeholderSrc + ')');\n }\n else {\n el.attr('src', placeholderSrc);\n }\n \n if (app.params.imagesLazyLoadSequential) {\n imageIsLoading = false;\n if (imagesSequence.length > 0) {\n loadImage(imagesSequence.shift());\n }\n }\n el.trigger('lazy-error');\n if (app.params.onLazyError) app.params.onLazyError(el);\n }\n \n if (app.params.imagesLazyLoadSequential) {\n if (imageIsLoading) {\n if (imagesSequence.indexOf(el[0]) < 0) imagesSequence.push(el[0]);\n return;\n }\n }\n \n // Loading flag\n imageIsLoading = true;\n \n var image = new Image();\n image.onload = onLoad;\n image.onerror = onError;\n image.src =src;\n \n // Add loaded callback and events\n el.trigger('lazy-load');\n if (app.params.onLazyLoad && !el.hasClass('lazy-loaded')) app.params.onLazyLoad(el);\n }\n function lazyHandler() {\n lazyLoadImages = pageContainer.find('.lazy');\n lazyLoadImages.each(function(index, el) {\n el = $(el);\n if (el.parents('.tab:not(.active)').length > 0) {\n return;\n }\n if (isElementInViewport(el[0])) {\n loadImage(el);\n }\n });\n }\n \n function isElementInViewport (el) {\n var rect = el.getBoundingClientRect();\n var threshold = app.params.imagesLazyLoadThreshold || 0;\n return (\n rect.top >= (0 - threshold) &&\n rect.left >= (0 - threshold) &&\n rect.top <= (app.height + threshold) &&\n rect.left <= (app.width + threshold)\n );\n }\n \n function attachEvents(destroy) {\n var method = destroy ? 'off' : 'on';\n lazyLoadImages[method]('lazy', lazyHandler);\n lazyLoadImages.parents('.tab')[method]('show', lazyHandler);\n pageContainer[method]('lazy', lazyHandler);\n pageContent[method]('lazy', lazyHandler);\n pageContent[method]('scroll', lazyHandler);\n app[method === 'on' ? 'onResize' : 'offResize'](lazyHandler);\n }\n function detachEvents() {\n attachEvents(true);\n }\n \n // Store detach function\n pageContainer[0].f7DestroyImagesLazyLoad = detachEvents;\n \n // Attach events\n attachEvents();\n \n // Destroy on page remove\n if (pageContainer.hasClass('page')) {\n pageContainer.once('page:beforeremove', detachEvents);\n }\n \n // Run loader on page load/init\n lazyHandler();\n \n // Run after page animation\n pageContainer.once('page:afteranimation', lazyHandler);\n };\n app.destroyImagesLazyLoad = function (pageContainer) {\n pageContainer = $(pageContainer);\n if (pageContainer.length > 0 && pageContainer[0].f7DestroyImagesLazyLoad) {\n pageContainer[0].f7DestroyImagesLazyLoad();\n }\n };\n app.reinitImagesLazyLoad = function (pageContainer) {\n pageContainer = $(pageContainer);\n if (pageContainer.length > 0) {\n pageContainer.trigger('lazy');\n }\n };\n \n\n /*======================================================\n ************ Material Preloader ************\n ======================================================*/\n app.initPageMaterialPreloader = function (pageContainer) {\n $(pageContainer).find('.preloader').each(function () {\n if ($(this).children().length === 0) {\n $(this).html(app.params.materialPreloaderHtml);\n }\n });\n };\n\n /*======================================================\n ************ Messages ************\n ======================================================*/\n var Messages = function (container, params) {\n var defaults = {\n autoLayout: true,\n newMessagesFirst: false,\n scrollMessages: true,\n scrollMessagesOnlyOnEdge: false,\n messageTemplate:\n '{{#if day}}' +\n '
{{day}} {{#if time}}, {{time}}{{/if}}
' +\n '{{/if}}' +\n '
' +\n '{{#if name}}
{{name}}
{{/if}}' +\n '
{{text}}{{#if date}}
{{date}}
{{/if}}
' +\n '{{#if avatar}}
{{/if}}' +\n '{{#if label}}
{{label}}
{{/if}}' +\n '
'\n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined' || params[def] === null) {\n params[def] = defaults[def];\n }\n }\n \n // Instance\n var m = this;\n \n // Params\n m.params = params;\n \n // Container\n m.container = $(container);\n if (m.container.length === 0) return;\n \n // Autolayout\n if (m.params.autoLayout) m.container.addClass('messages-auto-layout');\n \n // New messages first\n if (m.params.newMessagesFirst) m.container.addClass('messages-new-first');\n \n // Is In Page\n m.pageContainer = m.container.parents('.page').eq(0);\n m.pageContent = m.pageContainer.find('.page-content');\n \n // Compiled template\n m.template = Template7.compile(m.params.messageTemplate);\n \n // Auto Layout\n m.layout = function () {\n if (!m.container.hasClass('messages-auto-layout')) m.container.addClass('messages-auto-layout');\n m.container.find('.message').each(function () {\n var message = $(this);\n if (message.find('.message-text img').length > 0) {\n var childNodes = message.find('.message-text')[0].childNodes;\n var onlyPic = true;\n for (var i = 0 ; i < childNodes.length; i++) {\n if (childNodes[i].nodeType === 1 && childNodes[i].nodeName.toLowerCase() !== 'img') onlyPic = false;\n if (childNodes[i].nodeType === 3 && childNodes[i].textContent.trim() !== '') onlyPic = false;\n }\n if (onlyPic) message.addClass('message-pic');\n else message.removeClass('message-pic');\n }\n if (message.find('.message-avatar').length > 0) message.addClass('message-with-avatar');\n });\n m.container.find('.message').each(function () {\n var message = $(this);\n var isSent = message.hasClass('message-sent');\n var next = message.next('.message-' + (isSent ? 'sent' : 'received'));\n var prev = message.prev('.message-' + (isSent ? 'sent' : 'received'));\n if (next.length === 0) {\n message.addClass('message-last message-with-tail');\n }\n else message.removeClass('message-last message-with-tail');\n \n if (prev.length === 0) {\n message.addClass('message-first');\n }\n else message.removeClass('message-first');\n \n if (prev.length > 0 && prev.find('.message-name').length > 0 && message.find('.message-name').length > 0) {\n if (prev.find('.message-name').text() !== message.find('.message-name').text()) {\n prev.addClass('message-last message-with-tail');\n message.addClass('message-first');\n }\n }\n });\n };\n \n // Add Message\n m.appendMessage = function (props, animate) {\n return m.addMessage(props, 'append', animate);\n };\n m.prependMessage = function (props, animate) {\n return m.addMessage(props, 'prepend', animate);\n };\n m.addMessage = function (props, method, animate) {\n return m.addMessages([props], method, animate);\n };\n m.addMessages = function (newMessages, method, animate) {\n if (typeof animate === 'undefined') {\n animate = true;\n }\n if (typeof method === 'undefined') {\n method = m.params.newMessagesFirst ? 'prepend' : 'append';\n }\n var newMessagesHTML = '', i;\n for (i = 0; i < newMessages.length; i++) {\n var props = newMessages[i] || {};\n props.type = props.type || 'sent';\n if (!props.text) continue;\n props.hasImage = props.text.indexOf('= 0;\n if (props.onlyImage === false) props.hasImage = false;\n if (animate) props.position = method === 'append' ? 'bottom' : 'top';\n \n newMessagesHTML += m.template(props);\n }\n var scrollHeightBefore = m.pageContent[0].scrollHeight,\n heightBefore = m.pageContent[0].offsetHeight,\n scrollBefore = m.pageContent[0].scrollTop;\n m.container[method](newMessagesHTML);\n if (m.params.autoLayout) m.layout();\n if (method === 'prepend') {\n m.pageContent[0].scrollTop = scrollBefore + (m.pageContent[0].scrollHeight - scrollHeightBefore);\n }\n if (m.params.scrollMessages && (method === 'append' && !m.params.newMessagesFirst) || (method === 'prepend' && m.params.newMessagesFirst)) {\n if (m.params.scrollMessagesOnlyOnEdge) {\n var onEdge = false;\n if (m.params.newMessagesFirst) {\n if (scrollBefore === 0) onEdge = true;\n }\n else {\n if (scrollBefore - (scrollHeightBefore - heightBefore) >= -10) onEdge = true;\n }\n if (onEdge) m.scrollMessages(animate ? undefined : 0);\n }\n else m.scrollMessages(animate ? undefined : 0);\n }\n var messages = m.container.find('.message');\n if (newMessages.length === 1) {\n return method === 'append' ? messages[messages.length - 1] : messages[0];\n }\n else {\n var messagesToReturn = [];\n if (method === 'append') {\n for (i = messages.length - newMessages.length; i < messages.length; i++) {\n messagesToReturn.push(messages[i]);\n }\n }\n else {\n for (i = 0; i < newMessages.length; i++) {\n messagesToReturn.push(messages[i]);\n }\n }\n return messagesToReturn;\n }\n \n };\n m.removeMessage = function (message) {\n message = $(message);\n if (message.length === 0) {\n return false;\n }\n else {\n message.remove();\n if (m.params.autoLayout) m.layout();\n return true;\n }\n };\n m.removeMessages = function (messages) {\n m.removeMessage(messages);\n };\n m.clean = function () {\n m.container.html('');\n };\n \n // Scroll\n m.scrollMessages = function (duration, scrollTop) {\n if (typeof duration === 'undefined') duration = 400;\n var currentScroll = m.pageContent[0].scrollTop;\n var newScroll;\n if (typeof scrollTop !== 'undefined') newScroll = scrollTop;\n else {\n newScroll = m.params.newMessagesFirst ? 0 : m.pageContent[0].scrollHeight - m.pageContent[0].offsetHeight;\n if (newScroll === currentScroll) return;\n }\n m.pageContent.scrollTop(newScroll, duration);\n };\n \n // Init Destroy\n m.init = function () {\n if (m.params.messages) {\n m.addMessages(m.params.messages, undefined, false);\n }\n else {\n if (m.params.autoLayout) m.layout();\n m.scrollMessages(0);\n }\n \n };\n m.destroy = function () {\n m = null;\n };\n \n // Init\n m.init();\n \n m.container[0].f7Messages = m;\n return m;\n };\n app.messages = function (container, params) {\n return new Messages (container, params);\n };\n app.initPageMessages = function (pageContainer) {\n pageContainer = $(pageContainer);\n var messages = pageContainer.find('.messages');\n if (messages.length === 0) return;\n if (!messages.hasClass('messages-init')) {\n return;\n }\n var m = app.messages(messages, messages.dataset());\n \n // Destroy on page remove\n function pageBeforeRemove() {\n m.destroy();\n pageContainer.off('page:beforeremove', pageBeforeRemove);\n }\n if (pageContainer.hasClass('page')) {\n pageContainer.on('page:beforeremove', pageBeforeRemove);\n }\n };\n \n\n /*===============================================================================\n ************ Swipeout Actions (Swipe to delete) ************\n ===============================================================================*/\n app.swipeoutOpenedEl = undefined;\n app.allowSwipeout = true;\n app.initSwipeout = function (swipeoutEl) {\n var isTouched, isMoved, isScrolling, touchesStart = {}, touchStartTime, touchesDiff, swipeOutEl, swipeOutContent, actionsRight, actionsLeft, actionsLeftWidth, actionsRightWidth, translate, opened, openedActions, buttonsLeft, buttonsRight, direction, overswipeLeftButton, overswipeRightButton, overswipeLeft, overswipeRight, noFoldLeft, noFoldRight;\n \n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n \n $(document).on(app.touchEvents.start, function (e) {\n if (app.swipeoutOpenedEl) {\n var target = $(e.target);\n if (!(\n app.swipeoutOpenedEl.is(target[0]) ||\n target.parents('.swipeout').is(app.swipeoutOpenedEl) ||\n target.hasClass('modal-in') ||\n target.hasClass('modal-overlay') ||\n target.hasClass('actions-modal') || \n target.parents('.actions-modal.modal-in, .modal.modal-in').length > 0\n )) {\n app.swipeoutClose(app.swipeoutOpenedEl);\n }\n }\n }, activeListener);\n \n function handleTouchStart(e) {\n if (!app.allowSwipeout) return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = (new Date()).getTime();\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n \n if (!isMoved) {\n if ($('.list-block.sortable-opened').length > 0) return;\n /*jshint validthis:true */\n swipeOutEl = $(this);\n swipeOutContent = swipeOutEl.find('.swipeout-content');\n actionsRight = swipeOutEl.find('.swipeout-actions-right');\n actionsLeft = swipeOutEl.find('.swipeout-actions-left');\n actionsLeftWidth = actionsRightWidth = buttonsLeft = buttonsRight = overswipeRightButton = overswipeLeftButton = null;\n noFoldLeft = actionsLeft.hasClass('swipeout-actions-no-fold') || app.params.swipeoutActionsNoFold;\n noFoldRight = actionsRight.hasClass('swipeout-actions-no-fold') || app.params.swipeoutActionsNoFold;\n if (actionsLeft.length > 0) {\n actionsLeftWidth = actionsLeft.outerWidth();\n buttonsLeft = actionsLeft.children('a');\n overswipeLeftButton = actionsLeft.find('.swipeout-overswipe');\n }\n if (actionsRight.length > 0) {\n actionsRightWidth = actionsRight.outerWidth();\n buttonsRight = actionsRight.children('a');\n overswipeRightButton = actionsRight.find('.swipeout-overswipe');\n }\n opened = swipeOutEl.hasClass('swipeout-opened');\n if (opened) {\n openedActions = swipeOutEl.find('.swipeout-actions-left.swipeout-actions-opened').length > 0 ? 'left' : 'right';\n }\n swipeOutEl.removeClass('transitioning');\n if (!app.params.swipeoutNoFollow) {\n swipeOutEl.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n swipeOutEl.removeClass('swipeout-opened');\n }\n }\n isMoved = true;\n e.preventDefault();\n \n touchesDiff = pageX - touchesStart.x;\n translate = touchesDiff;\n \n if (opened) {\n if (openedActions === 'right') translate = translate - actionsRightWidth;\n else translate = translate + actionsLeftWidth;\n }\n \n if (translate > 0 && actionsLeft.length === 0 || translate < 0 && actionsRight.length === 0) {\n if (!opened) {\n isTouched = isMoved = false;\n swipeOutContent.transform('');\n if (buttonsRight && buttonsRight.length > 0) {\n buttonsRight.transform('');\n }\n if (buttonsLeft && buttonsLeft.length > 0) {\n buttonsLeft.transform('');\n }\n return;\n }\n translate = 0;\n }\n \n if (translate < 0) direction = 'to-left';\n else if (translate > 0) direction = 'to-right';\n else {\n if (!direction) direction = 'to-left';\n }\n \n var i, buttonOffset, progress;\n \n e.f7PreventPanelSwipe = true;\n if (app.params.swipeoutNoFollow) {\n if (opened) {\n if (openedActions === 'right' && touchesDiff > 0) {\n app.swipeoutClose(swipeOutEl);\n }\n if (openedActions === 'left' && touchesDiff < 0) {\n app.swipeoutClose(swipeOutEl);\n }\n }\n else {\n if (touchesDiff < 0 && actionsRight.length > 0) {\n app.swipeoutOpen(swipeOutEl, 'right');\n }\n if (touchesDiff > 0 && actionsLeft.length > 0) {\n app.swipeoutOpen(swipeOutEl, 'left');\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n overswipeLeft = false;\n overswipeRight = false;\n var $button;\n if (actionsRight.length > 0) {\n // Show right actions\n progress = translate / actionsRightWidth;\n if (translate < -actionsRightWidth) {\n translate = -actionsRightWidth - Math.pow(-translate - actionsRightWidth, 0.8);\n if (overswipeRightButton.length > 0) {\n overswipeRight = true;\n }\n }\n for (i = 0; i < buttonsRight.length; i++) {\n if (typeof buttonsRight[i]._buttonOffset === 'undefined') {\n buttonsRight[i]._buttonOffset = buttonsRight[i].offsetLeft;\n }\n buttonOffset = buttonsRight[i]._buttonOffset;\n $button = $(buttonsRight[i]);\n if (overswipeRightButton.length > 0 && $button.hasClass('swipeout-overswipe')) {\n $button.css({left: (overswipeRight ? -buttonOffset : 0) + 'px'});\n if (overswipeRight) {\n $button.addClass('swipeout-overswipe-active');\n }\n else {\n $button.removeClass('swipeout-overswipe-active'); \n }\n }\n $button.transform('translate3d(' + (translate - buttonOffset * (1 + Math.max(progress, -1))) + 'px,0,0)');\n }\n }\n if (actionsLeft.length > 0) {\n // Show left actions\n progress = translate / actionsLeftWidth;\n if (translate > actionsLeftWidth) {\n translate = actionsLeftWidth + Math.pow(translate - actionsLeftWidth, 0.8);\n if (overswipeLeftButton.length > 0) {\n overswipeLeft = true;\n }\n }\n for (i = 0; i < buttonsLeft.length; i++) {\n if (typeof buttonsLeft[i]._buttonOffset === 'undefined') {\n buttonsLeft[i]._buttonOffset = actionsLeftWidth - buttonsLeft[i].offsetLeft - buttonsLeft[i].offsetWidth;\n }\n buttonOffset = buttonsLeft[i]._buttonOffset;\n $button = $(buttonsLeft[i]);\n if (overswipeLeftButton.length > 0 && $button.hasClass('swipeout-overswipe')) {\n $button.css({left: (overswipeLeft ? buttonOffset : 0) + 'px'});\n if (overswipeLeft) {\n $button.addClass('swipeout-overswipe-active');\n }\n else {\n $button.removeClass('swipeout-overswipe-active'); \n }\n }\n if (buttonsLeft.length > 1) {\n $button.css('z-index', buttonsLeft.length - i); \n }\n $button.transform('translate3d(' + (translate + buttonOffset * (1 - Math.min(progress, 1))) + 'px,0,0)');\n }\n }\n swipeOutContent.transform('translate3d(' + translate + 'px,0,0)');\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n \n isTouched = false;\n isMoved = false;\n var timeDiff = (new Date()).getTime() - touchStartTime;\n var action, actionsWidth, actions, buttons, i;\n \n actions = direction === 'to-left' ? actionsRight : actionsLeft;\n actionsWidth = direction === 'to-left' ? actionsRightWidth : actionsLeftWidth;\n \n if (\n timeDiff < 300 && (touchesDiff < -10 && direction === 'to-left' || touchesDiff > 10 && direction === 'to-right') ||\n timeDiff >= 300 && Math.abs(translate) > actionsWidth / 2\n ) {\n action = 'open';\n }\n else {\n action = 'close';\n }\n if (timeDiff < 300) {\n if (Math.abs(translate) === 0) action = 'close';\n if (Math.abs(translate) === actionsWidth) action = 'open';\n }\n \n if (action === 'open') {\n app.swipeoutOpenedEl = swipeOutEl;\n swipeOutEl.trigger('open swipeout:open');\n swipeOutEl.addClass('swipeout-opened transitioning');\n var newTranslate = direction === 'to-left' ? -actionsWidth : actionsWidth;\n swipeOutContent.transform('translate3d(' + newTranslate + 'px,0,0)');\n actions.addClass('swipeout-actions-opened');\n buttons = direction === 'to-left' ? buttonsRight : buttonsLeft;\n if (buttons) {\n for (i = 0; i < buttons.length; i++) {\n $(buttons[i]).transform('translate3d(' + newTranslate + 'px,0,0)');\n }\n }\n if (overswipeRight) {\n actionsRight.find('.swipeout-overswipe')[0].click();\n }\n if (overswipeLeft) {\n actionsLeft.find('.swipeout-overswipe')[0].click();\n }\n }\n else {\n swipeOutEl.trigger('close swipeout:close');\n app.swipeoutOpenedEl = undefined;\n swipeOutEl.addClass('transitioning').removeClass('swipeout-opened');\n swipeOutContent.transform('');\n actions.removeClass('swipeout-actions-opened');\n }\n \n var buttonOffset;\n if (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {\n for (i = 0; i < buttonsLeft.length; i++) {\n buttonOffset = buttonsLeft[i]._buttonOffset;\n if (typeof buttonOffset === 'undefined') {\n buttonsLeft[i]._buttonOffset = actionsLeftWidth - buttonsLeft[i].offsetLeft - buttonsLeft[i].offsetWidth;\n }\n $(buttonsLeft[i]).transform('translate3d(' + (buttonOffset) + 'px,0,0)');\n }\n }\n if (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {\n for (i = 0; i < buttonsRight.length; i++) {\n buttonOffset = buttonsRight[i]._buttonOffset;\n if (typeof buttonOffset === 'undefined') {\n buttonsRight[i]._buttonOffset = buttonsRight[i].offsetLeft;\n }\n $(buttonsRight[i]).transform('translate3d(' + (-buttonOffset) + 'px,0,0)');\n }\n }\n swipeOutContent.transitionEnd(function (e) {\n if (opened && action === 'open' || closed && action === 'close') return;\n swipeOutEl.trigger(action === 'open' ? 'opened' : 'closed');\n if (opened && action === 'close') {\n if (actionsRight.length > 0) {\n buttonsRight.transform('');\n }\n if (actionsLeft.length > 0) {\n buttonsLeft.transform('');\n }\n }\n });\n }\n if (swipeoutEl) {\n $(swipeoutEl).on(app.touchEvents.start, handleTouchStart, activeListener);\n $(swipeoutEl).on(app.touchEvents.move, handleTouchMove, activeListener);\n $(swipeoutEl).on(app.touchEvents.end, handleTouchEnd, activeListener);\n }\n else {\n $(document).on(app.touchEvents.start, '.list-block li.swipeout', handleTouchStart, activeListener);\n $(document).on(app.touchEvents.move, '.list-block li.swipeout', handleTouchMove, activeListener);\n $(document).on(app.touchEvents.end, '.list-block li.swipeout', handleTouchEnd, activeListener);\n }\n \n };\n app.swipeoutOpen = function (el, dir, callback) {\n el = $(el);\n if (arguments.length === 2) {\n if (typeof arguments[1] === 'function') {\n callback = dir;\n }\n }\n \n if (el.length === 0) return;\n if (el.length > 1) el = $(el[0]);\n if (!el.hasClass('swipeout') || el.hasClass('swipeout-opened')) return;\n if (!dir) {\n if (el.find('.swipeout-actions-right').length > 0) dir = 'right';\n else dir = 'left';\n }\n var swipeOutActions = el.find('.swipeout-actions-' + dir);\n if (swipeOutActions.length === 0) return;\n el.trigger('open swipeout:open').addClass('swipeout-opened').removeClass('transitioning');\n swipeOutActions.addClass('swipeout-actions-opened');\n var buttons = swipeOutActions.children('a');\n var swipeOutActionsWidth = swipeOutActions.outerWidth();\n var translate = dir === 'right' ? -swipeOutActionsWidth : swipeOutActionsWidth;\n var i;\n if (buttons.length > 1) {\n for (i = 0; i < buttons.length; i++) {\n if (dir === 'right') {\n $(buttons[i]).transform('translate3d(' + (- buttons[i].offsetLeft) + 'px,0,0)');\n }\n else {\n $(buttons[i]).css('z-index', buttons.length - i).transform('translate3d(' + (swipeOutActionsWidth - buttons[i].offsetWidth - buttons[i].offsetLeft) + 'px,0,0)');\n }\n }\n var clientLeft = buttons[1].clientLeft;\n }\n el.addClass('transitioning');\n for (i = 0; i < buttons.length; i++) {\n $(buttons[i]).transform('translate3d(' + (translate) + 'px,0,0)');\n }\n el.find('.swipeout-content').transform('translate3d(' + translate + 'px,0,0)').transitionEnd(function () {\n el.trigger('opened swipeout:opened');\n if (callback) callback.call(el[0]);\n });\n app.swipeoutOpenedEl = el;\n };\n app.swipeoutClose = function (el, callback) {\n el = $(el);\n if (el.length === 0) return;\n if (!el.hasClass('swipeout-opened')) return;\n var dir = el.find('.swipeout-actions-opened').hasClass('swipeout-actions-right') ? 'right' : 'left';\n var swipeOutActions = el.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n var buttons = swipeOutActions.children('a');\n var swipeOutActionsWidth = swipeOutActions.outerWidth();\n app.allowSwipeout = false;\n el.trigger('close swipeout:close');\n el.removeClass('swipeout-opened').addClass('transitioning');\n \n var closeTO;\n function onSwipeoutClose() {\n app.allowSwipeout = true;\n if (el.hasClass('swipeout-opened')) return;\n el.removeClass('transitioning');\n buttons.transform('');\n el.trigger('closed swipeout:closed');\n if (callback) callback.call(el[0]);\n if (closeTO) clearTimeout(closeTO);\n }\n el.find('.swipeout-content').transform('').transitionEnd(onSwipeoutClose);\n closeTO = setTimeout(onSwipeoutClose, 500);\n \n for (var i = 0; i < buttons.length; i++) {\n if (dir === 'right') {\n $(buttons[i]).transform('translate3d(' + (-buttons[i].offsetLeft) + 'px,0,0)');\n }\n else {\n $(buttons[i]).transform('translate3d(' + (swipeOutActionsWidth - buttons[i].offsetWidth - buttons[i].offsetLeft) + 'px,0,0)');\n }\n $(buttons[i]).css({left:0 + 'px'}).removeClass('swipeout-overswipe-active');\n }\n if (app.swipeoutOpenedEl && app.swipeoutOpenedEl[0] === el[0]) app.swipeoutOpenedEl = undefined;\n };\n app.swipeoutDelete = function (el, callback) {\n el = $(el);\n if (el.length === 0) return;\n if (el.length > 1) el = $(el[0]);\n app.swipeoutOpenedEl = undefined;\n el.trigger('delete swipeout:delete');\n el.css({height: el.outerHeight() + 'px'});\n var clientLeft = el[0].clientLeft;\n el.css({height: 0 + 'px'}).addClass('deleting transitioning').transitionEnd(function () {\n el.trigger('deleted swipeout:deleted');\n if (callback) callback.call(el[0]);\n if (el.parents('.virtual-list').length > 0) {\n var virtualList = el.parents('.virtual-list')[0].f7VirtualList;\n var virtualIndex = el[0].f7VirtualListIndex;\n if (virtualList && typeof virtualIndex !== 'undefined') virtualList.deleteItem(virtualIndex);\n }\n else {\n if (app.params.swipeoutRemoveWithTimeout) {\n setTimeout(function () {\n el.remove();\n }, 0);\n }\n else el.remove();\n }\n });\n var translate = '-100%';\n el.find('.swipeout-content').transform('translate3d(' + translate + ',0,0)');\n };\n \n\n /*===============================================================================\n ************ Sortable ************\n ===============================================================================*/\n app.sortableToggle = function (sortableContainer) {\n sortableContainer = $(sortableContainer);\n if (sortableContainer.length === 0) sortableContainer = $('.list-block.sortable');\n sortableContainer.toggleClass('sortable-opened');\n if (sortableContainer.hasClass('sortable-opened')) {\n sortableContainer.trigger('open sortable:open');\n }\n else {\n sortableContainer.trigger('close sortable:close');\n }\n return sortableContainer;\n };\n app.sortableOpen = function (sortableContainer) {\n sortableContainer = $(sortableContainer);\n if (sortableContainer.length === 0) sortableContainer = $('.list-block.sortable');\n sortableContainer.addClass('sortable-opened');\n sortableContainer.trigger('open sortable:open');\n return sortableContainer;\n };\n app.sortableClose = function (sortableContainer) {\n sortableContainer = $(sortableContainer);\n if (sortableContainer.length === 0) sortableContainer = $('.list-block.sortable');\n sortableContainer.removeClass('sortable-opened');\n sortableContainer.trigger('close sortable:close');\n return sortableContainer;\n };\n app.initSortable = function () {\n var isTouched, isMoved, touchStartY, touchesDiff, sortingEl, sortingElHeight, sortingItems, minTop, maxTop, insertAfter, insertBefore, sortableContainer, startIndex;\n \n function handleTouchStart(e) {\n isMoved = false;\n isTouched = true;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n /*jshint validthis:true */\n sortingEl = $(this).parent();\n startIndex = sortingEl.index();\n sortingItems = sortingEl.parent().children('li');\n sortableContainer = sortingEl.parents('.sortable');\n e.preventDefault();\n app.allowPanelOpen = app.allowSwipeout = false;\n }\n function handleTouchMove(e) {\n if (!isTouched || !sortingEl) return;\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (!isMoved) {\n sortingEl.addClass('sorting');\n sortableContainer.addClass('sortable-sorting');\n minTop = sortingEl[0].offsetTop;\n maxTop = sortingEl.parent().height() - sortingEl[0].offsetTop - sortingEl.height();\n sortingElHeight = sortingEl[0].offsetHeight;\n }\n isMoved = true;\n \n e.preventDefault();\n e.f7PreventPanelSwipe = true;\n touchesDiff = pageY - touchStartY;\n var translate = touchesDiff;\n if (translate < -minTop) translate = -minTop;\n if (translate > maxTop) translate = maxTop;\n sortingEl.transform('translate3d(0,' + translate + 'px,0)');\n \n insertBefore = insertAfter = undefined;\n \n sortingItems.each(function () {\n var currentEl = $(this);\n if (currentEl[0] === sortingEl[0]) return;\n var currentElOffset = currentEl[0].offsetTop;\n var currentElHeight = currentEl.height();\n var sortingElOffset = sortingEl[0].offsetTop + translate;\n \n if ((sortingElOffset >= currentElOffset - currentElHeight / 2) && sortingEl.index() < currentEl.index()) {\n currentEl.transform('translate3d(0, '+(-sortingElHeight)+'px,0)');\n insertAfter = currentEl;\n insertBefore = undefined;\n }\n else if ((sortingElOffset <= currentElOffset + currentElHeight / 2) && sortingEl.index() > currentEl.index()) {\n currentEl.transform('translate3d(0, '+(sortingElHeight)+'px,0)');\n insertAfter = undefined;\n if (!insertBefore) insertBefore = currentEl;\n }\n else {\n $(this).transform('translate3d(0, 0%,0)');\n }\n });\n }\n function handleTouchEnd(e) {\n app.allowPanelOpen = app.allowSwipeout = true;\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n e.preventDefault();\n sortingItems.transform('');\n sortingEl.removeClass('sorting');\n sortableContainer.removeClass('sortable-sorting');\n var virtualList, oldIndex, newIndex;\n if (insertAfter) {\n sortingEl.insertAfter(insertAfter);\n sortingEl.trigger('sort sortable:sort', {startIndex: startIndex, newIndex: sortingEl.index()});\n }\n if (insertBefore) {\n sortingEl.insertBefore(insertBefore);\n sortingEl.trigger('sort sortable:sort', {startIndex: startIndex, newIndex: sortingEl.index()});\n }\n if ((insertAfter || insertBefore) && sortableContainer.hasClass('virtual-list')) {\n virtualList = sortableContainer[0].f7VirtualList;\n oldIndex = sortingEl[0].f7VirtualListIndex;\n newIndex = insertBefore ? insertBefore[0].f7VirtualListIndex : insertAfter[0].f7VirtualListIndex;\n if (virtualList) virtualList.moveItem(oldIndex, newIndex);\n }\n insertAfter = insertBefore = undefined;\n isTouched = false;\n isMoved = false;\n }\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n $(document).on(app.touchEvents.start, '.list-block.sortable .sortable-handler', handleTouchStart, activeListener);\n if (app.support.touch) {\n $(document).on(app.touchEvents.move, '.list-block.sortable .sortable-handler', handleTouchMove, activeListener);\n $(document).on(app.touchEvents.end, '.list-block.sortable .sortable-handler', handleTouchEnd, activeListener);\n }\n else {\n $(document).on(app.touchEvents.move, handleTouchMove, activeListener);\n $(document).on(app.touchEvents.end, handleTouchEnd, activeListener);\n }\n };\n \n\n /*===============================================================================\n ************ Smart Select ************\n ===============================================================================*/\n app.initSmartSelects = function (pageContainer) {\n pageContainer = $(pageContainer);\n var selects;\n if (pageContainer.is('.smart-select')) {\n selects = pageContainer;\n }\n else {\n selects = pageContainer.find('.smart-select');\n }\n if (selects.length === 0) return;\n \n selects.each(function () {\n var smartSelect = $(this);\n \n var $select = smartSelect.find('select');\n if ($select.length === 0) return;\n \n var select = $select[0];\n if (select.length === 0) return;\n \n var valueText = [];\n var displayAs;\n for (var i = 0; i < select.length; i++) {\n if (select[i].selected) {\n displayAs = select[i].dataset ? select[i].dataset.displayAs : $(select[i]).data('display-as');\n if (displayAs && typeof displayAs !== 'undefined') {\n \t\t\t\t\tvalueText.push(displayAs);\n \t\t\t\t} else {\n \t\t\t\t\tvalueText.push(select[i].textContent.trim());\n \t\t\t\t}\n \t\t\t}\n }\n \n var itemAfter = smartSelect.find('.item-after');\n if (itemAfter.length === 0) {\n smartSelect.find('.item-inner').append('
' + valueText.join(', ') + '
');\n }\n else {\n var selectedText = itemAfter.text();\n if (itemAfter.hasClass('smart-select-value')) {\n for (i = 0; i < select.length; i++) {\n select[i].selected = select[i].textContent.trim() === selectedText.trim();\n }\n } else {\n itemAfter.text(valueText.join(', '));\n }\n }\n \n $select.on('change', function () {\n var valueText = [];\n for (var i = 0; i < select.length; i++) {\n if (select[i].selected) {\n var displayAs = select[i].dataset ? select[i].dataset.displayAs : $(select[i]).data('display-as');\n \tif (displayAs && typeof displayAs !== 'undefined') {\n \t\t\t\t\t\tvalueText.push(displayAs);\n \t\t\t\t\t} else {\n \t\t\t\t\t\tvalueText.push(select[i].textContent.trim());\n \t\t\t\t\t}\n \t\t\t\t}\n }\n smartSelect.find('.item-after').text(valueText.join(', '));\n });\n \n });\n \n };\n app.smartSelectAddOption = function (select, option, index) {\n select = $(select);\n var smartSelect = select.parents('.smart-select');\n if (typeof index === 'undefined') {\n select.append(option);\n }\n else {\n $(option).insertBefore(select.find('option').eq(index));\n }\n app.initSmartSelects(smartSelect);\n var selectName = smartSelect.find('select').attr('name');\n var opened = $('.page.smart-select-page[data-select-name=\"' + selectName + '\"]').length > 0;\n if (opened) {\n app.smartSelectOpen(smartSelect, true);\n }\n };\n app.smartSelectOpen = function (smartSelect, reLayout) {\n smartSelect = $(smartSelect);\n if (smartSelect.length === 0) return;\n \n // Find related view\n var view = smartSelect.parents('.' + app.params.viewClass);\n if (view.length === 0) return;\n view = view[0].f7View;\n \n // Parameters\n var openIn = smartSelect.attr('data-open-in') || app.params.smartSelectOpenIn;\n if (openIn === 'popup') {\n if ($('.popup.smart-select-popup').length > 0) return;\n }\n else if (openIn === 'picker') {\n if ($('.picker-modal.modal-in').length > 0 && !reLayout){\n if (smartSelect[0].f7SmartSelectPicker !== $('.picker-modal.modal-in:not(.modal-out)')[0]) app.closeModal($('.picker-modal.modal-in:not(.modal-out)'));\n else return;\n }\n }\n else {\n if (!view) return;\n }\n \n var smartSelectData = smartSelect.dataset();\n var pageTitle = smartSelectData.pageTitle || smartSelect.find('.item-title').text();\n var backText = smartSelectData.backText || app.params.smartSelectBackText;\n var closeText;\n if (openIn === 'picker') {\n closeText = smartSelectData.pickerCloseText || smartSelectData.backText || app.params.smartSelectPickerCloseText ;\n }\n else {\n closeText = smartSelectData.popupCloseText || smartSelectData.backText || app.params.smartSelectPopupCloseText ;\n }\n var backOnSelect = smartSelectData.backOnSelect !== undefined ? smartSelectData.backOnSelect : app.params.smartSelectBackOnSelect;\n var formTheme = smartSelectData.formTheme || app.params.smartSelectFormTheme;\n var navbarTheme = smartSelectData.navbarTheme || app.params.smartSelectNavbarTheme;\n var toolbarTheme = smartSelectData.toolbarTheme || app.params.smartSelectToolbarTheme;\n var virtualList = smartSelectData.virtualList;\n var virtualListHeight = smartSelectData.virtualListHeight;\n var material = app.params.material;\n var pickerHeight = smartSelectData.pickerHeight || app.params.smartSelectPickerHeight;\n \n // Collect all options/values\n var select = smartSelect.find('select')[0];\n var $select = $(select);\n var $selectData = $select.dataset();\n if (select.disabled || smartSelect.hasClass('disabled') || $select.hasClass('disabled')) {\n return;\n }\n var values = [];\n var id = (new Date()).getTime();\n var inputType = select.multiple ? 'checkbox' : 'radio';\n var inputName = inputType + '-' + id;\n var maxLength = $select.attr('maxlength');\n var selectName = select.name;\n var option, optionHasMedia, optionImage, optionIcon, optionGroup, optionGroupLabel, optionPreviousGroup, optionIsLabel, previousGroup, optionColor, optionClassName, optionData;\n for (var i = 0; i < select.length; i++) {\n option = $(select[i]);\n optionData = option.dataset();\n optionImage = optionData.optionImage || $selectData.optionImage || smartSelectData.optionImage;\n optionIcon = optionData.optionIcon || $selectData.optionIcon || smartSelectData.optionIcon;\n optionHasMedia = optionImage || optionIcon || inputType === 'checkbox';\n if (material) optionHasMedia = optionImage || optionIcon;\n optionColor = optionData.optionColor;\n optionClassName = optionData.optionClass;\n if (option[0].disabled) optionClassName += ' disabled';\n optionGroup = option.parent('optgroup')[0];\n optionGroupLabel = optionGroup && optionGroup.label;\n optionIsLabel = false;\n if (optionGroup) {\n if (optionGroup !== previousGroup) {\n optionIsLabel = true;\n previousGroup = optionGroup;\n values.push({\n groupLabel: optionGroupLabel,\n isLabel: optionIsLabel\n });\n }\n }\n values.push({\n value: option[0].value,\n text: option[0].textContent.trim(),\n selected: option[0].selected,\n group: optionGroup,\n groupLabel: optionGroupLabel,\n image: optionImage,\n icon: optionIcon,\n color: optionColor,\n className: optionClassName,\n disabled: option[0].disabled,\n inputType: inputType,\n id: id,\n hasMedia: optionHasMedia,\n checkbox: inputType === 'checkbox',\n inputName: inputName,\n material: app.params.material\n });\n }\n \n \n // Item template/HTML\n if (!app._compiledTemplates.smartSelectItem) {\n app._compiledTemplates.smartSelectItem = t7.compile(app.params.smartSelectItemTemplate ||\n '{{#if isLabel}}' +\n '
  • {{groupLabel}}
  • ' +\n '{{else}}' +\n '' +\n '' +\n '' +\n '{{/if}}'\n );\n }\n var smartSelectItemTemplate = app._compiledTemplates.smartSelectItem;\n \n var inputsHTML = '';\n if (!virtualList) {\n for (var j = 0; j < values.length; j++) {\n inputsHTML += smartSelectItemTemplate(values[j]);\n }\n }\n \n // Toolbar / Navbar\n var toolbarHTML = '', navbarHTML;\n var noNavbar = '', noToolbar = '', noTabbar = '', navbarLayout;\n \n if (openIn === 'picker') {\n if (!app._compiledTemplates.smartSelectToolbar) {\n app._compiledTemplates.smartSelectToolbar = t7.compile(app.params.smartSelectToolbarTemplate ||\n '
    ' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    '\n );\n }\n \n toolbarHTML = app._compiledTemplates.smartSelectToolbar({\n pageTitle: pageTitle,\n closeText: closeText,\n openIn: openIn,\n toolbarTheme: toolbarTheme,\n inPicker: openIn === 'picker'\n });\n }\n else {\n // Navbar HTML\n if (!app._compiledTemplates.smartSelectNavbar) {\n app._compiledTemplates.smartSelectNavbar = t7.compile(app.params.smartSelectNavbarTemplate ||\n '
    ' +\n '
    ' +\n '{{leftTemplate}}' +\n '
    {{pageTitle}}
    ' +\n '
    ' +\n '
    '\n );\n }\n navbarHTML = app._compiledTemplates.smartSelectNavbar({\n pageTitle: pageTitle,\n backText: backText,\n closeText: closeText,\n openIn: openIn,\n navbarTheme: navbarTheme,\n inPopup: openIn === 'popup',\n inPage: openIn === 'page',\n leftTemplate: openIn === 'popup' ?\n (app.params.smartSelectPopupCloseTemplate || (material ? '
    ' : '')).replace(/{{closeText}}/g, closeText) :\n (app.params.smartSelectBackTemplate || (material ? '
    ' : '')).replace(/{{backText}}/g, backText)\n });\n // Determine navbar layout type - static/fixed/through\n if (openIn === 'page') {\n navbarLayout = 'static';\n if (smartSelect.parents('.navbar-through').length > 0) navbarLayout = 'through';\n if (smartSelect.parents('.navbar-fixed').length > 0) navbarLayout = 'fixed';\n noToolbar = smartSelect.parents('.page').hasClass('no-toolbar') ? 'no-toolbar' : '';\n noNavbar = smartSelect.parents('.page').hasClass('no-navbar') ? 'no-navbar' : 'navbar-' + navbarLayout;\n noTabbar = smartSelect.parents('.page').hasClass('no-tabbar') ? 'no-tabbar' : '';\n }\n else {\n navbarLayout = 'fixed';\n }\n }\n \n \n // Page Layout\n var pageName = 'smart-select-' + inputName;\n \n var useSearchbar = typeof smartSelect.data('searchbar') === 'undefined' ? app.params.smartSelectSearchbar : (smartSelect.data('searchbar') === 'true' ? true : false);\n var searchbarPlaceholder, searchbarCancel;\n \n if (useSearchbar) {\n searchbarPlaceholder = smartSelect.data('searchbar-placeholder') || 'Search';\n searchbarCancel = smartSelect.data('searchbar-cancel') || 'Cancel';\n }\n \n var searchbarHTML = '
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n (material ? '' : '' + searchbarCancel + '') +\n '
    ' +\n '
    ';\n \n var pageHTML =\n (openIn !== 'picker' && navbarLayout === 'through' ? navbarHTML : '') +\n '
    ' +\n '
    ' +\n (openIn !== 'picker' && navbarLayout === 'fixed' ? navbarHTML : '') +\n (useSearchbar ? searchbarHTML : '') +\n '
    ' +\n (openIn !== 'picker' && navbarLayout === 'static' ? navbarHTML : '') +\n '
    ' +\n '
      ' +\n (virtualList ? '' : inputsHTML) +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n \n // Define popup and picker\n var popup, picker;\n \n // Scroll SS Picker To Input\n function scrollToInput() {\n var pageContent = smartSelect.parents('.page-content');\n if (pageContent.length === 0) return;\n var paddingTop = parseInt(pageContent.css('padding-top'), 10),\n paddingBottom = parseInt(pageContent.css('padding-bottom'), 10),\n pageHeight = pageContent[0].offsetHeight - paddingTop - picker.height(),\n pageScrollHeight = pageContent[0].scrollHeight - paddingTop - picker.height(),\n newPaddingBottom;\n var inputTop = smartSelect.offset().top - paddingTop + smartSelect[0].offsetHeight;\n if (inputTop > pageHeight) {\n var scrollTop = pageContent.scrollTop() + inputTop - pageHeight;\n if (scrollTop + pageHeight > pageScrollHeight) {\n newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;\n if (pageHeight === pageScrollHeight) {\n newPaddingBottom = picker.height();\n }\n pageContent.css({'padding-bottom': (newPaddingBottom) + 'px'});\n }\n pageContent.scrollTop(scrollTop, 300);\n }\n }\n // Close SS Picker on HTML Click\n function closeOnHTMLClick(e) {\n var close = true;\n if (e.target === smartSelect[0] || $(e.target).parents(smartSelect[0]).length > 0) {\n close = false;\n }\n if ($(e.target).parents('.picker-modal').length > 0) {\n close = false;\n }\n if (close) {\n app.closeModal('.smart-select-picker.modal-in');\n }\n }\n \n // Check max length\n function checkMaxLength(container) {\n if (select.selectedOptions.length >= maxLength) {\n container.find('input[type=\"checkbox\"]').each(function () {\n if (!this.checked) {\n $(this).parents('li').addClass('disabled');\n }\n else {\n $(this).parents('li').removeClass('disabled');\n }\n });\n }\n else {\n container.find('.disabled').removeClass('disabled');\n }\n }\n // Event Listeners on new page\n function handleInputs(container) {\n container = $(container);\n if (virtualList) {\n var virtualListInstance = app.virtualList(container.find('.virtual-list'), {\n items: values,\n template: smartSelectItemTemplate,\n height: virtualListHeight || undefined,\n searchByItem: function (query, index, item) {\n if (item.text && item.text.toLowerCase().indexOf(query.trim().toLowerCase()) >=0 ) return true;\n return false;\n }\n });\n container.once(openIn === 'popup' || openIn === 'picker' ? 'closed': 'pageBeforeRemove', function () {\n if (virtualListInstance && virtualListInstance.destroy) virtualListInstance.destroy();\n });\n }\n if (maxLength) {\n checkMaxLength(container);\n }\n if (backOnSelect) {\n container.find('input[type=\"radio\"][name=\"' + inputName + '\"]:checked').parents('label').once('click', function () {\n if (openIn === 'popup') app.closeModal(popup);\n else if (openIn === 'picker') app.closeModal(picker);\n else view.router.back();\n });\n }\n container.on('change', 'input[name=\"' + inputName + '\"]', function () {\n \t\t\tvar option, text;\n var input = this;\n var value = input.value;\n var optionText = [];\n var displayAs;\n if (input.type === 'checkbox') {\n var values = [];\n for (var i = 0; i < select.options.length; i++) {\n option = select.options[i];\n if (option.value === value) {\n option.selected = input.checked;\n }\n if (option.selected) {\n displayAs = option.dataset ? option.dataset.displayAs : $(option).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : option.textContent;\n optionText.push(text.trim());\n }\n }\n if (maxLength) {\n checkMaxLength(container);\n }\n }\n else {\n option = smartSelect.find('option[value=\"' + value + '\"]')[0];\n displayAs = option.dataset ? option.dataset.displayAs : $(option).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : option.textContent;\n optionText = [text];\n select.value = value;\n }\n \n $select.trigger('change');\n smartSelect.find('.item-after').text(optionText.join(', '));\n if (backOnSelect && inputType === 'radio') {\n if (openIn === 'popup') app.closeModal(popup);\n else if (openIn === 'picker') app.closeModal(picker);\n else view.router.back();\n }\n });\n }\n function pageInit(e) {\n var page = e.detail.page;\n if (page.name === pageName) {\n handleInputs(page.container);\n }\n }\n if (openIn === 'popup') {\n if (reLayout) {\n popup = $('.popup.smart-select-popup .view');\n popup.html(pageHTML);\n }\n else {\n popup = app.popup(\n '
    ' +\n '
    ' +\n pageHTML +\n '
    ' +\n '
    '\n );\n popup = $(popup);\n }\n app.initPage(popup.find('.page'));\n handleInputs(popup);\n }\n else if (openIn === 'picker') {\n if (reLayout) {\n picker = $('.picker-modal.smart-select-picker .view');\n picker.html(pageHTML);\n }\n else {\n picker = app.pickerModal(\n '
    ' +\n toolbarHTML +\n '
    ' +\n '
    ' +\n pageHTML +\n '
    ' +\n '
    ' +\n '
    '\n );\n picker = $(picker);\n \n // Scroll To Input\n scrollToInput();\n \n // Close On Click\n $('html').on('click', closeOnHTMLClick);\n \n // On Close\n picker.once('picker:close', function () {\n // Reset linked picker\n smartSelect[0].f7SmartSelectPicker = undefined;\n \n // Detach html click\n $('html').off('click', closeOnHTMLClick);\n \n // Restore page padding bottom\n smartSelect.parents('.page-content').css({paddingBottom: ''});\n });\n \n // Link Picker\n smartSelect[0].f7SmartSelectPicker = picker[0];\n }\n \n // Init Page\n app.initPage(picker.find('.page'));\n \n // Attach events\n handleInputs(picker);\n }\n else {\n $(document).once('page:init', '.smart-select-page', pageInit);\n view.router.load({\n content: pageHTML,\n reload: reLayout ? true : undefined\n });\n }\n };\n \n\n /*===============================================================================\n ************ Virtual List ************\n ===============================================================================*/\n var VirtualList = function (listBlock, params) {\n var defaults = {\n cols: 1,\n height: app.params.material ? 48 : 44,\n cache: true,\n dynamicHeightBufferSize: 1,\n showFilteredItemsOnly: false,\n renderExternal: undefined,\n template:\n '
  • ' +\n '
    ' +\n '
    ' +\n '
    {{this}}
    ' +\n '
    ' +\n '
    ' +\n '
  • '\n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n \n // Preparation\n var vl = this;\n vl.listBlock = $(listBlock);\n vl.params = params;\n vl.items = vl.params.items;\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n }\n if (vl.params.template && !vl.params.renderItem) {\n if (typeof vl.params.template === 'string') vl.template = t7.compile(vl.params.template);\n else if (typeof vl.params.template === 'function') vl.template = vl.params.template;\n }\n vl.pageContent = vl.listBlock.parents('.page-content');\n \n // Bad scroll\n var updatableScroll;\n if (typeof vl.params.updatableScroll !== 'undefined') {\n updatableScroll = vl.params.updatableScroll;\n }\n else {\n updatableScroll = true;\n if (app.device.ios && app.device.osVersion.split('.')[0] < 8) {\n updatableScroll = false;\n }\n vl.params.updatableScroll = updatableScroll;\n }\n \n // Append
      \n vl.ul = vl.params.ul ? $(vl.params.ul) : vl.listBlock.children('ul');\n if (vl.ul.length === 0) {\n vl.listBlock.append('
        ');\n vl.ul = vl.listBlock.children('ul');\n }\n \n // DOM cached items\n vl.domCache = {};\n vl.displayDomCache = {};\n \n // Temporary DOM Element\n vl.tempDomElement = document.createElement('ul');\n \n // Last repain position\n vl.lastRepaintY = null;\n \n // Fragment\n vl.fragment = document.createDocumentFragment();\n \n // Filter\n vl.filterItems = function (indexes, resetScrollTop) {\n vl.filteredItems = [];\n var firstIndex = indexes[0];\n var lastIndex = indexes[indexes.length - 1];\n for (var i = 0; i < indexes.length; i++) {\n vl.filteredItems.push(vl.items[indexes[i]]);\n }\n if (typeof resetScrollTop === 'undefined') resetScrollTop = true;\n if (resetScrollTop) {\n vl.pageContent[0].scrollTop = 0;\n }\n vl.update();\n };\n vl.resetFilter = function () {\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n }\n else {\n vl.filteredItems = null;\n delete vl.filteredItems;\n }\n vl.update();\n };\n \n var pageHeight, rowsPerScreen, rowsBefore, rowsAfter, rowsToRender, maxBufferHeight = 0, listHeight;\n var dynamicHeight = typeof vl.params.height === 'function';\n \n // Set list size\n vl.setListSize = function () {\n var items = vl.filteredItems || vl.items;\n pageHeight = vl.pageContent[0].offsetHeight;\n if (dynamicHeight) {\n listHeight = 0;\n vl.heights = [];\n for (var i = 0; i < items.length; i++) {\n var itemHeight = vl.params.height(items[i]);\n listHeight += itemHeight;\n vl.heights.push(itemHeight);\n }\n }\n else {\n listHeight = Math.ceil(items.length / vl.params.cols) * vl.params.height;\n rowsPerScreen = Math.ceil(pageHeight / vl.params.height);\n rowsBefore = vl.params.rowsBefore || rowsPerScreen * 2;\n rowsAfter = vl.params.rowsAfter || rowsPerScreen;\n rowsToRender = (rowsPerScreen + rowsBefore + rowsAfter);\n maxBufferHeight = rowsBefore / 2 * vl.params.height;\n }\n \n if (updatableScroll) {\n vl.ul.css({height: listHeight + 'px'});\n }\n };\n \n // Render items\n vl.render = function (force, forceScrollTop) {\n if (force) vl.lastRepaintY = null;\n \n var scrollTop = -(vl.listBlock[0].getBoundingClientRect().top - vl.pageContent[0].getBoundingClientRect().top);\n \n if (typeof forceScrollTop !== 'undefined') scrollTop = forceScrollTop;\n \n if (vl.lastRepaintY === null || Math.abs(scrollTop - vl.lastRepaintY) > maxBufferHeight || (!updatableScroll && (vl.pageContent[0].scrollTop + pageHeight >= vl.pageContent[0].scrollHeight))) {\n vl.lastRepaintY = scrollTop;\n }\n else {\n return;\n }\n \n var items = vl.filteredItems || vl.items,\n fromIndex, toIndex, heightBeforeFirstItem = 0, heightBeforeLastItem = 0;\n if (dynamicHeight) {\n var itemTop = 0, j, itemHeight;\n maxBufferHeight = pageHeight;\n \n for (j = 0; j < vl.heights.length; j++) {\n itemHeight = vl.heights[j];\n if (typeof fromIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop - pageHeight * 2 * vl.params.dynamicHeightBufferSize) fromIndex = j;\n else heightBeforeFirstItem += itemHeight;\n }\n \n if (typeof toIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop + pageHeight * 2 * vl.params.dynamicHeightBufferSize || j === vl.heights.length - 1) toIndex = j + 1;\n heightBeforeLastItem += itemHeight;\n }\n itemTop += itemHeight;\n }\n toIndex = Math.min(toIndex, items.length);\n }\n else {\n fromIndex = (parseInt(scrollTop / vl.params.height) - rowsBefore) * vl.params.cols;\n if (fromIndex < 0) {\n fromIndex = 0;\n }\n toIndex = Math.min(fromIndex + rowsToRender * vl.params.cols, items.length);\n }\n \n var topPosition, renderExternalItems = [];\n vl.reachEnd = false;\n for (var i = fromIndex; i < toIndex; i++) {\n var item, index;\n // Define real item index\n index = vl.items.indexOf(items[i]);\n \n if (i === fromIndex) vl.currentFromIndex = index;\n if (i === toIndex - 1) vl.currentToIndex = index;\n if (vl.filteredItems) {\n if (vl.items[index] === vl.filteredItems[vl.filteredItems.length - 1]) vl.reachEnd = true;\n }\n else {\n if (index === vl.items.length - 1) vl.reachEnd = true;\n }\n \n // Find items\n if (vl.params.renderExternal) {\n renderExternalItems.push(items[i])\n }\n else {\n if (vl.domCache[index]) {\n item = vl.domCache[index];\n item.f7VirtualListIndex = index;\n }\n else {\n if (vl.template && !vl.params.renderItem) {\n vl.tempDomElement.innerHTML = vl.template(items[i], {index: index}).trim();\n }\n else if (vl.params.renderItem) {\n vl.tempDomElement.innerHTML = vl.params.renderItem(index, items[i]).trim();\n }\n else {\n vl.tempDomElement.innerHTML = items[i].toString().trim();\n }\n item = vl.tempDomElement.childNodes[0];\n if (vl.params.cache) vl.domCache[index] = item;\n item.f7VirtualListIndex = index;\n }\n }\n \n // Set item top position\n if (i === fromIndex) {\n if (dynamicHeight) {\n topPosition = heightBeforeFirstItem;\n }\n else {\n topPosition = (i * vl.params.height / vl.params.cols);\n }\n }\n if (!vl.params.renderExternal) {\n item.style.top = topPosition + 'px';\n \n // Before item insert\n if (vl.params.onItemBeforeInsert) vl.params.onItemBeforeInsert(vl, item);\n \n // Append item to fragment\n vl.fragment.appendChild(item);\n }\n }\n \n // Update list height with not updatable scroll\n if (!updatableScroll) {\n if (dynamicHeight) {\n vl.ul[0].style.height = heightBeforeLastItem + 'px';\n }\n else {\n vl.ul[0].style.height = i * vl.params.height / vl.params.cols + 'px';\n }\n }\n \n // Update list html\n if (vl.params.renderExternal) {\n if (items && items.length === 0) {\n vl.reachEnd = true;\n }\n }\n else {\n if (vl.params.onBeforeClear) vl.params.onBeforeClear(vl, vl.fragment);\n vl.ul[0].innerHTML = '';\n \n if (vl.params.onItemsBeforeInsert) vl.params.onItemsBeforeInsert(vl, vl.fragment);\n if (items && items.length === 0) {\n vl.reachEnd = true;\n if (vl.params.emptyTemplate) vl.ul[0].innerHTML = vl.params.emptyTemplate;\n }\n else {\n vl.ul[0].appendChild(vl.fragment);\n }\n \n if (vl.params.onItemsAfterInsert) vl.params.onItemsAfterInsert(vl, vl.fragment);\n }\n \n if (typeof forceScrollTop !== 'undefined' && force) {\n vl.pageContent.scrollTop(forceScrollTop, 0);\n }\n if (vl.params.renderExternal) {\n vl.params.renderExternal(vl, {\n fromIndex: fromIndex,\n toIndex: toIndex,\n listHeight: listHeight,\n topPosition: topPosition,\n items: renderExternalItems\n });\n }\n };\n \n vl.scrollToItem = function (index) {\n if (index > vl.items.length) return false;\n \n var itemTop = 0, listTop;\n if (dynamicHeight) {\n for (var i = 0; i < index; i++) {\n itemTop += vl.heights[i];\n }\n }\n else {\n itemTop = index * vl.params.height;\n }\n listTop = vl.listBlock[0].offsetTop;\n vl.render(true, listTop + itemTop - parseInt(vl.pageContent.css('padding-top'), 10));\n return true;\n };\n \n // Handle scroll event\n vl.handleScroll = function (e) {\n vl.render();\n };\n // Handle resize event\n vl._isVisible = function (el) {\n return !!( el.offsetWidth || el.offsetHeight || el.getClientRects().length );\n };\n vl.handleResize = function (e) {\n if (vl._isVisible(vl.listBlock[0])) {\n vl.setListSize();\n vl.render(true);\n }\n };\n \n vl.attachEvents = function (detach) {\n var action = detach ? 'off' : 'on';\n vl.pageContent[action]('scroll', vl.handleScroll);\n vl.listBlock.parents('.tab').eq(0)[action]('tab:show', vl.handleResize);\n vl.listBlock.parents('.panel').eq(0)[action]('panel:open', vl.handleResize);\n vl.listBlock.parents('.popup').eq(0)[action]('popup:open', vl.handleResize);\n app[action === 'on' ? 'onResize' : 'offResize'](vl.handleResize);\n };\n \n // Init Virtual List\n vl.init = function () {\n vl.attachEvents();\n vl.setListSize();\n vl.render();\n };\n \n // Append\n vl.appendItems = function (items) {\n for (var i = 0; i < items.length; i++) {\n vl.items.push(items[i]);\n }\n vl.update();\n };\n vl.appendItem = function (item) {\n vl.appendItems([item]);\n };\n // Replace\n vl.replaceAllItems = function (items) {\n vl.items = items;\n delete vl.filteredItems;\n vl.domCache = {};\n vl.update();\n };\n vl.replaceItem = function (index, item) {\n vl.items[index] = item;\n if (vl.params.cache) delete vl.domCache[index];\n vl.update();\n };\n // Prepend\n vl.prependItems = function (items) {\n for (var i = items.length - 1; i >= 0; i--) {\n vl.items.unshift(items[i]);\n }\n if (vl.params.cache) {\n var newCache = {};\n for (var cached in vl.domCache) {\n newCache[parseInt(cached, 10) + items.length] = vl.domCache[cached];\n }\n vl.domCache = newCache;\n }\n vl.update();\n };\n vl.prependItem = function (item) {\n vl.prependItems([item]);\n };\n \n // Move\n vl.moveItem = function (oldIndex, newIndex) {\n if (oldIndex === newIndex) return;\n // remove item from array\n var item = vl.items.splice(oldIndex, 1)[0];\n if (newIndex >= vl.items.length) {\n // Add item to the end\n vl.items.push(item);\n newIndex = vl.items.length - 1;\n }\n else {\n // Add item to new index\n vl.items.splice(newIndex, 0, item);\n }\n // Update cache\n if (vl.params.cache) {\n var newCache = {};\n for (var cached in vl.domCache) {\n var cachedIndex = parseInt(cached, 10);\n var leftIndex = oldIndex < newIndex ? oldIndex : newIndex;\n var rightIndex = oldIndex < newIndex ? newIndex : oldIndex;\n var indexShift = oldIndex < newIndex ? -1 : 1;\n if (cachedIndex < leftIndex || cachedIndex > rightIndex) newCache[cachedIndex] = vl.domCache[cachedIndex];\n if (cachedIndex === leftIndex) newCache[rightIndex] = vl.domCache[cachedIndex];\n if (cachedIndex > leftIndex && cachedIndex <= rightIndex) newCache[cachedIndex + indexShift] = vl.domCache[cachedIndex];\n }\n vl.domCache = newCache;\n }\n vl.update();\n };\n // Insert before\n vl.insertItemBefore = function (index, item) {\n if (index === 0) {\n vl.prependItem(item);\n return;\n }\n if (index >= vl.items.length) {\n vl.appendItem(item);\n return;\n }\n vl.items.splice(index, 0, item);\n // Update cache\n if (vl.params.cache) {\n var newCache = {};\n for (var cached in vl.domCache) {\n var cachedIndex = parseInt(cached, 10);\n if (cachedIndex >= index) {\n newCache[cachedIndex + 1] = vl.domCache[cachedIndex];\n }\n }\n vl.domCache = newCache;\n }\n vl.update();\n };\n // Delete\n vl.deleteItems = function (indexes) {\n var prevIndex, indexShift = 0;\n for (var i = 0; i < indexes.length; i++) {\n var index = indexes[i];\n if (typeof prevIndex !== 'undefined') {\n if (index > prevIndex) {\n indexShift = -i;\n }\n }\n index = index + indexShift;\n prevIndex = indexes[i];\n // Delete item\n var deletedItem = vl.items.splice(index, 1)[0];\n \n // Delete from filtered\n if (vl.filteredItems && vl.filteredItems.indexOf(deletedItem) >= 0) {\n vl.filteredItems.splice(vl.filteredItems.indexOf(deletedItem), 1);\n }\n // Update cache\n if (vl.params.cache) {\n var newCache = {};\n for (var cached in vl.domCache) {\n var cachedIndex = parseInt(cached, 10);\n if (cachedIndex === index) {\n delete vl.domCache[index];\n }\n else if (parseInt(cached, 10) > index) {\n newCache[cachedIndex - 1] = vl.domCache[cached];\n }\n else {\n newCache[cachedIndex] = vl.domCache[cached];\n }\n }\n vl.domCache = newCache;\n }\n }\n vl.update();\n };\n vl.deleteAllItems = function () {\n vl.items = [];\n delete vl.filteredItems;\n if (vl.params.cache) vl.domCache = {};\n vl.update();\n };\n vl.deleteItem = function (index) {\n vl.deleteItems([index]);\n };\n \n // Clear cache\n vl.clearCache = function () {\n vl.domCache = {};\n };\n \n // Update Virtual List\n vl.update = function () {\n vl.setListSize();\n vl.render(true);\n };\n \n // Destroy\n vl.destroy = function () {\n vl.attachEvents(true);\n delete vl.items;\n delete vl.domCache;\n };\n \n // Init Virtual List\n vl.init();\n \n // Store vl in container\n vl.listBlock[0].f7VirtualList = vl;\n return vl;\n };\n \n // App Method\n app.virtualList = function (listBlock, params) {\n return new VirtualList(listBlock, params);\n };\n \n app.reinitVirtualList = function (pageContainer) {\n var page = $(pageContainer);\n var vlists = page.find('.virtual-list');\n if (vlists.length === 0) return;\n for (var i = 0; i < vlists.length; i++) {\n var vlistInstance = vlists[i].f7VirtualList;\n if (vlistInstance) {\n vlistInstance.update();\n }\n }\n };\n \n\n /*======================================================\n ************ Pull To Refresh ************\n ======================================================*/\n app.initPullToRefresh = function (pageContainer) {\n var eventsTarget = $(pageContainer);\n if (!eventsTarget.hasClass('pull-to-refresh-content')) {\n eventsTarget = eventsTarget.find('.pull-to-refresh-content');\n }\n if (!eventsTarget || eventsTarget.length === 0) return;\n \n var touchId, isTouched, isMoved, touchesStart = {}, isScrolling, touchesDiff, touchStartTime, container, refresh = false, useTranslate = false, startTranslate = 0, translate, scrollTop, wasScrolled, layer, triggerDistance, dynamicTriggerDistance, pullStarted;\n var page = eventsTarget.hasClass('page') ? eventsTarget : eventsTarget.parents('.page');\n var hasNavbar = false;\n if (page.find('.navbar').length > 0 || page.parents('.navbar-fixed, .navbar-through').length > 0 || page.hasClass('navbar-fixed') || page.hasClass('navbar-through')) hasNavbar = true;\n if (page.hasClass('no-navbar')) hasNavbar = false;\n if (!hasNavbar) eventsTarget.addClass('pull-to-refresh-no-navbar');\n \n container = eventsTarget;\n \n // Define trigger distance\n if (container.attr('data-ptr-distance')) {\n dynamicTriggerDistance = true;\n }\n else {\n triggerDistance = 44;\n }\n \n function handleTouchStart(e) {\n if (isTouched) {\n if (app.device.os === 'android') {\n if ('targetTouches' in e && e.targetTouches.length > 1) return;\n }\n else {\n if(isMoved && isTouched && isScrolling){\n return;\n }\n }\n }\n \n /*jshint validthis:true */\n container = $(this);\n if (container.hasClass('refreshing')) {\n return;\n }\n \n isMoved = false;\n pullStarted = false;\n isTouched = true;\n isScrolling = undefined;\n wasScrolled = undefined;\n if (e.type === 'touchstart') touchId = e.targetTouches[0].identifier;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = (new Date()).getTime();\n \n }\n \n function handleTouchMove(e) {\n if (!isTouched) return;\n var pageX, pageY, touch;\n if (e.type === 'touchmove') {\n if (touchId && e.touches) {\n for (var i = 0; i < e.touches.length; i++) {\n if (e.touches[i].identifier === touchId) {\n touch = e.touches[i];\n }\n }\n }\n if (!touch) touch = e.targetTouches[0];\n pageX = touch.pageX;\n pageY = touch.pageY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n }\n if (!pageX || !pageY) return;\n \n \n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (!isScrolling) {\n isTouched = false;\n return;\n }\n \n scrollTop = container[0].scrollTop;\n if (typeof wasScrolled === 'undefined' && scrollTop !== 0) wasScrolled = true;\n \n if (!isMoved) {\n /*jshint validthis:true */\n container.removeClass('transitioning');\n if (scrollTop > container[0].offsetHeight) {\n isTouched = false;\n return;\n }\n if (dynamicTriggerDistance) {\n triggerDistance = container.attr('data-ptr-distance');\n if (triggerDistance.indexOf('%') >= 0) triggerDistance = container[0].offsetHeight * parseInt(triggerDistance, 10) / 100;\n }\n startTranslate = container.hasClass('refreshing') ? triggerDistance : 0;\n if (container[0].scrollHeight === container[0].offsetHeight || app.device.os !== 'ios') {\n useTranslate = true;\n }\n else {\n useTranslate = false;\n }\n }\n isMoved = true;\n touchesDiff = pageY - touchesStart.y;\n \n if (touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0) {\n // iOS 8 fix\n if (app.device.os === 'ios' && parseInt(app.device.osVersion.split('.')[0], 10) > 7 && scrollTop === 0 && !wasScrolled) useTranslate = true;\n \n if (useTranslate) {\n e.preventDefault();\n translate = (Math.pow(touchesDiff, 0.85) + startTranslate);\n container.transform('translate3d(0,' + translate + 'px,0)');\n }\n if ((useTranslate && Math.pow(touchesDiff, 0.85) > triggerDistance) || (!useTranslate && touchesDiff >= triggerDistance * 2)) {\n refresh = true;\n container.addClass('pull-up').removeClass('pull-down');\n }\n else {\n refresh = false;\n container.removeClass('pull-up').addClass('pull-down');\n }\n if (!pullStarted) {\n container.trigger('pullstart ptr:pullstart');\n pullStarted = true;\n }\n container.trigger('pullmove ptr:pullmove', {\n event: e,\n scrollTop: scrollTop,\n translate: translate,\n touchesDiff: touchesDiff\n });\n }\n else {\n pullStarted = false;\n container.removeClass('pull-up pull-down');\n refresh = false;\n return;\n }\n }\n function handleTouchEnd(e) {\n if (e.type === 'touchend' && e.changedTouches && e.changedTouches.length > 0 && touchId) {\n if (e.changedTouches[0].identifier !== touchId) {\n isTouched = false;\n isScrolling = false;\n isMoved = false;\n touchId = null;\n return;\n };\n }\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n if (translate) {\n container.addClass('transitioning');\n translate = 0;\n }\n container.transform('');\n if (refresh) {\n container.addClass('refreshing');\n container.trigger('refresh ptr:refresh', {\n done: function () {\n app.pullToRefreshDone(container);\n }\n });\n }\n else {\n container.removeClass('pull-down');\n }\n isTouched = false;\n isMoved = false;\n if (pullStarted) container.trigger('pullend ptr:pullend');\n }\n \n // Attach Events\n var passiveListener = app.touchEvents.start === 'touchstart' && app.support.passiveListener ? {passive: true, capture: false} : false;\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n eventsTarget.on(app.touchEvents.start, handleTouchStart, passiveListener);\n eventsTarget.on(app.touchEvents.move, handleTouchMove, activeListener);\n eventsTarget.on(app.touchEvents.end, handleTouchEnd, passiveListener);\n \n // Detach Events on page remove\n if (page.length === 0) return;\n function destroyPullToRefresh(destroyTarget) {\n destroyTarget.off(app.touchEvents.start, handleTouchStart, passiveListener);\n destroyTarget.off(app.touchEvents.move, handleTouchMove, activeListener);\n destroyTarget.off(app.touchEvents.end, handleTouchEnd, passiveListener);\n }\n for (var i = 0; i < eventsTarget.length; i++) {\n eventsTarget[i].f7DestroyPullToRefresh = destroyPullToRefresh;\n }\n function detachEvents() {\n destroyPullToRefresh(eventsTarget);\n page.off('page:beforeremove', detachEvents);\n }\n page.on('page:beforeremove', detachEvents);\n \n };\n \n app.pullToRefreshDone = function (container) {\n container = $(container);\n if (container.length === 0) container = $('.pull-to-refresh-content.refreshing');\n container.removeClass('refreshing').addClass('transitioning');\n container.transitionEnd(function () {\n container.removeClass('transitioning pull-up pull-down');\n container.trigger('refreshdone ptr:done');\n });\n };\n app.pullToRefreshTrigger = function (container) {\n container = $(container);\n if (container.length === 0) container = $('.pull-to-refresh-content');\n if (container.hasClass('refreshing')) return;\n container.addClass('transitioning refreshing');\n container.trigger('refresh ptr:refresh', {\n done: function () {\n app.pullToRefreshDone(container);\n }\n });\n };\n \n app.destroyPullToRefresh = function (pageContainer) {\n pageContainer = $(pageContainer);\n var pullToRefreshContent = pageContainer.hasClass('pull-to-refresh-content') ? pageContainer : pageContainer.find('.pull-to-refresh-content');\n if (pullToRefreshContent.length === 0) return;\n if (pullToRefreshContent[0].f7DestroyPullToRefresh) pullToRefreshContent[0].f7DestroyPullToRefresh(pageContainer);\n };\n \n\n /* ===============================================================================\n ************ Infinite Scroll ************\n =============================================================================== */\n function handleInfiniteScroll() {\n /*jshint validthis:true */\n var inf = $(this);\n var scrollTop = inf[0].scrollTop;\n var scrollHeight = inf[0].scrollHeight;\n var height = inf[0].offsetHeight;\n var distance = inf[0].getAttribute('data-distance');\n var virtualListContainer = inf.find('.virtual-list');\n var virtualList;\n var onTop = inf.hasClass('infinite-scroll-top');\n if (!distance) distance = 50;\n if (typeof distance === 'string' && distance.indexOf('%') >= 0) {\n distance = parseInt(distance, 10) / 100 * height;\n }\n if (distance > height) distance = height;\n if (onTop) {\n if (scrollTop < distance) {\n inf.trigger('infinite');\n }\n }\n else {\n if (scrollTop + height >= scrollHeight - distance) {\n if (virtualListContainer.length > 0) {\n virtualList = virtualListContainer.eq(-1)[0].f7VirtualList;\n if (virtualList && !virtualList.reachEnd && !virtualList.params.updatableScroll) {\n return;\n }\n }\n inf.trigger('infinite');\n }\n }\n \n }\n app.attachInfiniteScroll = function (infiniteContent) {\n $(infiniteContent).on('scroll', handleInfiniteScroll);\n };\n app.detachInfiniteScroll = function (infiniteContent) {\n $(infiniteContent).off('scroll', handleInfiniteScroll);\n };\n \n app.initPageInfiniteScroll = function (pageContainer) {\n pageContainer = $(pageContainer);\n var infiniteContent = pageContainer.find('.infinite-scroll');\n if (infiniteContent.length === 0) return;\n app.attachInfiniteScroll(infiniteContent);\n function detachEvents() {\n app.detachInfiniteScroll(infiniteContent);\n pageContainer.off('page:beforeremove', detachEvents);\n }\n pageContainer.on('page:beforeremove', detachEvents);\n };\n\n /*=============================================================\n ************ Hide/show Toolbar/Navbar on scroll ************\n =============================================================*/\n app.initPageScrollToolbars = function (pageContainer) {\n pageContainer = $(pageContainer);\n var scrollContent = pageContainer.find('.page-content');\n if (scrollContent.length === 0) return;\n var hideNavbar = (app.params.hideNavbarOnPageScroll || scrollContent.hasClass('hide-navbar-on-scroll') || scrollContent.hasClass('hide-bars-on-scroll')) && !(scrollContent.hasClass('keep-navbar-on-scroll') || scrollContent.hasClass('keep-bars-on-scroll'));\n var hideToolbar = (app.params.hideToolbarOnPageScroll || scrollContent.hasClass('hide-toolbar-on-scroll') || scrollContent.hasClass('hide-bars-on-scroll')) && !(scrollContent.hasClass('keep-toolbar-on-scroll') || scrollContent.hasClass('keep-bars-on-scroll'));\n var hideTabbar = (app.params.hideTabbarOnPageScroll || scrollContent.hasClass('hide-tabbar-on-scroll')) && !(scrollContent.hasClass('keep-tabbar-on-scroll'));\n \n if (!(hideNavbar || hideToolbar || hideTabbar)) return;\n \n var viewContainer = scrollContent.parents('.' + app.params.viewClass);\n if (viewContainer.length === 0) return;\n \n var navbar = viewContainer.find('.navbar'),\n toolbar = viewContainer.find('.toolbar'),\n tabbar;\n if (hideTabbar) {\n tabbar = viewContainer.find('.tabbar');\n if (tabbar.length === 0) tabbar = viewContainer.parents('.' + app.params.viewsClass).find('.tabbar');\n }\n \n var hasNavbar = navbar.length > 0,\n hasToolbar = toolbar.length > 0,\n hasTabbar = tabbar && tabbar.length > 0;\n \n var previousScroll, currentScroll;\n previousScroll = currentScroll = scrollContent[0].scrollTop;\n \n var scrollHeight, offsetHeight, reachEnd, action, navbarHidden, toolbarHidden, tabbarHidden;\n \n var toolbarHeight = (hasToolbar && hideToolbar) ? toolbar[0].offsetHeight : 0;\n var tabbarHeight = (hasTabbar && hideTabbar) ? tabbar[0].offsetHeight : 0;\n var bottomBarHeight = tabbarHeight || toolbarHeight;\n \n function handleScroll(e) {\n if (pageContainer.hasClass('page-on-left')) return;\n currentScroll = scrollContent[0].scrollTop;\n scrollHeight = scrollContent[0].scrollHeight;\n offsetHeight = scrollContent[0].offsetHeight;\n reachEnd = currentScroll + offsetHeight >= scrollHeight - bottomBarHeight;\n navbarHidden = navbar.hasClass('navbar-hidden');\n toolbarHidden = toolbar.hasClass('toolbar-hidden');\n tabbarHidden = tabbar && tabbar.hasClass('toolbar-hidden');\n \n if (reachEnd) {\n if (app.params.showBarsOnPageScrollEnd) {\n action = 'show';\n }\n }\n else if (previousScroll > currentScroll) {\n if (app.params.showBarsOnPageScrollTop || currentScroll <= 44) {\n action = 'show';\n }\n else {\n action = 'hide';\n }\n }\n else {\n if (currentScroll > 44) {\n action = 'hide';\n }\n else {\n action = 'show';\n }\n }\n \n if (action === 'show') {\n if (hasNavbar && hideNavbar && navbarHidden) {\n app.showNavbar(navbar);\n pageContainer.removeClass('no-navbar-by-scroll');\n navbarHidden = false;\n }\n if (hasToolbar && hideToolbar && toolbarHidden) {\n app.showToolbar(toolbar);\n pageContainer.removeClass('no-toolbar-by-scroll');\n toolbarHidden = false;\n }\n if (hasTabbar && hideTabbar && tabbarHidden) {\n app.showToolbar(tabbar);\n pageContainer.removeClass('no-tabbar-by-scroll');\n tabbarHidden = false;\n }\n }\n else {\n if (hasNavbar && hideNavbar && !navbarHidden) {\n app.hideNavbar(navbar);\n pageContainer.addClass('no-navbar-by-scroll');\n navbarHidden = true;\n }\n if (hasToolbar && hideToolbar && !toolbarHidden) {\n app.hideToolbar(toolbar);\n pageContainer.addClass('no-toolbar-by-scroll');\n toolbarHidden = true;\n }\n if (hasTabbar && hideTabbar && !tabbarHidden) {\n app.hideToolbar(tabbar);\n pageContainer.addClass('no-tabbar-by-scroll');\n tabbarHidden = true;\n }\n }\n \n previousScroll = currentScroll;\n }\n scrollContent.on('scroll', handleScroll);\n scrollContent[0].f7ScrollToolbarsHandler = handleScroll;\n };\n app.destroyScrollToolbars = function (pageContainer) {\n pageContainer = $(pageContainer);\n var scrollContent = pageContainer.find('.page-content');\n if (scrollContent.length === 0) return;\n var handler = scrollContent[0].f7ScrollToolbarsHandler;\n if (!handler) return;\n scrollContent.off('scroll', scrollContent[0].f7ScrollToolbarsHandler);\n };\n \n\n /*======================================================\n ************ Material Tabbar ************\n ======================================================*/\n app.materialTabbarSetHighlight = function (tabbar, activeLink) {\n $(tabbar).each(function () {\n var tabbar = $(this);\n activeLink = activeLink || tabbar.find('.tab-link.active');\n \n if (activeLink && activeLink.length > 0) {\n var tabLinkWidth, highlightTranslate;\n if (tabbar.hasClass('tabbar-scrollable')) {\n tabLinkWidth = activeLink[0].offsetWidth + 'px';\n highlightTranslate = activeLink[0].offsetLeft + 'px';\n }\n else {\n tabLinkWidth = 1 / tabbar.find('.tab-link').length * 100 + '%';\n highlightTranslate = (app.rtl ? - activeLink.index(): activeLink.index()) * 100 + '%';\n }\n \n tabbar.find('.tab-link-highlight')\n .css({width: tabLinkWidth})\n .transform('translate3d(' + highlightTranslate + ',0,0)');\n }\n });\n };\n app.initPageMaterialTabbar = function (pageContainer) {\n pageContainer = $(pageContainer);\n var tabbar = pageContainer.find('.tabbar');\n if (tabbar.length === 0 && pageContainer.hasClass('tabbar')) tabbar = pageContainer;\n \n function tabbarSetHighlight() {\n app.materialTabbarSetHighlight(tabbar);\n }\n if (tabbar.length > 0) {\n if (tabbar.find('.tab-link-highlight').length === 0) {\n tabbar.find('.toolbar-inner').append('');\n }\n \n tabbarSetHighlight();\n app.onResize(tabbarSetHighlight);\n pageContainer.once('page:beforeremove', function () {\n app.offResize(tabbarSetHighlight);\n });\n }\n };\n app.initMaterialTabbar = function (tabbar) {\n return app.initPageMaterialTabbar(tabbar);\n };\n \n\n /* ===============================================================================\n ************ Tabs ************\n =============================================================================== */\n app.showTab = function (tab, tabLink, animated, force) {\n var newTab = $(tab);\n if (arguments.length === 2 && typeof arguments[1] === 'boolean') {\n tab = arguments[0];\n animated = arguments[1];\n }\n if (arguments.length === 3 && typeof arguments[1] === 'boolean' && typeof arguments[2] === 'boolean') {\n tab = arguments[0];\n animated = arguments[1];\n force = arguments[2];\n }\n if (typeof animated === 'undefined') animated = true;\n if (newTab.length === 0) return false;\n if (newTab.hasClass('active')) {\n if (force) newTab.trigger('show tab:show');\n return false;\n }\n var tabs = newTab.parent('.tabs');\n if (tabs.length === 0) return false;\n \n // Return swipeouts in hidden tabs\n app.allowSwipeout = true;\n \n // Animated tabs\n var isAnimatedTabs = tabs.parent().hasClass('tabs-animated-wrap');\n if (isAnimatedTabs) {\n tabs.parent()[animated ? 'removeClass' : 'addClass']('not-animated');\n var tabTranslate = (app.rtl ? newTab.index() : -newTab.index()) * 100;\n tabs.transform('translate3d(' + tabTranslate + '%,0,0)');\n }\n \n // Swipeable tabs\n var isSwipeableTabs = tabs.parent().hasClass('tabs-swipeable-wrap'), swiper;\n if (isSwipeableTabs) {\n swiper = tabs.parent()[0].swiper;\n if (swiper.activeIndex !== newTab.index()) swiper.slideTo(newTab.index(), animated ? undefined : 0, false);\n }\n \n // Remove active class from old tabs\n var oldTab = tabs.children('.tab.active').removeClass('active').trigger('hide tab:hide');\n // Add active class to new tab\n newTab.addClass('active');\n // Trigger 'show' event on new tab\n newTab.trigger('show tab:show');\n \n // Update navbars in new tab\n if (!isAnimatedTabs && !isSwipeableTabs && newTab.find('.navbar').length > 0) {\n // Find tab's view\n var viewContainer;\n if (newTab.hasClass(app.params.viewClass)) viewContainer = newTab[0];\n else viewContainer = newTab.parents('.' + app.params.viewClass)[0];\n app.sizeNavbars(viewContainer);\n }\n \n // Find related link for new tab\n if (tabLink) tabLink = $(tabLink);\n else {\n // Search by id\n if (typeof tab === 'string') tabLink = $('.tab-link[href=\"' + tab + '\"]');\n else tabLink = $('.tab-link[href=\"#' + newTab.attr('id') + '\"]');\n // Search by data-tab\n if (!tabLink || tabLink && tabLink.length === 0) {\n $('[data-tab]').each(function () {\n if (newTab.is($(this).attr('data-tab'))) tabLink = $(this);\n });\n }\n }\n if (tabLink.length === 0) return;\n \n // Find related link for old tab\n var oldTabLink;\n if (oldTab && oldTab.length > 0) {\n // Search by id\n var oldTabId = oldTab.attr('id');\n if (oldTabId) oldTabLink = $('.tab-link[href=\"#' + oldTabId + '\"]');\n // Search by data-tab\n if (!oldTabLink || oldTabLink && oldTabLink.length === 0) {\n $('[data-tab]').each(function () {\n if (oldTab.is($(this).attr('data-tab'))) oldTabLink = $(this);\n });\n }\n }\n \n // Update links' classes\n if (tabLink && tabLink.length > 0) {\n tabLink.addClass('active');\n // Material Highlight\n if (app.params.material) {\n var tabbar = tabLink.parents('.tabbar');\n if (tabbar.length > 0) {\n if (tabbar.find('.tab-link-highlight').length === 0) {\n tabbar.find('.toolbar-inner').append('');\n }\n app.materialTabbarSetHighlight(tabbar, tabLink);\n }\n }\n }\n if (oldTabLink && oldTabLink.length > 0) oldTabLink.removeClass('active');\n \n return true;\n };\n\n /*===============================================================================\n ************ Accordion ************\n ===============================================================================*/\n app.accordionToggle = function (item) {\n item = $(item);\n if (item.length === 0) return;\n if (item.hasClass('accordion-item-expanded')) app.accordionClose(item);\n else app.accordionOpen(item);\n };\n app.accordionOpen = function (item) {\n item = $(item);\n var list = item.parents('.accordion-list').eq(0);\n var content = item.children('.accordion-item-content');\n if (content.length === 0) content = item.find('.accordion-item-content');\n var expandedItem = list.length > 0 && item.parent().children('.accordion-item-expanded');\n if (expandedItem.length > 0) {\n app.accordionClose(expandedItem);\n }\n content.css('height', content[0].scrollHeight + 'px').transitionEnd(function () {\n if (item.hasClass('accordion-item-expanded')) {\n content.transition(0);\n content.css('height', 'auto');\n var clientLeft = content[0].clientLeft;\n content.transition('');\n item.trigger('opened accordion:opened');\n }\n else {\n content.css('height', '');\n item.trigger('closed accordion:closed');\n }\n });\n item.trigger('open accordion:open');\n item.addClass('accordion-item-expanded');\n };\n app.accordionClose = function (item) {\n item = $(item);\n var content = item.children('.accordion-item-content');\n if (content.length === 0) content = item.find('.accordion-item-content');\n item.removeClass('accordion-item-expanded');\n content.transition(0);\n content.css('height', content[0].scrollHeight + 'px');\n // Relayout\n var clientLeft = content[0].clientLeft;\n // Close\n content.transition('');\n content.css('height', '').transitionEnd(function () {\n if (item.hasClass('accordion-item-expanded')) {\n content.transition(0);\n content.css('height', 'auto');\n var clientLeft = content[0].clientLeft;\n content.transition('');\n item.trigger('opened accordion:opened');\n }\n else {\n content.css('height', '');\n item.trigger('closed accordion:closed');\n }\n });\n item.trigger('close accordion:close');\n };\n\n /*===============================================================================\n ************ Fast Clicks ************\n ************ Inspired by https://github.com/ftlabs/fastclick ************\n ===============================================================================*/\n app.initFastClicks = function () {\n if (app.params.activeState) {\n $('html').addClass('watch-active-state');\n }\n if (app.device.ios && app.device.webView) {\n // Strange hack required for iOS 8 webview to work on inputs\n window.addEventListener('touchstart', function () {});\n }\n \n var touchStartX, touchStartY, touchStartTime, targetElement, trackClick, activeSelection, scrollParent, lastClickTime, isMoved, tapHoldFired, tapHoldTimeout;\n var activableElement, activeTimeout, needsFastClick, needsFastClickTimeOut;\n var rippleWave, rippleTarget, rippleTransform, rippleTimeout;\n function findActivableElement(el) {\n var target = $(el);\n var parents = target.parents(app.params.activeStateElements);\n var activable;\n if (target.is(app.params.activeStateElements)) {\n activable = target;\n }\n if (parents.length > 0) {\n activable = activable ? activable.add(parents) : parents;\n }\n return activable ? activable : target;\n }\n function isInsideScrollableView(el) {\n var pageContent = el.parents('.page-content, .panel');\n \n if (pageContent.length === 0) {\n return false;\n }\n \n // This event handler covers the \"tap to stop scrolling\".\n if (pageContent.prop('scrollHandlerSet') !== 'yes') {\n pageContent.on('scroll', function() {\n clearTimeout(activeTimeout);\n clearTimeout(rippleTimeout);\n });\n pageContent.prop('scrollHandlerSet', 'yes');\n }\n \n return true;\n }\n function addActive() {\n if (!activableElement) return;\n activableElement.addClass('active-state');\n }\n function removeActive(el) {\n if (!activableElement) return;\n activableElement.removeClass('active-state');\n activableElement = null;\n }\n function isFormElement(el) {\n var nodes = ('input select textarea label').split(' ');\n if (el.nodeName && nodes.indexOf(el.nodeName.toLowerCase()) >= 0) return true;\n return false;\n }\n function androidNeedsBlur(el) {\n var noBlur = ('button input textarea select').split(' ');\n if (document.activeElement && el !== document.activeElement && document.activeElement !== document.body) {\n if (noBlur.indexOf(el.nodeName.toLowerCase()) >= 0) {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return false;\n }\n }\n function targetNeedsFastClick(el) {\n var $el = $(el);\n if (el.nodeName.toLowerCase() === 'input' && (el.type === 'file' || el.type === 'range')) return false;\n if (el.nodeName.toLowerCase() === 'select' && app.device.android) return false;\n if ($el.hasClass('no-fastclick') || $el.parents('.no-fastclick').length > 0) return false;\n if (app.params.fastClicksExclude && $el.is(app.params.fastClicksExclude)) return false;\n return true;\n }\n function targetNeedsFocus(el) {\n if (document.activeElement === el) {\n return false;\n }\n var tag = el.nodeName.toLowerCase();\n var skipInputs = ('button checkbox file image radio submit').split(' ');\n if (el.disabled || el.readOnly) return false;\n if (tag === 'textarea') return true;\n if (tag === 'select') {\n if (app.device.android) return false;\n else return true;\n }\n if (tag === 'input' && skipInputs.indexOf(el.type) < 0) return true;\n }\n function targetNeedsPrevent(el) {\n el = $(el);\n var prevent = true;\n if (el.is('label') || el.parents('label').length > 0) {\n if (app.device.android) {\n prevent = false;\n }\n else if (app.device.ios && el.is('input')) {\n prevent = true;\n }\n else prevent = false;\n }\n return prevent;\n }\n \n // Mouse Handlers\n function handleMouseDown (e) {\n findActivableElement(e.target).addClass('active-state');\n if ('which' in e && e.which === 3) {\n setTimeout(function () {\n $('.active-state').removeClass('active-state');\n }, 0);\n }\n if (app.params.material && app.params.materialRipple) {\n touchStartX = e.pageX;\n touchStartY = e.pageY;\n rippleTouchStart(e.target, e.pageX, e.pageY);\n }\n }\n function handleMouseMove (e) {\n $('.active-state').removeClass('active-state');\n if (app.params.material && app.params.materialRipple) {\n rippleTouchMove();\n }\n }\n function handleMouseUp (e) {\n $('.active-state').removeClass('active-state');\n if (app.params.material && app.params.materialRipple) {\n rippleTouchEnd();\n }\n }\n \n // Material Touch Ripple Effect\n function findRippleElement(el) {\n var needsRipple = app.params.materialRippleElements;\n var $el = $(el);\n if ($el.is(needsRipple)) {\n if ($el.hasClass('no-ripple')) {\n return false;\n }\n return $el;\n }\n else if ($el.parents(needsRipple).length > 0) {\n var rippleParent = $el.parents(needsRipple).eq(0);\n if (rippleParent.hasClass('no-ripple')) {\n return false;\n }\n return rippleParent;\n }\n else return false;\n }\n function createRipple(x, y, el) {\n if (!el) return;\n var box = el[0].getBoundingClientRect();\n var center = {\n x: x - box.left,\n y: y - box.top\n },\n height = box.height,\n width = box.width;\n var diameter = Math.max(Math.pow((Math.pow(height, 2) + Math.pow(width, 2)), 0.5), 48);\n \n rippleWave = $(\n '
        '\n );\n el.prepend(rippleWave);\n var clientLeft = rippleWave[0].clientLeft;\n rippleTransform = 'translate3d('+(-center.x + width/2)+'px, '+(-center.y + height/2)+'px, 0) scale(1)';\n rippleWave.transform(rippleTransform);\n }\n \n function removeRipple() {\n if (!rippleWave) return;\n var toRemove = rippleWave;\n \n var removeTimeout = setTimeout(function () {\n toRemove.remove();\n }, 400);\n \n rippleWave\n .addClass('ripple-wave-fill')\n .transform(rippleTransform.replace('scale(1)', 'scale(1.01)'))\n .transitionEnd(function () {\n clearTimeout(removeTimeout);\n \n var rippleWave = $(this)\n .addClass('ripple-wave-out')\n .transform(rippleTransform.replace('scale(1)', 'scale(1.01)'));\n \n removeTimeout = setTimeout(function () {\n rippleWave.remove();\n }, 700);\n \n setTimeout(function () {\n rippleWave.transitionEnd(function(){\n clearTimeout(removeTimeout);\n $(this).remove();\n });\n }, 0);\n });\n \n rippleWave = rippleTarget = undefined;\n }\n \n function rippleTouchStart (el, x, y) {\n rippleTarget = findRippleElement(el);\n if (!rippleTarget || rippleTarget.length === 0) {\n rippleTarget = undefined;\n return;\n }\n if (!isInsideScrollableView(rippleTarget)) {\n createRipple(touchStartX, touchStartY, rippleTarget);\n }\n else {\n rippleTimeout = setTimeout(function () {\n createRipple(touchStartX, touchStartY, rippleTarget);\n }, 80);\n }\n }\n function rippleTouchMove() {\n clearTimeout(rippleTimeout);\n removeRipple();\n }\n function rippleTouchEnd() {\n if (rippleWave) {\n removeRipple();\n }\n else if (rippleTarget && !isMoved) {\n clearTimeout(rippleTimeout);\n createRipple(touchStartX, touchStartY, rippleTarget);\n setTimeout(removeRipple, 0);\n }\n else {\n removeRipple();\n }\n }\n \n // Send Click\n function sendClick(e) {\n var touch = e.changedTouches[0];\n var evt = document.createEvent('MouseEvents');\n var eventType = 'click';\n if (app.device.android && targetElement.nodeName.toLowerCase() === 'select') {\n eventType = 'mousedown';\n }\n evt.initMouseEvent(eventType, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n evt.forwardedTouchEvent = true;\n \n if (app.device.ios && navigator.standalone) {\n //Fix the issue happens in iOS home screen apps where the wrong element is selected during a momentum scroll.\n //Upon tapping, we give the scrolling time to stop, then we grab the element based where the user tapped.\n setTimeout(function () {\n targetElement = document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n targetElement.dispatchEvent(evt);\n }, 10);\n } else {\n targetElement.dispatchEvent(evt);\n }\n }\n \n // Touch Handlers\n function handleTouchStart(e) {\n isMoved = false;\n tapHoldFired = false;\n if (e.targetTouches.length > 1) {\n if (activableElement) removeActive();\n return true;\n }\n if (e.touches.length > 1 && activableElement) {\n removeActive();\n }\n if (app.params.tapHold) {\n if (tapHoldTimeout) clearTimeout(tapHoldTimeout);\n tapHoldTimeout = setTimeout(function () {\n if (e && e.touches && e.touches.length > 1) return;\n tapHoldFired = true;\n e.preventDefault();\n $(e.target).trigger('taphold');\n }, app.params.tapHoldDelay);\n }\n if (needsFastClickTimeOut) clearTimeout(needsFastClickTimeOut);\n needsFastClick = targetNeedsFastClick(e.target);\n \n if (!needsFastClick) {\n trackClick = false;\n return true;\n }\n if (app.device.ios || (app.device.android && 'getSelection' in window)) {\n var selection = window.getSelection();\n if (selection.rangeCount && selection.focusNode !== document.body && (!selection.isCollapsed || document.activeElement === selection.focusNode)) {\n activeSelection = true;\n return true;\n }\n else {\n activeSelection = false;\n }\n }\n if (app.device.android) {\n if (androidNeedsBlur(e.target)) {\n document.activeElement.blur();\n }\n }\n \n trackClick = true;\n targetElement = e.target;\n touchStartTime = (new Date()).getTime();\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n \n // Detect scroll parent\n if (app.device.ios) {\n scrollParent = undefined;\n $(targetElement).parents().each(function () {\n var parent = this;\n if (parent.scrollHeight > parent.offsetHeight && !scrollParent) {\n scrollParent = parent;\n scrollParent.f7ScrollTop = scrollParent.scrollTop;\n }\n });\n }\n if ((e.timeStamp - lastClickTime) < app.params.fastClicksDelayBetweenClicks) {\n e.preventDefault();\n }\n \n if (app.params.activeState) {\n activableElement = findActivableElement(targetElement);\n // If it's inside a scrollable view, we don't trigger active-state yet,\n // because it can be a scroll instead. Based on the link:\n // http://labnote.beedesk.com/click-scroll-and-pseudo-active-on-mobile-webk\n if (!isInsideScrollableView(activableElement)) {\n addActive();\n } else {\n activeTimeout = setTimeout(addActive, 80);\n }\n }\n if (app.params.material && app.params.materialRipple) {\n rippleTouchStart(targetElement, touchStartX, touchStartY);\n }\n }\n function handleTouchMove(e) {\n if (!trackClick) return;\n var _isMoved = false;\n var distance = app.params.fastClicksDistanceThreshold;\n if (distance) {\n var pageX = e.targetTouches[0].pageX;\n var pageY = e.targetTouches[0].pageY;\n if (Math.abs(pageX - touchStartX) > distance || Math.abs(pageY - touchStartY) > distance) {\n _isMoved = true;\n }\n }\n else {\n _isMoved = true;\n }\n if (_isMoved) {\n trackClick = false;\n targetElement = null;\n isMoved = true;\n if (app.params.tapHold) {\n clearTimeout(tapHoldTimeout);\n }\n \t\t\tif (app.params.activeState) {\n \t\t\t\tclearTimeout(activeTimeout);\n \t\t\t\tremoveActive();\n \t\t\t}\n if (app.params.material && app.params.materialRipple) {\n rippleTouchMove();\n }\n }\n }\n function handleTouchEnd(e) {\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n \n if (!trackClick) {\n if (!activeSelection && needsFastClick) {\n if (!(app.device.android && !e.cancelable)) {\n e.preventDefault();\n }\n }\n return true;\n }\n \n if (document.activeElement === e.target) {\n if (app.params.activeState) removeActive();\n if (app.params.material && app.params.materialRipple) {\n rippleTouchEnd();\n }\n return true;\n }\n \n if (!activeSelection) {\n e.preventDefault();\n }\n \n if ((e.timeStamp - lastClickTime) < app.params.fastClicksDelayBetweenClicks) {\n setTimeout(removeActive, 0);\n return true;\n }\n \n lastClickTime = e.timeStamp;\n \n trackClick = false;\n \n if (app.device.ios && scrollParent) {\n if (scrollParent.scrollTop !== scrollParent.f7ScrollTop) {\n return false;\n }\n }\n \n // Add active-state here because, in a very fast tap, the timeout didn't\n // have the chance to execute. Removing active-state in a timeout gives\n // the chance to the animation execute.\n if (app.params.activeState) {\n addActive();\n setTimeout(removeActive, 0);\n }\n // Remove Ripple\n if (app.params.material && app.params.materialRipple) {\n rippleTouchEnd();\n }\n \n // Trigger focus when required\n if (targetNeedsFocus(targetElement)) {\n if (app.device.ios && app.device.webView) {\n if ((event.timeStamp - touchStartTime) > 159) {\n targetElement = null;\n return false;\n }\n targetElement.focus();\n return false;\n }\n else {\n targetElement.focus();\n }\n }\n \n // Blur active elements\n if (document.activeElement && targetElement !== document.activeElement && document.activeElement !== document.body && targetElement.nodeName.toLowerCase() !== 'label') {\n document.activeElement.blur();\n }\n \n // Send click\n e.preventDefault();\n sendClick(e);\n return false;\n }\n function handleTouchCancel(e) {\n trackClick = false;\n targetElement = null;\n \n // Remove Active State\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (app.params.activeState) {\n removeActive();\n }\n \n // Remove Ripple\n if (app.params.material && app.params.materialRipple) {\n rippleTouchEnd();\n }\n }\n \n function handleClick(e) {\n var allowClick = false;\n \n if (trackClick) {\n targetElement = null;\n trackClick = false;\n return true;\n }\n if (e.target.type === 'submit' && e.detail === 0 || e.target.type === 'file') {\n return true;\n }\n if (!targetElement) {\n if (!isFormElement(e.target)) {\n allowClick = true;\n }\n }\n if (!needsFastClick) {\n allowClick = true;\n }\n if (document.activeElement === targetElement) {\n allowClick = true;\n }\n if (e.forwardedTouchEvent) {\n allowClick = true;\n }\n if (!e.cancelable) {\n allowClick = true;\n }\n if (app.params.tapHold && app.params.tapHoldPreventClicks && tapHoldFired) {\n allowClick = false;\n }\n if (!allowClick) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n if (targetElement) {\n if (targetNeedsPrevent(targetElement) || isMoved) {\n e.preventDefault();\n }\n }\n else {\n e.preventDefault();\n }\n targetElement = null;\n }\n needsFastClickTimeOut = setTimeout(function () {\n needsFastClick = false;\n }, (app.device.ios || app.device.androidChrome ? 100 : 400));\n \n if (app.params.tapHold) {\n tapHoldTimeout = setTimeout(function () {\n tapHoldFired = false;\n }, (app.device.ios || app.device.androidChrome ? 100 : 400));\n }\n \n return allowClick;\n }\n if (app.support.touch) {\n document.addEventListener('click', handleClick, true);\n \n document.addEventListener('touchstart', handleTouchStart);\n document.addEventListener('touchmove', handleTouchMove);\n document.addEventListener('touchend', handleTouchEnd);\n document.addEventListener('touchcancel', handleTouchCancel);\n }\n else {\n if (app.params.activeState) {\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }\n }\n if (app.params.material && app.params.materialRipple) {\n document.addEventListener('contextmenu', function (e) {\n if (activableElement) removeActive();\n rippleTouchEnd();\n });\n }\n \n };\n\n /*===============================================================================\n ************ Handle clicks and make them fast (on tap); ************\n ===============================================================================*/\n app.initClickEvents = function () {\n function handleScrollTop(e) {\n /*jshint validthis:true */\n var clicked = $(this);\n var target = $(e.target);\n var isLink = clicked[0].nodeName.toLowerCase() === 'a' ||\n clicked.parents('a').length > 0 ||\n target[0].nodeName.toLowerCase() === 'a' ||\n target.parents('a').length > 0;\n \n if (isLink) return;\n var pageContent, page;\n if (app.params.scrollTopOnNavbarClick && clicked.is('.navbar .center')) {\n // Find active page\n var navbar = clicked.parents('.navbar');\n \n // Static Layout\n pageContent = navbar.parents('.page-content');\n \n if (pageContent.length === 0) {\n // Fixed Layout\n if (navbar.parents('.page').length > 0) {\n pageContent = navbar.parents('.page').find('.page-content');\n }\n // Through Layout\n if (pageContent.length === 0) {\n if (navbar.nextAll('.pages').length > 0) {\n pageContent = navbar.nextAll('.pages').find('.page:not(.page-on-left):not(.page-on-right):not(.cached)').find('.page-content');\n }\n }\n }\n }\n if (app.params.scrollTopOnStatusbarClick && clicked.is('.statusbar-overlay')) {\n if ($('.popup.modal-in').length > 0) {\n // Check for opened popup\n pageContent = $('.popup.modal-in').find('.page:not(.page-on-left):not(.page-on-right):not(.cached)').find('.page-content');\n }\n else if ($('.panel.active').length > 0) {\n // Check for opened panel\n pageContent = $('.panel.active').find('.page:not(.page-on-left):not(.page-on-right):not(.cached)').find('.page-content');\n }\n else if ($('.views > .view.active').length > 0) {\n // View in tab bar app layout\n pageContent = $('.views > .view.active').find('.page:not(.page-on-left):not(.page-on-right):not(.cached)').find('.page-content');\n }\n else {\n // Usual case\n pageContent = $('.views').find('.page:not(.page-on-left):not(.page-on-right):not(.cached)').find('.page-content');\n }\n }\n \n if (pageContent && pageContent.length > 0) {\n // Check for tab\n if (pageContent.hasClass('tab')) {\n pageContent = pageContent.parent('.tabs').children('.page-content.active');\n }\n if (pageContent.length > 0) pageContent.scrollTop(0, 300);\n }\n }\n function handleClicks(e) {\n /*jshint validthis:true */\n var clicked = $(this);\n var url = clicked.attr('href');\n var isLink = clicked[0].nodeName.toLowerCase() === 'a';\n \n // Check if link is external\n if (isLink) {\n if (clicked.is(app.params.externalLinks) || (url && url.indexOf('javascript:') >= 0)) {\n if(url && clicked.attr('target') === '_system') {\n e.preventDefault();\n window.open(url, '_system');\n }\n return;\n }\n }\n \n // Collect Clicked data- attributes\n var clickedData = clicked.dataset();\n \n // Smart Select\n if (clicked.hasClass('smart-select')) {\n if (app.smartSelectOpen) app.smartSelectOpen(clicked);\n }\n \n // Open Panel\n if (clicked.hasClass('open-panel')) {\n if ($('.panel').length === 1) {\n if ($('.panel').hasClass('panel-left')) app.openPanel('left');\n else app.openPanel('right');\n }\n else {\n if (clickedData.panel === 'right') app.openPanel('right');\n else app.openPanel('left');\n }\n }\n \n // Close Panel\n if (clicked.hasClass('close-panel')) {\n app.closePanel();\n }\n \n // Panel Overlay\n if (clicked.hasClass('panel-overlay')) {\n $('.panel.active').trigger('panel:overlay-click');\n if (app.params.panelsCloseByOutside) app.closePanel();\n }\n \n // Popover\n if (clicked.hasClass('open-popover')) {\n var popover;\n if (clickedData.popover) {\n popover = clickedData.popover;\n }\n else popover = '.popover';\n app.popover(popover, clicked);\n }\n if (clicked.hasClass('close-popover')) {\n app.closeModal('.popover.modal-in');\n }\n // Popup\n var popup;\n if (clicked.hasClass('open-popup')) {\n if (clickedData.popup) {\n popup = clickedData.popup;\n }\n else popup = '.popup';\n app.popup(popup);\n }\n if (clicked.hasClass('close-popup')) {\n if (clickedData.popup) {\n popup = clickedData.popup;\n }\n else popup = '.popup.modal-in';\n app.closeModal(popup);\n }\n // Login Screen\n var loginScreen;\n if (clicked.hasClass('open-login-screen')) {\n if (clickedData.loginScreen) {\n loginScreen = clickedData.loginScreen;\n }\n else loginScreen = '.login-screen';\n app.loginScreen(loginScreen);\n }\n if (clicked.hasClass('close-login-screen')) {\n app.closeModal('.login-screen.modal-in');\n }\n // Close Modal\n if (clicked.hasClass('modal-overlay')) {\n if ($('.modal.modal-in').length > 0 && app.params.modalCloseByOutside)\n app.closeModal('.modal.modal-in');\n if ($('.actions-modal.modal-in').length > 0 && app.params.actionsCloseByOutside)\n app.closeModal('.actions-modal.modal-in');\n \n if ($('.popover.modal-in').length > 0 && app.params.popoverCloseByOutside)\n app.closeModal('.popover.modal-in');\n }\n if (clicked.hasClass('popup-overlay')) {\n if ($('.popup.modal-in').length > 0 && app.params.popupCloseByOutside)\n app.closeModal('.popup.modal-in');\n }\n if (clicked.hasClass('picker-modal-overlay')) {\n if ($('.picker-modal.modal-in').length > 0)\n app.closeModal('.picker-modal.modal-in');\n }\n \n // Picker\n if (clicked.hasClass('close-picker')) {\n var pickerToClose = $('.picker-modal.modal-in');\n if (pickerToClose.length > 0) {\n app.closeModal(pickerToClose);\n }\n else {\n pickerToClose = $('.popover.modal-in .picker-modal');\n if (pickerToClose.length > 0) {\n app.closeModal(pickerToClose.parents('.popover'));\n }\n }\n }\n if (clicked.hasClass('open-picker')) {\n var pickerToOpen;\n if (clickedData.picker) {\n pickerToOpen = clickedData.picker;\n }\n else pickerToOpen = '.picker-modal';\n app.pickerModal(pickerToOpen, clicked);\n }\n \n // Tabs\n var isTabLink;\n if (clicked.hasClass('tab-link')) {\n isTabLink = true;\n app.showTab(clickedData.tab || clicked.attr('href'), clicked);\n }\n // Swipeout Close\n if (clicked.hasClass('swipeout-close')) {\n app.swipeoutClose(clicked.parents('.swipeout-opened'));\n }\n // Swipeout Delete\n if (clicked.hasClass('swipeout-delete')) {\n if (clickedData.confirm) {\n var text = clickedData.confirm;\n var title = clickedData.confirmTitle;\n if (title) {\n app.confirm(text, title, function () {\n app.swipeoutDelete(clicked.parents('.swipeout'));\n }, function () {\n if (clickedData.closeOnCancel) app.swipeoutClose(clicked.parents('.swipeout'));\n });\n }\n else {\n app.confirm(text, function () {\n app.swipeoutDelete(clicked.parents('.swipeout'));\n }, function () {\n if (clickedData.closeOnCancel) app.swipeoutClose(clicked.parents('.swipeout'));\n });\n }\n }\n else {\n app.swipeoutDelete(clicked.parents('.swipeout'));\n }\n \n }\n // Sortable\n if (clicked.hasClass('toggle-sortable')) {\n app.sortableToggle(clickedData.sortable);\n }\n if (clicked.hasClass('open-sortable')) {\n app.sortableOpen(clickedData.sortable);\n }\n if (clicked.hasClass('close-sortable')) {\n app.sortableClose(clickedData.sortable);\n }\n // Accordion\n if (clicked.hasClass('accordion-item-toggle') || (clicked.hasClass('item-link') && clicked.parent().hasClass('accordion-item'))) {\n var accordionItem = clicked.parent('.accordion-item');\n if (accordionItem.length === 0) accordionItem = clicked.parents('.accordion-item');\n if (accordionItem.length === 0) accordionItem = clicked.parents('li');\n app.accordionToggle(accordionItem);\n }\n \n // Speed Dial\n if (clicked.hasClass('floating-button') && clicked.parent().hasClass('speed-dial')) {\n clicked.parent().toggleClass('speed-dial-opened');\n }\n if (clicked.hasClass('close-speed-dial')) {\n $('.speed-dial-opened').removeClass('speed-dial-opened');\n }\n \n // Load Page\n if (app.params.ajaxLinks && !clicked.is(app.params.ajaxLinks) || !isLink || !app.params.router) {\n return;\n }\n if (isLink) {\n e.preventDefault();\n }\n \n var validUrl = url && url.length > 0 && url !== '#' && !isTabLink;\n var template = clickedData.template;\n if (validUrl || clicked.hasClass('back') || template) {\n var view;\n if (clickedData.view) {\n view = $(clickedData.view)[0].f7View;\n }\n else {\n view = clicked.parents('.' + app.params.viewClass)[0] && clicked.parents('.' + app.params.viewClass)[0].f7View;\n if (view && view.params.linksView) {\n if (typeof view.params.linksView === 'string') view = $(view.params.linksView)[0].f7View;\n else if (view.params.linksView instanceof View) view = view.params.linksView;\n }\n }\n if (!view) {\n if (app.mainView) view = app.mainView;\n }\n if (!view) return;\n \n var pageName;\n if (!template) {\n if (url && url.indexOf('#') === 0 && url !== '#') {\n if (view.params.domCache) {\n pageName = url.split('#')[1];\n }\n else return;\n }\n if (url === '#' && !clicked.hasClass('back')) return;\n }\n else {\n url = undefined;\n }\n \n var animatePages;\n if (typeof clickedData.animatePages !== 'undefined') {\n animatePages = clickedData.animatePages;\n }\n else {\n if (clicked.hasClass('with-animation')) animatePages = true;\n if (clicked.hasClass('no-animation')) animatePages = false;\n }\n \n var options = {\n animatePages: animatePages,\n ignoreCache: clickedData.ignoreCache,\n force: clickedData.force,\n reload: clickedData.reload,\n reloadPrevious: clickedData.reloadPrevious,\n pageName: pageName,\n pushState: clickedData.pushState,\n url: url\n };\n \n if (app.params.template7Pages) {\n options.contextName = clickedData.contextName;\n var context = clickedData.context;\n if (context) {\n options.context = JSON.parse(context);\n }\n }\n if (template && template in t7.templates) {\n options.template = t7.templates[template];\n }\n \n if (clicked.hasClass('back')) view.router.back(options);\n else view.router.load(options);\n }\n }\n $(document).on('click', 'a, .open-panel, .close-panel, .panel-overlay, .modal-overlay, .popup-overlay, .swipeout-delete, .swipeout-close, .close-popup, .open-popup, .open-popover, .open-login-screen, .close-login-screen .smart-select, .toggle-sortable, .open-sortable, .close-sortable, .accordion-item-toggle, .close-picker, .picker-modal-overlay', handleClicks);\n if (app.params.scrollTopOnNavbarClick || app.params.scrollTopOnStatusbarClick) {\n $(document).on('click', '.statusbar-overlay, .navbar .center', handleScrollTop);\n }\n \n // Prevent scrolling on overlays\n function preventScrolling(e) {\n e.preventDefault();\n }\n if (app.support.touch && !app.device.android) {\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n $(document).on((app.params.fastClicks ? 'touchstart' : 'touchmove'), '.panel-overlay, .modal-overlay, .preloader-indicator-overlay, .popup-overlay, .searchbar-overlay', preventScrolling, activeListener);\n }\n };\n \n\n /*======================================================\n ************ App Resize Actions ************\n ======================================================*/\n // Prevent iPad horizontal body scrolling when soft keyboard is opened\n function _fixIpadBodyScrolLeft() {\n if (app.device.ipad) {\n document.body.scrollLeft = 0;\n setTimeout(function () {\n document.body.scrollLeft = 0;\n }, 0);\n }\n }\n var appResizeCallbacks = [];\n app.getSize = function () {\n var offset = app.root.offset();\n app.width = app.root[0].offsetWidth;\n app.height = app.root[0].offsetHeight;\n app.left = offset.left;\n app.top = offset.top;\n };\n app.onResize = function (callback) {\n appResizeCallbacks.push(callback);\n };\n app.offResize = function (callback) {\n for (var i = 0; i < appResizeCallbacks.length; i++) {\n if (appResizeCallbacks[i] === callback) {\n appResizeCallbacks.splice(i, 1);\n }\n }\n };\n app.resize = function () {\n _fixIpadBodyScrolLeft();\n app.getSize();\n if (app.sizeNavbars) app.sizeNavbars();\n for (var i = 0; i < appResizeCallbacks.length; i++) {\n appResizeCallbacks[i]();\n }\n };\n app.orientationchange = function () {\n if (app.device && app.device.minimalUi) {\n if (window.orientation === 90 || window.orientation === -90) document.body.scrollTop = 0;\n }\n _fixIpadBodyScrolLeft();\n };\n app.initResize = function () {\n $(window).on('resize', app.resize);\n $(window).on('orientationchange', app.orientationchange);\n app.getSize();\n };\n \n\n /*===============================================================================\n ************ Store and parse forms data ************\n ===============================================================================*/\n app.formsData = {};\n app.formStoreData = function (formId, formJSON) {\n // Store form data in app.formsData\n app.formsData[formId] = formJSON;\n \n // Store form data in local storage also\n app.ls['f7form-' + formId] = JSON.stringify(formJSON);\n };\n app.formDeleteData = function (formId) {\n // Delete form data from app.formsData\n if (app.formsData[formId]) {\n app.formsData[formId] = '';\n delete app.formsData[formId];\n }\n \n // Delete form data from local storage also\n if (app.ls['f7form-' + formId]) {\n app.ls['f7form-' + formId] = '';\n app.ls.removeItem('f7form-' + formId);\n }\n };\n app.formGetData = function (formId) {\n // First of all check in local storage\n if (app.ls['f7form-' + formId]) {\n return JSON.parse(app.ls['f7form-' + formId]);\n }\n // Try to get it from formsData obj\n else if (app.formsData[formId]) return app.formsData[formId];\n };\n app.formToData = function (form) {\n form = $(form);\n if (form.length !== 1) return false;\n \n // Form data\n var formData = {};\n \n // Skip input types\n var skipTypes = ['submit', 'image', 'button', 'file'];\n var skipNames = [];\n form.find('input, select, textarea').each(function () {\n var input = $(this);\n var name = input.attr('name');\n var type = input.attr('type');\n var tag = this.nodeName.toLowerCase();\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && input.prop('multiple')) {\n skipNames.push(name);\n formData[name] = [];\n form.find('select[name=\"' + name + '\"] option').each(function () {\n if (this.selected) formData[name].push(this.value);\n });\n }\n else {\n switch (type) {\n case 'checkbox' :\n skipNames.push(name);\n formData[name] = [];\n form.find('input[name=\"' + name + '\"]').each(function () {\n if (this.checked) formData[name].push(this.value);\n });\n break;\n case 'radio' :\n skipNames.push(name);\n form.find('input[name=\"' + name + '\"]').each(function () {\n if (this.checked) formData[name] = this.value;\n });\n break;\n default :\n formData[name] = input.val();\n break;\n }\n }\n });\n form.trigger('formToJSON formToData form:todata', {formData: formData});\n \n return formData;\n };\n app.formToJSON = app.formToData;\n app.formFromData = function (form, formData) {\n form = $(form);\n if (form.length !== 1) return false;\n \n // Skip input types\n var skipTypes = ['submit', 'image', 'button', 'file'];\n var skipNames = [];\n \n form.find('input, select, textarea').each(function () {\n var input = $(this);\n var name = input.attr('name');\n var type = input.attr('type');\n var tag = this.nodeName.toLowerCase();\n if (typeof formData[name] === 'undefined' || formData[name] === null) return;\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && input.prop('multiple')) {\n skipNames.push(name);\n form.find('select[name=\"' + name + '\"] option').each(function () {\n if (formData[name].indexOf(this.value) >= 0) this.selected = true;\n else this.selected = false;\n });\n }\n else {\n switch (type) {\n case 'checkbox' :\n skipNames.push(name);\n form.find('input[name=\"' + name + '\"]').each(function () {\n if (formData[name].indexOf(this.value) >= 0) this.checked = true;\n else this.checked = false;\n });\n break;\n case 'radio' :\n skipNames.push(name);\n form.find('input[name=\"' + name + '\"]').each(function () {\n if (formData[name] === this.value) this.checked = true;\n else this.checked = false;\n });\n break;\n default :\n input.val(formData[name]);\n break;\n }\n }\n if (tag === 'select' || tag === 'input' || tag === 'textarea') {\n input.trigger('change');\n }\n });\n form.trigger('formFromJSON formFromData form:fromdata', {formData: formData});\n };\n app.formFromJSON = app.formFromData;\n \n app.initFormsStorage = function (pageContainer) {\n pageContainer = $(pageContainer);\n var forms = pageContainer.find('form.store-data');\n if (forms.length === 0) return;\n \n // Parse forms data and fill form if there is such data\n forms.each(function () {\n var id = this.getAttribute('id');\n if (!id) return;\n var formData = app.formGetData(id);\n if (formData) app.formFromData(this, formData);\n });\n // Update forms data on inputs change\n function storeForm() {\n /*jshint validthis:true */\n var form = $(this);\n var formId = form[0].id;\n if (!formId) return;\n var formJSON = app.formToData(form);\n if (!formJSON) return;\n app.formStoreData(formId, formJSON);\n form.trigger('store form:storedata', {data: formJSON});\n }\n forms.on('change submit', storeForm);\n \n // Detach Listeners\n function pageBeforeRemove() {\n forms.off('change submit', storeForm);\n pageContainer.off('page:beforeremove', pageBeforeRemove);\n }\n pageContainer.on('page:beforeremove', pageBeforeRemove);\n };\n\n /*===============================================================================\n ************ Ajax submit for forms ************\n ===============================================================================*/\n // Ajax submit on forms\n $(document).on('submit change', 'form.ajax-submit, form.ajax-submit-onchange', function (e) {\n var form = $(this);\n if (e.type === 'change' && !form.hasClass('ajax-submit-onchange')) return;\n if (e.type === 'submit') e.preventDefault();\n \n var method = (form.attr('method') || 'GET').toUpperCase();\n var contentType = form.prop('enctype') || form.attr('enctype');\n \n var url = form.attr('action');\n if (!url) return;\n \n var data;\n if (method === 'POST') data = new FormData(form[0]);\n else data = $.serializeObject(app.formToJSON(form[0]));\n \n var xhr = $.ajax({\n method: method,\n url: url,\n contentType: contentType,\n data: data,\n beforeSend: function (xhr) {\n form.trigger('beforeSubmit form:beforesend', {data:data, xhr: xhr});\n },\n error: function (xhr) {\n form.trigger('submitError form:error', {data:data, xhr: xhr});\n },\n success: function (data) {\n form.trigger('submitted form:success', {data: data, xhr: xhr});\n }\n });\n });\n \n \n\n /*===============================================================================\n ************ Resizable textarea ************\n ===============================================================================*/\n app.resizeTextarea = function (textarea) {\n textarea = $(textarea);\n if (!textarea.hasClass('resizable')) {\n return;\n }\n textarea.css({'height': ''});\n var height = textarea[0].offsetHeight;\n var diff = height - textarea[0].clientHeight;\n var scrollHeight = textarea[0].scrollHeight;\n \n if (scrollHeight + diff > height) {\n var newAreaHeight = scrollHeight + diff;\n textarea.css('height', newAreaHeight + 'px');\n }\n };\n app.resizableTextarea = function (textarea) {\n textarea = $(textarea);\n if (textarea.length === 0) return;\n var textareaTimeout;\n function handleTextarea() {\n clearTimeout(textareaTimeout);\n textareaTimeout = setTimeout(function () {\n app.resizeTextarea(textarea);\n }, 0);\n }\n textarea[0].f7DestroyResizableTextarea = function () {\n textarea.off('change keydown keypress keyup paste cut', handleTextarea);\n };\n return textarea.on('change keydown keypress keyup paste cut', handleTextarea);\n };\n app.destroyResizableTextarea = function (pageContainer) {\n pageContainer = $(pageContainer);\n if (pageContainer.length > 0 && pageContainer.is('textarea') && pageContainer[0].f7DestroyResizableTextarea) {\n pageContainer[0].f7DestroyResizableTextarea();\n }\n else if (pageContainer.length > 0) {\n pageContainer.find('textarea.resiable').each(function () {\n var textarea = this;\n if (textarea.f7DestroyResizableTextarea) {\n textarea.f7DestroyResizableTextarea ();\n }\n });\n }\n };\n app.initPageResizableTextarea = function (pageContainer) {\n pageContainer = $(pageContainer);\n var textareas = pageContainer.find('textarea.resizable');\n textareas.each(function () {\n app.resizableTextarea(this);\n });\n };\n\n /*======================================================\n ************ Material Text Inputs ************\n ======================================================*/\n app.initPageMaterialInputs = function (pageContainer) {\n pageContainer = $(pageContainer);\n var textareas = pageContainer.find('textarea.resizable');\n pageContainer.find('.item-input').each(function () {\n var itemInput = $(this);\n var notInputs = ['checkbox', 'button', 'submit', 'range', 'radio', 'image'];\n itemInput.find('input, select, textarea').each(function () {\n var input = $(this);\n if (notInputs.indexOf(input.attr('type')) < 0) {\n itemInput.addClass('item-input-field');\n if (input.val().trim() !== '') {\n input.parents('.item-input, .input-field').add(input.parents('.item-inner')).addClass('not-empty-state');\n }\n }\n });\n if (itemInput.parents('.input-item, .inputs-list').length > 0) return;\n itemInput.parents('.list-block').eq(0).addClass('inputs-list');\n });\n };\n /*======================================================\n ************ Material Focus Inputs ************\n ======================================================*/\n app.initMaterialWatchInputs = function () {\n var notInputs = ['checkbox', 'button', 'submit', 'range', 'radio', 'image'];\n function addFocusState(e) {\n /*jshint validthis:true*/\n var i = $(this);\n var type = i.attr('type');\n if (notInputs.indexOf(type) >= 0) return;\n var els = i.add(i.parents('.item-input, .input-field')).add(i.parents('.item-inner').eq(0));\n els.removeClass('not-empty-state').addClass('focus-state');\n }\n function removeFocusState(e) {\n /*jshint validthis:true*/\n var i = $(this), value = i.val();\n var type = i.attr('type');\n if (notInputs.indexOf(type) >= 0) return;\n var els = i.add(i.parents('.item-input, .input-field')).add(i.parents('.item-inner').eq(0));\n els.removeClass('focus-state');\n if (value && value.trim() !== '') {\n els.removeClass('focus-state').addClass('not-empty-state');\n }\n else {\n els.removeClass('not-empty-state');\n }\n }\n function watchChangeState(e) {\n /*jshint validthis:true*/\n var input = $(this),\n value = input.val();\n var type = input.attr('type');\n if (notInputs.indexOf(type) >= 0) return;\n var els = input.add(input.parents('.item-input, .input-field')).add(input.parents('.item-inner').eq(0));\n if (els.length === 0) return;\n if (value && (typeof value === 'string' && value.trim() !== '') || (Array.isArray(value) && value.length > 0)) {\n els.addClass('not-empty-state');\n }\n else {\n els.removeClass('not-empty-state');\n }\n }\n $(document).on('change', 'input, textarea, select', watchChangeState, true);\n $(document).on('focus', 'input, textarea, select', addFocusState, true);\n $(document).on('blur', 'input, textarea, select', removeFocusState, true);\n };\n \n\n /*======================================================\n ************ Handle Browser's History ************\n ======================================================*/\n app.pushStateQueue = [];\n app.pushStateClearQueue = function () {\n if (app.pushStateQueue.length === 0) return;\n var queue = app.pushStateQueue.pop();\n var animatePages;\n if (app.params.pushStateNoAnimation === true) animatePages = false;\n if (queue.action === 'back') {\n app.router.back(queue.view, {animatePages: animatePages});\n }\n if (queue.action === 'loadPage') {\n app.router.load(queue.view, {url: queue.stateUrl, animatePages: animatePages, pushState: false});\n }\n if (queue.action === 'loadContent') {\n app.router.load(queue.view, {content: queue.stateContent, animatePages: animatePages, pushState: false});\n }\n if (queue.action === 'loadPageName') {\n app.router.load(queue.view, {pageName: queue.statePageName, url: queue.stateUrl, animatePages: animatePages, pushState: false});\n }\n };\n \n app.initPushState = function () {\n var blockPopstate = true;\n $(window).on('load', function () {\n setTimeout(function () {\n blockPopstate = false;\n }, 0);\n });\n \n if (document.readyState && document.readyState === 'complete') {\n blockPopstate = false;\n }\n \n function handlePopState(e) {\n if (blockPopstate) return;\n var mainView = app.mainView;\n if (!mainView) return;\n var state = e.state;\n if (!state) {\n state = {\n viewIndex: app.views.indexOf(mainView),\n url : mainView.history[0]\n };\n }\n if (state.viewIndex < 0) return;\n var view = app.views[state.viewIndex];\n var stateUrl = state && state.url || undefined;\n var stateContent = state && state.content || undefined;\n var statePageName = state && state.pageName || undefined;\n var animatePages;\n \n if (app.params.pushStateNoAnimation === true) animatePages = false;\n \n if (stateUrl !== view.url) {\n if (view.history.indexOf(stateUrl) >= 0) {\n // Go Back\n if (view.allowPageChange) {\n app.router.back(view, {url:undefined, animatePages: animatePages, pushState: false, preloadOnly:false});\n }\n else {\n app.pushStateQueue.push({\n action: 'back',\n view: view\n });\n }\n }\n else if (stateContent) {\n // Load Page\n if (view.allowPageChange) {\n app.router.load(view, {content:stateContent, animatePages: animatePages, pushState: false});\n }\n else {\n app.pushStateQueue.unshift({\n action: 'loadContent',\n stateContent: stateContent,\n view: view\n });\n }\n \n }\n else if (statePageName) {\n // Load Page by page name with Dom Cache\n if (view.allowPageChange) {\n app.router.load(view, {pageName:statePageName, url: stateUrl, animatePages: animatePages, pushState: false});\n }\n else {\n app.pushStateQueue.unshift({\n action: 'loadPageName',\n statePageName: statePageName,\n view: view\n });\n }\n }\n else {\n // Load Page\n if (view.allowPageChange) {\n app.router.load(view, {url:stateUrl, animatePages: animatePages, pushState: false});\n }\n else {\n app.pushStateQueue.unshift({\n action: 'loadPage',\n stateUrl: stateUrl,\n view: view\n });\n }\n }\n }\n }\n $(window).on('popstate', handlePopState);\n };\n \n\n /*===========================\n Framework7 Swiper Additions\n ===========================*/\n app.swiper = function (container, params) {\n return new Swiper(container, params);\n };\n app.initPageSwiper = function (pageContainer) {\n pageContainer = $(pageContainer);\n var swipers = pageContainer.find('.swiper-init, .tabs-swipeable-wrap');\n if (swipers.length === 0) return;\n function destroySwiperOnRemove(slider) {\n function destroySwiper() {\n slider.destroy();\n pageContainer.off('page:beforeremove', destroySwiper);\n }\n pageContainer.on('page:beforeremove', destroySwiper);\n }\n swipers.each(function () {\n var swiper = $(this), initialSlide;\n var params;\n if (swiper.hasClass('tabs-swipeable-wrap')) {\n swiper.addClass('swiper-container').children('.tabs').addClass('swiper-wrapper').children('.tab').addClass('swiper-slide');\n initialSlide = swiper.children('.tabs').children('.tab.active').index();\n }\n if (swiper.data('swiper')) {\n params = JSON.parse(swiper.data('swiper'));\n }\n else {\n params = swiper.dataset();\n }\n if (typeof params.initialSlide === 'undefined' && typeof initialSlide !== 'undefined') {\n params.initialSlide = initialSlide;\n }\n if (swiper.hasClass('tabs-swipeable-wrap')) {\n params.onSlideChangeStart = function (s) {\n app.showTab(s.slides.eq(s.activeIndex));\n };\n }\n var _slider = app.swiper(swiper[0], params);\n destroySwiperOnRemove(_slider);\n });\n };\n app.reinitPageSwiper = function (pageContainer) {\n pageContainer = $(pageContainer);\n var sliders = pageContainer.find('.swiper-init, .tabs-swipeable-wrap');\n if (sliders.length === 0) return;\n for (var i = 0; i < sliders.length; i++) {\n var sliderInstance = sliders[0].swiper;\n if (sliderInstance) {\n sliderInstance.update(true);\n }\n }\n };\n \n\n /*======================================================\n ************ Photo Browser ************\n ======================================================*/\n var PhotoBrowser = function (params) {\n var pb = this, i;\n \n var defaults = {\n photos : [],\n initialSlide: 0,\n spaceBetween: 20,\n speed: 300,\n zoom: true,\n zoomMax: 3,\n zoomMin: 1,\n exposition: true,\n expositionHideCaptions: false,\n type: 'standalone',\n navbar: true,\n toolbar: true,\n theme: 'light',\n swipeToClose: true,\n backLinkText: 'Close',\n ofText: 'of',\n loop: false,\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingOnTransitionStart: false,\n material: app.params.material,\n materialPreloaderSvg: app.params.materialPreloaderSvg,\n materialPreloaderHtml: app.params.materialPreloaderHtml,\n /*\n Callbacks:\n onLazyImageLoad(pb, slide, img)\n onLazyImageReady(pb, slide, img)\n onOpen(pb)\n onClose(pb)\n onTransitionStart(swiper)\n onTransitionEnd(swiper)\n onSlideChangeStart(swiper)\n onSlideChangeEnd(swiper)\n onTap(swiper, e)\n onClick(swiper, e)\n onDoubleTap(swiper, e)\n onSwipeToClose(pb)\n */\n };\n \n params = params || {};\n if (!params.backLinkText && app.params.material) defaults.backLinkText = '';\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n if (params.maxZoom) {\n params.zoomMax = params.maxZoom;\n }\n if (params.minZoom) {\n params.zoomMin = params.minZoom;\n }\n \n pb.params = params;\n pb.params.iconsColorClass = pb.params.iconsColor ? 'color-' + pb.params.iconsColor : (pb.params.theme === 'dark' ? 'color-white' : '');\n pb.params.preloaderColorClass = pb.params.theme === 'dark' ? 'preloader-white' : '';\n \n // Templates\n var photoTemplate = pb.params.photoTemplate ||\n '
        ' +\n '' +\n '' +\n '' +\n '
        ';\n var photoLazyTemplate = pb.params.lazyPhotoTemplate ||\n '
        ' +\n '
        {{#if @root.material}}{{@root.materialPreloaderHtml}}{{/if}}
        ' +\n '' +\n '' +\n '' +\n '
        ';\n var objectTemplate = pb.params.objectTemplate ||\n '
        {{js \"this.html || this\"}}
        ';\n var captionTemplate = pb.params.captionTemplate ||\n '
        ' +\n '{{caption}}' +\n '
        ';\n var navbarTemplate = pb.params.navbarTemplate ||\n '
        ' +\n '
        ' +\n '' +\n '
        ' +\n ' ' +\n '{{ofText}} ' +\n '' +\n '
        ' +\n '
        ' +\n '
        ' +\n '
        ';\n var toolbarTemplate = pb.params.toolbarTemplate ||\n '
        ' +\n '
        ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
        ' +\n '
        ';\n \n var htmlTemplate = t7.compile('
        ' +\n '
        ' +\n '{{#unless material}}{{#if navbar}}' +\n navbarTemplate +\n '{{/if}}{{/unless}}' +\n '
        ' +\n '{{#if material}}{{#if navbar}}' +\n navbarTemplate +\n '{{/if}}{{/if}}' +\n '{{#if toolbar}}' +\n toolbarTemplate +\n '{{/if}}' +\n '
        ' +\n '{{#each photos}}{{#if caption}}' +\n captionTemplate +\n '{{/if}}{{/each}}' +\n '
        ' +\n '
        ' +\n '
        ' +\n '{{#each photos}}' +\n '{{#js_compare \"this.html || ((typeof this === \\'string\\' || this instanceof String) && (this.indexOf(\\'<\\') >= 0 || this.indexOf(\\'>\\') >= 0))\"}}' +\n objectTemplate +\n '{{else}}' +\n '{{#if @root.lazyLoading}}' +\n photoLazyTemplate +\n '{{else}}' +\n photoTemplate +\n '{{/if}}' +\n '{{/js_compare}}' +\n '{{/each}}' +\n '
        ' +\n '
        ' +\n '
        ' +\n '
        ' +\n '
        ')(pb.params);\n \n pb.activeIndex = pb.params.initialSlide;\n pb.openIndex = pb.activeIndex;\n pb.opened = false;\n \n pb.open = function (index) {\n if (typeof index === 'undefined') index = pb.activeIndex;\n index = parseInt(index, 10);\n if (pb.opened && pb.swiper) {\n pb.swiper.slideTo(index);\n return;\n }\n pb.opened = true;\n pb.openIndex = index;\n if (pb.params.type === 'standalone') {\n app.root.append(htmlTemplate);\n }\n if (pb.params.type === 'popup') {\n pb.popup = app.popup('
        ' + htmlTemplate + '
        ');\n $(pb.popup).on('popup:closed', pb.onPopupClose);\n }\n if (pb.params.type === 'page') {\n $(document).once('page:beforeinit', pb.onPageBeforeInit);\n $(document).once('page:beforeremove', pb.onPageBeforeRemove);\n if (!pb.params.view) pb.params.view = app.mainView;\n pb.params.view.loadContent(htmlTemplate);\n return;\n }\n pb.layout(pb.openIndex);\n if (pb.params.onOpen) {\n pb.params.onOpen(pb);\n }\n \n };\n pb.close = function () {\n pb.opened = false;\n if (!pb.swiperContainer || pb.swiperContainer.length === 0) {\n return;\n }\n if (pb.params.onClose) {\n pb.params.onClose(pb);\n }\n // Detach events\n pb.attachEvents(true);\n // Delete from DOM\n if (pb.params.type === 'standalone') {\n pb.container.removeClass('photo-browser-in').addClass('photo-browser-out').animationEnd(function () {\n pb.container.remove();\n });\n }\n // Destroy slider\n pb.swiper.destroy();\n // Delete references\n pb.swiper = pb.swiperContainer = pb.swiperWrapper = pb.slides = undefined; //gestureSlide = gestureImg = gestureImgWrap = undefined;\n };\n \n pb.onPopupClose = function (e) {\n pb.close();\n $(pb.popup).off('page:beforeinit', pb.onPopupClose);\n };\n pb.onPageBeforeInit = function (e) {\n if (e.detail.page.name === 'photo-browser-slides') {\n pb.layout(pb.openIndex);\n if (pb.params.onOpen) {\n pb.params.onOpen(pb);\n }\n }\n };\n pb.onPageBeforeRemove = function (e) {\n if (e.detail.page.name === 'photo-browser-slides') {\n pb.close();\n }\n };\n \n pb.onSliderTransitionStart = function (swiper) {\n pb.activeIndex = swiper.activeIndex;\n \n var current = swiper.activeIndex + 1;\n var total = swiper.slides.length;\n if (pb.params.loop) {\n total = total - 2;\n current = current - swiper.loopedSlides;\n if (current < 1) current = total + current;\n if (current > total) current = current - total;\n }\n pb.container.find('.photo-browser-current').text(current);\n pb.container.find('.photo-browser-total').text(total);\n \n $('.photo-browser-prev, .photo-browser-next').removeClass('photo-browser-link-inactive');\n \n if (swiper.isBeginning && !pb.params.loop) {\n $('.photo-browser-prev').addClass('photo-browser-link-inactive');\n }\n if (swiper.isEnd && !pb.params.loop) {\n $('.photo-browser-next').addClass('photo-browser-link-inactive');\n }\n \n // Update captions\n if (pb.captions.length > 0) {\n pb.captionsContainer.find('.photo-browser-caption-active').removeClass('photo-browser-caption-active');\n var captionIndex = pb.params.loop ? swiper.slides.eq(swiper.activeIndex).attr('data-swiper-slide-index') : pb.activeIndex;\n pb.captionsContainer.find('[data-caption-index=\"' + captionIndex + '\"]').addClass('photo-browser-caption-active');\n }\n \n \n // Stop Video\n var previousSlideVideo = swiper.slides.eq(swiper.previousIndex).find('video');\n if (previousSlideVideo.length > 0) {\n if ('pause' in previousSlideVideo[0]) previousSlideVideo[0].pause();\n }\n // Callback\n if (pb.params.onTransitionStart) pb.params.onTransitionStart(swiper);\n };\n pb.onSliderTransitionEnd = function (swiper) {\n if (pb.params.onTransitionEnd) pb.params.onTransitionEnd(swiper);\n };\n \n pb.layout = function (index) {\n if (pb.params.type === 'page') {\n pb.container = $('.photo-browser-swiper-container').parents('.view');\n }\n else {\n pb.container = $('.photo-browser');\n }\n if (pb.params.type === 'standalone') {\n pb.container.addClass('photo-browser-in');\n app.sizeNavbars(pb.container);\n }\n pb.swiperContainer = pb.container.find('.photo-browser-swiper-container');\n pb.swiperWrapper = pb.container.find('.photo-browser-swiper-wrapper');\n pb.slides = pb.container.find('.photo-browser-slide');\n pb.captionsContainer = pb.container.find('.photo-browser-captions');\n pb.captions = pb.container.find('.photo-browser-caption');\n \n var sliderSettings = {\n nextButton: pb.params.nextButton || '.photo-browser-next',\n prevButton: pb.params.prevButton || '.photo-browser-prev',\n indexButton: pb.params.indexButton,\n initialSlide: index,\n spaceBetween: pb.params.spaceBetween,\n speed: pb.params.speed,\n loop: pb.params.loop,\n lazyLoading: pb.params.lazyLoading,\n lazyLoadingInPrevNext: pb.params.lazyLoadingInPrevNext,\n lazyLoadingOnTransitionStart: pb.params.lazyLoadingOnTransitionStart,\n preloadImages: pb.params.lazyLoading ? false : true,\n zoom: pb.params.zoom,\n zoomMax: pb.params.zoomMax,\n zoomMin: pb.params.zoomMin,\n onTap: function (swiper, e) {\n if (pb.params.onTap) pb.params.onTap(swiper, e);\n },\n onClick: function (swiper, e) {\n if (pb.params.exposition) pb.toggleExposition();\n if (pb.params.onClick) pb.params.onClick(swiper, e);\n },\n onDoubleTap: function (swiper, e) {\n // pb.toggleZoom(e);\n if (pb.params.onDoubleTap) pb.params.onDoubleTap(swiper, e);\n },\n onTransitionStart: function (swiper) {\n pb.onSliderTransitionStart(swiper);\n },\n onTransitionEnd: function (swiper) {\n pb.onSliderTransitionEnd(swiper);\n },\n onSlideChangeStart: pb.params.onSlideChangeStart,\n onSlideChangeEnd: pb.params.onSlideChangeEnd,\n onLazyImageLoad: function (swiper, slide, img) {\n if (pb.params.onLazyImageLoad) pb.params.onLazyImageLoad(pb, slide, img);\n },\n onLazyImageReady: function (swiper, slide, img) {\n $(slide).removeClass('photo-browser-slide-lazy');\n if (pb.params.onLazyImageReady) pb.params.onLazyImageReady(pb, slide, img);\n }\n };\n \n if (pb.params.swipeToClose && pb.params.type !== 'page') {\n sliderSettings.onTouchStart = pb.swipeCloseTouchStart;\n sliderSettings.onTouchMoveOpposite = pb.swipeCloseTouchMove;\n sliderSettings.onTouchEnd = pb.swipeCloseTouchEnd;\n }\n \n pb.swiper = app.swiper(pb.swiperContainer, sliderSettings);\n if (index === 0) {\n pb.onSliderTransitionStart(pb.swiper);\n }\n pb.attachEvents();\n };\n pb.attachEvents = function (detach) {\n var action = detach ? 'off' : 'on';\n pb.container.find('.photo-browser-close-link')[action]('click', pb.close);\n };\n \n \n // Expose\n pb.exposed = false;\n pb.toggleExposition = function () {\n if (pb.container) pb.container.toggleClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.captionsContainer.toggleClass('photo-browser-captions-exposed');\n pb.exposed = !pb.exposed;\n };\n pb.enableExposition = function () {\n if (pb.container) pb.container.addClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.captionsContainer.addClass('photo-browser-captions-exposed');\n pb.exposed = true;\n };\n pb.disableExposition = function () {\n if (pb.container) pb.container.removeClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.captionsContainer.removeClass('photo-browser-captions-exposed');\n pb.exposed = false;\n };\n \n // Swipe Up To Close\n var swipeToCloseIsTouched = false;\n var allowSwipeToClose = true;\n var swipeToCloseDiff, swipeToCloseStart, swipeToCloseCurrent, swipeToCloseStarted = false, swipeToCloseActiveSlide, swipeToCloseTimeStart;\n pb.swipeCloseTouchStart = function (swiper, e) {\n if (!allowSwipeToClose) return;\n swipeToCloseIsTouched = true;\n };\n pb.swipeCloseTouchMove = function (swiper, e) {\n if (!swipeToCloseIsTouched) return;\n if (!swipeToCloseStarted) {\n swipeToCloseStarted = true;\n swipeToCloseStart = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n swipeToCloseActiveSlide = pb.swiper.slides.eq(pb.swiper.activeIndex);\n swipeToCloseTimeStart = (new Date()).getTime();\n }\n e.preventDefault();\n swipeToCloseCurrent = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n swipeToCloseDiff = swipeToCloseStart - swipeToCloseCurrent;\n var opacity = 1 - Math.abs(swipeToCloseDiff) / 300;\n swipeToCloseActiveSlide.transform('translate3d(0,' + (-swipeToCloseDiff) + 'px,0)');\n pb.swiper.container.css('opacity', opacity).transition(0);\n };\n pb.swipeCloseTouchEnd = function (swiper, e) {\n swipeToCloseIsTouched = false;\n if (!swipeToCloseStarted) {\n swipeToCloseStarted = false;\n return;\n }\n swipeToCloseStarted = false;\n allowSwipeToClose = false;\n var diff = Math.abs(swipeToCloseDiff);\n var timeDiff = (new Date()).getTime() - swipeToCloseTimeStart;\n if ((timeDiff < 300 && diff > 20) || (timeDiff >= 300 && diff > 100)) {\n setTimeout(function () {\n if (pb.params.type === 'standalone') {\n pb.close();\n }\n if (pb.params.type === 'popup') {\n app.closeModal(pb.popup);\n }\n if (pb.params.onSwipeToClose) {\n pb.params.onSwipeToClose(pb);\n }\n allowSwipeToClose = true;\n }, 0);\n return;\n }\n if (diff !== 0) {\n swipeToCloseActiveSlide.addClass('transitioning').transitionEnd(function () {\n allowSwipeToClose = true;\n swipeToCloseActiveSlide.removeClass('transitioning');\n });\n }\n else {\n allowSwipeToClose = true;\n }\n pb.swiper.container.css('opacity', '').transition('');\n swipeToCloseActiveSlide.transform('');\n };\n \n return pb;\n };\n \n app.photoBrowser = function (params) {\n return new PhotoBrowser(params);\n };\n \n\n /*===============================================================================\n ************ Autocomplete ************\n ===============================================================================*/\n var Autocomplete = function (params) {\n var a = this;\n \n // Params\n var defaults = {\n // Standalone Options\n /*\n opener: undefined,\n */\n popupCloseText: 'Close',\n backText: 'Back',\n searchbarPlaceholderText: 'Search...',\n searchbarCancelText: 'Cancel',\n openWithAnimation: true,\n // When opened in page should the searchbar be focused by default\n autoFocus: false,\n openIn: 'page',\n backOnSelect: false,\n notFoundText: 'Nothing found',\n requestSourceOnOpen: false,\n /*\n pageTitle: undefined,\n */\n \n // Handle Data\n /*\n source: undefined,\n limit: undefined,\n */\n valueProperty: 'id',\n textProperty: 'text',\n \n // Dropdown Options\n highlightMatches: true,\n \n /*\n dropdownPlaceholderText: 'Type anything...',\n */\n updateInputValueOnSelect: true,\n expandInput: false,\n \n // Preloader\n preloaderColor: false,\n preloader: false,\n \n // Templates\n /*\n itemTemplate: undefined,\n navbarTemplate: undefined,\n dropdownTemplate: undefined\n dropdownItemTemplate: undefined,\n dropdownPlaceholderTemplate: undefined\n */\n \n // Color themes\n /*\n navbarTheme: undefined,\n formTheme: undefined,\n */\n \n // Callbacks\n /*\n onChange: function (a, value) - for not dropdown\n onOpen: function (a)\n onClose: function (a)\n */\n };\n \n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n a.params = params;\n \n // Opener Link & View\n if (a.params.opener) {\n a.opener = $(a.params.opener);\n }\n var view = a.params.view;\n if (!a.params.view && a.opener && a.opener.length) {\n // Find related view\n view = a.opener.parents('.' + app.params.viewClass);\n if (view.length === 0) return;\n view = view[0].f7View;\n }\n \n // Input\n if (a.params.input) {\n a.input = $(a.params.input);\n if (a.input.length === 0 && a.params.openIn === 'dropdown') return;\n }\n \n // Array with selected items\n a.value = a.params.value || [];\n \n // ID & Inputs\n a.id = (new Date()).getTime();\n a.inputType = a.params.multiple ? 'checkbox' : 'radio';\n a.inputName = a.inputType + '-' + a.id;\n \n // Is Material\n var material = app.params.material;\n \n // Back On Select\n var backOnSelect = a.params.backOnSelect;\n \n if (a.params.openIn !== 'dropdown') {\n // Item Template\n a.itemTemplate = t7.compile(a.params.itemTemplate ||\n '
      • ' +\n '' +\n '
      • '\n );\n // Page Layout\n var pageTitle = a.params.pageTitle || '';\n if (!pageTitle && a.opener && a.opener.length) {\n pageTitle = a.opener.find('.item-title').text();\n }\n var pageName = 'autocomplete-' + a.inputName;\n \n var navbarTheme = a.params.navbarTheme,\n formTheme = a.params.formTheme;\n \n // Navbar HTML\n var navbarHTML;\n var noNavbar = '', noToolbar = '', navbarLayout;\n \n a.navbarTemplate = t7.compile(a.params.navbarTemplate ||\n '
        ' +\n '
        ' +\n '
        ' +\n '{{#if material}}' +\n '' +\n '{{else}}' +\n '' +\n '' +\n '{{#if inPopup}}' +\n '{{popupCloseText}}' +\n '{{else}}' +\n '{{backText}}' +\n '{{/if}}' +\n '' +\n '{{/if}}' +\n '
        ' +\n '
        {{pageTitle}}
        ' +\n '{{#if preloader}}' +\n '
        ' +\n '
        ' +\n '
        ' +\n '{{/if}}' +\n '
        ' +\n '
        '\n );\n navbarHTML = a.navbarTemplate({\n pageTitle: pageTitle,\n backText: a.params.backText,\n popupCloseText: a.params.popupCloseText,\n openIn: a.params.openIn,\n navbarTheme: navbarTheme,\n inPopup: a.params.openIn === 'popup',\n inPage: a.params.openIn === 'page',\n material: material,\n preloader: a.params.preloader,\n preloaderColor: a.params.preloaderColor,\n animated: a.params.openWithAnimation\n });\n \n // Determine navbar layout type - static/fixed/through\n if (a.params.openIn === 'page') {\n navbarLayout = 'static';\n if (a.opener) {\n if (a.opener.parents('.navbar-through').length > 0) navbarLayout = 'through';\n if (a.opener.parents('.navbar-fixed').length > 0) navbarLayout = 'fixed';\n noToolbar = a.opener.parents('.page').hasClass('no-toolbar') ? 'no-toolbar' : '';\n noNavbar = a.opener.parents('.page').hasClass('no-navbar') ? 'no-navbar' : 'navbar-' + navbarLayout;\n }\n else if (view.container) {\n if ($(view.container).hasClass('navbar-through') || $(view.container).find('.navbar-through').length > 0) navbarLayout = 'through';\n if ($(view.container).hasClass('navbar-fixed') || $(view.container).find('.navbar-fixed').length > 0) navbarLayout = 'fixed';\n noToolbar = $(view.activePage.container).hasClass('no-toolbar') ? 'no-toolbar' : '';\n noNavbar = $(view.activePage.container).hasClass('no-navbar') ? 'no-navbar' : 'navbar-' + navbarLayout;\n }\n }\n else {\n navbarLayout = 'fixed';\n }\n var searchbarHTML =\n '
        ' +\n '
        ' +\n '' +\n '' +\n '
        ' +\n (material ? '' : '' + a.params.searchbarCancelText + '') +\n '
        ' +\n '
        ';\n var pageHTML =\n (navbarLayout === 'through' ? navbarHTML : '') +\n '
        ' +\n '
        ' +\n (navbarLayout === 'fixed' ? navbarHTML : '') +\n searchbarHTML +\n '
        ' +\n (navbarLayout === 'static' ? navbarHTML : '') +\n '
        ' +\n '
          ' +\n '
          ' +\n '
          ' +\n '
          • ' + a.params.notFoundText + '
          ' +\n '
          ' +\n '
          ' +\n '
            ' +\n '
            ' +\n '
            ' +\n '
            ' +\n '
            ';\n }\n else {\n a.dropdownItemTemplate = t7.compile(a.params.dropdownItemTemplate ||\n '
          • ' +\n '' +\n '
          • '\n );\n a.dropdownPlaceholderTemplate = t7.compile(a.params.dropdownPlaceholderTemplate ||\n '
          • ' +\n '
            ' +\n '
            ' +\n '
            {{text}}
            ' +\n '
            ' +\n '' +\n '
          • '\n );\n a.dropdownTemplate = t7.compile(a.params.dropdownTemplate ||\n '
            ' +\n '
            ' +\n '
            ' +\n '
              ' +\n '
              ' +\n '
              ' +\n '{{#if preloader}}' +\n '
              {{#if material}}{{materialPreloaderHtml}}{{/if}}
              ' +\n '{{/if}}' +\n '
              '\n );\n }\n \n // Define popup\n a.popup = undefined;\n \n // Define Dropdown\n a.dropdown = undefined;\n \n // Handle Input Value Change\n function handleInputValue (e) {\n var query = a.input.val();\n if (a.params.source) {\n a.params.source(a, query, function (items) {\n var itemsHTML = '';\n var limit = a.params.limit ? Math.min(a.params.limit, items.length) : items.length;\n a.items = items;\n var i, j, regExp;\n if (a.params.highlightMatches) {\n query = query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n regExp = new RegExp('('+query+')', 'i');\n }\n \n for (i = 0; i < limit; i++) {\n var itemValue = typeof items[i] === 'object' ? items[i][a.params.valueProperty] : items[i];\n var itemText = typeof items[i] !== 'object' ? items[i] : items[i][a.params.textProperty];\n itemsHTML += a.dropdownItemTemplate({\n value: itemValue,\n text: a.params.highlightMatches ? itemText.replace(regExp, '$1') : itemText\n });\n }\n if (itemsHTML === '' && query === '' && a.params.dropdownPlaceholderText) {\n itemsHTML += a.dropdownPlaceholderTemplate({\n text: a.params.dropdownPlaceholderText,\n });\n }\n a.dropdown.find('ul').html(itemsHTML);\n });\n }\n }\n // Handle Drop Down Click\n function handleDropdownClick (e) {\n /*jshint validthis:true */\n var clicked = $(this);\n var clickedItem;\n for (var i = 0; i < a.items.length; i++) {\n var itemValue = typeof a.items[i] === 'object' ? a.items[i][a.params.valueProperty] : a.items[i];\n var value = clicked.attr('data-value');\n if (itemValue === value || itemValue * 1 === value * 1) {\n clickedItem = a.items[i];\n }\n }\n if (a.params.updateInputValueOnSelect) {\n a.input.val(typeof clickedItem === 'object' ? clickedItem[a.params.valueProperty] : clickedItem);\n a.input.trigger('input change');\n }\n \n if (a.params.onChange) {\n a.params.onChange(a, clickedItem);\n }\n \n a.close();\n }\n \n // Handle HTML Click to close Dropdown\n function closeOnHTMLClick (e) {\n var target = $(e.target);\n if (!(target.is(a.input[0]) || a.dropdown && target.parents(a.dropdown[0]).length > 0)) {\n a.close();\n }\n }\n \n a.positionDropDown = function () {\n var listBlock = a.input.parents('.list-block'),\n pageContent = a.input.parents('.page-content'),\n paddingTop = parseInt(pageContent.css('padding-top'), 10),\n paddingBottom = parseInt(pageContent.css('padding-top'), 10),\n // inputOffset = a.input.offset(),\n listBlockOffsetLeft = listBlock.length > 0 ? listBlock.offset().left - listBlock.parent().offset().left : 0,\n inputOffsetLeft = a.input.offset().left - (listBlock.length > 0 ? listBlock.offset().left : 0),\n inputOffsetTop = a.input.offset().top - (pageContent.offset().top - pageContent[0].scrollTop),\n maxHeight = pageContent[0].scrollHeight - paddingBottom - (inputOffsetTop + pageContent[0].scrollTop) - a.input[0].offsetHeight;\n \n a.dropdown.css({\n left: (listBlock.length > 0 ? listBlockOffsetLeft : inputOffsetLeft) + 'px',\n top: inputOffsetTop + pageContent[0].scrollTop + a.input[0].offsetHeight + 'px',\n width: (listBlock.length > 0 ? listBlock[0].offsetWidth : a.input[0].offsetWidth) + 'px'\n });\n a.dropdown.children('.autocomplete-dropdown-inner').css({\n maxHeight: maxHeight + 'px',\n paddingLeft: listBlock.length > 0 && !a.params.expandInput ? inputOffsetLeft - (material ? 16 : 15) + 'px' : ''\n });\n };\n \n a.pageInit = function (e) {\n var page = e.detail.page;\n a.page = $(page.container);\n a.pageData = page;\n if (page.name !== pageName) {\n return;\n }\n var container = $(page.container);\n \n // Source\n function onSource(query) {\n if (!a.params.source) return;\n var i, j, k;\n \n a.params.source(a, query, function(items) {\n var itemsHTML = '';\n var limit = a.params.limit ? Math.min(a.params.limit, items.length) : items.length;\n a.items = items;\n for (i = 0; i < limit; i++) {\n var selected = false;\n var itemValue = typeof items[i] === 'object' ? items[i][a.params.valueProperty] : items[i];\n for (j = 0; j < a.value.length; j++) {\n var aValue = typeof a.value[j] === 'object' ? a.value[j][a.params.valueProperty] : a.value[j];\n if (aValue === itemValue || aValue * 1 === itemValue * 1) selected = true;\n }\n itemsHTML += a.itemTemplate({\n value: itemValue,\n text: typeof items[i] !== 'object' ? items[i] : items[i][a.params.textProperty],\n inputType: a.inputType,\n id: a.id,\n inputName: a.inputName,\n selected: selected,\n checkbox: a.inputType === 'checkbox',\n material: material\n });\n }\n container.find('.autocomplete-found ul').html(itemsHTML);\n if (items.length === 0) {\n if (query.length !== 0) {\n container.find('.autocomplete-not-found').show();\n container.find('.autocomplete-found, .autocomplete-values').hide();\n }\n else {\n container.find('.autocomplete-values').show();\n container.find('.autocomplete-found, .autocomplete-not-found').hide();\n }\n }\n else {\n container.find('.autocomplete-found').show();\n container.find('.autocomplete-not-found, .autocomplete-values').hide();\n }\n });\n }\n \n // Init Search Bar\n var searchbar = app.searchbar(container.find('.searchbar'), {\n customSearch: true,\n onSearch: function (searchbar, data) {\n if (data.query.length === 0 && searchbar.active) {\n searchbar.overlay.addClass('searchbar-overlay-active');\n }\n else {\n searchbar.overlay.removeClass('searchbar-overlay-active');\n }\n \n onSource(data.query);\n }\n });\n \n // Save searchbar instance\n a.searchbar = searchbar;\n \n // Update values\n function updateValues() {\n var valuesHTML = '';\n var i;\n for (i = 0; i < a.value.length; i++) {\n \n valuesHTML += a.itemTemplate({\n value: typeof a.value[i] === 'object' ? a.value[i][a.params.valueProperty] : a.value[i],\n text: typeof a.value[i] === 'object' ? a.value[i][a.params.textProperty]: a.value[i],\n inputType: a.inputType,\n id: a.id,\n inputName: a.inputName + '-checked',\n checkbox: a.inputType === 'checkbox',\n material: material,\n selected: true\n });\n }\n container.find('.autocomplete-values ul').html(valuesHTML);\n }\n \n // Handle Inputs\n if (!a.params.multiple && a.params.backOnSelect) {\n container.once('click', '.list-block label', function () {\n if (a.params.openIn === 'popup') app.closeModal(a.popup);\n else view.router.back({animatePages: a.params.openWithAnimation});\n });\n }\n container.on('change', 'input[type=\"radio\"], input[type=\"checkbox\"]', function () {\n var i;\n var input = this;\n var value = input.value;\n var text = $(input).parents('li').find('.item-title').text();\n var isValues = $(input).parents('.autocomplete-values').length > 0;\n var item, itemValue, aValue;\n if (isValues) {\n if (a.inputType === 'checkbox' && !input.checked) {\n for (i = 0; i < a.value.length; i++) {\n aValue = typeof a.value[i] === 'string' ? a.value[i] : a.value[i][a.params.valueProperty];\n if (aValue === value || aValue * 1 === value * 1) {\n a.value.splice(i, 1);\n }\n }\n updateValues();\n if (a.params.onChange) a.params.onChange(a, a.value);\n }\n return;\n }\n \n // Find Related Item\n for (i = 0; i < a.items.length; i++) {\n itemValue = typeof a.items[i] === 'string' ? a.items[i] : a.items[i][a.params.valueProperty];\n if (itemValue === value || itemValue * 1 === value * 1) item = a.items[i];\n }\n // Update Selected Value\n if (a.inputType === 'radio') {\n a.value = [item];\n }\n else {\n if (input.checked) {\n a.value.push(item);\n }\n else {\n for (i = 0; i < a.value.length; i++) {\n aValue = typeof a.value[i] === 'string' ? a.value[i] : a.value[i][a.params.valueProperty];\n if (aValue === value || aValue * 1 === value * 1) {\n a.value.splice(i, 1);\n }\n }\n }\n }\n \n // Update Values Block\n updateValues();\n \n // On Select Callback\n if ((a.inputType === 'radio' && input.checked || a.inputType === 'checkbox') && a.params.onChange ) {\n a.params.onChange(a, a.value);\n }\n });\n \n // Update Values On Page Init\n updateValues();\n \n // Source on load\n if (a.params.requestSourceOnOpen) onSource('');\n \n // On Open Callback\n if (a.params.onOpen) a.params.onOpen(a);\n };\n \n // Show Hide Preloader\n a.showPreloader = function () {\n if (a.params.openIn === 'dropdown') {\n if (a.dropdown) a.dropdown.find('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n }\n else $('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n };\n \n a.hidePreloader = function () {\n if (a.params.openIn === 'dropdown') {\n if (a.dropdown) a.dropdown.find('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n }\n else $('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n };\n \n // Autofocus\n a.autoFocus = function (e) {\n var self = this;\n setTimeout(function () {\n $(self).find('input[type=search]').focus();\n }, 0);\n };\n \n // Open Autocomplete Page/Popup\n a.open = function () {\n if (a.opened) return;\n a.opened = true;\n if (a.params.openIn === 'dropdown') {\n if (!a.dropdown) {\n a.dropdown = $(a.dropdownTemplate({\n preloader: a.params.preloader,\n preloaderColor: a.params.preloaderColor,\n material: material,\n materialPreloaderHtml: app.params.materialPreloaderHtml\n }));\n a.dropdown.on('click', 'label', handleDropdownClick);\n \n }\n var listBlock = a.input.parents('.list-block');\n if (listBlock.length && a.input.parents('.item-content').length > 0 && a.params.expandInput) {\n a.input.parents('.item-content').addClass('item-content-dropdown-expand');\n }\n a.positionDropDown();\n a.input.parents('.page-content').append(a.dropdown);\n a.dropdown.addClass('autocomplete-dropdown-in');\n a.input.trigger('input');\n app.onResize(a.positionDropDown);\n if (a.params.onOpen) a.params.onOpen(a);\n }\n else {\n $(document).once('page:init', '.autocomplete-page', a.pageInit);\n if (a.params.openIn === 'popup') {\n a.popup = app.popup(\n '
              ' +\n '
              ' +\n pageHTML +\n '
              ' +\n '
              ',\n true,\n a.params.openWithAnimation\n );\n a.popup = $(a.popup);\n if (a.params.autoFocus) {\n if (a.params.openWithAnimation) a.popup.once('popup:opened', a.autoFocus);\n else a.autoFocus.bind(a.popup)();\n }\n a.popup.once('popup:closed', function () {\n a.popup = undefined;\n a.opened = false;\n if (a.params.onClose) a.params.onClose(a);\n });\n }\n else {\n if (a.params.autoFocus) {\n $(document).once(a.params.openWithAnimation ? 'page:afteranimation' : 'page:init', '.autocomplete-page', a.autoFocus);\n }\n view.router.load({\n content: pageHTML,\n animatePages: a.params.openWithAnimation\n });\n $(document).once('page:back', '.autocomplete-page', function () {\n a.opened = false;\n if (a.params.onClose) a.params.onClose(a);\n });\n }\n }\n };\n a.close = function (e) {\n if (!a.opened) return;\n if (a.params.openIn === 'dropdown') {\n if (e && e.type === 'blur' && a.dropdown.find('label.active-state').length > 0) return;\n a.dropdown.removeClass('autocomplete-dropdown-in').remove();\n a.input.parents('.item-content-dropdown-expand').removeClass('item-content-dropdown-expand');\n a.opened = false;\n app.offResize(a.positionDropDown);\n if (a.params.onClose) a.params.onClose(a);\n }\n if (a.params.openIn === 'popup') {\n if (a.popup) app.closeModal(a.popup);\n }\n };\n \n // Init Events\n a.initEvents = function (detach) {\n var method = detach ? 'off' : 'on';\n if (a.params.openIn !== 'dropdown' && a.opener) {\n a.opener[method]('click', a.open);\n }\n if (a.params.openIn === 'dropdown' && a.input) {\n a.input[method]('focus', a.open);\n a.input[method]('input', handleInputValue);\n if (app.device.android) {\n $('html')[method]('click', closeOnHTMLClick);\n }\n else {\n a.input[method]('blur', a.close);\n }\n }\n if (detach && a.dropdown) {\n a.dropdown = null;\n }\n };\n \n // Init/Destroy Methods\n a.init = function () {\n a.initEvents();\n };\n a.destroy = function () {\n a.initEvents(true);\n a = null;\n };\n \n // Init\n a.init();\n \n return a;\n };\n app.autocomplete = function (params) {\n return new Autocomplete(params);\n };\n \n\n /*======================================================\n ************ Picker ************\n ======================================================*/\n var Picker = function (params) {\n var p = this;\n var defaults = {\n updateValuesOnMomentum: false,\n updateValuesOnTouchmove: true,\n rotateEffect: false,\n momentumRatio: 7,\n freeMode: false,\n // Common settings\n closeByOutsideClick: true,\n scrollToInput: true,\n inputReadOnly: true,\n convertToPopover: true,\n onlyInPopover: false,\n toolbar: true,\n toolbarCloseText: 'Done',\n toolbarTemplate:\n '
              ' +\n '
              ' +\n '
              ' +\n '
              ' +\n '{{closeText}}' +\n '
              ' +\n '
              ' +\n '
              '\n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n p.params = params;\n p.cols = [];\n p.initialized = false;\n \n // Inline flag\n p.inline = p.params.container ? true : false;\n \n // 3D Transforms origin bug, only on safari\n var originBug = app.device.ios || (navigator.userAgent.toLowerCase().indexOf('safari') >= 0 && navigator.userAgent.toLowerCase().indexOf('chrome') < 0) && !app.device.android;\n \n // Should be converted to popover\n function isPopover() {\n var toPopover = false;\n if (!p.params.convertToPopover && !p.params.onlyInPopover) return toPopover;\n if (!p.inline && p.params.input) {\n if (p.params.onlyInPopover) toPopover = true;\n else {\n if (app.device.ios) {\n toPopover = app.device.ipad ? true : false;\n }\n else {\n if (app.width >= 768) toPopover = true;\n }\n }\n }\n return toPopover;\n }\n function inPopover() {\n if (p.opened && p.container && p.container.length > 0 && p.container.parents('.popover').length > 0) return true;\n else return false;\n }\n \n // Value\n p.setValue = function (arrValues, transition) {\n var valueIndex = 0;\n if (p.cols.length === 0) {\n p.value = arrValues;\n p.updateValue(arrValues);\n return;\n }\n for (var i = 0; i < p.cols.length; i++) {\n if (p.cols[i] && !p.cols[i].divider) {\n p.cols[i].setValue(arrValues[valueIndex], transition);\n valueIndex++;\n }\n }\n };\n p.updateValue = function (forceValues) {\n var newValue = forceValues || [];\n var newDisplayValue = [], i, column;\n if (p.cols.length === 0) {\n var noDividerColumns = p.params.cols.filter(function (column) {\n return !column.divider;\n });\n for (i = 0; i < noDividerColumns.length; i++) {\n column = noDividerColumns[i];\n if (column.displayValues !== undefined && column.values !== undefined && column.values.indexOf(newValue[i]) !== -1) {\n newDisplayValue.push(column.displayValues[column.values.indexOf(newValue[i])]);\n }\n else {\n newDisplayValue.push(newValue[i]);\n }\n }\n }\n else {\n for (i = 0; i < p.cols.length; i++) {\n if (!p.cols[i].divider) {\n newValue.push(p.cols[i].value);\n newDisplayValue.push(p.cols[i].displayValue);\n }\n }\n }\n \n if (newValue.indexOf(undefined) >= 0) {\n return;\n }\n p.value = newValue;\n p.displayValue = newDisplayValue;\n if (p.params.onChange) {\n p.params.onChange(p, p.value, p.displayValue);\n }\n if (p.input && p.input.length > 0) {\n $(p.input).val(p.params.formatValue ? p.params.formatValue(p, p.value, p.displayValue) : p.value.join(' '));\n $(p.input).trigger('change');\n }\n };\n \n // Columns Handlers\n p.initPickerCol = function (colElement, updateItems) {\n var colContainer = $(colElement);\n var colIndex = colContainer.index();\n var col = p.cols[colIndex];\n if (col.divider) return;\n col.container = colContainer;\n col.wrapper = col.container.find('.picker-items-col-wrapper');\n col.items = col.wrapper.find('.picker-item');\n \n var i, j;\n var wrapperHeight, itemHeight, itemsHeight, minTranslate, maxTranslate;\n col.replaceValues = function (values, displayValues) {\n col.destroyEvents();\n col.values = values;\n col.displayValues = displayValues;\n var newItemsHTML = p.columnHTML(col, true);\n col.wrapper.html(newItemsHTML);\n col.items = col.wrapper.find('.picker-item');\n col.calcSize();\n col.setValue(col.values[0], 0, true);\n col.initEvents();\n };\n var resizeTimeout;\n col.calcSize = function () {\n if (p.params.rotateEffect) {\n col.container.removeClass('picker-items-col-absolute');\n if (!col.width) col.container.css({width:''});\n }\n var colWidth, colHeight;\n colWidth = 0;\n colHeight = col.container[0].offsetHeight;\n wrapperHeight = col.wrapper[0].offsetHeight;\n itemHeight = col.items[0].offsetHeight;\n itemsHeight = itemHeight * col.items.length;\n minTranslate = colHeight / 2 - itemsHeight + itemHeight / 2;\n maxTranslate = colHeight / 2 - itemHeight / 2;\n if (col.width) {\n colWidth = col.width;\n if (parseInt(colWidth, 10) === colWidth) colWidth = colWidth + 'px';\n col.container.css({width: colWidth});\n }\n if (p.params.rotateEffect) {\n if (!col.width) {\n col.items.each(function () {\n var item = $(this).children('span');\n colWidth = Math.max(colWidth, item[0].offsetWidth);\n });\n col.container.css({width: (colWidth + 2) + 'px'});\n }\n col.container.addClass('picker-items-col-absolute');\n }\n };\n col.calcSize();\n \n col.wrapper.transform('translate3d(0,' + maxTranslate + 'px,0)').transition(0);\n \n \n var activeIndex = 0;\n var animationFrameId;\n \n // Set Value Function\n col.setValue = function (newValue, transition, valueCallbacks) {\n if (typeof transition === 'undefined') transition = '';\n var newActiveIndex = col.wrapper.find('.picker-item[data-picker-value=\"' + newValue + '\"]').index();\n if(typeof newActiveIndex === 'undefined' || newActiveIndex === -1) {\n return;\n }\n var newTranslate = -newActiveIndex * itemHeight + maxTranslate;\n // Update wrapper\n col.wrapper.transition(transition);\n col.wrapper.transform('translate3d(0,' + (newTranslate) + 'px,0)');\n \n // Watch items\n if (p.params.updateValuesOnMomentum && col.activeIndex && col.activeIndex !== newActiveIndex ) {\n $.cancelAnimationFrame(animationFrameId);\n col.wrapper.transitionEnd(function(){\n $.cancelAnimationFrame(animationFrameId);\n });\n updateDuringScroll();\n }\n \n // Update items\n col.updateItems(newActiveIndex, newTranslate, transition, valueCallbacks);\n };\n \n col.updateItems = function (activeIndex, translate, transition, valueCallbacks) {\n if (typeof translate === 'undefined') {\n translate = $.getTranslate(col.wrapper[0], 'y');\n }\n if(typeof activeIndex === 'undefined') activeIndex = -Math.round((translate - maxTranslate)/itemHeight);\n if (activeIndex < 0) activeIndex = 0;\n if (activeIndex >= col.items.length) activeIndex = col.items.length - 1;\n var previousActiveIndex = col.activeIndex;\n col.activeIndex = activeIndex;\n col.wrapper.find('.picker-selected').removeClass('picker-selected');\n \n col.items.transition(transition);\n \n var selectedItem = col.items.eq(activeIndex).addClass('picker-selected').transform('');\n \n // Set 3D rotate effect\n if (p.params.rotateEffect) {\n var percentage = (translate - (Math.floor((translate - maxTranslate)/itemHeight) * itemHeight + maxTranslate)) / itemHeight;\n \n col.items.each(function () {\n var item = $(this);\n var itemOffsetTop = item.index() * itemHeight;\n var translateOffset = maxTranslate - translate;\n var itemOffset = itemOffsetTop - translateOffset;\n var percentage = itemOffset / itemHeight;\n \n var itemsFit = Math.ceil(col.height / itemHeight / 2) + 1;\n \n var angle = (-18*percentage);\n if (angle > 180) angle = 180;\n if (angle < -180) angle = -180;\n // Far class\n if (Math.abs(percentage) > itemsFit) item.addClass('picker-item-far');\n else item.removeClass('picker-item-far');\n // Set transform\n item.transform('translate3d(0, ' + (-translate + maxTranslate) + 'px, ' + (originBug ? -110 : 0) + 'px) rotateX(' + angle + 'deg)');\n });\n }\n \n if (valueCallbacks || typeof valueCallbacks === 'undefined') {\n // Update values\n col.value = selectedItem.attr('data-picker-value');\n col.displayValue = col.displayValues ? col.displayValues[activeIndex] : col.value;\n // On change callback\n if (previousActiveIndex !== activeIndex) {\n if (col.onChange) {\n col.onChange(p, col.value, col.displayValue);\n }\n p.updateValue();\n }\n }\n };\n \n function updateDuringScroll() {\n animationFrameId = $.requestAnimationFrame(function () {\n col.updateItems(undefined, undefined, 0);\n updateDuringScroll();\n });\n }\n \n // Update items on init\n if (updateItems) col.updateItems(0, maxTranslate, 0);\n \n var allowItemClick = true;\n var isTouched, isMoved, touchStartY, touchCurrentY, touchStartTime, touchEndTime, startTranslate, returnTo, currentTranslate, prevTranslate, velocityTranslate, velocityTime;\n function handleTouchStart (e) {\n if (isMoved || isTouched) return;\n e.preventDefault();\n isTouched = true;\n touchStartY = touchCurrentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = (new Date()).getTime();\n \n allowItemClick = true;\n startTranslate = currentTranslate = $.getTranslate(col.wrapper[0], 'y');\n }\n function handleTouchMove (e) {\n if (!isTouched) return;\n e.preventDefault();\n allowItemClick = false;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (!isMoved) {\n // First move\n $.cancelAnimationFrame(animationFrameId);\n isMoved = true;\n startTranslate = currentTranslate = $.getTranslate(col.wrapper[0], 'y');\n col.wrapper.transition(0);\n }\n \n var diff = touchCurrentY - touchStartY;\n currentTranslate = startTranslate + diff;\n returnTo = undefined;\n \n // Normalize translate\n if (currentTranslate < minTranslate) {\n currentTranslate = minTranslate - Math.pow(minTranslate - currentTranslate, 0.8);\n returnTo = 'min';\n }\n if (currentTranslate > maxTranslate) {\n currentTranslate = maxTranslate + Math.pow(currentTranslate - maxTranslate, 0.8);\n returnTo = 'max';\n }\n // Transform wrapper\n col.wrapper.transform('translate3d(0,' + currentTranslate + 'px,0)');\n \n // Update items\n col.updateItems(undefined, currentTranslate, 0, p.params.updateValuesOnTouchmove);\n \n // Calc velocity\n velocityTranslate = currentTranslate - prevTranslate || currentTranslate;\n velocityTime = (new Date()).getTime();\n prevTranslate = currentTranslate;\n }\n function handleTouchEnd (e) {\n if (!isTouched || !isMoved) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n col.wrapper.transition('');\n if (returnTo) {\n if (returnTo === 'min') {\n col.wrapper.transform('translate3d(0,' + minTranslate + 'px,0)');\n }\n else col.wrapper.transform('translate3d(0,' + maxTranslate + 'px,0)');\n }\n touchEndTime = new Date().getTime();\n var velocity, newTranslate;\n if (touchEndTime - touchStartTime > 300) {\n newTranslate = currentTranslate;\n }\n else {\n velocity = Math.abs(velocityTranslate / (touchEndTime - velocityTime));\n newTranslate = currentTranslate + velocityTranslate * p.params.momentumRatio;\n }\n \n newTranslate = Math.max(Math.min(newTranslate, maxTranslate), minTranslate);\n \n // Active Index\n var activeIndex = -Math.floor((newTranslate - maxTranslate)/itemHeight);\n \n // Normalize translate\n if (!p.params.freeMode) newTranslate = -activeIndex * itemHeight + maxTranslate;\n \n // Transform wrapper\n col.wrapper.transform('translate3d(0,' + (parseInt(newTranslate,10)) + 'px,0)');\n \n // Update items\n col.updateItems(activeIndex, newTranslate, '', true);\n \n // Watch items\n if (p.params.updateValuesOnMomentum) {\n updateDuringScroll();\n col.wrapper.transitionEnd(function(){\n $.cancelAnimationFrame(animationFrameId);\n });\n }\n \n // Allow click\n setTimeout(function () {\n allowItemClick = true;\n }, 100);\n }\n \n function handleClick(e) {\n if (!allowItemClick) return;\n $.cancelAnimationFrame(animationFrameId);\n /*jshint validthis:true */\n var value = $(this).attr('data-picker-value');\n col.setValue(value);\n }\n \n col.initEvents = function (detach) {\n var method = detach ? 'off' : 'on';\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n col.container[method](app.touchEvents.start, handleTouchStart, activeListener);\n col.container[method](app.touchEvents.move, handleTouchMove, activeListener);\n col.container[method](app.touchEvents.end, handleTouchEnd, activeListener);\n col.items[method]('click', handleClick);\n };\n col.destroyEvents = function () {\n col.initEvents(true);\n };\n \n col.container[0].f7DestroyPickerCol = function () {\n col.destroyEvents();\n };\n \n col.initEvents();\n \n };\n p.destroyPickerCol = function (colContainer) {\n colContainer = $(colContainer);\n if ('f7DestroyPickerCol' in colContainer[0]) colContainer[0].f7DestroyPickerCol();\n };\n // Resize cols\n function resizeCols() {\n if (!p.opened) return;\n for (var i = 0; i < p.cols.length; i++) {\n if (!p.cols[i].divider) {\n p.cols[i].calcSize();\n p.cols[i].setValue(p.cols[i].value, 0, false);\n }\n }\n }\n app.onResize(resizeCols);\n \n // HTML Layout\n p.columnHTML = function (col, onlyItems) {\n var columnItemsHTML = '';\n var columnHTML = '';\n if (col.divider) {\n columnHTML += '
              ' + col.content + '
              ';\n }\n else {\n for (var j = 0; j < col.values.length; j++) {\n columnItemsHTML += '
              ' + (col.displayValues ? col.displayValues[j] : col.values[j]) + '
              ';\n }\n columnHTML += '
              ' + columnItemsHTML + '
              ';\n }\n return onlyItems ? columnItemsHTML : columnHTML;\n };\n p.layout = function () {\n var pickerHTML = '';\n var pickerClass = '';\n var i;\n p.cols = [];\n var colsHTML = '';\n for (i = 0; i < p.params.cols.length; i++) {\n var col = p.params.cols[i];\n colsHTML += p.columnHTML(p.params.cols[i]);\n p.cols.push(col);\n }\n pickerClass = 'picker-modal picker-columns ' + (p.params.cssClass || '') + (p.params.rotateEffect ? ' picker-3d' : '');\n pickerHTML =\n '
              ' +\n (p.params.toolbar ? p.params.toolbarTemplate.replace(/{{closeText}}/g, p.params.toolbarCloseText) : '') +\n '
              ' +\n colsHTML +\n '
              ' +\n '
              ' +\n '
              ';\n \n p.pickerHTML = pickerHTML;\n };\n \n // Input Events\n function openOnInput(e) {\n e.preventDefault();\n if (p.opened) return;\n p.open();\n if (p.params.scrollToInput && !isPopover()) {\n var pageContent = p.input.parents('.page-content');\n if (pageContent.length === 0) return;\n \n var paddingTop = parseInt(pageContent.css('padding-top'), 10),\n paddingBottom = parseInt(pageContent.css('padding-bottom'), 10),\n pageHeight = pageContent[0].offsetHeight - paddingTop - p.container.height(),\n pageScrollHeight = pageContent[0].scrollHeight - paddingTop - p.container.height(),\n newPaddingBottom;\n var inputTop = p.input.offset().top - paddingTop + p.input[0].offsetHeight;\n if (inputTop > pageHeight) {\n var scrollTop = pageContent.scrollTop() + inputTop - pageHeight;\n if (scrollTop + pageHeight > pageScrollHeight) {\n newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;\n if (pageHeight === pageScrollHeight) {\n newPaddingBottom = p.container.height();\n }\n pageContent.css({'padding-bottom': (newPaddingBottom) + 'px'});\n }\n pageContent.scrollTop(scrollTop, 300);\n }\n }\n }\n function closeOnHTMLClick(e) {\n if (inPopover()) return;\n if (p.input && p.input.length > 0) {\n if (e.target !== p.input[0] && $(e.target).parents('.picker-modal').length === 0) p.close();\n }\n else {\n if ($(e.target).parents('.picker-modal').length === 0) p.close();\n }\n }\n \n if (p.params.input) {\n p.input = $(p.params.input);\n if (p.input.length > 0) {\n if (p.params.inputReadOnly) p.input.prop('readOnly', true);\n if (!p.inline) {\n p.input.on('click', openOnInput);\n }\n if (p.params.inputReadOnly) {\n p.input.on('focus mousedown', function (e) {\n e.preventDefault();\n });\n }\n }\n \n }\n \n if (!p.inline && p.params.closeByOutsideClick) $('html').on('click', closeOnHTMLClick);\n \n // Open\n function onPickerClose() {\n p.opened = false;\n if (p.input && p.input.length > 0) {\n p.input.parents('.page-content').css({'padding-bottom': ''});\n if (app.params.material) p.input.trigger('blur');\n }\n if (p.params.onClose) p.params.onClose(p);\n \n // Destroy events\n p.container.find('.picker-items-col').each(function () {\n p.destroyPickerCol(this);\n });\n }\n \n p.opened = false;\n p.open = function () {\n var toPopover = isPopover();\n \n if (!p.opened) {\n \n // Layout\n p.layout();\n \n // Append\n if (toPopover) {\n p.pickerHTML = '
              ' + p.pickerHTML + '
              ';\n p.popover = app.popover(p.pickerHTML, p.params.input, true);\n p.container = $(p.popover).find('.picker-modal');\n $(p.popover).on('popover:close', function () {\n onPickerClose();\n });\n }\n else if (p.inline) {\n p.container = $(p.pickerHTML);\n p.container.addClass('picker-modal-inline');\n $(p.params.container).append(p.container);\n }\n else {\n p.container = $(app.pickerModal(p.pickerHTML));\n $(p.container)\n .on('picker:close', function () {\n onPickerClose();\n });\n }\n \n // Store picker instance\n p.container[0].f7Picker = p;\n \n // Init Events\n p.container.find('.picker-items-col').each(function () {\n var updateItems = true;\n if ((!p.initialized && p.params.value) || (p.initialized && p.value)) updateItems = false;\n p.initPickerCol(this, updateItems);\n });\n \n // Set value\n if (!p.initialized) {\n if (p.value) p.setValue(p.value, 0);\n else if (p.params.value) {\n p.setValue(p.params.value, 0);\n }\n }\n else {\n if (p.value) p.setValue(p.value, 0);\n }\n \n // Material Focus\n if (p.input && p.input.length > 0 && app.params.material) {\n p.input.trigger('focus');\n }\n }\n \n // Set flag\n p.opened = true;\n p.initialized = true;\n \n if (p.params.onOpen) p.params.onOpen(p);\n };\n \n // Close\n p.close = function () {\n if (!p.opened || p.inline) return;\n if (inPopover()) {\n app.closeModal(p.popover);\n return;\n }\n else {\n app.closeModal(p.container);\n return;\n }\n };\n \n // Destroy\n p.destroy = function () {\n p.close();\n if (p.params.input && p.input.length > 0) {\n p.input.off('click focus', openOnInput);\n }\n $('html').off('click', closeOnHTMLClick);\n app.offResize(resizeCols);\n };\n \n if (p.inline) {\n p.open();\n }\n else {\n if (!p.initialized && p.params.value) p.setValue(p.params.value);\n }\n \n return p;\n };\n app.picker = function (params) {\n return new Picker(params);\n };\n \n\n /*======================================================\n ************ Calendar ************\n ======================================================*/\n var Calendar = function (params) {\n var p = this;\n var defaults = {\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August' , 'September' , 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n firstDay: 1, // First day of the week, Monday\n weekendDays: [0, 6], // Sunday and Saturday\n multiple: false,\n rangePicker: false,\n dateFormat: 'yyyy-mm-dd',\n direction: 'horizontal', // or 'vertical'\n minDate: null,\n maxDate: null,\n disabled: null, // dates range of disabled days\n events: null, // dates range of days with events\n rangesClasses: null, //array with custom classes date ranges\n touchMove: true,\n animate: true,\n closeOnSelect: false,\n monthPicker: true,\n monthPickerTemplate:\n '
              ' +\n '' +\n '' +\n '' +\n '
              ',\n yearPicker: true,\n yearPickerTemplate:\n '
              ' +\n '' +\n '' +\n '' +\n '
              ',\n weekHeader: true,\n // Common settings\n closeByOutsideClick: true,\n scrollToInput: true,\n inputReadOnly: true,\n convertToPopover: true,\n onlyInPopover: false,\n toolbar: true,\n toolbarCloseText: 'Done',\n headerPlaceholder: 'Select date',\n header: app.params.material,\n footer: app.params.material,\n toolbarTemplate:\n '
              ' +\n '
              ' +\n '{{monthPicker}}' +\n '{{yearPicker}}' +\n '
              ' +\n '
              ',\n headerTemplate:\n '
              ' +\n '
              {{placeholder}}
              ' +\n '
              ',\n footerTemplate:\n '
              ' +\n '{{closeText}}' +\n '
              ',\n \n /* Callbacks\n onMonthAdd\n onChange\n onOpen\n onClose\n onDayClick\n onMonthYearChangeStart\n onMonthYearChangeEnd\n */\n };\n params = params || {};\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n }\n p.params = params;\n p.initialized = false;\n \n // Inline flag\n p.inline = p.params.container ? true : false;\n \n // Is horizontal\n p.isH = p.params.direction === 'horizontal';\n \n // RTL inverter\n var inverter = p.isH ? (app.rtl ? -1 : 1) : 1;\n \n // Animating flag\n p.animating = false;\n \n // Should be converted to popover\n function isPopover() {\n var toPopover = false;\n if (!p.params.convertToPopover && !p.params.onlyInPopover) return toPopover;\n if (!p.inline && p.params.input) {\n if (p.params.onlyInPopover) toPopover = true;\n else {\n if (app.device.ios) {\n toPopover = app.device.ipad ? true : false;\n }\n else {\n if (app.width >= 768) toPopover = true;\n }\n }\n }\n return toPopover;\n }\n function inPopover() {\n if (p.opened && p.container && p.container.length > 0 && p.container.parents('.popover').length > 0) return true;\n else return false;\n }\n \n // Format date\n function formatDate(date) {\n date = new Date(date);\n var year = date.getFullYear();\n var month = date.getMonth();\n var month1 = month + 1;\n var day = date.getDate();\n var weekDay = date.getDay();\n \n return p.params.dateFormat\n .replace(/yyyy/g, year)\n .replace(/yy/g, (year + '').substring(2))\n .replace(/mm/g, month1 < 10 ? '0' + month1 : month1)\n .replace(/m(\\W+)/g, month1 + '$1')\n .replace(/MM/g, p.params.monthNames[month])\n .replace(/M(\\W+)/g, p.params.monthNamesShort[month] + '$1')\n .replace(/dd/g, day < 10 ? '0' + day : day)\n .replace(/d(\\W+)/g, day + '$1')\n .replace(/DD/g, p.params.dayNames[weekDay])\n .replace(/D(\\W+)/g, p.params.dayNamesShort[weekDay] + '$1');\n }\n \n \n // Value\n p.addValue = function (value) {\n if (p.params.multiple) {\n if (!p.value) p.value = [];\n var inValuesIndex;\n for (var i = 0; i < p.value.length; i++) {\n if (new Date(value).getTime() === new Date(p.value[i]).getTime()) {\n inValuesIndex = i;\n }\n }\n if (typeof inValuesIndex === 'undefined') {\n p.value.push(value);\n }\n else {\n p.value.splice(inValuesIndex, 1);\n }\n p.updateValue();\n }\n else if (p.params.rangePicker) {\n if (!p.value) p.value = [];\n if (p.value.length === 2 || p.value.length === 0) {\n p.value = [];\n }\n if (p.value[0] !== value) p.value.push(value);\n else p.value = [];\n p.value.sort(function (a,b) {\n return a - b;\n });\n p.updateValue();\n }\n else {\n p.value = [value];\n p.updateValue();\n }\n };\n p.setValue = function (arrValues) {\n p.value = arrValues;\n p.updateValue();\n };\n p.updateValue = function (onlyHeader) {\n var i, inputValue;\n if (p.container && p.container.length > 0) {\n p.wrapper.find('.picker-calendar-day-selected').removeClass('picker-calendar-day-selected');\n var valueDate;\n if (p.params.rangePicker && p.value.length === 2) {\n for (i = new Date(p.value[0]).getTime(); i <= new Date(p.value[1]).getTime(); i += 24*60*60*1000) {\n valueDate = new Date(i);\n p.wrapper.find('.picker-calendar-day[data-date=\"' + valueDate.getFullYear() + '-' + valueDate.getMonth() + '-' + valueDate.getDate() + '\"]').addClass('picker-calendar-day-selected');\n }\n }\n else {\n for (i = 0; i < p.value.length; i++) {\n valueDate = new Date(p.value[i]);\n p.wrapper.find('.picker-calendar-day[data-date=\"' + valueDate.getFullYear() + '-' + valueDate.getMonth() + '-' + valueDate.getDate() + '\"]').addClass('picker-calendar-day-selected');\n }\n }\n }\n \n if (p.params.onChange) {\n p.params.onChange(p, p.value);\n }\n if ((p.input && p.input.length > 0) || (app.params.material && p.params.header)) {\n if (p.params.formatValue) inputValue = p.params.formatValue(p, p.value);\n else {\n inputValue = [];\n for (i = 0; i < p.value.length; i++) {\n inputValue.push(formatDate(p.value[i]));\n }\n inputValue = inputValue.join(p.params.rangePicker ? ' - ' : ', ');\n }\n if (app.params.material && p.params.header && p.container && p.container.length > 0) {\n p.container.find('.picker-calendar-selected-date').text(inputValue);\n }\n if (p.input && p.input.length > 0 && !onlyHeader) {\n $(p.input).val(inputValue);\n $(p.input).trigger('change');\n }\n \n }\n };\n \n // Columns Handlers\n p.initCalendarEvents = function () {\n var col;\n var allowItemClick = true;\n var isTouched, isMoved, touchStartX, touchStartY, touchCurrentX, touchCurrentY, touchStartTime, touchEndTime, startTranslate, currentTranslate, wrapperWidth, wrapperHeight, percentage, touchesDiff, isScrolling;\n function handleTouchStart (e) {\n if (isMoved || isTouched) return;\n // e.preventDefault();\n isTouched = true;\n touchStartX = touchCurrentY = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchStartY = touchCurrentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = (new Date()).getTime();\n percentage = 0;\n allowItemClick = true;\n isScrolling = undefined;\n startTranslate = currentTranslate = p.monthsTranslate;\n }\n function handleTouchMove (e) {\n if (!isTouched) return;\n \n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));\n }\n if (p.isH && isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n if (p.animating) {\n isTouched = false;\n return;\n }\n allowItemClick = false;\n if (!isMoved) {\n // First move\n isMoved = true;\n wrapperWidth = p.wrapper[0].offsetWidth;\n wrapperHeight = p.wrapper[0].offsetHeight;\n p.wrapper.transition(0);\n }\n \n touchesDiff = p.isH ? touchCurrentX - touchStartX : touchCurrentY - touchStartY;\n percentage = touchesDiff/(p.isH ? wrapperWidth : wrapperHeight);\n currentTranslate = (p.monthsTranslate * inverter + percentage) * 100;\n \n // Transform wrapper\n p.wrapper.transform('translate3d(' + (p.isH ? currentTranslate : 0) + '%, ' + (p.isH ? 0 : currentTranslate) + '%, 0)');\n \n }\n function handleTouchEnd (e) {\n if (!isTouched || !isMoved) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n touchEndTime = new Date().getTime();\n if (touchEndTime - touchStartTime < 300) {\n if (Math.abs(touchesDiff) < 10) {\n p.resetMonth();\n }\n else if (touchesDiff >= 10) {\n if (app.rtl) p.nextMonth();\n else p.prevMonth();\n }\n else {\n if (app.rtl) p.prevMonth();\n else p.nextMonth();\n }\n }\n else {\n if (percentage <= -0.5) {\n if (app.rtl) p.prevMonth();\n else p.nextMonth();\n }\n else if (percentage >= 0.5) {\n if (app.rtl) p.nextMonth();\n else p.prevMonth();\n }\n else {\n p.resetMonth();\n }\n }\n \n // Allow click\n setTimeout(function () {\n allowItemClick = true;\n }, 100);\n }\n \n function handleDayClick(e) {\n if (!allowItemClick) return;\n var day = $(e.target).parents('.picker-calendar-day');\n if (day.length === 0 && $(e.target).hasClass('picker-calendar-day')) {\n day = $(e.target);\n }\n if (day.length === 0) return;\n if (day.hasClass('picker-calendar-day-disabled')) return;\n if (!p.params.rangePicker) {\n if (day.hasClass('picker-calendar-day-next')) p.nextMonth();\n if (day.hasClass('picker-calendar-day-prev')) p.prevMonth();\n }\n var dateYear = day.attr('data-year');\n var dateMonth = day.attr('data-month');\n var dateDay = day.attr('data-day');\n if (p.params.onDayClick) {\n p.params.onDayClick(p, day[0], dateYear, dateMonth, dateDay);\n }\n if (!day.hasClass('picker-calendar-day-selected') || p.params.multiple || p.params.rangePicker) {\n p.addValue(new Date(dateYear, dateMonth, dateDay, 0, 0, 0));\n }\n if (p.params.closeOnSelect) {\n if (p.params.rangePicker && p.value.length === 2 || !p.params.rangePicker) p.close();\n }\n }\n \n p.container.find('.picker-calendar-prev-month').on('click', p.prevMonth);\n p.container.find('.picker-calendar-next-month').on('click', p.nextMonth);\n p.container.find('.picker-calendar-prev-year').on('click', p.prevYear);\n p.container.find('.picker-calendar-next-year').on('click', p.nextYear);\n p.wrapper.on('click', handleDayClick);\n var passiveListener = app.touchEvents.start === 'touchstart' && app.support.passiveListener ? {passive: true, capture: false} : false;\n var activeListener = app.support.passiveListener ? {passive: false, capture: false} : false;\n if (p.params.touchMove) {\n p.wrapper.on(app.touchEvents.start, handleTouchStart, passiveListener);\n p.wrapper.on(app.touchEvents.move, handleTouchMove, activeListener);\n p.wrapper.on(app.touchEvents.end, handleTouchEnd, passiveListener);\n }\n \n p.container[0].f7DestroyCalendarEvents = function () {\n p.container.find('.picker-calendar-prev-month').off('click', p.prevMonth);\n p.container.find('.picker-calendar-next-month').off('click', p.nextMonth);\n p.container.find('.picker-calendar-prev-year').off('click', p.prevYear);\n p.container.find('.picker-calendar-next-year').off('click', p.nextYear);\n p.wrapper.off('click', handleDayClick);\n if (p.params.touchMove) {\n p.wrapper.off(app.touchEvents.start, handleTouchStart, passiveListener);\n p.wrapper.off(app.touchEvents.move, handleTouchMove, activeListener);\n p.wrapper.off(app.touchEvents.end, handleTouchEnd, passiveListener);\n }\n };\n \n \n };\n p.destroyCalendarEvents = function (colContainer) {\n if ('f7DestroyCalendarEvents' in p.container[0]) p.container[0].f7DestroyCalendarEvents();\n };\n \n // Scan Dates Range\n p.dateInRange = function (dayDate, range) {\n var match = false;\n var i;\n if (!range) return false;\n if (Array.isArray(range)) {\n for (i = 0; i < range.length; i ++) {\n if (range[i].from || range[i].to) {\n if (range[i].from && range[i].to) {\n if ((dayDate <= new Date(range[i].to).getTime()) && (dayDate >= new Date(range[i].from).getTime())) {\n match = true;\n }\n }\n else if (range[i].from) {\n if (dayDate >= new Date(range[i].from).getTime()) {\n match = true;\n }\n }\n else if (range[i].to) {\n if (dayDate <= new Date(range[i].to).getTime()) {\n match = true;\n }\n }\n } else if (dayDate === new Date(range[i]).getTime()) {\n match = true;\n }\n }\n }\n else if (range.from || range.to) {\n if (range.from && range.to) {\n if ((dayDate <= new Date(range.to).getTime()) && (dayDate >= new Date(range.from).getTime())) {\n match = true;\n }\n }\n else if (range.from) {\n if (dayDate >= new Date(range.from).getTime()) {\n match = true;\n }\n }\n else if (range.to) {\n if (dayDate <= new Date(range.to).getTime()) {\n match = true;\n }\n }\n }\n else if (typeof range === 'function') {\n match = range(new Date(dayDate));\n }\n return match;\n };\n // Calendar Methods\n p.daysInMonth = function (date) {\n var d = new Date(date);\n return new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n };\n p.monthHTML = function (date, offset) {\n date = new Date(date);\n var year = date.getFullYear(),\n month = date.getMonth(),\n day = date.getDate();\n if (offset === 'next') {\n if (month === 11) date = new Date(year + 1, 0);\n else date = new Date(year, month + 1, 1);\n }\n if (offset === 'prev') {\n if (month === 0) date = new Date(year - 1, 11);\n else date = new Date(year, month - 1, 1);\n }\n if (offset === 'next' || offset === 'prev') {\n month = date.getMonth();\n year = date.getFullYear();\n }\n var daysInPrevMonth = p.daysInMonth(new Date(date.getFullYear(), date.getMonth()).getTime() - 10 * 24 * 60 * 60 * 1000),\n daysInMonth = p.daysInMonth(date),\n firstDayOfMonthIndex = new Date(date.getFullYear(), date.getMonth()).getDay();\n if (firstDayOfMonthIndex === 0) firstDayOfMonthIndex = 7;\n \n var dayDate, currentValues = [], i, j, k,\n rows = 6, cols = 7,\n monthHTML = '',\n dayIndex = 0 + (p.params.firstDay - 1),\n today = new Date().setHours(0,0,0,0),\n minDate = p.params.minDate ? new Date(p.params.minDate).getTime() : null,\n maxDate = p.params.maxDate ? new Date(p.params.maxDate).getTime() : null,\n disabled,\n hasEvent;\n \n if (p.value && p.value.length) {\n for (i = 0; i < p.value.length; i++) {\n currentValues.push(new Date(p.value[i]).setHours(0,0,0,0));\n }\n }\n \n for (i = 1; i <= rows; i++) {\n var rowHTML = '';\n var row = i;\n for (j = 1; j <= cols; j++) {\n var col = j;\n dayIndex ++;\n var dayNumber = dayIndex - firstDayOfMonthIndex;\n var weekDayIndex = (col - 1 + p.params.firstDay > 6) ? (col - 1 - 7 + p.params.firstDay) : (col - 1 + p.params.firstDay);\n var addClass = '';\n if (dayNumber < 0) {\n dayNumber = daysInPrevMonth + dayNumber + 1;\n addClass += ' picker-calendar-day-prev';\n dayDate = new Date(month - 1 < 0 ? year - 1 : year, month - 1 < 0 ? 11 : month - 1, dayNumber).getTime();\n }\n else {\n dayNumber = dayNumber + 1;\n if (dayNumber > daysInMonth) {\n dayNumber = dayNumber - daysInMonth;\n addClass += ' picker-calendar-day-next';\n dayDate = new Date(month + 1 > 11 ? year + 1 : year, month + 1 > 11 ? 0 : month + 1, dayNumber).getTime();\n }\n else {\n dayDate = new Date(year, month, dayNumber).getTime();\n }\n }\n // Today\n if (dayDate === today) addClass += ' picker-calendar-day-today';\n // Selected\n if (p.params.rangePicker && currentValues.length === 2) {\n if (dayDate >= currentValues[0] && dayDate <= currentValues[1]) addClass += ' picker-calendar-day-selected';\n }\n else {\n if (currentValues.indexOf(dayDate) >= 0) addClass += ' picker-calendar-day-selected';\n }\n // Weekend\n if (p.params.weekendDays.indexOf(weekDayIndex) >= 0) {\n addClass += ' picker-calendar-day-weekend';\n }\n // Has Events\n hasEvent = false;\n if (p.params.events) {\n if (p.dateInRange(dayDate, p.params.events)) {\n hasEvent = true;\n }\n }\n if (hasEvent) {\n addClass += ' picker-calendar-day-has-events';\n }\n // Custom Ranges\n if (p.params.rangesClasses) {\n for (k = 0; k < p.params.rangesClasses.length; k++) {\n if (p.dateInRange(dayDate, p.params.rangesClasses[k].range)) {\n addClass += ' ' + p.params.rangesClasses[k].cssClass;\n }\n }\n }\n // Disabled\n disabled = false;\n if ((minDate && dayDate < minDate) || (maxDate && dayDate > maxDate)) {\n disabled = true;\n }\n if (p.params.disabled) {\n if (p.dateInRange(dayDate, p.params.disabled)) {\n disabled = true;\n }\n }\n if (disabled) {\n addClass += ' picker-calendar-day-disabled';\n }\n \n \n dayDate = new Date(dayDate);\n var dayYear = dayDate.getFullYear();\n var dayMonth = dayDate.getMonth();\n rowHTML += '
              '+dayNumber+'
              ';\n }\n monthHTML += '
              ' + rowHTML + '
              ';\n }\n monthHTML = '
              ' + monthHTML + '
              ';\n return monthHTML;\n };\n p.animating = false;\n p.updateCurrentMonthYear = function (dir) {\n if (typeof dir === 'undefined') {\n p.currentMonth = parseInt(p.months.eq(1).attr('data-month'), 10);\n p.currentYear = parseInt(p.months.eq(1).attr('data-year'), 10);\n }\n else {\n p.currentMonth = parseInt(p.months.eq(dir === 'next' ? (p.months.length - 1) : 0).attr('data-month'), 10);\n p.currentYear = parseInt(p.months.eq(dir === 'next' ? (p.months.length - 1) : 0).attr('data-year'), 10);\n }\n p.container.find('.current-month-value').text(p.params.monthNames[p.currentMonth]);\n p.container.find('.current-year-value').text(p.currentYear);\n \n };\n p.onMonthChangeStart = function (dir) {\n p.updateCurrentMonthYear(dir);\n p.months.removeClass('picker-calendar-month-current picker-calendar-month-prev picker-calendar-month-next');\n var currentIndex = dir === 'next' ? p.months.length - 1 : 0;\n \n p.months.eq(currentIndex).addClass('picker-calendar-month-current');\n p.months.eq(dir === 'next' ? currentIndex - 1 : currentIndex + 1).addClass(dir === 'next' ? 'picker-calendar-month-prev' : 'picker-calendar-month-next');\n \n if (p.params.onMonthYearChangeStart) {\n p.params.onMonthYearChangeStart(p, p.currentYear, p.currentMonth);\n }\n };\n p.onMonthChangeEnd = function (dir, rebuildBoth) {\n p.animating = false;\n var nextMonthHTML, prevMonthHTML, newMonthHTML;\n p.wrapper.find('.picker-calendar-month:not(.picker-calendar-month-prev):not(.picker-calendar-month-current):not(.picker-calendar-month-next)').remove();\n \n if (typeof dir === 'undefined') {\n dir = 'next';\n rebuildBoth = true;\n }\n if (!rebuildBoth) {\n newMonthHTML = p.monthHTML(new Date(p.currentYear, p.currentMonth), dir);\n }\n else {\n p.wrapper.find('.picker-calendar-month-next, .picker-calendar-month-prev').remove();\n prevMonthHTML = p.monthHTML(new Date(p.currentYear, p.currentMonth), 'prev');\n nextMonthHTML = p.monthHTML(new Date(p.currentYear, p.currentMonth), 'next');\n }\n if (dir === 'next' || rebuildBoth) {\n p.wrapper.append(newMonthHTML || nextMonthHTML);\n }\n if (dir === 'prev' || rebuildBoth) {\n p.wrapper.prepend(newMonthHTML || prevMonthHTML);\n }\n p.months = p.wrapper.find('.picker-calendar-month');\n p.setMonthsTranslate(p.monthsTranslate);\n if (p.params.onMonthAdd) {\n p.params.onMonthAdd(p, dir === 'next' ? p.months.eq(p.months.length - 1)[0] : p.months.eq(0)[0]);\n }\n if (p.params.onMonthYearChangeEnd) {\n p.params.onMonthYearChangeEnd(p, p.currentYear, p.currentMonth);\n }\n };\n p.setMonthsTranslate = function (translate) {\n translate = translate || p.monthsTranslate || 0;\n if (typeof p.monthsTranslate === 'undefined') p.monthsTranslate = translate;\n p.months.removeClass('picker-calendar-month-current picker-calendar-month-prev picker-calendar-month-next');\n var prevMonthTranslate = -(translate + 1) * 100 * inverter;\n var currentMonthTranslate = -translate * 100 * inverter;\n var nextMonthTranslate = -(translate - 1) * 100 * inverter;\n p.months.eq(0).transform('translate3d(' + (p.isH ? prevMonthTranslate : 0) + '%, ' + (p.isH ? 0 : prevMonthTranslate) + '%, 0)').addClass('picker-calendar-month-prev');\n p.months.eq(1).transform('translate3d(' + (p.isH ? currentMonthTranslate : 0) + '%, ' + (p.isH ? 0 : currentMonthTranslate) + '%, 0)').addClass('picker-calendar-month-current');\n p.months.eq(2).transform('translate3d(' + (p.isH ? nextMonthTranslate : 0) + '%, ' + (p.isH ? 0 : nextMonthTranslate) + '%, 0)').addClass('picker-calendar-month-next');\n };\n p.nextMonth = function (transition) {\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = '';\n if (!p.params.animate) transition = 0;\n }\n var nextMonth = parseInt(p.months.eq(p.months.length - 1).attr('data-month'), 10);\n var nextYear = parseInt(p.months.eq(p.months.length - 1).attr('data-year'), 10);\n var nextDate = new Date(nextYear, nextMonth);\n var nextDateTime = nextDate.getTime();\n var transitionEndCallback = p.animating ? false : true;\n if (p.params.maxDate) {\n if (nextDateTime > new Date(p.params.maxDate).getTime()) {\n return p.resetMonth();\n }\n }\n p.monthsTranslate --;\n if (nextMonth === p.currentMonth) {\n var nextMonthTranslate = -(p.monthsTranslate) * 100 * inverter;\n var nextMonthHTML = $(p.monthHTML(nextDateTime, 'next')).transform('translate3d(' + (p.isH ? nextMonthTranslate : 0) + '%, ' + (p.isH ? 0 : nextMonthTranslate) + '%, 0)').addClass('picker-calendar-month-next');\n p.wrapper.append(nextMonthHTML[0]);\n p.months = p.wrapper.find('.picker-calendar-month');\n if (p.params.onMonthAdd) {\n p.params.onMonthAdd(p, p.months.eq(p.months.length - 1)[0]);\n }\n }\n p.animating = true;\n p.onMonthChangeStart('next');\n var translate = (p.monthsTranslate * 100) * inverter;\n \n p.wrapper.transition(transition).transform('translate3d(' + (p.isH ? translate : 0) + '%, ' + (p.isH ? 0 : translate) + '%, 0)');\n if (transitionEndCallback) {\n p.wrapper.transitionEnd(function () {\n p.onMonthChangeEnd('next');\n });\n }\n if (!p.params.animate) {\n p.onMonthChangeEnd('next');\n }\n };\n p.prevMonth = function (transition) {\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = '';\n if (!p.params.animate) transition = 0;\n }\n var prevMonth = parseInt(p.months.eq(0).attr('data-month'), 10);\n var prevYear = parseInt(p.months.eq(0).attr('data-year'), 10);\n var prevDate = new Date(prevYear, prevMonth + 1, -1);\n var prevDateTime = prevDate.getTime();\n var transitionEndCallback = p.animating ? false : true;\n if (p.params.minDate) {\n if (prevDateTime < new Date(p.params.minDate).getTime()) {\n return p.resetMonth();\n }\n }\n p.monthsTranslate ++;\n if (prevMonth === p.currentMonth) {\n var prevMonthTranslate = -(p.monthsTranslate) * 100 * inverter;\n var prevMonthHTML = $(p.monthHTML(prevDateTime, 'prev')).transform('translate3d(' + (p.isH ? prevMonthTranslate : 0) + '%, ' + (p.isH ? 0 : prevMonthTranslate) + '%, 0)').addClass('picker-calendar-month-prev');\n p.wrapper.prepend(prevMonthHTML[0]);\n p.months = p.wrapper.find('.picker-calendar-month');\n if (p.params.onMonthAdd) {\n p.params.onMonthAdd(p, p.months.eq(0)[0]);\n }\n }\n p.animating = true;\n p.onMonthChangeStart('prev');\n var translate = (p.monthsTranslate * 100) * inverter;\n p.wrapper.transition(transition).transform('translate3d(' + (p.isH ? translate : 0) + '%, ' + (p.isH ? 0 : translate) + '%, 0)');\n if (transitionEndCallback) {\n p.wrapper.transitionEnd(function () {\n p.onMonthChangeEnd('prev');\n });\n }\n if (!p.params.animate) {\n p.onMonthChangeEnd('prev');\n }\n };\n p.resetMonth = function (transition) {\n if (typeof transition === 'undefined') transition = '';\n var translate = (p.monthsTranslate * 100) * inverter;\n p.wrapper.transition(transition).transform('translate3d(' + (p.isH ? translate : 0) + '%, ' + (p.isH ? 0 : translate) + '%, 0)');\n };\n p.setYearMonth = function (year, month, transition) {\n if (typeof year === 'undefined') year = p.currentYear;\n if (typeof month === 'undefined') month = p.currentMonth;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = '';\n if (!p.params.animate) transition = 0;\n }\n var targetDate;\n if (year < p.currentYear) {\n targetDate = new Date(year, month + 1, -1).getTime();\n }\n else {\n targetDate = new Date(year, month).getTime();\n }\n if (p.params.maxDate && targetDate > new Date(p.params.maxDate).getTime()) {\n return false;\n }\n if (p.params.minDate && targetDate < new Date(p.params.minDate).getTime()) {\n return false;\n }\n var currentDate = new Date(p.currentYear, p.currentMonth).getTime();\n var dir = targetDate > currentDate ? 'next' : 'prev';\n var newMonthHTML = p.monthHTML(new Date(year, month));\n p.monthsTranslate = p.monthsTranslate || 0;\n var prevTranslate = p.monthsTranslate;\n var monthTranslate, wrapperTranslate;\n var transitionEndCallback = p.animating ? false : true;\n if (targetDate > currentDate) {\n // To next\n p.monthsTranslate --;\n if (!p.animating) p.months.eq(p.months.length - 1).remove();\n p.wrapper.append(newMonthHTML);\n p.months = p.wrapper.find('.picker-calendar-month');\n monthTranslate = -(prevTranslate - 1) * 100 * inverter;\n p.months.eq(p.months.length - 1).transform('translate3d(' + (p.isH ? monthTranslate : 0) + '%, ' + (p.isH ? 0 : monthTranslate) + '%, 0)').addClass('picker-calendar-month-next');\n }\n else {\n // To prev\n p.monthsTranslate ++;\n if (!p.animating) p.months.eq(0).remove();\n p.wrapper.prepend(newMonthHTML);\n p.months = p.wrapper.find('.picker-calendar-month');\n monthTranslate = -(prevTranslate + 1) * 100 * inverter;\n p.months.eq(0).transform('translate3d(' + (p.isH ? monthTranslate : 0) + '%, ' + (p.isH ? 0 : monthTranslate) + '%, 0)').addClass('picker-calendar-month-prev');\n }\n if (p.params.onMonthAdd) {\n p.params.onMonthAdd(p, dir === 'next' ? p.months.eq(p.months.length - 1)[0] : p.months.eq(0)[0]);\n }\n p.animating = true;\n p.onMonthChangeStart(dir);\n wrapperTranslate = (p.monthsTranslate * 100) * inverter;\n p.wrapper.transition(transition).transform('translate3d(' + (p.isH ? wrapperTranslate : 0) + '%, ' + (p.isH ? 0 : wrapperTranslate) + '%, 0)');\n if (transitionEndCallback) {\n p.wrapper.transitionEnd(function () {\n p.onMonthChangeEnd(dir, true);\n });\n }\n if (!p.params.animate) {\n p.onMonthChangeEnd(dir);\n }\n };\n p.nextYear = function () {\n p.setYearMonth(p.currentYear + 1);\n };\n p.prevYear = function () {\n p.setYearMonth(p.currentYear - 1);\n };\n \n \n // HTML Layout\n p.layout = function () {\n var pickerHTML = '';\n var pickerClass = '';\n var i;\n \n var layoutDate = p.value && p.value.length ? p.value[0] : new Date().setHours(0,0,0,0);\n var prevMonthHTML = p.monthHTML(layoutDate, 'prev');\n var currentMonthHTML = p.monthHTML(layoutDate);\n var nextMonthHTML = p.monthHTML(layoutDate, 'next');\n var monthsHTML = '
              ' + (prevMonthHTML + currentMonthHTML + nextMonthHTML) + '
              ';\n // Week days header\n var weekHeaderHTML = '';\n if (p.params.weekHeader) {\n for (i = 0; i < 7; i++) {\n var weekDayIndex = (i + p.params.firstDay > 6) ? (i - 7 + p.params.firstDay) : (i + p.params.firstDay);\n var dayName = p.params.dayNamesShort[weekDayIndex];\n weekHeaderHTML += '
              = 0) ? 'picker-calendar-week-day-weekend' : '') + '\"> ' + dayName + '
              ';\n \n }\n weekHeaderHTML = '
              ' + weekHeaderHTML + '
              ';\n }\n pickerClass = 'picker-modal picker-calendar' +\n (p.params.rangePicker ? ' picker-calendar-range' : '') +\n (p.params.cssClass ? ' ' + p.params.cssClass : '');\n var toolbarHTML = p.params.toolbar ? p.params.toolbarTemplate.replace(/{{closeText}}/g, p.params.toolbarCloseText) : '';\n if (p.params.toolbar) {\n toolbarHTML = p.params.toolbarTemplate\n .replace(/{{closeText}}/g, p.params.toolbarCloseText)\n .replace(/{{monthPicker}}/g, (p.params.monthPicker ? p.params.monthPickerTemplate : ''))\n .replace(/{{yearPicker}}/g, (p.params.yearPicker ? p.params.yearPickerTemplate : ''));\n }\n var headerHTML = p.params.header ? p.params.headerTemplate.replace(/{{closeText}}/g, p.params.toolbarCloseText).replace(/{{placeholder}}/g, p.params.headerPlaceholder) : '';\n var footerHTML = p.params.footer ? p.params.footerTemplate.replace(/{{closeText}}/g, p.params.toolbarCloseText) : '';\n \n pickerHTML =\n '
              ' +\n headerHTML +\n footerHTML +\n toolbarHTML +\n '
              ' +\n weekHeaderHTML +\n monthsHTML +\n '
              ' +\n '
              ';\n \n \n p.pickerHTML = pickerHTML;\n };\n \n // Input Events\n function openOnInput(e) {\n e.preventDefault();\n if (p.opened) return;\n p.open();\n if (p.params.scrollToInput && !isPopover() && !app.params.material) {\n var pageContent = p.input.parents('.page-content');\n if (pageContent.length === 0) return;\n \n var paddingTop = parseInt(pageContent.css('padding-top'), 10),\n paddingBottom = parseInt(pageContent.css('padding-bottom'), 10),\n pageHeight = pageContent[0].offsetHeight - paddingTop - p.container.height(),\n pageScrollHeight = pageContent[0].scrollHeight - paddingTop - p.container.height(),\n newPaddingBottom;\n \n var inputTop = p.input.offset().top - paddingTop + p.input[0].offsetHeight;\n if (inputTop > pageHeight) {\n var scrollTop = pageContent.scrollTop() + inputTop - pageHeight;\n if (scrollTop + pageHeight > pageScrollHeight) {\n newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;\n if (pageHeight === pageScrollHeight) {\n newPaddingBottom = p.container.height();\n }\n pageContent.css({'padding-bottom': (newPaddingBottom) + 'px'});\n }\n pageContent.scrollTop(scrollTop, 300);\n }\n }\n }\n function closeOnHTMLClick(e) {\n if (inPopover()) return;\n if (p.input && p.input.length > 0) {\n if (e.target !== p.input[0] && $(e.target).parents('.picker-modal').length === 0) p.close();\n }\n else {\n if ($(e.target).parents('.picker-modal').length === 0) p.close();\n }\n }\n \n if (p.params.input) {\n p.input = $(p.params.input);\n if (p.input.length > 0) {\n if (p.params.inputReadOnly) p.input.prop('readOnly', true);\n if (!p.inline) {\n p.input.on('click', openOnInput);\n }\n if (p.params.inputReadOnly) {\n p.input.on('focus mousedown', function (e) {\n e.preventDefault();\n });\n }\n }\n \n }\n \n if (!p.inline && p.params.closeByOutsideClick) $('html').on('click', closeOnHTMLClick);\n \n // Open\n function onPickerClose() {\n p.opened = false;\n if (p.input && p.input.length > 0) {\n p.input.parents('.page-content').css({'padding-bottom': ''});\n if (app.params.material) p.input.trigger('blur');\n }\n if (p.params.onClose) p.params.onClose(p);\n \n // Destroy events\n p.destroyCalendarEvents();\n }\n \n p.opened = false;\n p.open = function () {\n var toPopover = isPopover();\n var updateValue = false;\n if (!p.opened) {\n // Set date value\n if (!p.value) {\n if (p.params.value) {\n p.value = p.params.value;\n updateValue = true;\n }\n }\n \n // Layout\n p.layout();\n \n // Append\n if (toPopover) {\n p.pickerHTML = '
              ' + p.pickerHTML + '
              ';\n p.popover = app.popover(p.pickerHTML, p.params.input, true);\n p.container = $(p.popover).find('.picker-modal');\n $(p.popover).on('popover:close', function () {\n onPickerClose();\n });\n }\n else if (p.inline) {\n p.container = $(p.pickerHTML);\n p.container.addClass('picker-modal-inline');\n $(p.params.container).append(p.container);\n }\n else {\n p.container = $(app.pickerModal(p.pickerHTML));\n $(p.container)\n .on('picker:close', function () {\n onPickerClose();\n });\n }\n \n // Store calendar instance\n p.container[0].f7Calendar = p;\n p.wrapper = p.container.find('.picker-calendar-months-wrapper');\n \n // Months\n p.months = p.wrapper.find('.picker-calendar-month');\n \n // Update current month and year\n p.updateCurrentMonthYear();\n \n // Set initial translate\n p.monthsTranslate = 0;\n p.setMonthsTranslate();\n \n // Init events\n p.initCalendarEvents();\n \n // Update input value\n if (updateValue) p.updateValue();\n else if (app.params.material && p.value) p.updateValue(true);\n \n // Material Focus\n if (p.input && p.input.length > 0 && app.params.material) {\n p.input.trigger('focus');\n }\n \n }\n \n // Set flag\n p.opened = true;\n p.initialized = true;\n if (p.params.onMonthAdd) {\n p.months.each(function () {\n p.params.onMonthAdd(p, this);\n });\n }\n if (p.params.onOpen) p.params.onOpen(p);\n };\n \n // Close\n p.close = function () {\n if (!p.opened || p.inline) return;\n if (inPopover()) {\n app.closeModal(p.popover);\n return;\n }\n else {\n app.closeModal(p.container);\n return;\n }\n };\n \n // Destroy\n p.destroy = function () {\n p.close();\n if (p.params.input && p.input.length > 0) {\n p.input.off('click focus', openOnInput);\n }\n $('html').off('click', closeOnHTMLClick);\n };\n \n if (p.inline) {\n p.open();\n }\n else {\n if (!p.initialized && p.params.value) p.setValue(p.params.value);\n }\n \n return p;\n };\n app.calendar = function (params) {\n return new Calendar(params);\n };\n \n\n /*======================================================\n ************ Notifications ************\n ======================================================*/\n var _tempNotificationElement;\n app.addNotification = function (params) {\n if (!params) return;\n \n if (typeof params.media === 'undefined') params.media = app.params.notificationMedia;\n if (typeof params.title === 'undefined') params.title = app.params.notificationTitle;\n if (typeof params.subtitle === 'undefined') params.subtitle = app.params.notificationSubtitle;\n if (typeof params.closeIcon === 'undefined') params.closeIcon = app.params.notificationCloseIcon;\n if (typeof params.hold === 'undefined') params.hold = app.params.notificationHold;\n if (typeof params.closeOnClick === 'undefined') params.closeOnClick = app.params.notificationCloseOnClick;\n if (typeof params.button === 'undefined') params.button = app.params.notificationCloseButtonText && {\n text: app.params.notificationCloseButtonText,\n close: true\n };\n \n if (!_tempNotificationElement) _tempNotificationElement = document.createElement('div');\n \n params.material = app.params.material;\n \n var container = $('.notifications');\n if (container.length === 0) {\n app.root.append('
                ');\n container = $('.notifications');\n }\n var list = container.children('ul');\n \n var notificationTemplate = app.params.notificationTemplate || \n '{{#if custom}}' +\n '
              • {{custom}}
              • ' +\n '{{else}}' +\n '
              • ' +\n '
                ' +\n '{{#if material}}' +\n '
                ' +\n '
                {{js \"this.message || this.title || this.subtitle\"}}
                ' +\n '{{#if ../button}}{{#button}}' +\n '
                ' +\n '{{text}}' +\n '
                ' +\n '{{/button}}{{/if}}' +\n '
                ' +\n '{{else}}' +\n '{{#if media}}' +\n '
                {{media}}
                ' +\n '{{/if}}' +\n '
                ' +\n '
                ' +\n '{{#if title}}' +\n '
                {{title}}
                ' +\n '{{/if}}' +\n '{{#if closeIcon}}' +\n '
                ' +\n '{{/if}}' +\n '
                ' +\n '{{#if subtitle}}' +\n '
                {{subtitle}}
                ' +\n '{{/if}}' +\n '{{#if message}}' +\n '
                {{message}}
                ' +\n '
                ' +\n '{{/if}}' +\n '{{/if}}' +\n '
                ' +\n '
              • ' +\n '{{/if}}';\n if (!app._compiledTemplates.notification) {\n app._compiledTemplates.notification = t7.compile(notificationTemplate);\n }\n _tempNotificationElement.innerHTML = app._compiledTemplates.notification(params);\n \n var item = $(_tempNotificationElement).children();\n \n item.on('click', function (e) {\n var close = false;\n var target = $(e.target);\n if (params.material && target.hasClass('button')) {\n if (params.button && params.button.onClick) params.button.onClick.call(target[0], e, item[0]);\n }\n if (target.is('.close-notification') || $(e.target).parents('.close-notification').length > 0) {\n close = true;\n }\n else {\n if (params.onClick) params.onClick(e, item[0]);\n if (params.closeOnClick) close = true;\n }\n if (close) app.closeNotification(item[0], e);\n });\n if (params.onClose) {\n item.data('f7NotificationOnClose', function (e) {\n params.onClose(item[0], e);\n });\n }\n if (params.additionalClass) {\n item.addClass(params.additionalClass);\n }\n if (params.hold) {\n setTimeout(function () {\n if (item.length > 0) app.closeNotification(item[0]);\n }, params.hold);\n }\n \n if (!app.params.material) {\n app.closeNotification(list.children('li.notification-item:last-child'));\n }\n list.append(item[0]);\n container.show();\n \n var itemHeight = item.outerHeight(), clientLeft;\n if (params.material) {\n container.transform('translate3d(0, '+itemHeight+'px, 0)');\n container.transition(0);\n \n clientLeft = item[0].clientLeft;\n \n container.transform('translate3d(0, 0, 0)');\n container.transition('');\n }\n else {\n item.transform('translate3d(0,' + (-itemHeight) + 'px,0)');\n item.transition(0);\n \n clientLeft = item[0].clientLeft;\n \n item.transition('');\n item.transform('translate3d(0,0px,0)');\n }\n \n container.transform('translate3d(0, 0,0)');\n item.removeClass('notification-hidden');\n \n return item[0];\n };\n app.closeNotification = function (item, event) {\n item = $(item);\n if (item.length === 0) return;\n if (item.hasClass('notification-item-removing')) return;\n var container = $('.notifications');\n \n var itemHeight = item.outerHeight();\n item.css('height', itemHeight + 'px').transition(0).addClass('notification-item-removing');\n var clientLeft = item[0].clientLeft;\n \n item.css({\n height: '0px',\n marginBottom: '0px'\n }).transition('');\n \n if (item.data('f7NotificationOnClose')) item.data('f7NotificationOnClose')(event);\n \n if (container.find('.notification-item:not(.notification-item-removing)').length === 0) {\n container.transform('');\n }\n \n item.addClass('notification-hidden').transitionEnd(function () {\n item.remove();\n if (container.find('.notification-item').length === 0) {\n container.hide();\n }\n });\n };\n\n /*===============================================================================\n ************ Data Table ************\n ===============================================================================*/\n app.initDataTable = function (table) {\n table = $(table);\n var tableHeader = table.find('.data-table-header');\n var tableHeaderSelected = table.find('.data-table-header-selected');\n \n // Handle selected\n function checkSelectedHeader() {\n if (tableHeader.length > 0 && tableHeaderSelected.length > 0) {\n var checkedItems = table.find('tbody .checkbox-cell input:checked').length;\n table[checkedItems > 0 ? 'addClass' : 'removeClass']('data-table-has-checked');\n tableHeaderSelected.find('.data-table-selected-count').text(checkedItems);\n }\n }\n function toggleRowSelected (index, el, checked) {\n // Select the row if the checkbox is the first column\n if (index === 0) {\n el[checked ? 'addClass': 'removeClass']('data-table-row-selected');\n }\n }\n \n table.on('change', '.checkbox-cell input[type=\"checkbox\"]', function (e) {\n if (e.detail && e.detail._sentByF7DataTable) {\n // Scripted event, don't do anything\n return;\n }\n var input = $(this);\n var checked = input[0].checked;\n var headerCell = input.parents('th');\n var columnIndex = input.parents('td,th').index();\n \n // If header checkbox exists\n if (headerCell.length > 0) {\n toggleRowSelected(columnIndex, table.find('tbody tr'), checked); \n table.find('tbody tr td:nth-child(' + (columnIndex +1) + ') input').prop('checked', checked).trigger('change', {_sentByF7DataTable: true});\n }\n else {\n toggleRowSelected(columnIndex, input.parents('tr'), checked);\n \n if (!checked) {\n table.find('thead .checkbox-cell:nth-child(' + (columnIndex +1) + ') input[type=\"checkbox\"]').prop('checked', false);\n }\n else {\n // Check for all checked\n if (table.find('tbody .checkbox-cell:nth-child(' + (columnIndex +1) + ') input[type=\"checkbox\"]:checked').length === table.find('tbody tr').length) {\n table.find('thead .checkbox-cell:nth-child(' + (columnIndex +1) + ') input[type=\"checkbox\"]').prop('checked', true).trigger('change', {_sentByF7DataTable: true});\n }\n }\n }\n checkSelectedHeader();\n });\n checkSelectedHeader();\n \n // Sortable\n table.find('thead .sortable-cell').on('click', function () {\n var cell = $(this);\n var isActive = cell.hasClass('sortable-active');\n var currentSort;\n if (isActive) {\n currentSort = cell.hasClass('sortable-desc') ? 'desc' : 'asc';\n cell.removeClass('sortable-desc sortable-asc').addClass('sortable-' + (currentSort === 'desc' ? 'asc' : 'desc'));\n }\n else {\n table.find('thead .sortable-active').removeClass('sortable-active');\n cell.addClass('sortable-active');\n }\n });\n \n // Collapsible\n if (table.hasClass('data-table-collapsible')) {\n table.find('tbody td:not(.checkbox-cell)').each(function () {\n var index = $(this).index();\n var collpsibleTitle = $(this).attr('data-collapsible-title');\n if (!collpsibleTitle && collpsibleTitle !== '') {\n $(this).attr('data-collapsible-title', table.find('thead th').eq(index).text());\n }\n });\n }\n };\n app.initPageDataTables = function (pageContainer) {\n pageContainer = $(pageContainer);\n var dataTables = pageContainer.find('.data-table-init');\n if (dataTables.length === 0 && pageContainer.hasClass('data-table-init')) {\n dataTables = pageContainer;\n }\n dataTables.each(function () {\n app.initDataTable(this);\n });\n };\n \n\n /*===========================\n Compile Template7 Templates On App Init\n ===========================*/\n app.initTemplate7Templates = function () {\n if (!window.Template7) return;\n Template7.templates = Template7.templates || app.params.templates || {};\n Template7.data = Template7.data || app.params.template7Data || {};\n Template7.cache = Template7.cache || {};\n \n app.templates = Template7.templates;\n app.template7Data = Template7.data;\n app.template7Cache = Template7.cache;\n \n // Precompile templates on app init\n if (!app.params.precompileTemplates) return;\n $('script[type=\"text/template7\"]').each(function () {\n var id = $(this).attr('id');\n if (!id) return;\n Template7.templates[id] = Template7.compile($(this).html());\n });\n };\n \n\n /*=======================================\n ************ Plugins API ************\n =======================================*/\n var _plugins = [];\n app.initPlugins = function () {\n // Initialize plugins\n for (var plugin in app.plugins) {\n var p = app.plugins[plugin](app, app.params[plugin]);\n if (p) _plugins.push(p);\n }\n };\n // Plugin Hooks\n app.pluginHook = function (hook) {\n for (var i = 0; i < _plugins.length; i++) {\n if (_plugins[i].hooks && hook in _plugins[i].hooks) {\n _plugins[i].hooks[hook](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n // Prevented by plugin\n app.pluginPrevent = function (action) {\n var prevent = false;\n for (var i = 0; i < _plugins.length; i++) {\n if (_plugins[i].prevents && action in _plugins[i].prevents) {\n if (_plugins[i].prevents[action](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])) prevent = true;\n }\n }\n return prevent;\n };\n // Preprocess content by plugin\n app.pluginProcess = function (process, data) {\n var processed = data;\n for (var i = 0; i < _plugins.length; i++) {\n if (_plugins[i].preprocess && process in _plugins[i].preprocess) {\n processed = _plugins[i].preprocess[process](data, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);\n }\n }\n return processed;\n };\n \n \n\n /*======================================================\n ************ App Init ************\n ======================================================*/\n app.init = function () {\n // Compile Template7 templates on app load\n if (app.initTemplate7Templates) app.initTemplate7Templates();\n \n // Init Plugins\n if (app.initPlugins) app.initPlugins();\n \n // Init Device\n if (app.getDeviceInfo) app.getDeviceInfo();\n \n // Init resize events and calc app sizes\n if (app.initResize) app.initResize();\n \n // Init Panels Breakpoints\n if (app.initPanelsBreakpoints && (app.params.panelLeftBreakpoint || app.params.panelRightBreakpoint)) app.initPanelsBreakpoints();\n \n // Init Click events\n if (app.initFastClicks && app.params.fastClicks) app.initFastClicks();\n if (app.initClickEvents) app.initClickEvents();\n \n // Init each page callbacks\n $('.page:not(.cached)').each(function () {\n app.initPageWithCallback(this);\n });\n \n // Init each navbar callbacks\n $('.navbar:not(.cached)').each(function () {\n app.initNavbarWithCallback(this);\n });\n \n // Init push state\n if (app.initPushState && app.params.pushState) app.initPushState();\n \n // Init Live Swipeouts events\n if (app.initSwipeout && app.params.swipeout) app.initSwipeout();\n \n // Init Live Sortable events\n if (app.initSortable && app.params.sortable) app.initSortable();\n \n // Init Live Swipe Panels\n if (app.initSwipePanels && (app.params.swipePanel || app.params.swipePanelOnlyClose)) app.initSwipePanels();\n \n // Init Material Inputs\n if (app.params.material && app.initMaterialWatchInputs) app.initMaterialWatchInputs();\n \n // Init Material Tabbar\n if (app.params.material) {\n $('.tabbar').each(function (index, el) {\n if ($(el).parents('.page').length === 0) {\n app.initMaterialTabbar(el);\n }\n });\n }\n \n // App Init callback\n if (app.params.onAppInit) app.params.onAppInit();\n \n // Plugin app init hook\n app.pluginHook('appInit');\n };\n if (app.params.init) app.init();\n \n\n //Return instance\n return app;\n };\n \n // Save Dom7\n Framework7.$ = window.Dom7;\n \n\n /*===========================\n Features Support Detection\n ===========================*/\n Framework7.prototype.support = (function () {\n var support = {\n touch: !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch),\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 \n // Export object\n return support;\n })();\n \n\n /*===========================\n Device/OS Detection\n ===========================*/\n Framework7.prototype.device = (function () {\n var device = {};\n var ua = navigator.userAgent;\n var $ = Dom7;\n \n var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/);\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 \n device.ios = device.android = device.windows = device.iphone = device.ipod = device.ipad = device.androidChrome = false;\n \n // Windows\n if (windows) {\n device.os = 'windows';\n device.osVersion = windows[2];\n device.windows = true;\n }\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.iphone = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n \n // Webview\n device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n \n // Minimal UI\n if (device.os && device.os === 'ios') {\n var osVersionArr = device.osVersion.split('.');\n device.minimalUi = !device.webView &&\n (ipod || iphone) &&\n (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\n $('meta[name=\"viewport\"]').length > 0 && $('meta[name=\"viewport\"]').attr('content').indexOf('minimal-ui') >= 0;\n }\n \n // Check for status bar and fullscreen app mode\n var windowWidth = $(window).width();\n var windowHeight = $(window).height();\n \n device.needsStatusBar = function () {\n if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {\n return true;\n }\n return false;\n };\n device.statusBar = device.needsStatusBar();\n \n // Classes\n var classNames = [];\n \n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));\n if (device.pixelRatio >= 2) {\n classNames.push('retina');\n }\n \n // OS classes\n if (device.os) {\n classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\\./g, '-'));\n if (device.os === 'ios') {\n var major = parseInt(device.osVersion.split('.')[0], 10);\n for (var i = major - 1; i >= 6; i--) {\n classNames.push('ios-gt-' + i);\n }\n }\n \n }\n // Status bar classes\n if (device.statusBar) {\n classNames.push('with-statusbar-overlay');\n }\n else {\n $('html').removeClass('with-statusbar-overlay');\n }\n \n // Add html classes\n if (classNames.length > 0) $('html').addClass(classNames.join(' '));\n \n // Export object\n return device;\n })();\n \n\n /*===========================\n Plugins prototype\n ===========================*/\n Framework7.prototype.plugins = {};\n \n\n /*===========================\n Swiper\n ===========================*/\n window.Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\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 var $ = $;\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 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 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\n//# sourceMappingURL=framework7.js.map\n"]}