{"version":3,"sources":["framework7.js"],"names":["window","Dom7","$","selector","context","arr","i","els","tempParent","html","trim","indexOf","toCreate","document","createElement","innerHTML","childNodes","length","push","match","querySelectorAll","getElementById","split","nodeType","ajax","options","fireAjaxCallback","eventName","eventData","callbackName","a","arguments","trigger","globals","defaults","method","data","async","cache","user","password","headers","xhrFields","statusCode","processData","dataType","contentType","timeout","callbacks","type","globalAjaxOptions","Utils","each","globalOptionName","globalOptionValue","prop","defaultValue","url","location","toString","paramsPrefix","toUpperCase","stringData","serializeObject","abortTimeout","Date","now","jsonpRequests","callbackSplit","requestUrl","addVars","filter","el","join","script","onerror","clearTimeout","undefined","scripterror","src","parentNode","removeChild","querySelector","appendChild","setTimeout","xhr","XMLHttpRequest","requestParameters","open","postData","postDataInstances","ArrayBuffer","Blob","Document","FormData","constructor","boundary","setRequestHeader","newData","_data","headerName","headerCallback","crossDomain","test","RegExp","$2","host","fieldName","fieldValue","xhrTimeout","onload","e","status","responseData","JSON","parse","responseText","err","parseerror","responseType","response","error","onabort","abort","send","ajaxShortcut","args","len","success","assign","assign$1","forEach","callback","get","unshift","apply","this","post","getJSON","animate","initialProps","initialParams","props","extend","params","duration","easing","elements","animating","que","easingProgress","progress","Math","cos","PI","stop","frameId","cancelAnimationFrame","index","dom7AnimateInstance","done","complete","shift","render","time","getTime","easeProgress","began","begin","startTime","max","min","element","Object","keys","ref","initialValue","finalValue","unit","currentValue","container","style","propsDone","elementsDone","requestAnimationFrame","initialFullValue","finalFullValue","getComputedStyle","getPropertyValue","replace","parseFloat","animateInstance","self","defaultDiacriticsRemovalap","base","letters","diacriticsMap","j","parseUrlQuery","param","query","urlToParse","href","paramsPart","decodeURIComponent","isArray","Array","obj","hasOwnProperty","unique","uniqueArray","parents","varName","name","parentParts","encodeURIComponent","varValue","value","newParents","resultArray","toPush","slice","String","toCamelCase","string","toLowerCase","group1","dataset","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","transform","webkitTransform","map","m41","m42","webkitRequestAnimationFrame","id","webkitCancelAnimationFrame","supportTouch","DocumentTouch","removeDiacritics","str","len$1","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","parseQuery","ajaxSetup","optionName","optionValue","Scroll","scrollTo","left","top","animateTop","scrollTop","currentTop","newTop","animateLeft","scrollLeft","currentLeft","newLeft","maxTop","maxLeft","scrollHeight","offsetHeight","scrollWidth","offsetWidth","dom","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","attributes","val","i$1","multiple","nodeName","values","selectedOptions","transform$1","elStyle","transition","webkitTransitionDuration","transitionDuration","on","handleLiveEvent","target","dom7EventData","is","targetSelector","listener","k","handleEvent","eventType","capture","events","dom7LiveListeners","proxyListener","addEventListener","dom7Listeners","off","k$1","removeEventListener","once","proxy","evt","CustomEvent","detail","bubbles","cancelable","createEvent","initEvent","dataIndex","dispatchEvent","transitionEnd","fireCallBack","call","animationEnd","width","innerWidth","css","outerWidth","includeMargins","styles","height","innerHeight","outerHeight","offset","box","getBoundingClientRect","body","clientTop","clientLeft","scrollY","scrollX","hide","display","show","matchedItems","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","prototype","fn","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","t7","template","instance","rendered","compile","global","getCompileVar","ctx","parts","variable","levelsUp","newDepth","isFinite","getCompiledArguments","contextArray","getCompileFn","getCompileInverse","t","Error","resultString","compiledArguments","helpers","stringify","eval","compiled","partials","_partial","partialName","p","root","if","inverse","unless","ret","reverse","first","last","with","delimiter","delimeter","js","expression","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","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","navigator","userAgent","arrValues","valueIndex","updateValue","forceValues","column","newValue","newDisplayValue","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","_sentByF7DataTable","currentSort","cell","isActive","collpsibleTitle","dataTables","initTemplate7Templates","_plugins","initPlugins","plugin","plugins","hook","hooks","pluginPrevent","prevents","process","processed","getDeviceInfo","onAppInit","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.4\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: May 31, 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 $(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// 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\nvar Utils = {\n parseUrlQuery: function 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 },\n isArray: function isArray(arr) {\n return Array.isArray(arr);\n },\n each: function 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++) {\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 },\n unique: function 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 },\n serializeObject: function 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 for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n var toPush = (void 0);\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(Utils.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 = Utils.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 }\n return resultArray.join(separator);\n },\n toCamelCase: function toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group1) { return group1.toUpperCase(); });\n },\n dataset: function dataset(el) {\n return $(el).dataset();\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 requestAnimationFrame: function 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 },\n cancelAnimationFrame: function 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 },\n supportTouch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n removeDiacritics: function removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007E]/g, function (a) { return diacriticsMap[a] || a; });\n },\n extend: function 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 (typeof to[nextKey] === 'object' && typeof nextSource[nextKey] === 'object') {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n};\n\n// Aliases\nUtils.parseQuery = Utils.parseUrlQuery;\nUtils.param = Utils.serializeObject;\n\n// Global Ajax Setup\nvar globalAjaxOptions = {};\n$.ajaxSetup = function ajaxSetup(options) {\n if (options.type && !options.method) { options.method = options.type; }\n Utils.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 Utils.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) { $(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 Utils.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 = Utils.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 = Utils.serializeObject(options.data);\n if (options.contentType === 'multipart\\/form-data') {\n boundary = \"---------------------------\" + (Date.now().toString(16));\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 Utils.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 Utils.each(options.xhrFields, function (fieldName, fieldValue) {\n xhr[fieldName] = fieldValue;\n });\n }\n\n var xhrTimeout;\n // Handle XHR\n xhr.onload = function onload(e) {\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(e) {\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 Scroll = {\n scrollTo: function scrollTo(left, top, duration, easing, callback) {\n if ( easing === void 0 ) easing = 'swing';\n\n if (arguments.length === 4 && typeof easing === 'function') {\n callback = easing;\n easing = undefined;\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 Utils.requestAnimationFrame(render);\n }\n Utils.requestAnimationFrame(render);\n });\n },\n scrollTop: function scrollTop(top, duration, easing, callback) {\n if (arguments.length === 3 && typeof easing === 'function') {\n callback = easing;\n easing = undefined;\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(left, duration, easing, callback) {\n if (arguments.length === 3 && typeof easing === 'function') {\n callback = easing;\n easing = undefined;\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\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() {\n var el = this[0];\n if (!el) { return undefined; }\n var dataset = {};\n if (el.dataset) {\n for (var dataKey in el.dataset) {\n dataset[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[Utils.toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n for (var key in dataset) {\n if (dataset[key] === 'false') { dataset[key] = false; }\n else if (dataset[key] === 'true') { dataset[key] = true; }\n else if (parseFloat(dataset[key]) === dataset[key] * 1) { dataset[key] *= 1; }\n }\n return dataset;\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 var eventData = e.target.dom7EventData || [];\n eventData.unshift(e);\n if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n }\n }\n }\n function handleEvent(e) {\n var eventData = 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.dom7Listeners[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 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 callback(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 this$1[i].style.display = 'block';\n }\n return this;\n },\n styles: function styles() {\n if (this[0]) { return window.getComputedStyle(this[0], null); }\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 // Iterate over the collection passing elements to `callback`\n each: function each(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 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 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 = $(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 $(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 $(parent).prepend(this);\n return this;\n },\n insertBefore: function insertBefore(selector) {\n var this$1 = this;\n\n var before = $(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 = $(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 && $(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 ($(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 && $(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 ($(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 ($(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 $(Utils.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 ($(parent).is(selector)) { parents.push(parent); }\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(Utils.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 && $(childNodes[j]).is(selector)) { children.push(childNodes[j]); }\n }\n }\n return new Dom7(Utils.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 = $(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 $(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$1 = 0; i$1 < shortcuts.length; i$1 += 1) {\n createMethod(shortcuts[i$1]);\n}\n\nfunction animate(initialProps, initialParams) {\n var els = this;\n var a = {\n props: $.extend({}, initialProps),\n params: $.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 Utils.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 = Utils.requestAnimationFrame(render);\n }\n a.frameId = Utils.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\nfunction dom7() {\n // Utils & Helpers\n Object.keys(Utils).forEach(function (key) {\n $[key] = Utils[key];\n });\n\n // Methods\n Object.keys(Methods).forEach(function (key) {\n Dom7.prototype[key] = Methods[key];\n });\n\n // Scroll\n Object.keys(Scroll).forEach(function (key) {\n Dom7.prototype[key] = Scroll[key];\n });\n\n // Animate\n Dom7.prototype.animate = animate;\n Dom7.prototype.stop = stop;\n\n // Ajax\n $.ajax = ajax;\n $.get = get;\n $.post = post;\n $.getJSON = getJSON;\n\n // Link to prototype\n $.fn = Dom7.prototype;\n\n return $;\n}\nvar dom7$1 = dom7();\n\nreturn dom7$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}\nvar Template7 = function Template7(template) {\n var t = this;\n t.template = template;\n\n function getCompileVar(name, ctx) {\n var variable = ctx;\n var parts;\n var levelsUp = 0;\n if (name.indexOf('../') === 0) {\n var newDepth = variable.split('_')[1] - levelsUp;\n levelsUp = name.split('../').length - 1;\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 if (i > 0) {\n variable += \"[(data && data.\" + (part.replace('@', '')) + \")]\";\n } else {\n variable = \"(data && data.\" + (name.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\n return variable;\n }\n function getCompiledArguments(contextArray, ctx) {\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));\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 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);\n resultString += \"r += c(\" + variable + \", \" + ctx + \");\";\n }\n // Helpers block\n if (block.type === 'helper') {\n if (block.helperName in t.helpers) {\n compiledArguments = getCompiledArguments(block.contextName, ctx);\n\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});\";\n } else if (block.contextName.length > 0) {\n throw new Error((\"Template7: Missing helper: \\\"\" + (block.helperName) + \"\\\"\"));\n } else {\n variable = getCompileVar(block.helperName, ctx);\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});\";\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});\";\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 func;\n if (expression.indexOf('return') >= 0) {\n func = \"(function(){\" + expression + \"})\";\n } else {\n func = \"(function(){return (\" + expression + \")})\";\n }\n return eval.call(this, func).call(this);\n },\n js_compare: function js_compare(expression, options) {\n var func;\n if (expression.indexOf('return') >= 0) {\n func = \"(function(){\" + expression + \"})\";\n } else {\n func = \"(function(){return (\" + expression + \")})\";\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};\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: false,\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 return;\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) return;\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 targetElement.dispatchEvent(evt);\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 /*===============================================================================\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 for (i = 0; i < p.params.cols.length; i++) {\n column = p.params.cols[i];\n if (column.displayValues !== undefined && column.values !== undefined && column.values.indexOf(newValue[i]) !== undefined) {\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 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 if (input.parents('thead').length > 0) {\n table\n .find('tbody tr')[checked ? 'addClass': 'removeClass']('data-table-row-selected')\n .find('input').prop('checked', checked).trigger('change', {_sentByF7DataTable: true});\n }\n else {\n input.parents('tr')[checked ? 'addClass': 'removeClass']('data-table-row-selected');\n if (!checked) {\n table.find('thead .checkbox-cell input[type=\"checkbox\"]').prop('checked', false);\n }\n else {\n // Check for all checked\n if (table.find('tbody .checkbox-cell input[type=\"checkbox\"]:checked').length === table.find('tbody tr').length) {\n table.find('thead .checkbox-cell 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"]}