{"version":3,"sources":["www/js/main.js"],"names":["onSlide_1Enter","source","direction","slide1Animations","kitesAnimations","textAnimations","charactersAnimations","onSlide_1Leave","onSlide_10Enter","slide10Animations","backgroundAnimations","onSlide_10Leave","onSlide_11Enter","slide11Animations","onSlide_11Leave","onSlide_12Enter","slide12Animations","onSlide_12Leave","onSlide_13Enter","slide13Animations","onSlide_13Leave","onSlide_14Enter","slide14Animations","prepareBackgroundAnimations","onSlide_14Leave","onSlide_15Enter","slide15Animations","onSlide_15Leave","onSlide_16Enter","slide16Animations","onSlide_16Leave","isReferencesVisible","referencesInfo","velocity","onSlide_2Enter","slide2Animations","slide3Animations","onSlide_2Leave","onSlide_3Enter","onSlide_3Leave","onSlide_4Enter","slidesView","setIndicatorPosition","slide4Animations","indicatorAnimations","onSlide_4Leave","onSlide_5Enter","slide5Animations","onSlide_5Leave","onSlide_6Enter","slide6Animations","onSlide_6Leave","onSlide_7Enter","slide7Animations","onSlide_7Leave","onSlide_8Enter","slide8Animations","onSlide_8Leave","onSlide_9Enter","slide9Animations","onSlide_9Leave","global","factory","define","amd","$","document","Math","exports","module","require","jQuery","window","this","undefined","WRAPPER","WRAPPER_SEL","SCROLLABLE","SCROLLABLE_SEL","SLIMSCROLL_BAR_SEL","SLIMSCROLL_RAIL_SEL","RESPONSIVE","NO_TRANSITION","DESTROYED","ENABLED","VIEWING_PREFIX","ACTIVE","ACTIVE_SEL","SECTION_DEFAULT_SEL","SECTION","SECTION_SEL","SECTION_ACTIVE_SEL","SECTION_FIRST_SEL","SECTION_LAST_SEL","TABLE_CELL","TABLE_CELL_SEL","SECTION_NAV","SECTION_NAV_SEL","SECTION_NAV_TOOLTIP","SHOW_ACTIVE_TOOLTIP","SLIDE_DEFAULT_SEL","SLIDE","SLIDE_SEL","SLIDE_ACTIVE_SEL","SLIDES_WRAPPER","SLIDES_WRAPPER_SEL","SLIDES_CONTAINER","SLIDES_CONTAINER_SEL","TABLE","SLIDES_NAV","SLIDES_NAV_SEL","SLIDES_NAV_LINK_SEL","SLIDES_ARROW","SLIDES_ARROW_SEL","SLIDES_PREV","SLIDES_PREV_SEL","SLIDES_ARROW_PREV","SLIDES_ARROW_PREV_SEL","SLIDES_NEXT","SLIDES_NEXT_SEL","SLIDES_ARROW_NEXT","SLIDES_ARROW_NEXT_SEL","$window","$document","fn","fullpage","options","createSlideArrows","section","find","after","controlArrowColor","css","loopHorizontal","hide","addVerticalNavigation","$body","append","nav","addClass","showActiveTooltip","navigationPosition","i","length","link","anchors","li","tooltip","navigationTooltips","createSlimScrollingHandler","each","slides","createSlimScrolling","afterRenderActions","mouseover","isFunction","afterLoad","call","data","index","afterRender","scrollHandler","currentSection","autoScrolling","scrollBar","currentScroll","scrollTop","visibleSectionIndex","initial","abs","querySelectorAll","offsetTop","sections","current","eq","hasClass","isScrolling","leavingSection","leavingSectionIndex","yMovement","getYmovement","anchorLink","sectionIndex","activeSlide","slideAnchorLink","slideIndex","canScroll","siblings","removeClass","onLeave","activateMenuAndNav","lastScrolledDestiny","setState","clearTimeout","scrollId","setTimeout","fitToSection","scrollId2","is","isResizing","scrollPage","isScrollable","activeSection","scrolling","type","scrollable","isScrollAllowed","check","scrollSection","FP","moveSectionDown","moveSectionUp","isScrolled","touchMoveHandler","event","e","originalEvent","checkParentForNormalScrollElement","target","isReallyTouch","preventDefault","slideMoving","touchEvents","getEventsPage","touchEndY","y","touchEndX","x","touchStartX","touchStartY","width","touchSensitivity","right","moveSlideRight","left","moveSlideLeft","height","el","hop","parent","normalScrollElementTouchThreshold","normalScrollElements","pointerType","touchStartHandler","$htmlBody","stop","getAverage","elements","number","sum","lastElements","slice","max","ceil","MouseWheelHandler","curTime","Date","getTime","controlPressed","value","wheelDelta","deltaY","detail","delta","min","scrollings","shift","push","returnValue","timeDiff","prevTime","averageEnd","averageMiddle","isAccelerating","moveSlide","currentSlide","destiny","prev","next","landscapeScroll","keepSlidesPosition","silentLandscapeScroll","element","callback","isMovementUp","dest","position","v","dtop","top","localIsResizing","continuousVertical","createInfiniteSections","performMovement","css3","translate3d","transformContainer","scrollingSpeed","afterSectionLoads","scrollSettings","getScrollSettings","animate","easing","promise","done","scroll","before","nextAll","prevAll","get","reverse","silentScroll","wrapAroundElements","continuousVerticalFixSectionOrder","scrollToAnchor","location","hash","replace","split","slide","scrollPageAndSlide","hashChangeHandler","isFirstSlideMove","isFirstScrollMove","lastScrolledSlide","keydownHandler","keydownId","ctrlKey","activeElement","keyboardScrolling","keyCode","which","keyControls","inArray","onkeydown","shiftPressed","shiftKey","moveTo","mouseMoveHandler","pageY","oldPageY","destinyPos","closest","slidesNav","slideAnchor","getSlideAnchor","onSlideLeave","prevSlide","prevSlideIndex","xMovement","getXmovement","controlArrows","toggle","afterSlideLoads","afterSlideLoad","beforeScroll","round","addAnimation","getTransforms","scrollLeft","resizeHandler","responsive","isTouchDevice","currentHeight","previousHeight","reBuild","resizeId","isResponsive","container","setAutoScrolling","setFitToSection","originals","show","transition","easingcss3","-webkit-transition","removeAnimation","resizeMe","displayHeight","displayWidth","preferredHeight","preferredWidth","heightPercentage","widthPercentage","percentage","newFontSize","toFixed","activateNavDots","name","navigation","activateMenuElement","menu","anchor","innerHeight","scrollHeight","fromIndex","toIndex","contentHeight","verticalCentered","windowsHeight","parseInt","wrapInner","slimScroll","allowPageScroll","size","alwaysVisible","removeSlimScroll","children","first","unwrap","remove","addTableClass","getTableHeight","sectionHeight","paddingTop","paddingBottom","paddings","animated","getSectionByAnchor","sectionAnchor","getSlideByAnchor","scrollSlider","addSlidesNavigation","numSlides","slidesNavPosition","sectionHash","setUrlHash","setBodyClass","url","recordHistory","isTouch","history","replaceState","baseUrl","href","text","String","classRe","RegExp","className","support3d","has3d","createElement","transforms","webkitTransform","OTransform","msTransform","MozTransform","transform","body","insertBefore","t","style","getComputedStyle","getPropertyValue","removeChild","removeMouseWheelHandler","addEventListener","removeEventListener","detachEvent","addMouseWheelHandler","attachEvent","addTouchHandler","MSPointer","getMSPointer","off","down","on","move","removeTouchHandler","pointer","PointerEvent","events","pageX","touches","noCallbacks","setScrollingSpeed","-webkit-transform","-moz-transform","-ms-transform","setIsScrollable","up","setAllowScrolling","destroyStructure","background-color","padding","-ms-touch-action","touch-action","replaceWith","childNodes","setVariableState","variable","displayWarnings","loopTop","loopBottom","showError","console","extend","slidesNavigation","scrollOverflow","animateAnchor","resize","sectionsColor","fixedElements","sectionSelector","slideSelector","afterResize","afterReBuild","easeInOutCubic","b","c","d","easeInQuart","overflow","setRecordHistory","setMouseWheelScrolling","directions","setKeyboardScrolling","last","silentMoveTo","resizing","windowsWidth","slidesWrap","navigator","userAgent","match","msMaxTouchPoints","that","attr","sliderWidth","slideWidth","wrapAll","wrap","startingSlide","appendTo","readyState","keydown","keyup","mousedown","mouseup","flag","destroy","all","lazyload","update","counter","$this","settings","skip_invisible","abovethetop","leftofbegin","belowthefold","rightoffold","failure_limit","trigger","$container","threshold","effect","data_attribute","appear","load","placeholder","failurelimit","effectspeed","effect_speed","indexOf","bind","self","$self","loaded","one","elements_left","original","temp","grep","test","appVersion","persisted","ready","fold","offset","inviewport","expr","below-the-fold","a","above-the-top","right-of-screen","left-of-screen","in-viewport","above-the-fold","right-of-fold","left-of-fold","handler","orgEvent","args","arguments","deltaX","absDelta","offsetX","offsetY","fix","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","lowestDelta","shouldAdjustOldDeltas","special","normalizeOffset","getBoundingClientRect","boundingRect","clientX","clientY","deltaFactor","unshift","nullLowestDeltaTimeout","nullLowestDelta","dispatch","handle","apply","adjustOldDeltas","toFix","toBind","documentMode","Array","prototype","fixHooks","mouseHooks","mousewheel","version","setup","onmousewheel","getLineHeight","getPageHeight","teardown","removeData","elem","$elem","$parent","unmousewheel","unbind","defaults","color","distance","start","opacity","disableFadeOut","railVisible","railColor","railOpacity","railDraggable","railClass","barClass","wrapperClass","wheelStep","touchScrollStep","borderRadius","railBorderRadius","o","_onWheel","isOverPanel","srcTarget","srcElement","me","scrollContent","releaseScroll","isWheel","isJump","maxTop","outerHeight","bar","floor","percentScroll","showBar","hideBar","attachWheel","detachWheel","getBarHeight","barHeight","minBarHeight","display","queueHide","lastScroll","msg","fadeIn","rail","isOverBar","isDragg","fadeOut","touchDif","divS","isPlainObject","scrollTo","scrollBy","wrapper","border-radius","background","zIndex","BorderRadius","MozBorderRadius","WebkitBorderRadius","posCss","$doc","parseFloat","currTop","stopPropagation","hover","diff","slimscroll","init","swipe","swipeStatus","NONE","click","tap","plugin","PLUGIN_NS","TouchSwipe","touchStart","jqEvent","getTouchInProgress","excludedElements","$element","ret","evt","SUPPORTS_TOUCH","phase","PHASE_START","fingerCount","pinchDirection","duration","startTouchesDistance","endTouchesDistance","pinchZoom","pinchDistance","fingerData","createAllFingerData","maximumsMap","createMaximumsData","cancelMultiFingerRelease","fingers","ALL_FINGERS","hasPinches","createFingerData","startTime","getTimeStamp","calculateTouchesDistance","pinchStatus","triggerHandler","PHASE_CANCEL","hold","holdTimeout","proxy","longTapThreshold","setTouchInProgress","touchMove","PHASE_END","inMultiFingerRelease","currentFinger","updateFingerData","endTime","PHASE_MOVE","end","calculatePinchDirection","calculatePinchZoom","calculateDirection","validateDefaultEvent","calculateDistance","calculateDuration","setMaxDistance","triggerOnTouchEnd","triggerOnTouchLeave","inBounds","bounds","getbounds","isInBounds","getNextPhase","touchEnd","startMultiFingerRelease","previousTouchFingerCount","didSwipeBackToCancel","validateSwipeDistance","hasTap","triggerHandlerForGesture","TAP","touchCancel","touchLeave","removeListeners","START_EV","CANCEL_EV","MOVE_EV","END_EV","LEAVE_EV","currentPhase","nextPhase","validTime","validateSwipeTime","validDistance","didCancel","didSwipe","hasSwipes","didPinch","SWIPE","PINCH","didDoubleTap","DOUBLE_TAP","didLongTap","LONG_TAP","didTap","gesture","validateSwipe","LEFT","swipeLeft","RIGHT","swipeRight","UP","swipeUp","DOWN","swipeDown","validatePinch","IN","pinchIn","OUT","pinchOut","singleTapTimeout","hasDoubleTap","inDoubleTap","doubleTapStartTime","doubleTapThreshold","doubleTap","longTap","valid","cancelled","cancelThreshold","getMaxDistance","validatePinchDistance","pinchThreshold","result","maxTimeThreshold","preventDefaultEvents","auto","AUTO","HORIZONTAL","VERTICAL","hasCorrectFingerCount","validateFingers","hasEndPoint","validateEndPoint","hasCorrectDistance","hasValidTime","hasValidDistance","hasLongTap","validateDoubleTap","now","validateTap","isNaN","validateLongTap","DOUBLE_TAP_THRESHOLD","previousTouchEndTime","withinThreshold","fingerReleaseThreshold","val","id","identifier","f","getFingerData","maxData","createMaximumVO","dir","startPoint","endPoint","diffX","diffY","sqrt","startDistance","endDistance","percent","pow","calculateAngle","r","atan2","angle","PI","outerWidth","bottom","point","useTouchEvents","SUPPORTS_POINTER","fallbackToMouseEvents","SUPPORTS_POINTER_IE10","error","enable","disable","option","property","msPointerEnabled","pointerEnabled","method","phases","pageScroll","ONE","TWO","THREE","ALL","isPortrait","innerWidth","setNavActiveLink","slideId","slideNav","showOrientationMessage","hideOrientationMessage","currentScrollingSpeed","surpressCallbacks","indicatorPosition","getBeforeEnterCallbackName","capitalize","getBeforeLeaveCallbackName","backgroundTransition","newSlideEl","targetSlide","onBeforeSlideEnter","oldSlideEl","newSlideIndex","onBeforeEnterFnName","speed","onBeforeSlideLeave","slideEl","onBeforeLeaveFnName","onBeforeScroll","newLeftPos","elementLeft","$layer","onResize","ratio","updateIndicator","sel1","sel2","$character","$zoom","pivotX","pivotY","autoscroll","targetSlideId","activeSlideId","pop","charAt","toUpperCase","enter","$kite1","$kite2","delay","complete","loop","$characters","stagger","$infoBox","$title","$start","$delay","$pinkBubble","$orangeBubble","$greenBubble","$desk","$bgOffice","$bgBox","$officeDelay","$doctor","furnitureAnimations","$table","$picture","$effect","$checklist","$familyTree","$legend","$clock","$transitionBox","$bgHome","$homeDelay","$homeDuration","$cyclist","$girlWithDog","$logo","$references","$footerInfo","references","isHoverVisible","$infoHover","character","$indicator","$violetBubble","triggersAnimations","$attacksInfo","$triggers","drag"],"mappings":"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","file":"main.min.js","sourcesContent":["/**\r\n * fullPage 2.6.5\r\n * https://github.com/alvarotrigo/fullPage.js\r\n * MIT licensed\r\n *\r\n * Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo\r\n */\r\n(function(global, factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery'], function($) {\r\n return factory($, global, global.document, global.Math);\r\n });\r\n } else if (typeof exports !== 'undefined') {\r\n module.exports = factory(require('jquery'), global, global.document, global.Math);\r\n } else {\r\n factory(jQuery, global, global.document, global.Math);\r\n }\r\n})(typeof window !== 'undefined' ? window : this, function($, window, document, Math, undefined) {\r\n 'use strict';\r\n\r\n // keeping central set of classnames and selectors\r\n var WRAPPER = 'fullpage-wrapper';\r\n var WRAPPER_SEL = '.' + WRAPPER;\r\n\r\n // slimscroll\r\n var SCROLLABLE = 'fp-scrollable';\r\n var SCROLLABLE_SEL = '.' + SCROLLABLE;\r\n var SLIMSCROLL_BAR_SEL = '.slimScrollBar';\r\n var SLIMSCROLL_RAIL_SEL = '.slimScrollRail';\r\n\r\n // util\r\n var RESPONSIVE = 'fp-responsive';\r\n var NO_TRANSITION = 'fp-notransition';\r\n var DESTROYED = 'fp-destroyed';\r\n var ENABLED = 'fp-enabled';\r\n var VIEWING_PREFIX = 'fp-viewing';\r\n var ACTIVE = 'active';\r\n var ACTIVE_SEL = '.' + ACTIVE;\r\n\r\n // section\r\n var SECTION_DEFAULT_SEL = '.section';\r\n var SECTION = 'fp-section';\r\n var SECTION_SEL = '.' + SECTION;\r\n var SECTION_ACTIVE_SEL = SECTION_SEL + ACTIVE_SEL;\r\n var SECTION_FIRST_SEL = SECTION_SEL + ':first';\r\n var SECTION_LAST_SEL = SECTION_SEL + ':last';\r\n var TABLE_CELL = 'fp-tableCell';\r\n var TABLE_CELL_SEL = '.' + TABLE_CELL;\r\n\r\n // section nav\r\n var SECTION_NAV = 'fp-nav';\r\n var SECTION_NAV_SEL = '#' + SECTION_NAV;\r\n var SECTION_NAV_TOOLTIP = 'fp-tooltip';\r\n var SHOW_ACTIVE_TOOLTIP = 'fp-show-active';\r\n\r\n // slide\r\n var SLIDE_DEFAULT_SEL = '.slide';\r\n var SLIDE = 'fp-slide';\r\n var SLIDE_SEL = '.' + SLIDE;\r\n var SLIDE_ACTIVE_SEL = SLIDE_SEL + ACTIVE_SEL;\r\n var SLIDES_WRAPPER = 'fp-slides';\r\n var SLIDES_WRAPPER_SEL = '.' + SLIDES_WRAPPER;\r\n var SLIDES_CONTAINER = 'fp-slidesContainer';\r\n var SLIDES_CONTAINER_SEL = '.' + SLIDES_CONTAINER;\r\n var TABLE = 'fp-table';\r\n\r\n // slide nav\r\n var SLIDES_NAV = 'fp-slidesNav';\r\n var SLIDES_NAV_SEL = '.' + SLIDES_NAV;\r\n var SLIDES_NAV_LINK_SEL = SLIDES_NAV_SEL + ' a';\r\n var SLIDES_ARROW = 'fp-controlArrow';\r\n var SLIDES_ARROW_SEL = '.' + SLIDES_ARROW;\r\n var SLIDES_PREV = 'fp-prev';\r\n var SLIDES_PREV_SEL = '.' + SLIDES_PREV;\r\n var SLIDES_ARROW_PREV = SLIDES_ARROW + ' ' + SLIDES_PREV;\r\n var SLIDES_ARROW_PREV_SEL = SLIDES_ARROW_SEL + SLIDES_PREV_SEL;\r\n var SLIDES_NEXT = 'fp-next';\r\n var SLIDES_NEXT_SEL = '.' + SLIDES_NEXT;\r\n var SLIDES_ARROW_NEXT = SLIDES_ARROW + ' ' + SLIDES_NEXT;\r\n var SLIDES_ARROW_NEXT_SEL = SLIDES_ARROW_SEL + SLIDES_NEXT_SEL;\r\n\r\n var $window = $(window);\r\n var $document = $(document);\r\n\r\n $.fn.fullpage = function(options) {\r\n\r\n // common jQuery objects\r\n var $htmlBody = $('html, body');\r\n var $body = $('body');\r\n\r\n var FP = $.fn.fullpage;\r\n // Create some defaults, extending them with any options that were provided\r\n options = $.extend({\r\n //navigation\r\n menu: false,\r\n anchors:[],\r\n navigation: false,\r\n navigationPosition: 'right',\r\n navigationTooltips: [],\r\n showActiveTooltip: false,\r\n slidesNavigation: false,\r\n slidesNavPosition: 'bottom',\r\n scrollBar: false,\r\n\r\n //scrolling\r\n css3: true,\r\n scrollingSpeed: 700,\r\n autoScrolling: true,\r\n fitToSection: true,\r\n easing: 'easeInOutCubic',\r\n easingcss3: 'ease',\r\n loopBottom: false,\r\n loopTop: false,\r\n loopHorizontal: true,\r\n continuousVertical: false,\r\n normalScrollElements: null,\r\n scrollOverflow: false,\r\n touchSensitivity: 5,\r\n normalScrollElementTouchThreshold: 5,\r\n\r\n //Accessibility\r\n keyboardScrolling: true,\r\n animateAnchor: true,\r\n recordHistory: true,\r\n\r\n //design\r\n controlArrows: true,\r\n controlArrowColor: '#fff',\r\n verticalCentered: true,\r\n resize: false,\r\n sectionsColor : [],\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n fixedElements: null,\r\n responsive: 0,\r\n\r\n //Custom selectors\r\n sectionSelector: SECTION_DEFAULT_SEL,\r\n slideSelector: SLIDE_DEFAULT_SEL,\r\n\r\n\r\n //events\r\n afterLoad: null,\r\n onLeave: null,\r\n afterRender: null,\r\n afterResize: null,\r\n afterReBuild: null,\r\n afterSlideLoad: null,\r\n onSlideLeave: null,\r\n beforeScroll: null\r\n }, options);\r\n\r\n displayWarnings();\r\n\r\n\r\n //easeInOutCubic animation included in the plugin\r\n $.extend($.easing,{ easeInOutCubic: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b;return c/2*((t-=2)*t*t + 2) + b;}});\r\n\r\n //TO BE REMOVED in future versions. Maintained temporaly for backwards compatibility.\r\n $.extend($.easing,{ easeInQuart: function (x, t, b, c, d) { return c*(t/=d)*t*t*t + b; }});\r\n\r\n /**\r\n * Sets the autoScroll option.\r\n * It changes the scroll bar visibility and the history of the site as a result.\r\n */\r\n FP.setAutoScrolling = function(value, type){\r\n setVariableState('autoScrolling', value, type);\r\n\r\n var element = $(SECTION_ACTIVE_SEL);\r\n\r\n if(options.autoScrolling && !options.scrollBar){\r\n $htmlBody.css({\r\n 'overflow' : 'hidden',\r\n 'height' : '100%'\r\n });\r\n\r\n FP.setRecordHistory(options.recordHistory, 'internal');\r\n\r\n //for IE touch devices\r\n container.css({\r\n '-ms-touch-action': 'none',\r\n 'touch-action': 'none'\r\n });\r\n\r\n if(element.length){\r\n //moving the container up\r\n silentScroll(element.position().top);\r\n }\r\n\r\n }else{\r\n $htmlBody.css({\r\n 'overflow' : 'visible',\r\n 'height' : 'initial'\r\n });\r\n\r\n FP.setRecordHistory(false, 'internal');\r\n\r\n //for IE touch devices\r\n container.css({\r\n '-ms-touch-action': '',\r\n 'touch-action': ''\r\n });\r\n\r\n silentScroll(0);\r\n\r\n //scrolling the page to the section with no animation\r\n if (element.length) {\r\n $htmlBody.scrollTop(element.position().top);\r\n }\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Defines wheter to record the history for each hash change in the URL.\r\n */\r\n FP.setRecordHistory = function(value, type){\r\n setVariableState('recordHistory', value, type);\r\n };\r\n\r\n /**\r\n * Defines the scrolling speed\r\n */\r\n FP.setScrollingSpeed = function(value, type){\r\n setVariableState('scrollingSpeed', value, type);\r\n };\r\n\r\n /**\r\n * Sets fitToSection\r\n */\r\n FP.setFitToSection = function(value, type){\r\n setVariableState('fitToSection', value, type);\r\n };\r\n\r\n /**\r\n * Adds or remove the possiblity of scrolling through sections by using the mouse wheel or the trackpad.\r\n */\r\n FP.setMouseWheelScrolling = function (value){\r\n if(value){\r\n addMouseWheelHandler();\r\n }else{\r\n removeMouseWheelHandler();\r\n }\r\n };\r\n\r\n /**\r\n * Adds or remove the possiblity of scrolling through sections by using the mouse wheel/trackpad or touch gestures.\r\n * Optionally a second parameter can be used to specify the direction for which the action will be applied.\r\n *\r\n * @param directions string containing the direction or directions separated by comma.\r\n */\r\n FP.setAllowScrolling = function (value, directions){\r\n if(typeof directions != 'undefined'){\r\n directions = directions.replace(/ /g,'').split(',');\r\n\r\n $.each(directions, function (index, direction){\r\n setIsScrollable(value, direction);\r\n });\r\n }\r\n else if(value){\r\n FP.setMouseWheelScrolling(true);\r\n addTouchHandler();\r\n }else{\r\n FP.setMouseWheelScrolling(false);\r\n removeTouchHandler();\r\n }\r\n };\r\n\r\n /**\r\n * Adds or remove the possiblity of scrolling through sections by using the keyboard arrow keys\r\n */\r\n FP.setKeyboardScrolling = function (value){\r\n options.keyboardScrolling = value;\r\n };\r\n\r\n /**\r\n * Moves the page up one section.\r\n */\r\n FP.moveSectionUp = function(){\r\n var prev = $(SECTION_ACTIVE_SEL).prev(SECTION_SEL);\r\n\r\n //looping to the bottom if there's no more sections above\r\n if (!prev.length && (options.loopTop || options.continuousVertical)) {\r\n prev = $(SECTION_SEL).last();\r\n }\r\n\r\n if (prev.length) {\r\n scrollPage(prev, null, true);\r\n }\r\n };\r\n\r\n /**\r\n * Moves the page down one section.\r\n */\r\n FP.moveSectionDown = function (){\r\n var next = $(SECTION_ACTIVE_SEL).next(SECTION_SEL);\r\n\r\n //looping to the top if there's no more sections below\r\n if(!next.length &&\r\n (options.loopBottom || options.continuousVertical)){\r\n next = $(SECTION_SEL).first();\r\n }\r\n\r\n if(next.length){\r\n scrollPage(next, null, false);\r\n }\r\n };\r\n\r\n /**\r\n * Moves the page to the given section and slide with no animation.\r\n * Anchors or index positions can be used as params.\r\n */\r\n FP.silentMoveTo = function(sectionAnchor, slideAnchor){\r\n FP.setScrollingSpeed (0, 'internal');\r\n FP.moveTo(sectionAnchor, slideAnchor)\r\n FP.setScrollingSpeed (originals.scrollingSpeed, 'internal');\r\n };\r\n\r\n /**\r\n * Moves the page to the given section and slide.\r\n * Anchors or index positions can be used as params.\r\n */\r\n FP.moveTo = function (sectionAnchor, slideAnchor){\r\n var destiny = getSectionByAnchor(sectionAnchor);\r\n\r\n if (typeof slideAnchor !== 'undefined'){\r\n scrollPageAndSlide(sectionAnchor, slideAnchor);\r\n }else if(destiny.length > 0){\r\n scrollPage(destiny);\r\n }\r\n };\r\n\r\n /**\r\n * Slides right the slider of the active section.\r\n */\r\n FP.moveSlideRight = function(){\r\n moveSlide('next');\r\n };\r\n\r\n /**\r\n * Slides left the slider of the active section.\r\n */\r\n FP.moveSlideLeft = function(){\r\n moveSlide('prev');\r\n };\r\n\r\n /**\r\n * When resizing is finished, we adjust the slides sizes and positions\r\n */\r\n FP.reBuild = function(resizing){\r\n if(container.hasClass(DESTROYED)){ return; } //nothing to do if the plugin was destroyed\r\n\r\n isResizing = true;\r\n\r\n var windowsWidth = $window.width();\r\n windowsHeight = $window.height(); //updating global var\r\n\r\n //text resizing\r\n if (options.resize) {\r\n resizeMe(windowsHeight, windowsWidth);\r\n }\r\n\r\n $(SECTION_SEL).each(function(){\r\n var slidesWrap = $(this).find(SLIDES_WRAPPER_SEL);\r\n var slides = $(this).find(SLIDE_SEL);\r\n\r\n //adjusting the height of the table-cell for IE and Firefox\r\n if(options.verticalCentered){\r\n $(this).find(TABLE_CELL_SEL).css('height', getTableHeight($(this)) + 'px');\r\n }\r\n\r\n $(this).css('height', windowsHeight + 'px');\r\n\r\n //resizing the scrolling divs\r\n if(options.scrollOverflow){\r\n if(slides.length){\r\n slides.each(function(){\r\n createSlimScrolling($(this));\r\n });\r\n }else{\r\n createSlimScrolling($(this));\r\n }\r\n }\r\n\r\n //adjusting the position fo the FULL WIDTH slides...\r\n if (slides.length > 1) {\r\n landscapeScroll(slidesWrap, slidesWrap.find(SLIDE_ACTIVE_SEL));\r\n }\r\n });\r\n\r\n var activeSection = $(SECTION_ACTIVE_SEL);\r\n var sectionIndex = activeSection.index(SECTION_SEL);\r\n\r\n //isn't it the first section?\r\n if(sectionIndex){\r\n //adjusting the position for the current section\r\n FP.silentMoveTo(sectionIndex + 1);\r\n }\r\n\r\n isResizing = false;\r\n $.isFunction( options.afterResize ) && resizing && options.afterResize.call(container);\r\n $.isFunction( options.afterReBuild ) && !resizing && options.afterReBuild.call(container);\r\n };\r\n\r\n //flag to avoid very fast sliding for landscape sliders\r\n var slideMoving = false;\r\n\r\n var isTouchDevice = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/);\r\n var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));\r\n var container = $(this);\r\n var windowsHeight = $window.height();\r\n var isResizing = false;\r\n var lastScrolledDestiny;\r\n var lastScrolledSlide;\r\n var canScroll = true;\r\n var scrollings = [];\r\n var nav;\r\n var controlPressed;\r\n var isScrollAllowed = { 'up':true, 'down':true, 'left':true, 'right':true };\r\n var originals = $.extend(true, {}, options); //deep copy\r\n\r\n if($(this).length){\r\n container.css({\r\n 'height': '100%',\r\n 'position': 'relative'\r\n });\r\n\r\n //adding a class to recognize the container internally in the code\r\n container.addClass(WRAPPER);\r\n $('html').addClass(ENABLED);\r\n }\r\n //trying to use fullpage without a selector?\r\n else{\r\n showError('error', 'Error! Fullpage.js needs to be initialized with a selector. For example: $(\\'#myContainer\\').fullpage();');\r\n }\r\n\r\n //if css3 is not supported, it will use jQuery animations\r\n if(options.css3){\r\n options.css3 = support3d();\r\n }\r\n\r\n FP.setAllowScrolling(true);\r\n container.removeClass(DESTROYED); //in case it was destroyed before initilizing it again\r\n\r\n\r\n //adding internal class names to void problem with common ones\r\n $(options.sectionSelector).each(function(){\r\n $(this).addClass(SECTION);\r\n });\r\n $(options.slideSelector).each(function(){\r\n $(this).addClass(SLIDE);\r\n });\r\n\r\n //creating the navigation dots\r\n if (options.navigation) {\r\n addVerticalNavigation();\r\n }\r\n\r\n //styling the sections\r\n $(SECTION_SEL).each(function(index){\r\n var that = $(this);\r\n var slides = $(this).find(SLIDE_SEL);\r\n var numSlides = slides.length;\r\n\r\n //if no active section is defined, the 1st one will be the default one\r\n if(!index && $(SECTION_ACTIVE_SEL).length === 0) {\r\n $(this).addClass(ACTIVE);\r\n }\r\n\r\n $(this).css('height', windowsHeight + 'px');\r\n\r\n if(options.paddingTop){\r\n $(this).css('padding-top', options.paddingTop);\r\n }\r\n\r\n if(options.paddingBottom){\r\n $(this).css('padding-bottom', options.paddingBottom);\r\n }\r\n\r\n if (typeof options.sectionsColor[index] !== 'undefined') {\r\n $(this).css('background-color', options.sectionsColor[index]);\r\n }\r\n\r\n if (typeof options.anchors[index] !== 'undefined') {\r\n $(this).attr('data-anchor', options.anchors[index]);\r\n\r\n //activating the menu / nav element on load\r\n if($(this).hasClass(ACTIVE)){\r\n activateMenuAndNav(options.anchors[index], index);\r\n }\r\n }\r\n\r\n // if there's any slide\r\n if (numSlides > 0) {\r\n var sliderWidth = numSlides * 100;\r\n var slideWidth = 100 / numSlides;\r\n\r\n slides.wrapAll('
');\r\n slides.parent().wrap('');\r\n\r\n $(this).find(SLIDES_CONTAINER_SEL).css('width', sliderWidth + '%');\r\n\r\n if(options.controlArrows && numSlides > 1){\r\n createSlideArrows($(this));\r\n }\r\n\r\n if(options.slidesNavigation){\r\n addSlidesNavigation($(this), numSlides);\r\n }\r\n\r\n slides.each(function(index) {\r\n $(this).css('width', slideWidth + '%');\r\n\r\n if(options.verticalCentered){\r\n addTableClass($(this));\r\n }\r\n });\r\n\r\n var startingSlide = that.find(SLIDE_ACTIVE_SEL);\r\n\r\n //if the slide won#t be an starting point, the default will be the first one\r\n if(!startingSlide.length){\r\n slides.eq(0).addClass(ACTIVE);\r\n }\r\n\r\n //is there a starting point for a non-starting section?\r\n else{\r\n silentLandscapeScroll(startingSlide);\r\n }\r\n\r\n }else{\r\n if(options.verticalCentered){\r\n addTableClass($(this));\r\n }\r\n }\r\n\r\n }).promise().done(function(){\r\n FP.setAutoScrolling(options.autoScrolling, 'internal');\r\n\r\n //the starting point is a slide?\r\n var activeSlide = $(SECTION_ACTIVE_SEL).find(SLIDE_ACTIVE_SEL);\r\n\r\n //the active section isn't the first one? Is not the first slide of the first section? Then we load that section/slide by default.\r\n if( activeSlide.length && ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) !== 0 || ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) === 0 && activeSlide.index() !== 0))){\r\n silentLandscapeScroll(activeSlide);\r\n }\r\n\r\n //fixed elements need to be moved out of the plugin container due to problems with CSS3.\r\n if(options.fixedElements && options.css3){\r\n $(options.fixedElements).appendTo($body);\r\n }\r\n\r\n //vertical centered of the navigation + first bullet active\r\n if(options.navigation){\r\n nav.css('margin-top', '-' + (nav.height()/2) + 'px');\r\n nav.find('li').eq($(SECTION_ACTIVE_SEL).index(SECTION_SEL)).find('a').addClass(ACTIVE);\r\n }\r\n\r\n //moving the menu outside the main container if it is inside (avoid problems with fixed positions when using CSS3 tranforms)\r\n if(options.menu && options.css3 && $(options.menu).closest(WRAPPER_SEL).length){\r\n $(options.menu).appendTo($body);\r\n }\r\n\r\n if(options.scrollOverflow){\r\n if(document.readyState === 'complete'){\r\n createSlimScrollingHandler();\r\n }\r\n //after DOM and images are loaded\r\n $window.on('load', createSlimScrollingHandler);\r\n }else{\r\n afterRenderActions();\r\n }\r\n\r\n responsive();\r\n\r\n //for animateAnchor:false\r\n if(!options.animateAnchor){\r\n //getting the anchor link in the URL and deleting the `#`\r\n var value = window.location.hash.replace('#', '').split('/');\r\n var destiny = value[0];\r\n\r\n if(destiny.length){\r\n var section = $('[data-anchor=\"'+destiny+'\"]');\r\n\r\n if(section.length){\r\n if(options.autoScrolling){\r\n silentScroll(section.position().top);\r\n }\r\n else{\r\n silentScroll(0);\r\n\r\n //scrolling the page to the section with no animation\r\n $htmlBody.scrollTop(section.position().top);\r\n }\r\n activateMenuAndNav(destiny, null);\r\n\r\n $.isFunction( options.afterLoad ) && options.afterLoad.call( section, destiny, (section.index(SECTION_SEL) + 1));\r\n\r\n //updating the active class\r\n section.addClass(ACTIVE).siblings().removeClass(ACTIVE);\r\n }\r\n }\r\n }\r\n\r\n //setting the class for the body element\r\n setBodyClass();\r\n\r\n $window.on('load', function() {\r\n scrollToAnchor();\r\n });\r\n\r\n });\r\n\r\n\r\n /**\r\n * Creates the control arrows for the given section\r\n */\r\n function createSlideArrows(section){\r\n section.find(SLIDES_WRAPPER_SEL).after('');\r\n\r\n if(options.controlArrowColor!='#fff'){\r\n section.find(SLIDES_ARROW_NEXT_SEL).css('border-color', 'transparent transparent transparent '+options.controlArrowColor);\r\n section.find(SLIDES_ARROW_PREV_SEL).css('border-color', 'transparent '+ options.controlArrowColor + ' transparent transparent');\r\n }\r\n\r\n if(!options.loopHorizontal){\r\n section.find(SLIDES_ARROW_PREV_SEL).hide();\r\n }\r\n }\r\n\r\n /**\r\n * Creates a vertical navigation bar.\r\n */\r\n function addVerticalNavigation(){\r\n $body.append('\"auto\"
: all undefined swipes will cause the page to scroll in that direction. \"none\"
: the page will not scroll when user swipes. \"horizontal\"
: will force page to scroll on horizontal swipes. \"vertical\"
: will force page to scroll on vertical swipes. method
is a TouchSwipe method, then\n\t* the method
is executed, and any following arguments are passed to the TouchSwipe method.\n\t* If method
is an object, then the TouchSwipe class is instantiated on the current DOMNode, passing the \n\t* configuration properties defined in the object. See TouchSwipe\n\t*\n\t*/\n\t$.fn.swipe = function (method) {\n\t\tvar $this = $(this),\n\t\t\tplugin = $this.data(PLUGIN_NS);\n\n\t\t//Check if we are already instantiated and trying to execute a method\t\n\t\tif (plugin && typeof method === 'string') {\n\t\t\tif (plugin[method]) {\n\t\t\t\treturn plugin[method].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t} else {\n\t\t\t\t$.error('Method ' + method + ' does not exist on jQuery.swipe');\n\t\t\t}\n\t\t}\n\t\t//Else not instantiated and trying to pass init object (or nothing)\n\t\telse if (!plugin && (typeof method === 'object' || !method)) {\n\t\t\treturn init.apply(this, arguments);\n\t\t}\n\n\t\treturn $this;\n\t};\n\n\t//Expose our defaults so a user could override the plugin defaults\n\t$.fn.swipe.defaults = defaults;\n\n\t/**\n\t* The phases that a touch event goes through. The phase
is passed to the event handlers. \n\t* These properties are read only, attempting to change them will not alter the values passed to the event handlers.\n\t* @namespace\n\t* @readonly\n\t* @property {string} PHASE_START Constant indicating the start phase of the touch event. Value is \"start\"
.\n\t* @property {string} PHASE_MOVE Constant indicating the move phase of the touch event. Value is \"move\"
.\n\t* @property {string} PHASE_END Constant indicating the end phase of the touch event. Value is \"end\"
.\n\t* @property {string} PHASE_CANCEL Constant indicating the cancel phase of the touch event. Value is \"cancel\"
.\n\t*/\n\t$.fn.swipe.phases = {\n\t\tPHASE_START: PHASE_START,\n\t\tPHASE_MOVE: PHASE_MOVE,\n\t\tPHASE_END: PHASE_END,\n\t\tPHASE_CANCEL: PHASE_CANCEL\n\t};\n\n\t/**\n\t* The direction constants that are passed to the event handlers. \n\t* These properties are read only, attempting to change them will not alter the values passed to the event handlers.\n\t* @namespace\n\t* @readonly\n\t* @property {string} LEFT Constant indicating the left direction. Value is \"left\"
.\n\t* @property {string} RIGHT Constant indicating the right direction. Value is \"right\"
.\n\t* @property {string} UP Constant indicating the up direction. Value is \"up\"
.\n\t* @property {string} DOWN Constant indicating the down direction. Value is \"cancel\"
.\n\t* @property {string} IN Constant indicating the in direction. Value is \"in\"
.\n\t* @property {string} OUT Constant indicating the out direction. Value is \"out\"
.\n\t*/\n\t$.fn.swipe.directions = {\n\t\tLEFT: LEFT,\n\t\tRIGHT: RIGHT,\n\t\tUP: UP,\n\t\tDOWN: DOWN,\n\t\tIN : IN,\n\t\tOUT: OUT\n\t};\n\t\n\t/**\n\t* The page scroll constants that can be used to set the value of allowPageScroll
option\n\t* These properties are read only\n\t* @namespace\n\t* @readonly\n\t* @see $.fn.swipe.defaults#allowPageScroll\n\t* @property {string} NONE Constant indicating no page scrolling is allowed. Value is \"none\"
.\n\t* @property {string} HORIZONTAL Constant indicating horizontal page scrolling is allowed. Value is \"horizontal\"
.\n\t* @property {string} VERTICAL Constant indicating vertical page scrolling is allowed. Value is \"vertical\"
.\n\t* @property {string} AUTO Constant indicating either horizontal or vertical will be allowed, depending on the swipe handlers registered. Value is \"auto\"
.\n\t*/\n\t$.fn.swipe.pageScroll = {\n\t\tNONE: NONE,\n\t\tHORIZONTAL: HORIZONTAL,\n\t\tVERTICAL: VERTICAL,\n\t\tAUTO: AUTO\n\t};\n\n\t/**\n\t* Constants representing the number of fingers used in a swipe. These are used to set both the value of fingers
in the \n\t* options object, as well as the value of the fingers
event property.\n\t* These properties are read only, attempting to change them will not alter the values passed to the event handlers.\n\t* @namespace\n\t* @readonly\n\t* @see $.fn.swipe.defaults#fingers\n\t* @property {string} ONE Constant indicating 1 finger is to be detected / was detected. Value is 1
.\n\t* @property {string} TWO Constant indicating 2 fingers are to be detected / were detected. Value is 1
.\n\t* @property {string} THREE Constant indicating 3 finger are to be detected / were detected. Value is 1
.\n\t* @property {string} ALL Constant indicating any combination of finger are to be detected. Value is \"all\"
.\n\t*/\n\t$.fn.swipe.fingers = {\n\t\tONE: 1,\n\t\tTWO: 2,\n\t\tTHREE: 3,\n\t\tALL: ALL_FINGERS\n\t};\n\n\t/**\n\t* Initialise the plugin for each DOM element matched\n\t* This creates a new instance of the main TouchSwipe class for each DOM element, and then\n\t* saves a reference to that instance in the elements data property.\n\t* @internal\n\t*/\n\tfunction init(options) {\n\t\t//Prep and extend the options\n\t\tif (options && (options.allowPageScroll === undefined && (options.swipe !== undefined || options.swipeStatus !== undefined))) {\n\t\t\toptions.allowPageScroll = NONE;\n\t\t}\n\t\t\n //Check for deprecated options\n\t\t//Ensure that any old click handlers are assigned to the new tap, unless we have a tap\n\t\tif(options.click!==undefined && options.tap===undefined) {\n\t\t options.tap = options.click;\n\t\t}\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\t\t\n //pass empty object so we dont modify the defaults\n\t\toptions = $.extend({}, $.fn.swipe.defaults, options);\n\n\t\t//For each element instantiate the plugin\n\t\treturn this.each(function () {\n\t\t\tvar $this = $(this);\n\n\t\t\t//Check we havent already initialised the plugin\n\t\t\tvar plugin = $this.data(PLUGIN_NS);\n\n\t\t\tif (!plugin) {\n\t\t\t\tplugin = new TouchSwipe(this, options);\n\t\t\t\t$this.data(PLUGIN_NS, plugin);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t* Main TouchSwipe Plugin Class.\n\t* Do not use this to construct your TouchSwipe object, use the jQuery plugin method $.fn.swipe(); {@link $.fn.swipe}\n\t* @private\n\t* @name TouchSwipe\n\t* @param {DOMNode} element The HTML DOM object to apply to plugin to\n\t* @param {Object} options The options to configure the plugin with. @link {$.fn.swipe.defaults}\n\t* @see $.fh.swipe.defaults\n\t* @see $.fh.swipe\n * @class\n\t*/\n\tfunction TouchSwipe(element, options) {\n var useTouchEvents = (SUPPORTS_TOUCH || SUPPORTS_POINTER || !options.fallbackToMouseEvents),\n START_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerDown' : 'pointerdown') : 'touchstart') : 'mousedown',\n MOVE_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerMove' : 'pointermove') : 'touchmove') : 'mousemove',\n END_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerUp' : 'pointerup') : 'touchend') : 'mouseup',\n LEAVE_EV = useTouchEvents ? null : 'mouseleave', //we manually detect leave on touch devices, so null event here\n CANCEL_EV = (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerCancel' : 'pointercancel') : 'touchcancel');\n\n\n\n\t\t//touch properties\n\t\tvar distance = 0,\n\t\t\tdirection = null,\n\t\t\tduration = 0,\n\t\t\tstartTouchesDistance = 0,\n\t\t\tendTouchesDistance = 0,\n\t\t\tpinchZoom = 1,\n\t\t\tpinchDistance = 0,\n\t\t\tpinchDirection = 0,\n\t\t\tmaximumsMap=null;\n\n\t\t\n\t\t\n\t\t//jQuery wrapped element for this instance\n\t\tvar $element = $(element);\n\t\t\n\t\t//Current phase of th touch cycle\n\t\tvar phase = \"start\";\n\n\t\t// the current number of fingers being used.\n\t\tvar fingerCount = 0; \t\t\t\n\n\t\t//track mouse points / delta\n\t\tvar fingerData=null;\n\n\t\t//track times\n\t\tvar startTime = 0,\n\t\t\tendTime = 0,\n\t\t\tpreviousTouchEndTime=0,\n\t\t\tpreviousTouchFingerCount=0,\n\t\t\tdoubleTapStartTime=0;\n\n\t\t//Timeouts\n\t\tvar singleTapTimeout=null,\n\t\t\tholdTimeout=null;\n \n\t\t// Add gestures to all swipable areas if supported\n\t\ttry {\n\t\t\t$element.bind(START_EV, touchStart);\n\t\t\t$element.bind(CANCEL_EV, touchCancel);\n\t\t}\n\t\tcatch (e) {\n\t\t\t$.error('events not supported ' + START_EV + ',' + CANCEL_EV + ' on jQuery.swipe');\n\t\t}\n\n\t\t//\n\t\t//Public methods\n\t\t//\n\t\t\n\t\t/**\n\t\t* re-enables the swipe plugin with the previous configuration\n\t\t* @function\n\t\t* @name $.fn.swipe#enable\n\t\t* @return {DOMNode} The Dom element that was registered with TouchSwipe \n\t\t* @example $(\"#element\").swipe(\"enable\");\n\t\t*/\n\t\tthis.enable = function () {\n\t\t\t$element.bind(START_EV, touchStart);\n\t\t\t$element.bind(CANCEL_EV, touchCancel);\n\t\t\treturn $element;\n\t\t};\n\n\t\t/**\n\t\t* disables the swipe plugin\n\t\t* @function\n\t\t* @name $.fn.swipe#disable\n\t\t* @return {DOMNode} The Dom element that is now registered with TouchSwipe\n\t * @example $(\"#element\").swipe(\"disable\");\n\t\t*/\n\t\tthis.disable = function () {\n\t\t\tremoveListeners();\n\t\t\treturn $element;\n\t\t};\n\n\t\t/**\n\t\t* Destroy the swipe plugin completely. To use any swipe methods, you must re initialise the plugin.\n\t\t* @function\n\t\t* @name $.fn.swipe#destroy\n\t\t* @example $(\"#element\").swipe(\"destroy\");\n\t\t*/\n\t\tthis.destroy = function () {\n\t\t\tremoveListeners();\n\t\t\t$element.data(PLUGIN_NS, null);\n\t\t\t$element = null;\n\t\t};\n\n\t\t\n /**\n * Allows run time updating of the swipe configuration options.\n * @function\n \t * @name $.fn.swipe#option\n \t * @param {String} property The option property to get or set\n * @param {Object} [value] The value to set the property to\n\t\t * @return {Object} If only a property name is passed, then that property value is returned.\n\t\t * @example $(\"#element\").swipe(\"option\", \"threshold\"); // return the threshold\n * @example $(\"#element\").swipe(\"option\", \"threshold\", 100); // set the threshold after init\n * @see $.fn.swipe.defaults\n *\n */\n this.option = function (property, value) {\n if(options[property]!==undefined) {\n if(value===undefined) {\n return options[property];\n } else {\n options[property] = value;\n }\n } else {\n $.error('Option ' + property + ' does not exist on jQuery.swipe.options');\n }\n\n return null;\n }\n\n\t\t//\n\t\t// Private methods\n\t\t//\n\t\t\n\t\t//\n\t\t// EVENTS\n\t\t//\n\t\t/**\n\t\t* Event handler for a touch start event.\n\t\t* Stops the default click event from triggering and stores where we touched\n\t\t* @inner\n\t\t* @param {object} jqEvent The normalised jQuery event object.\n\t\t*/\n\t\tfunction touchStart(jqEvent) {\n\t\t\t//If we already in a touch event (a finger already in use) then ignore subsequent ones..\n\t\t\tif( getTouchInProgress() )\n\t\t\t\treturn;\n\t\t\t\n\t\t\t//Check if this element matches any in the excluded elements selectors, or its parent is excluded, if so, DON'T swipe\n\t\t\tif( $(jqEvent.target).closest( options.excludedElements, $element ).length>0 ) \n\t\t\t\treturn;\n\t\t\t\t\n\t\t\t//As we use Jquery bind for events, we need to target the original event object\n\t\t\t//If these events are being programmatically triggered, we don't have an original event object, so use the Jq one.\n\t\t\tvar event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent;\n\t\t\t\n\t\t\tvar ret,\n\t\t\t\tevt = SUPPORTS_TOUCH ? event.touches[0] : event;\n\n\t\t\tphase = PHASE_START;\n\n\t\t\t//If we support touches, get the finger count\n\t\t\tif (SUPPORTS_TOUCH) {\n\t\t\t\t// get the total number of fingers touching the screen\n\t\t\t\tfingerCount = event.touches.length;\n\t\t\t}\n\t\t\t//Else this is the desktop, so stop the browser from dragging content\n\t\t\telse {\n\t\t\t\tjqEvent.preventDefault(); //call this on jq event so we are cross browser\n\t\t\t}\n\n\t\t\t//clear vars..\n\t\t\tdistance = 0;\n\t\t\tdirection = null;\n\t\t\tpinchDirection=null;\n\t\t\tduration = 0;\n\t\t\tstartTouchesDistance=0;\n\t\t\tendTouchesDistance=0;\n\t\t\tpinchZoom = 1;\n\t\t\tpinchDistance = 0;\n\t\t\tfingerData=createAllFingerData();\n\t\t\tmaximumsMap=createMaximumsData();\n\t\t\tcancelMultiFingerRelease();\n\n\t\t\t\n\t\t\t// check the number of fingers is what we are looking for, or we are capturing pinches\n\t\t\tif (!SUPPORTS_TOUCH || (fingerCount === options.fingers || options.fingers === ALL_FINGERS) || hasPinches()) {\n\t\t\t\t// get the coordinates of the touch\n\t\t\t\tcreateFingerData( 0, evt );\n\t\t\t\tstartTime = getTimeStamp();\n\t\t\t\t\n\t\t\t\tif(fingerCount==2) {\n\t\t\t\t\t//Keep track of the initial pinch distance, so we can calculate the diff later\n\t\t\t\t\t//Store second finger data as start\n\t\t\t\t\tcreateFingerData( 1, event.touches[1] );\n\t\t\t\t\tstartTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (options.swipeStatus || options.pinchStatus) {\n\t\t\t\t\tret = triggerHandler(event, phase);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//A touch with more or less than the fingers we are looking for, so cancel\n\t\t\t\tret = false; \n\t\t\t}\n\n\t\t\t//If we have a return value from the users handler, then return and cancel\n\t\t\tif (ret === false) {\n\t\t\t\tphase = PHASE_CANCEL;\n\t\t\t\ttriggerHandler(event, phase);\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options.hold) {\n\t\t\t\t\tholdTimeout = setTimeout($.proxy(function() {\n\t\t\t\t\t\t//Trigger the event\n\t\t\t\t\t\t$element.trigger('hold', [event.target]);\n\t\t\t\t\t\t//Fire the callback\n\t\t\t\t\t\tif(options.hold) {\n\t\t\t\t\t\t\tret = options.hold.call($element, event, event.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this), options.longTapThreshold );\n\t\t\t\t}\n\n\t\t\t\tsetTouchInProgress(true);\n\t\t\t}\n\n return null;\n\t\t};\n\t\t\n\t\t\n\t\t\n\t\t/**\n\t\t* Event handler for a touch move event. \n\t\t* If we change fingers during move, then cancel the event\n\t\t* @inner\n\t\t* @param {object} jqEvent The normalised jQuery event object.\n\t\t*/\n\t\tfunction touchMove(jqEvent) {\n\t\t\t\n\t\t\t//As we use Jquery bind for events, we need to target the original event object\n\t\t\t//If these events are being programmatically triggered, we don't have an original event object, so use the Jq one.\n\t\t\tvar event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent;\n\t\t\t\n\t\t\t//If we are ending, cancelling, or within the threshold of 2 fingers being released, don't track anything..\n\t\t\tif (phase === PHASE_END || phase === PHASE_CANCEL || inMultiFingerRelease())\n\t\t\t\treturn;\n\n\t\t\tvar ret,\n\t\t\t\tevt = SUPPORTS_TOUCH ? event.touches[0] : event;\n\t\t\t\n\n\t\t\t//Update the finger data \n\t\t\tvar currentFinger = updateFingerData(evt);\n\t\t\tendTime = getTimeStamp();\n\t\t\t\n\t\t\tif (SUPPORTS_TOUCH) {\n\t\t\t\tfingerCount = event.touches.length;\n\t\t\t}\n\n\t\t\tif (options.hold)\n\t\t\t\tclearTimeout(holdTimeout);\n\n\t\t\tphase = PHASE_MOVE;\n\n\t\t\t//If we have 2 fingers get Touches distance as well\n\t\t\tif(fingerCount==2) {\n\t\t\t\t\n\t\t\t\t//Keep track of the initial pinch distance, so we can calculate the diff later\n\t\t\t\t//We do this here as well as the start event, in case they start with 1 finger, and the press 2 fingers\n\t\t\t\tif(startTouchesDistance==0) {\n\t\t\t\t\t//Create second finger if this is the first time...\n\t\t\t\t\tcreateFingerData( 1, event.touches[1] );\n\t\t\t\t\t\n\t\t\t\t\tstartTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start);\n\t\t\t\t} else {\n\t\t\t\t\t//Else just update the second finger\n\t\t\t\t\tupdateFingerData(event.touches[1]);\n\t\t\t\t\n\t\t\t\t\tendTouchesDistance = calculateTouchesDistance(fingerData[0].end, fingerData[1].end);\n\t\t\t\t\tpinchDirection = calculatePinchDirection(fingerData[0].end, fingerData[1].end);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tpinchZoom = calculatePinchZoom(startTouchesDistance, endTouchesDistance);\n\t\t\t\tpinchDistance = Math.abs(startTouchesDistance - endTouchesDistance);\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\n\t\t\tif ( (fingerCount === options.fingers || options.fingers === ALL_FINGERS) || !SUPPORTS_TOUCH || hasPinches() ) {\n\t\t\t\t\n\t\t\t\tdirection = calculateDirection(currentFinger.start, currentFinger.end);\n\t\t\t\t\n\t\t\t\t//Check if we need to prevent default event (page scroll / pinch zoom) or not\n\t\t\t\tvalidateDefaultEvent(jqEvent, direction);\n\n\t\t\t\t//Distance and duration are all off the main finger\n\t\t\t\tdistance = calculateDistance(currentFinger.start, currentFinger.end);\n\t\t\t\tduration = calculateDuration();\n\n //Cache the maximum distance we made in this direction\n setMaxDistance(direction, distance);\n\n\n\t\t\t\tif (options.swipeStatus || options.pinchStatus) {\n\t\t\t\t\tret = triggerHandler(event, phase);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//If we trigger end events when threshold are met, or trigger events when touch leaves element\n\t\t\t\tif(!options.triggerOnTouchEnd || options.triggerOnTouchLeave) {\n\t\t\t\t\t\n\t\t\t\t\tvar inBounds = true;\n\t\t\t\t\t\n\t\t\t\t\t//If checking if we leave the element, run the bounds check (we can use touchleave as its not supported on webkit)\n\t\t\t\t\tif(options.triggerOnTouchLeave) {\n\t\t\t\t\t\tvar bounds = getbounds( this );\n\t\t\t\t\t\tinBounds = isInBounds( currentFinger.end, bounds );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//Trigger end handles as we swipe if thresholds met or if we have left the element if the user has asked to check these..\n\t\t\t\t\tif(!options.triggerOnTouchEnd && inBounds) {\n\t\t\t\t\t\tphase = getNextPhase( PHASE_MOVE );\n\t\t\t\t\t} \n\t\t\t\t\t//We end if out of bounds here, so set current phase to END, and check if its modified \n\t\t\t\t\telse if(options.triggerOnTouchLeave && !inBounds ) {\n\t\t\t\t\t\tphase = getNextPhase( PHASE_END );\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\tif(phase==PHASE_CANCEL || phase==PHASE_END)\t{\n\t\t\t\t\t\ttriggerHandler(event, phase);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tphase = PHASE_CANCEL;\n\t\t\t\ttriggerHandler(event, phase);\n\t\t\t}\n\n\t\t\tif (ret === false) {\n\t\t\t\tphase = PHASE_CANCEL;\n\t\t\t\ttriggerHandler(event, phase);\n\t\t\t}\n\t\t}\n\n\n\n\t\t/**\n\t\t* Event handler for a touch end event. \n\t\t* Calculate the direction and trigger events\n\t\t* @inner\n\t\t* @param {object} jqEvent The normalised jQuery event object.\n\t\t*/\n\t\tfunction touchEnd(jqEvent) {\n\t\t\t//As we use Jquery bind for events, we need to target the original event object\n\t\t\tvar event = jqEvent.originalEvent;\n\t\t\t\t\n\n\t\t\t//If we are still in a touch with another finger return\n\t\t\t//This allows us to wait a fraction and see if the other finger comes up, if it does within the threshold, then we treat it as a multi release, not a single release.\n\t\t\tif (SUPPORTS_TOUCH) {\n\t\t\t\tif(event.touches.length>0) {\n\t\t\t\t\tstartMultiFingerRelease();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//If a previous finger has been released, check how long ago, if within the threshold, then assume it was a multifinger release.\n\t\t\t//This is used to allow 2 fingers to release fractionally after each other, whilst maintainig the event as containg 2 fingers, not 1\n\t\t\tif(inMultiFingerRelease()) {\t\n\t\t\t\tfingerCount=previousTouchFingerCount;\n\t\t\t}\t\n\t\t\n\t\t\t//Set end of swipe\n\t\t\tendTime = getTimeStamp();\n\t\t\t\n\t\t\t//Get duration incase move was never fired\n\t\t\tduration = calculateDuration();\n\t\t\t\n\t\t\t//If we trigger handlers at end of swipe OR, we trigger during, but they didnt trigger and we are still in the move phase\n\t\t\tif(didSwipeBackToCancel() || !validateSwipeDistance()) {\n\t\t\t phase = PHASE_CANCEL;\n triggerHandler(event, phase);\n\t\t\t} else if (options.triggerOnTouchEnd || (options.triggerOnTouchEnd == false && phase === PHASE_MOVE)) {\n\t\t\t\t//call this on jq event so we are cross browser \n\t\t\t\tjqEvent.preventDefault(); \n\t\t\t\tphase = PHASE_END;\n triggerHandler(event, phase);\n\t\t\t}\n\t\t\t//Special cases - A tap should always fire on touch end regardless,\n\t\t\t//So here we manually trigger the tap end handler by itself\n\t\t\t//We dont run trigger handler as it will re-trigger events that may have fired already\n\t\t\telse if (!options.triggerOnTouchEnd && hasTap()) {\n //Trigger the pinch events...\n\t\t\t phase = PHASE_END;\n\t\t\t triggerHandlerForGesture(event, phase, TAP);\n\t\t\t}\n\t\t\telse if (phase === PHASE_MOVE) {\n\t\t\t\tphase = PHASE_CANCEL;\n\t\t\t\ttriggerHandler(event, phase);\n\t\t\t}\n\n\t\t\tsetTouchInProgress(false);\n\n return null;\n\t\t}\n\n\n\n\t\t/**\n\t\t* Event handler for a touch cancel event. \n\t\t* Clears current vars\n\t\t* @inner\n\t\t*/\n\t\tfunction touchCancel() {\n\t\t\t// reset the variables back to default values\n\t\t\tfingerCount = 0;\n\t\t\tendTime = 0;\n\t\t\tstartTime = 0;\n\t\t\tstartTouchesDistance=0;\n\t\t\tendTouchesDistance=0;\n\t\t\tpinchZoom=1;\n\t\t\t\n\t\t\t//If we were in progress of tracking a possible multi touch end, then re set it.\n\t\t\tcancelMultiFingerRelease();\n\t\t\t\n\t\t\tsetTouchInProgress(false);\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t* Event handler for a touch leave event. \n\t\t* This is only triggered on desktops, in touch we work this out manually\n\t\t* as the touchleave event is not supported in webkit\n\t\t* @inner\n\t\t*/\n\t\tfunction touchLeave(jqEvent) {\n\t\t\tvar event = jqEvent.originalEvent;\n\t\t\t\n\t\t\t//If we have the trigger on leave property set....\n\t\t\tif(options.triggerOnTouchLeave) {\n\t\t\t\tphase = getNextPhase( PHASE_END );\n\t\t\t\ttriggerHandler(event, phase);\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t* Removes all listeners that were associated with the plugin\n\t\t* @inner\n\t\t*/\n\t\tfunction removeListeners() {\n\t\t\t$element.unbind(START_EV, touchStart);\n\t\t\t$element.unbind(CANCEL_EV, touchCancel);\n\t\t\t$element.unbind(MOVE_EV, touchMove);\n\t\t\t$element.unbind(END_EV, touchEnd);\n\t\t\t\n\t\t\t//we only have leave events on desktop, we manually calculate leave on touch as its not supported in webkit\n\t\t\tif(LEAVE_EV) { \n\t\t\t\t$element.unbind(LEAVE_EV, touchLeave);\n\t\t\t}\n\t\t\t\n\t\t\tsetTouchInProgress(false);\n\t\t}\n\n\t\t\n\t\t/**\n\t\t * Checks if the time and distance thresholds have been met, and if so then the appropriate handlers are fired.\n\t\t */\n\t\tfunction getNextPhase(currentPhase) {\n\t\t\t\n\t\t\tvar nextPhase = currentPhase;\n\t\t\t\n\t\t\t// Ensure we have valid swipe (under time and over distance and check if we are out of bound...)\n\t\t\tvar validTime = validateSwipeTime();\n\t\t\tvar validDistance = validateSwipeDistance();\n\t\t\tvar didCancel = didSwipeBackToCancel();\n\t\t\t\t\t\t\n\t\t\t//If we have exceeded our time, then cancel\t\n\t\t\tif(!validTime || didCancel) {\n\t\t\t\tnextPhase = PHASE_CANCEL;\n\t\t\t}\n\t\t\t//Else if we are moving, and have reached distance then end\n\t\t\telse if (validDistance && currentPhase == PHASE_MOVE && (!options.triggerOnTouchEnd || options.triggerOnTouchLeave) ) {\n\t\t\t\tnextPhase = PHASE_END;\n\t\t\t} \n\t\t\t//Else if we have ended by leaving and didn't reach distance, then cancel\n\t\t\telse if (!validDistance && currentPhase==PHASE_END && options.triggerOnTouchLeave) {\n\t\t\t\tnextPhase = PHASE_CANCEL;\n\t\t\t}\n\t\t\t\n\t\t\treturn nextPhase;\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t* Trigger the relevant event handler\n\t\t* The handlers are passed the original event, the element that was swiped, and in the case of the catch all handler, the direction that was swiped, \"left\", \"right\", \"up\", or \"down\"\n\t\t* @param {object} event the original event object\n\t\t* @param {string} phase the phase of the swipe (start, end cancel etc) {@link $.fn.swipe.phases}\n\t\t* @inner\n\t\t*/\n\t\tfunction triggerHandler(event, phase) {\n\t\t\t\n\t\t\tvar ret = undefined;\n\t\t\t\n\t\t\t//Swipes and pinches are not mutually exclusive - can happend at same time, so need to trigger 2 events potentially\n\t\t\tif( (didSwipe() || hasSwipes()) || (didPinch() || hasPinches()) ) {\n\t\t\t\t// SWIPE GESTURES\n\t\t\t\tif(didSwipe() || hasSwipes()) { //hasSwipes as status needs to fire even if swipe is invalid\n\t\t\t\t\t//Trigger the swipe events...\n\t\t\t\t\tret = triggerHandlerForGesture(event, phase, SWIPE);\n\t\t\t\t}\t\n\n\t\t\t\t// PINCH GESTURES (if the above didn't cancel)\n\t\t\t\tif((didPinch() || hasPinches()) && ret!==false) {\n\t\t\t\t\t//Trigger the pinch events...\n\t\t\t\t\tret = triggerHandlerForGesture(event, phase, PINCH);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t \n\t\t\t\t// CLICK / TAP (if the above didn't cancel)\n\t\t\t\tif(didDoubleTap() && ret!==false) {\n\t\t\t\t\t//Trigger the tap events...\n\t\t\t\t\tret = triggerHandlerForGesture(event, phase, DOUBLE_TAP);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// CLICK / TAP (if the above didn't cancel)\n\t\t\t\telse if(didLongTap() && ret!==false) {\n\t\t\t\t\t//Trigger the tap events...\n\t\t\t\t\tret = triggerHandlerForGesture(event, phase, LONG_TAP);\n\t\t\t\t}\n\n\t\t\t\t// CLICK / TAP (if the above didn't cancel)\n\t\t\t\telse if(didTap() && ret!==false) {\n\t\t\t\t\t//Trigger the tap event..\n\t\t\t\t\tret = triggerHandlerForGesture(event, phase, TAP);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t// If we are cancelling the gesture, then manually trigger the reset handler\n\t\t\tif (phase === PHASE_CANCEL) {\n\t\t\t\ttouchCancel(event);\n\t\t\t}\n\t\t\t\n\t\t\t// If we are ending the gesture, then manually trigger the reset handler IF all fingers are off\n\t\t\tif(phase === PHASE_END) {\n\t\t\t\t//If we support touch, then check that all fingers are off before we cancel\n\t\t\t\tif (SUPPORTS_TOUCH) {\n\t\t\t\t\tif(event.touches.length==0) {\n\t\t\t\t\t\ttouchCancel(event);\t\n\t\t\t\t\t}\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\ttouchCancel(event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\n\t\t\treturn ret;\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t/**\n\t\t* Trigger the relevant event handler\n\t\t* The handlers are passed the original event, the element that was swiped, and in the case of the catch all handler, the direction that was swiped, \"left\", \"right\", \"up\", or \"down\"\n\t\t* @param {object} event the original event object\n\t\t* @param {string} phase the phase of the swipe (start, end cancel etc) {@link $.fn.swipe.phases}\n\t\t* @param {string} gesture the gesture to trigger a handler for : PINCH or SWIPE {@link $.fn.swipe.gestures}\n\t\t* @return Boolean False, to indicate that the event should stop propagation, or void.\n\t\t* @inner\n\t\t*/\n\t\tfunction triggerHandlerForGesture(event, phase, gesture) {\t\n\t\t\t\n\t\t\tvar ret=undefined;\n\t\t\t\n\t\t\t//SWIPES....\n\t\t\tif(gesture==SWIPE) {\n\t\t\t\t//Trigger status every time..\n\t\t\t\t\n\t\t\t\t//Trigger the event...\n\t\t\t\t$element.trigger('swipeStatus', [phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData]);\n\t\t\t\t\n\t\t\t\t//Fire the callback\n\t\t\t\tif (options.swipeStatus) {\n\t\t\t\t\tret = options.swipeStatus.call($element, event, phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData);\n\t\t\t\t\t//If the status cancels, then dont run the subsequent event handlers..\n\t\t\t\t\tif(ret===false) return false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (phase == PHASE_END && validateSwipe()) {\n\t\t\t\t\t//Fire the catch all event\n\t\t\t\t\t$element.trigger('swipe', [direction, distance, duration, fingerCount, fingerData]);\n\t\t\t\t\t\n\t\t\t\t\t//Fire catch all callback\n\t\t\t\t\tif (options.swipe) {\n\t\t\t\t\t\tret = options.swipe.call($element, event, direction, distance, duration, fingerCount, fingerData);\n\t\t\t\t\t\t//If the status cancels, then dont run the subsequent event handlers..\n\t\t\t\t\t\tif(ret===false) return false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//trigger direction specific event handlers\t\n\t\t\t\t\tswitch (direction) {\n\t\t\t\t\t\tcase LEFT:\n\t\t\t\t\t\t\t//Trigger the event\n\t\t\t\t\t\t\t$element.trigger('swipeLeft', [direction, distance, duration, fingerCount, fingerData]);\n\t\t\t\t\t\n\t\t\t\t\t //Fire the callback\n\t\t\t\t\t\t\tif (options.swipeLeft) {\n\t\t\t\t\t\t\t\tret = options.swipeLeft.call($element, event, direction, distance, duration, fingerCount, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase RIGHT:\n\t\t\t\t\t\t\t//Trigger the event\n\t\t\t\t\t $element.trigger('swipeRight', [direction, distance, duration, fingerCount, fingerData]);\n\t\t\t\t\t\n\t\t\t\t\t //Fire the callback\n\t\t\t\t\t\t\tif (options.swipeRight) {\n\t\t\t\t\t\t\t\tret = options.swipeRight.call($element, event, direction, distance, duration, fingerCount, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase UP:\n\t\t\t\t\t\t\t//Trigger the event\n\t\t\t\t\t $element.trigger('swipeUp', [direction, distance, duration, fingerCount, fingerData]);\n\t\t\t\t\t\n\t\t\t\t\t //Fire the callback\n\t\t\t\t\t\t\tif (options.swipeUp) {\n\t\t\t\t\t\t\t\tret = options.swipeUp.call($element, event, direction, distance, duration, fingerCount, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase DOWN:\n\t\t\t\t\t\t\t//Trigger the event\n\t\t\t\t\t $element.trigger('swipeDown', [direction, distance, duration, fingerCount, fingerData]);\n\t\t\t\t\t\n\t\t\t\t\t //Fire the callback\n\t\t\t\t\t\t\tif (options.swipeDown) {\n\t\t\t\t\t\t\t\tret = options.swipeDown.call($element, event, direction, distance, duration, fingerCount, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//PINCHES....\n\t\t\tif(gesture==PINCH) {\n\t\t\t\t//Trigger the event\n\t\t\t $element.trigger('pinchStatus', [phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]);\n\t\t\t\t\t\n //Fire the callback\n\t\t\t\tif (options.pinchStatus) {\n\t\t\t\t\tret = options.pinchStatus.call($element, event, phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData);\n\t\t\t\t\t//If the status cancels, then dont run the subsequent event handlers..\n\t\t\t\t\tif(ret===false) return false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(phase==PHASE_END && validatePinch()) {\n\t\t\t\t\t\n\t\t\t\t\tswitch (pinchDirection) {\n\t\t\t\t\t\tcase IN:\n\t\t\t\t\t\t\t//Trigger the event\n $element.trigger('pinchIn', [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]);\n \n //Fire the callback\n if (options.pinchIn) {\n\t\t\t\t\t\t\t\tret = options.pinchIn.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase OUT:\n\t\t\t\t\t\t\t//Trigger the event\n $element.trigger('pinchOut', [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]);\n \n //Fire the callback\n if (options.pinchOut) {\n\t\t\t\t\t\t\t\tret = options.pinchOut.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\n \n\t \t\t\n\t\t\tif(gesture==TAP) {\n\t\t\t\tif(phase === PHASE_CANCEL || phase === PHASE_END) {\n\t\t\t\t\t\n \t\t\t \n \t\t\t //Cancel any existing double tap\n\t\t\t\t clearTimeout(singleTapTimeout);\n \t\t\t //Cancel hold timeout\n\t\t\t\t clearTimeout(holdTimeout);\n\t\t\t\t \n\t\t\t\t\t//If we are also looking for doubelTaps, wait incase this is one...\n\t\t\t\t if(hasDoubleTap() && !inDoubleTap()) {\n\t\t\t\t //Cache the time of this tap\n doubleTapStartTime = getTimeStamp();\n \n\t\t\t\t //Now wait for the double tap timeout, and trigger this single tap\n\t\t\t\t //if its not cancelled by a double tap\n\t\t\t\t singleTapTimeout = setTimeout($.proxy(function() {\n \t\t\t doubleTapStartTime=null;\n \t\t\t //Trigger the event\n \t\t\t$element.trigger('tap', [event.target]);\n\n \n //Fire the callback\n if(options.tap) {\n ret = options.tap.call($element, event, event.target);\n }\n \t\t\t }, this), options.doubleTapThreshold );\n \t\t\t \t\n \t\t\t } else {\n doubleTapStartTime=null;\n \n //Trigger the event\n $element.trigger('tap', [event.target]);\n\n \n //Fire the callback\n if(options.tap) {\n ret = options.tap.call($element, event, event.target);\n }\n\t \t\t }\n\t \t\t}\n\t\t\t}\n\t\t\t\n\t\t\telse if (gesture==DOUBLE_TAP) {\n\t\t\t\tif(phase === PHASE_CANCEL || phase === PHASE_END) {\n\t\t\t\t\t//Cancel any pending singletap \n\t\t\t\t clearTimeout(singleTapTimeout);\n\t\t\t\t doubleTapStartTime=null;\n\t\t\t\t \n //Trigger the event\n $element.trigger('doubletap', [event.target]);\n \n //Fire the callback\n if(options.doubleTap) {\n ret = options.doubleTap.call($element, event, event.target);\n }\n\t \t\t}\n\t\t\t}\n\t\t\t\n\t\t\telse if (gesture==LONG_TAP) {\n\t\t\t\tif(phase === PHASE_CANCEL || phase === PHASE_END) {\n\t\t\t\t\t//Cancel any pending singletap (shouldnt be one)\n\t\t\t\t clearTimeout(singleTapTimeout);\n\t\t\t\t doubleTapStartTime=null;\n\t\t\t\t \n //Trigger the event\n $element.trigger('longtap', [event.target]);\n \n //Fire the callback\n if(options.longTap) {\n ret = options.longTap.call($element, event, event.target);\n }\n\t \t\t}\n\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\treturn ret;\n\t\t}\n\n\n\n\t\t\n\t\t//\n\t\t// GESTURE VALIDATION\n\t\t//\n\t\t\n\t\t/**\n\t\t* Checks the user has swipe far enough\n\t\t* @return Boolean if threshold
has been set, return true if the threshold was met, else false.\n\t\t* If no threshold was set, then we return true.\n\t\t* @inner\n\t\t*/\n\t\tfunction validateSwipeDistance() {\n\t\t\tvar valid = true;\n\t\t\t//If we made it past the min swipe distance..\n\t\t\tif (options.threshold !== null) {\n\t\t\t\tvalid = distance >= options.threshold;\n\t\t\t}\n\t\t\t\n return valid;\n\t\t}\n\t\t\n\t\t/**\n\t\t* Checks the user has swiped back to cancel.\n\t\t* @return Boolean if cancelThreshold
has been set, return true if the cancelThreshold was met, else false.\n\t\t* If no cancelThreshold was set, then we return true.\n\t\t* @inner\n\t\t*/\n\t\tfunction didSwipeBackToCancel() {\n var cancelled = false;\n \t\tif(options.cancelThreshold !== null && direction !==null) {\n \t\t cancelled = (getMaxDistance( direction ) - distance) >= options.cancelThreshold;\n\t\t\t}\n\t\t\t\n\t\t\treturn cancelled;\n\t\t}\n\n\t\t/**\n\t\t* Checks the user has pinched far enough\n\t\t* @return Boolean if pinchThreshold
has been set, return true if the threshold was met, else false.\n\t\t* If no threshold was set, then we return true.\n\t\t* @inner\n\t\t*/\n\t\tfunction validatePinchDistance() {\n\t\t\tif (options.pinchThreshold !== null) {\n\t\t\t\treturn pinchDistance >= options.pinchThreshold;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t* Checks that the time taken to swipe meets the minimum / maximum requirements\n\t\t* @return Boolean\n\t\t* @inner\n\t\t*/\n\t\tfunction validateSwipeTime() {\n\t\t\tvar result;\n\t\t\t//If no time set, then return true\n\n\t\t\tif (options.maxTimeThreshold) {\n\t\t\t\tif (duration >= options.maxTimeThreshold) {\n\t\t\t\t\tresult = false;\n\t\t\t\t} else {\n\t\t\t\t\tresult = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult = true;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\n\n\t\t/**\n\t\t* Checks direction of the swipe and the value allowPageScroll to see if we should allow or prevent the default behaviour from occurring.\n\t\t* This will essentially allow page scrolling or not when the user is swiping on a touchSwipe object.\n\t\t* @param {object} jqEvent The normalised jQuery representation of the event object.\n\t\t* @param {string} direction The direction of the event. See {@link $.fn.swipe.directions}\n\t\t* @see $.fn.swipe.directions\n\t\t* @inner\n\t\t*/\n\t\tfunction validateDefaultEvent(jqEvent, direction) {\n\n\t\t\t\n\t\t\tif( options.preventDefaultEvents === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.allowPageScroll === NONE) {\n\t\t\t\tjqEvent.preventDefault();\n\t\t\t} else {\n\t\t\t\tvar auto = options.allowPageScroll === AUTO;\n\n\t\t\t\tswitch (direction) {\n\t\t\t\t\tcase LEFT:\n\t\t\t\t\t\tif ((options.swipeLeft && auto) || (!auto && options.allowPageScroll != HORIZONTAL)) {\n\t\t\t\t\t\t\tjqEvent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase RIGHT:\n\t\t\t\t\t\tif ((options.swipeRight && auto) || (!auto && options.allowPageScroll != HORIZONTAL)) {\n\t\t\t\t\t\t\tjqEvent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UP:\n\t\t\t\t\t\tif ((options.swipeUp && auto) || (!auto && options.allowPageScroll != VERTICAL)) {\n\t\t\t\t\t\t\tjqEvent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase DOWN:\n\t\t\t\t\t\tif ((options.swipeDown && auto) || (!auto && options.allowPageScroll != VERTICAL)) {\n\t\t\t\t\t\t\tjqEvent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\n\t\t// PINCHES\n\t\t/**\n\t\t * Returns true of the current pinch meets the thresholds\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction validatePinch() {\n\t\t var hasCorrectFingerCount = validateFingers();\n\t\t var hasEndPoint = validateEndPoint();\n\t\t\tvar hasCorrectDistance = validatePinchDistance();\n\t\t\treturn hasCorrectFingerCount && hasEndPoint && hasCorrectDistance;\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if any Pinch events have been registered\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction hasPinches() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(options.pinchStatus || options.pinchIn || options.pinchOut);\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we are detecting pinches, and have one\n\t\t * @return Boolean\n\t\t * @inner\n\t\t */\n\t\tfunction didPinch() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(validatePinch() && hasPinches());\n\t\t}\n\n\n\n\n\t\t// SWIPES\n\t\t/**\n\t\t * Returns true if the current swipe meets the thresholds\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction validateSwipe() {\n\t\t\t//Check validity of swipe\n\t\t\tvar hasValidTime = validateSwipeTime();\n\t\t\tvar hasValidDistance = validateSwipeDistance();\t\n\t\t\tvar hasCorrectFingerCount = validateFingers();\n\t\t var hasEndPoint = validateEndPoint();\n\t\t var didCancel = didSwipeBackToCancel();\t\n\t\t \n\t\t\t// if the user swiped more than the minimum length, perform the appropriate action\n\t\t\t// hasValidDistance is null when no distance is set \n\t\t\tvar valid = !didCancel && hasEndPoint && hasCorrectFingerCount && hasValidDistance && hasValidTime;\n\t\t\t\n\t\t\treturn valid;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if any Swipe events have been registered\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction hasSwipes() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(options.swipe || options.swipeStatus || options.swipeLeft || options.swipeRight || options.swipeUp || options.swipeDown);\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t * Returns true if we are detecting swipes and have one\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction didSwipe() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(validateSwipe() && hasSwipes());\n\t\t}\n\n /**\n\t\t * Returns true if we have matched the number of fingers we are looking for\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n function validateFingers() {\n //The number of fingers we want were matched, or on desktop we ignore\n \t\treturn ((fingerCount === options.fingers || options.fingers === ALL_FINGERS) || !SUPPORTS_TOUCH);\n \t}\n \n /**\n\t\t * Returns true if we have an end point for the swipe\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n function validateEndPoint() {\n //We have an end value for the finger\n\t\t return fingerData[0].end.x !== 0;\n }\n\n\t\t// TAP / CLICK\n\t\t/**\n\t\t * Returns true if a click / tap events have been registered\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction hasTap() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(options.tap) ;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if a double tap events have been registered\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction hasDoubleTap() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(options.doubleTap) ;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if any long tap events have been registered\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction hasLongTap() {\n\t\t\t//Enure we dont return 0 or null for false values\n\t\t\treturn !!(options.longTap) ;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we could be in the process of a double tap (one tap has occurred, we are listening for double taps, and the threshold hasn't past.\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction validateDoubleTap() {\n\t\t if(doubleTapStartTime==null){\n\t\t return false;\n\t\t }\n\t\t var now = getTimeStamp();\n\t\t return (hasDoubleTap() && ((now-doubleTapStartTime) <= options.doubleTapThreshold));\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we could be in the process of a double tap (one tap has occurred, we are listening for double taps, and the threshold hasn't past.\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction inDoubleTap() {\n\t\t return validateDoubleTap();\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t * Returns true if we have a valid tap\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction validateTap() {\n\t\t return ((fingerCount === 1 || !SUPPORTS_TOUCH) && (isNaN(distance) || distance < options.threshold));\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we have a valid long tap\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction validateLongTap() {\n\t\t //slight threshold on moving finger\n return ((duration > options.longTapThreshold) && (distance < DOUBLE_TAP_THRESHOLD)); \n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we are detecting taps and have one\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction didTap() {\n\t\t //Enure we dont return 0 or null for false values\n\t\t\treturn !!(validateTap() && hasTap());\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t * Returns true if we are detecting double taps and have one\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction didDoubleTap() {\n\t\t //Enure we dont return 0 or null for false values\n\t\t\treturn !!(validateDoubleTap() && hasDoubleTap());\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns true if we are detecting long taps and have one\n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction didLongTap() {\n\t\t //Enure we dont return 0 or null for false values\n\t\t\treturn !!(validateLongTap() && hasLongTap());\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t// MULTI FINGER TOUCH\n\t\t/**\n\t\t * Starts tracking the time between 2 finger releases, and keeps track of how many fingers we initially had up\n\t\t * @inner\n\t\t*/\n\t\tfunction startMultiFingerRelease() {\n\t\t\tpreviousTouchEndTime = getTimeStamp();\n\t\t\tpreviousTouchFingerCount = event.touches.length+1;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Cancels the tracking of time between 2 finger releases, and resets counters\n\t\t * @inner\n\t\t*/\n\t\tfunction cancelMultiFingerRelease() {\n\t\t\tpreviousTouchEndTime = 0;\n\t\t\tpreviousTouchFingerCount = 0;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Checks if we are in the threshold between 2 fingers being released \n\t\t * @return Boolean\n\t\t * @inner\n\t\t*/\n\t\tfunction inMultiFingerRelease() {\n\t\t\t\n\t\t\tvar withinThreshold = false;\n\t\t\t\n\t\t\tif(previousTouchEndTime) {\t\n\t\t\t\tvar diff = getTimeStamp() - previousTouchEndTime\t\n\t\t\t\tif( diff<=options.fingerReleaseThreshold ) {\n\t\t\t\t\twithinThreshold = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn withinThreshold;\t\n\t\t}\n\t\t\n\n\t\t/**\n\t\t* gets a data flag to indicate that a touch is in progress\n\t\t* @return Boolean\n\t\t* @inner\n\t\t*/\n\t\tfunction getTouchInProgress() {\n\t\t\t//strict equality to ensure only true and false are returned\n\t\t\treturn !!($element.data(PLUGIN_NS+'_intouch') === true);\n\t\t}\n\t\t\n\t\t/**\n\t\t* Sets a data flag to indicate that a touch is in progress\n\t\t* @param {boolean} val The value to set the property to\n\t\t* @inner\n\t\t*/\n\t\tfunction setTouchInProgress(val) {\n\t\t\t\n\t\t\t//Add or remove event listeners depending on touch status\n\t\t\tif(val===true) {\n\t\t\t\t$element.bind(MOVE_EV, touchMove);\n\t\t\t\t$element.bind(END_EV, touchEnd);\n\t\t\t\t\n\t\t\t\t//we only have leave events on desktop, we manually calcuate leave on touch as its not supported in webkit\n\t\t\t\tif(LEAVE_EV) { \n\t\t\t\t\t$element.bind(LEAVE_EV, touchLeave);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$element.unbind(MOVE_EV, touchMove, false);\n\t\t\t\t$element.unbind(END_EV, touchEnd, false);\n\t\t\t\n\t\t\t\t//we only have leave events on desktop, we manually calcuate leave on touch as its not supported in webkit\n\t\t\t\tif(LEAVE_EV) { \n\t\t\t\t\t$element.unbind(LEAVE_EV, touchLeave, false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\t//strict equality to ensure only true and false can update the value\n\t\t\t$element.data(PLUGIN_NS+'_intouch', val === true);\n\t\t}\n\t\t\n\t\t\n\t\t/**\n\t\t * Creates the finger data for the touch/finger in the event object.\n\t\t * @param {int} index The index in the array to store the finger data (usually the order the fingers were pressed)\n\t\t * @param {object} evt The event object containing finger data\n\t\t * @return finger data object\n\t\t * @inner\n\t\t*/\n\t\tfunction createFingerData( index, evt ) {\n\t\t\tvar id = evt.identifier!==undefined ? evt.identifier : 0; \n\t\t\t\n\t\t\tfingerData[index].identifier = id;\n\t\t\tfingerData[index].start.x = fingerData[index].end.x = evt.pageX||evt.clientX;\n\t\t\tfingerData[index].start.y = fingerData[index].end.y = evt.pageY||evt.clientY;\n\t\t\t\n\t\t\treturn fingerData[index];\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates the finger data for a particular event object\n\t\t * @param {object} evt The event object containing the touch/finger data to upadte\n\t\t * @return a finger data object.\n\t\t * @inner\n\t\t*/\n\t\tfunction updateFingerData(evt) {\n\t\t\t\n\t\t\tvar id = evt.identifier!==undefined ? evt.identifier : 0; \n\t\t\tvar f = getFingerData( id );\n\t\t\t\n\t\t\tf.end.x = evt.pageX||evt.clientX;\n\t\t\tf.end.y = evt.pageY||evt.clientY;\n\t\t\t\n\t\t\treturn f;\n\t\t}\n\t\t\n\t\t/**\n\t\t * Returns a finger data object by its event ID.\n\t\t * Each touch event has an identifier property, which is used \n\t\t * to track repeat touches\n\t\t * @param {int} id The unique id of the finger in the sequence of touch events.\n\t\t * @return a finger data object.\n\t\t * @inner\n\t\t*/\n\t\tfunction getFingerData( id ) {\n\t\t\tfor(var i=0; ion
to bind to this event as the default jQ click
event will be triggered.\n * Use the tap
event instead.\n * @name $.fn.swipe#click\n * @event\n * @deprecated since version 1.6.2, please use {@link $.fn.swipe#tap} instead \n * @default null\n * @param {EventObject} event The original event object\n * @param {DomObject} target The element clicked on.\n */\n \n /**\n * A click / tap handler triggered when a user simply clicks or taps, rather than swipes on an element.\n * @name $.fn.swipe#tap\n * @event\n * @default null\n * @param {EventObject} event The original event object\n * @param {DomObject} target The element clicked on.\n */\n \n/**\n * A double tap handler triggered when a user double clicks or taps on an element.\n * You can set the time delay for a double tap with the {@link $.fn.swipe.defaults#doubleTapThreshold} property. \n * Note: If you set both doubleTap
and tap
handlers, the tap
event will be delayed by the doubleTapThreshold
\n * as the script needs to check if its a double tap.\n * @name $.fn.swipe#doubleTap\n * @see $.fn.swipe.defaults#doubleTapThreshold\n * @event\n * @default null\n * @param {EventObject} event The original event object\n * @param {DomObject} target The element clicked on.\n */\n \n /**\n * A long tap handler triggered once a tap has been release if the tap was longer than the longTapThreshold.\n * You can set the time delay for a long tap with the {@link $.fn.swipe.defaults#longTapThreshold} property. \n * @name $.fn.swipe#longTap\n * @see $.fn.swipe.defaults#longTapThreshold\n * @event\n * @default null\n * @param {EventObject} event The original event object\n * @param {DomObject} target The element clicked on.\n */\n\n /**\n * A hold tap handler triggered as soon as the longTapThreshold is reached\n * You can set the time delay for a long tap with the {@link $.fn.swipe.defaults#longTapThreshold} property. \n * @name $.fn.swipe#hold\n * @see $.fn.swipe.defaults#longTapThreshold\n * @event\n * @default null\n * @param {EventObject} event The original event object\n * @param {DomObject} target The element clicked on.\n */\n\n}));\n\n$(function () {\n slidesView = {\n // default transition time between two slides\n scrollingSpeed: 1000,\n\n // currently used transition time. Can be different than the default when going through multiple slides during transitions\n currentScrollingSpeed: 1000,\n\n surpressCallbacks: false,\n\n indicatorPosition: null,\n\n getBeforeEnterCallbackName: function (slideId) {\n return \"on\" + slideId.replace('-', '_').capitalize() + 'Enter';\n },\n getBeforeLeaveCallbackName: function (slideId) {\n return \"on\" + slideId.replace('-', '_').capitalize() + 'Leave';\n },\n\n backgroundTransition: function (newSlideEl, direction) {\n //if ($(newSlideEl).attr(\"id\") == \"slide-9-transition\") {\n // $(\"#parallax #road\").hide();\n //} else {\n // $(\"#parallax #road\").show();\n //}\n\n // new slide is a transition slide, so instead of scrolling to it we need to skip over it to the next one\n // adjust the speed for a 2-slide scroll\n slidesView.setScrollingSpeed(4 * slidesView.scrollingSpeed);\n // reset speed after slide change is finished\n setTimeout(function () {\n slidesView.setScrollingSpeed(slidesView.scrollingSpeed);\n },\n 3 * slidesView.scrollingSpeed + 10\n );\n\n var targetSlide = $(newSlideEl).data(direction + 'Slide');\n // setTimeout is needed due to a bug in fullpage.js\n setTimeout(function () {\n $.fn.fullpage.moveTo(0, targetSlide);\n }, 5);\n },\n\n onBeforeSlideEnter: function (oldSlideEl, newSlideIndex, direction) {\n if (slidesView.surpressCallbacks) {\n return;\n }\n // this is called before the viewport enters a slide\n var newSlideEl = $(\"#slides .slide\")[newSlideIndex];\n var slideId = $(newSlideEl).attr(\"id\");\n\n if ($(newSlideEl).hasClass(\"transition\")) {\n this.backgroundTransition(newSlideEl, direction);\n } else {\n // \"where swelling can occur\" slides series without scrolling effect between them\n if ($.inArray(slideId, [\"slide-4\", \"slide-5\", \"slide-6\", \"slide-7\", \"slide-14\"]) != -1\n || (slideId == \"slide-3\" && direction == \"left\")\n || (slideId == \"slide-8\" && direction == \"right\")) {\n slidesView.setScrollingSpeed(0);\n setTimeout(function () {\n slidesView.setScrollingSpeed(slidesView.scrollingSpeed);\n }, 10);\n } else {\n // slidesView.setScrollingSpeed(slidesView.scrollingSpeed);\n }\n\n // call beforeLoad event for given slide\n var onBeforeEnterFnName = slidesView.getBeforeEnterCallbackName(slideId);\n if (typeof window[onBeforeEnterFnName] === \"function\") {\n window[onBeforeEnterFnName](oldSlideEl.attr('id'), direction);\n }\n }\n },\n\n setScrollingSpeed: function (speed) {\n slidesView.currentScrollingSpeed = speed;\n $.fn.fullpage.setScrollingSpeed(slidesView.currentScrollingSpeed);\n },\n\n onBeforeSlideLeave: function (slideEl, direction) {\n if (slidesView.surpressCallbacks) {\n return;\n }\n\n // this is called before the viewport leaves a slide\n var slideId = $(slideEl).attr(\"id\");\n var onBeforeLeaveFnName = this.getBeforeLeaveCallbackName(slideId);\n if (typeof window[onBeforeLeaveFnName] === \"function\") {\n window[onBeforeLeaveFnName](slideId, direction);\n }\n },\n\n onBeforeScroll: function (newLeftPos) {\n $(\"#parallax .layer:visible\").each(function () {\n var transition = 'all ' + slidesView.currentScrollingSpeed + 'ms ease';\n\n var elementLeft = $(this).data(\"speed\") * newLeftPos;\n var $layer = $(this);\n setTimeout(function () {\n $layer.css({\n '-webkit-transition': transition,\n 'transition': transition,\n '-webkit-transform': 'translate3d(-' + elementLeft + 'px, 0px, 0px)',\n 'transform': 'translate3d(-' + elementLeft + 'px, 0px, 0px)'\n });\n });\n });\n },\n\n onResize: function () {\n // maintain aspect ratio of 16:9 in case the browser is wider than that\n var ratio = 16 / 9;\n $(\".container\").each(function () {\n var $this = $(this);\n var $parent = $this.parent();\n var width = $parent.width();\n var height = $parent.height();\n\n if (height == 0) {\n return;\n }\n\n if (width / height > ratio) {\n $this.width(ratio * height);\n } else {\n $this.width(\"100%\");\n }\n slidesView.updateIndicator();\n });\n },\n\n setIndicatorPosition: function(a, b, c, d, sel1, sel2) {\n slidesView.indicatorPosition = {a: a, b: b, c: c, d: d, sel1: sel1, sel2: sel2};\n\n var $character = $(sel1);\n var $zoom = $(sel2);\n //$zoom.css({width: $character.width() * 1.5});\n var pivotX = $zoom.width() * c;\n var pivotY = $zoom.height() * d;\n\n $(sel2).css(\n {\n left: $character.width() * a - pivotX,\n top: $character.height() * b - pivotY\n }\n );\n },\n\n updateIndicator: function() {\n if (slidesView.indicatorPosition !== null) {\n slidesView.setIndicatorPosition(\n slidesView.indicatorPosition.a,\n slidesView.indicatorPosition.b,\n slidesView.indicatorPosition.c,\n slidesView.indicatorPosition.d,\n slidesView.indicatorPosition.sel1,\n slidesView.indicatorPosition.sel2\n );\n }\n }\n };\n\n function isPortrait() {\n return window.innerHeight > window.innerWidth;\n }\n\n function setNavActiveLink(slideId) {\n var slideNav = $('#slidesNav');\n slideNav.find('a:not([data-slide-id=\"' + slideId + '\"])').removeClass('active');\n slideNav.find('[data-slide-id=\"' + slideId + '\"]').addClass('active');\n }\n\n function showOrientationMessage() {\n $(\"#orientation-message\").show();\n $(\"#content\").hide();\n // $(\"#orientation-message\").dialog ();\n }\n\n function hideOrientationMessage() {\n $(\"#orientation-message\").hide();\n $(\"#content\").show();\n }\n\n if (isPortrait()) {\n showOrientationMessage();\n }\n\n window.addEventListener(\"resize\", function () {\n // $(window).on (\"resize\", function () {\n if (isPortrait())\n showOrientationMessage();\n else\n hideOrientationMessage();\n }, false);\n\n $('#fullpage').fullpage({\n css3: true,\n loopHorizontal: false,\n //anchors: [\"main\"],\n resize: true,\n autoscroll: false,\n scrollingSpeed: slidesView.scrollingSpeed,\n beforeScroll: slidesView.onBeforeScroll,\n afterResize: slidesView.onResize,\n onSlideLeave: function(anchorLink, index, slideIndex, direction) {\n slidesView.onBeforeSlideLeave(this, direction);\n slidesView.onBeforeSlideEnter(this, direction == \"right\" ? slideIndex + 1 : slideIndex - 1, direction);\n },\n afterSlideLoad: function(anchorLink, index, slideAnchor, slideIndex) {\n setNavActiveLink($(this).attr('id'));\n },\n afterLoad: function(anchorLink, index) {\n onSlide_1Enter(); // run first slide animation\n slidesView.onResize();\n }\n\n });\n\n // lazy load images\n $(\"img.lazy\").lazyload({\n event: \"imgLoad\"\n });\n $(window).bind(\"load\", function () {\n var timeout = setTimeout(function () {\n $(\"img.lazy\").trigger(\"imgLoad\");\n }, 1000);\n });\n\n // disable possibility of scrolling through sections by using the mouse wheel/trackpad or touch gestures.\n $.fn.fullpage.setAllowScrolling(false);\n\n $('html').mousewheel(function (event) {\n if (event.deltaY > 0) {\n $.fn.fullpage.moveSlideLeft();\n } else if (event.deltaY < 0) {\n $.fn.fullpage.moveSlideRight();\n }\n });\n\n // Enable swiping...\n $('html').swipe({\n //Generic swipe handler for all directions\n swipe: function (event, direction, distance, duration, fingerCount, fingerData) {\n if (direction === 'left') {\n $.fn.fullpage.moveSlideRight();\n } else if (direction === 'right') {\n $.fn.fullpage.moveSlideLeft();\n }\n },\n //Default is 75px, set to 0 so any distance triggers swipe\n threshold: 0\n });\n\n // Slides navigation\n $('#slidesNav a').click(function (e) {\n var targetSlideId = $(this).data('slideId');\n var activeSlideId = $('.slide.active').attr('id');\n var slideAnchor = 'slide' + targetSlideId.split(\"-\").pop();\n\n e.preventDefault();\n slidesView.surpressCallbacks = true;\n slidesView.setScrollingSpeed(0);\n if (targetSlideId === 'slide-1') {\n $.fn.fullpage.moveTo(0, 0);\n } else {\n $.fn.fullpage.moveTo(0, slideAnchor);\n }\n\n // hide all animations in active slide\n if (activeSlideId !== targetSlideId ) {\n setTimeout(function () {\n var onBeforeLeaveFnName = slidesView.getBeforeLeaveCallbackName(activeSlideId);\n if (typeof window[onBeforeLeaveFnName] === \"function\") {\n window[onBeforeLeaveFnName](null, null);\n }\n }, 5);\n }\n\n // show animations in new slide\n setTimeout(function () {\n slidesView.surpressCallbacks = false;\n var onBeforeEnterFnName = slidesView.getBeforeEnterCallbackName(targetSlideId);\n if (typeof window[onBeforeEnterFnName] === \"function\") {\n window[onBeforeEnterFnName](null, null);\n }\n\n slidesView.setScrollingSpeed(slidesView.scrollingSpeed);\n }, 5);\n });\n\n});\n\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\n\n\nvar slide1Animations = {\n slide: $(\"#slide-1\"),\n kitesAnimations: function(enter) {\n var self = this;\n var $kite1 = self.slide.find(\".kite-1\");\n var $kite2 = self.slide.find(\".kite-2\");\n if (enter === true) {\n $kite1.velocity(\"transition.slideLeftIn\", {\n delay: 500,\n complete: function(elements) { // on enter\n $kite1.velocity({top: \"20%\"}).velocity({top: \"12%\"}, {duration: 2400, loop: true});\n $kite2.velocity(\"transition.slideLeftIn\", {\n complete: function(elements) {\n $kite2.velocity({top: \"33%\"}).velocity({top: \"27%\"}, {duration: 1800, loop: true});\n }\n });\n }\n });\n } else { // on leave\n $kite1.velocity('stop', true).velocity(\"transition.fadeOut\");\n $kite2.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n },\n charactersAnimations: function(enter) {\n var self = this;\n var $characters = self.slide.find(\".people-wrapper img\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {stagger: 150}).delay(750);\n } else { // on leave\n $characters.velocity(\"transition.fadeOut\", {stagger: 100});\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $title = self.slide.find(\".title\");\n var $start = self.slide.find(\".start\");\n if (enter === true) { // on enter\n $title.velocity(\"transition.slideDownBigIn\", {\n delay: 100, complete: function(elements) {\n $infoBox.velocity(\"transition.bounceDownIn\", {delay: 300});\n $start.velocity(\"transition.bounceUpIn\", {\n delay: 300,\n complete: function(elements) {\n $start.velocity(\"callout.swing\");\n }\n });\n }\n });\n } else { // on leave\n $title.velocity('stop', true).velocity(\"transition.slideUpBigOut\");\n $infoBox.velocity('stop', true).velocity(\"transition.slideDownOut\");\n $start.velocity('stop', true).velocity(\"transition.slideUpOut\");\n }\n }\n};\n\n// on slide enter\nfunction onSlide_1Enter(source, direction) {\n slide1Animations.kitesAnimations(true);\n slide1Animations.textAnimations(true);\n slide1Animations.charactersAnimations(true);\n}\n\n// on slide leave\nfunction onSlide_1Leave(source) {\n slide1Animations.kitesAnimations(false);\n slide1Animations.textAnimations(false);\n slide1Animations.charactersAnimations(false);\n}\nvar flag = false;\n$(\"#slide-1 .start.animation\").bind('touchstart click', function(){\n\tif (!flag) {\n\t\tflag = true;\n\t\tsetTimeout(function(){ flag = false; }, 100);\n\t\t$.fn.fullpage.moveSlideRight();\n\t}\n\n return false;\n});\n\nvar slide10Animations = {\n slide: $(\"#slide-10\"),\n charactersAnimations: function(enter, direction) {\n var self = this;\n var $characters = self.slide.find(\".character\");\n var $delay = (direction === 'right') ? 1000 : 100;\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n delay: $delay,\n complete: function(elements) {\n self.textAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n self.textAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $pinkBubble = self.slide.find(\".pink-bubble\");\n var $orangeBubble = self.slide.find(\".orange-bubble\");\n var $greenBubble = self.slide.find(\".green-bubble\");\n var $desk = self.slide.find(\".desk\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\");\n $desk.velocity(\"transition.slideLeftBigIn\", {delay: 100});\n $pinkBubble.velocity(\"transition.bounceIn\", {delay: 100});\n $orangeBubble.velocity(\"transition.bounceIn\", {delay: 200});\n $greenBubble.velocity(\"transition.bounceIn\", {delay: 300});\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.fadeOut\");\n $desk.velocity('stop', true).velocity(\"transition.fadeOut\");\n $pinkBubble.velocity('stop', true).velocity(\"transition.fadeOut\");\n $orangeBubble.velocity('stop', true).velocity(\"transition.fadeOut\");\n $greenBubble.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $bgOffice = self.slide.find(\".office-building-bg\");\n var $bgBox = self.slide.find(\".slide-bg\");\n var $officeDelay = (direction === null) ? 100 : 2000;\n if (enter === true) { // on enter\n // make bigger office\n $bgOffice.velocity({height: \"260%\"}, {\n delay: $officeDelay,\n duration: $officeDelay\n });\n if (direction === 'right') { // only when enter from outside\n self.slide.find(\".slide-bg\").addClass('animation'); // hide slide-bg\n $bgBox.velocity(\"transition.slideRightBigIn\", {\n delay: $officeDelay + 1500,\n duration: $officeDelay - 750,\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else {\n // when enter from a nav link\n if (direction === null) {\n $bgBox.velocity('stop', true).attr(\"style\", \"\").removeClass('animation');\n }\n self.charactersAnimations(true);\n }\n } else { // on leave\n // only when leave to outside, and from nav link (direction is null)\n if (direction === 'left') {\n // make smaller office\n $officeDelay = 2000;\n $bgOffice.velocity('stop', true).velocity({height: \"100%\"}, {\n delay: $officeDelay - 2000,\n duration: $officeDelay - 1200\n });\n $bgBox.velocity('stop', true).velocity(\"transition.slideRightBigOut\");\n }\n }\n\n }\n};\n\nfunction onSlide_10Enter(source, direction) {\n slide10Animations.backgroundAnimations(true, direction);\n}\nfunction onSlide_10Leave(source, direction) {\n slide10Animations.charactersAnimations(false);\n slide10Animations.backgroundAnimations(false, direction);\n}\n\nvar slide11Animations = {\n slide: $(\"#slide-11\"),\n charactersAnimations: function(enter) {\n var self = this;\n var $characters = self.slide.find(\".character\");\n var $doctor = self.slide.find(\".doctor\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n delay: 100,\n complete: function(elements) {\n $doctor.velocity(\"transition.slideRightBigIn\");\n self.textAnimations(true);\n self.furnitureAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n $doctor.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n self.textAnimations(false);\n self.furnitureAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $pinkBubble = self.slide.find(\".pink-bubble\");\n var $orangeBubble = self.slide.find(\".orange-bubble\");\n var $greenBubble = self.slide.find(\".green-bubble\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\");\n $pinkBubble.velocity(\"transition.bounceIn\", {delay: 100});\n $orangeBubble.velocity(\"transition.bounceIn\", {delay: 200});\n $greenBubble.velocity(\"transition.bounceIn\", {delay: 300});\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $pinkBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $orangeBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $greenBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n }\n },\n furnitureAnimations: function(enter) {\n var self = this;\n var $table = self.slide.find(\".table\");\n var $picture = self.slide.find(\".picture\");\n if (enter === true) { // on enter\n $table.velocity(\"transition.slideRightBigIn\", {delay: 100});\n $picture.velocity(\"transition.bounceDownIn\", {delay: 100});\n } else { // on leave\n $table.velocity('stop', true).velocity(\"transition.slideRightBigOut\");\n $picture.velocity('stop', true).velocity(\"transition.bounceUpOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $bgBox = self.slide.find(\".slide-bg\");\n var $delay = (direction === null) ? 0 : 1000; // no delay for entry from a nav link\n var $effect = (direction === null) ? 'flipXIn' : 'expandIn'; // flipXIn for entry from a nav link\n if (enter === true) { // on enter\n if (direction !== 'left') { // only when enter from different room, and from a nav link (direction is null)\n $bgBox.velocity(\"transition.\" + $effect, {\n delay: $delay,\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else {\n self.charactersAnimations(true);\n }\n } else { // on leave\n // only when leave to different room, and from nav link (direction is null)\n if (direction === 'left' || direction === null) {\n $bgBox.velocity('stop', true).velocity(\"transition.expandOut\");\n }\n }\n }\n};\n\nfunction onSlide_11Enter(source, direction) {\n slide11Animations.backgroundAnimations(true, direction);\n\n}\nfunction onSlide_11Leave(source, direction) {\n slide11Animations.charactersAnimations(false);\n slide11Animations.backgroundAnimations(false, direction);\n}\n\nvar slide12Animations = {\n slide: $(\"#slide-12\"),\n charactersAnimations: function(enter) {\n var self = this;\n var $characters = self.slide.find(\".character\");\n var $doctor = self.slide.find(\".doctor\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideLeftBigIn\", {\n complete: function(elements) {\n $doctor.velocity(\"transition.slideRightBigIn\");\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n $doctor.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $checklist = self.slide.find(\".checklist\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\");\n $checklist.velocity(\"transition.slideUpBigIn\", {\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.fadeOut\");\n $checklist.velocity('stop', true).velocity(\"transition.slideDownOut\");\n self.charactersAnimations(false);\n }\n }\n};\n\nfunction onSlide_12Enter(source, direction) {\n slide12Animations.textAnimations(true);\n\n}\nfunction onSlide_12Leave(source) {\n slide12Animations.textAnimations(false);\n}\n\nvar slide13Animations = {\n slide: $(\"#slide-13\"),\n textAnimations: function(enter) {\n var self = this;\n var $familyTree = self.slide.find(\".family-tree\");\n var $infoBox = self.slide.find(\".info-box\");\n var $pinkBubble = self.slide.find(\".pink-bubble\");\n var $orangeBubble = self.slide.find(\".orange-bubble\");\n var $legend = self.slide.find(\".legend\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\", {delay: 400});\n $pinkBubble.velocity(\"transition.bounceIn\", {delay: 500});\n $orangeBubble.velocity(\"transition.bounceIn\", {\n delay: 600,\n complete: function() {\n $familyTree.velocity(\"transition.shrinkIn\");\n $legend.velocity(\"transition.slideRightBigIn\", {delay: 200});\n }\n });\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.fadeOut\");\n $familyTree.velocity('stop', true).velocity(\"transition.fadeOut\");\n $pinkBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $orangeBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $legend.velocity('stop', true).velocity(\"transition.slideRightBigOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $bgBox = self.slide.find(\".slide-bg\");\n var $delay = (direction === null) ? 0 : 1000; // no delay for entry from a nav link\n var $effect = (direction === null) ? 'flipXIn' : 'expandIn'; // flipXIn for entry from a nav link\n if (enter === true) { // on enter\n if (direction !== 'left') { // only when enter from different room, and from a nav link (direction is null)\n $bgBox.velocity(\"transition.\" + $effect, {\n delay: $delay,\n complete: function(elements) {\n self.textAnimations(true);\n }\n });\n } else {\n self.textAnimations(true);\n }\n } else { // on leave\n // only when leave to different room, and from nav link (direction is null)\n if (direction === 'left' || direction === null) {\n $bgBox.velocity('stop', true).velocity(\"transition.expandOut\");\n }\n }\n }\n};\n\nfunction onSlide_13Enter(source, direction) {\n slide13Animations.backgroundAnimations(true, direction);\n\n\n}\nfunction onSlide_13Leave(source, direction) {\n slide13Animations.textAnimations(false);\n slide13Animations.backgroundAnimations(false, direction);\n}\n\nvar slide14Animations = {\n slide: $(\"#slide-14\"),\n charactersAnimations: function(enter, direction) {\n var self = this;\n var $delay = (direction === 'left') ? 2000 : 100;\n var $characters = self.slide.find(\".character\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n delay: $delay,\n complete: function(elements) {\n self.textAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n self.textAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $clock = self.slide.find(\".clock\");\n var $picture = self.slide.find(\".picture\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\");\n $clock.velocity(\"transition.perspectiveDownIn\", {delay: 100});\n $picture.velocity(\"transition.slideUpBigIn\", {delay: 200});\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $clock.velocity('stop', true).velocity(\"transition.perspectiveDownOut\");\n $picture.velocity('stop', true).velocity(\"transition.slideDownBigOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $transitionBox = $('#slide-13-transition');\n var $bgBox = self.slide.find(\".slide-bg\");\n var $bgHome = $transitionBox.find(\".home-outside-bg\");\n var $homeDelay = 300;\n var $homeDuration = 2300;\n if (enter === true) { // on enter\n if (direction === 'left') { // when enter from outside\n // make bigger home\n $bgHome.velocity('stop', true).velocity({height: \"303%\", left: \"-26%\", bottom: \"-20%\"}, {\n delay: $homeDelay - 300,\n duration: $homeDuration\n });\n $bgBox.velocity('stop', true).velocity(\"transition.fadeOut\", {\n delay: $homeDelay + 1200,\n duration: $homeDuration - 500,\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else { // no background fade when enter from a nav link (direction is null)\n $bgBox.hide(); // hide yellow slide-bg\n self.charactersAnimations(true);\n }\n } else { // on leave\n // only when leave to outside, and from nav link (direction is null)\n if (direction !== 'left') {\n $bgHome.velocity({height: \"100%\", left: \"0\", bottom: \"0\"}, {\n delay: $homeDelay,\n duration: $homeDuration\n });\n $bgBox.velocity(\"transition.fadeIn\", {\n duration: $homeDuration - 500\n });\n }\n }\n },\n prepareBackgroundAnimations: function() {\n var self = this;\n var $transitionBox = $('#slide-13-transition');\n var $bgBox = self.slide.find(\".slide-bg\");\n var $bgHome = $transitionBox.find(\".home-outside-bg\");\n $transitionBox.css('overflow', 'hidden');\n $bgHome.velocity('stop', true).velocity({height: \"303%\", left: \"-26%\", bottom: \"-20%\"}, {\n complete: function(elements) {\n self.slide.css('overflow', '');\n }\n });\n $bgBox.velocity('stop', true).hide();\n }\n};\n\nfunction onSlide_14Enter(source, direction) {\n slide14Animations.backgroundAnimations(true, direction);\n // enter from previous slide and nav link\n if(direction !== 'left') {\n // prepare transition background\n slide14Animations.prepareBackgroundAnimations();\n }\n}\nfunction onSlide_14Leave(source, direction) {\n slide14Animations.charactersAnimations(false);\n slide14Animations.backgroundAnimations(false, direction);\n}\n\nvar slide15Animations = {\n slide: $(\"#slide-15\"),\n charactersAnimations: function(enter, direction) {\n var self = this;\n var $delay = (direction === 'right') ? 1500 : 500;\n var $characters = self.slide.find(\".people-wrapper img\");\n var $cyclist = self.slide.find(\".cyclist\");\n var $girlWithDog = self.slide.find(\".girl-with-dog\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n stagger: 150,\n delay: $delay,\n complete: function(elements) {\n $cyclist.velocity(\"transition.slideLeftBigIn\");\n $girlWithDog.velocity(\"transition.slideRightBigIn\", {delay: 300});\n slide15Animations.textAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\", {stagger: 100});\n $cyclist.velocity('stop', true).velocity(\"transition.fadeOut\");\n $girlWithDog.velocity('stop', true).velocity(\"transition.fadeOut\");\n slide15Animations.textAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $title = self.slide.find(\".title\");\n var $infoBox = self.slide.find(\".info-box\");\n if (enter === true) { // on enter\n $title.velocity(\"transition.slideUpIn\");\n $infoBox.velocity(\"transition.bounceDownIn\");\n } else { // on leave\n $title.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $infoBox.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n }\n }\n};\n\nfunction onSlide_15Enter(source, direction) {\n slide15Animations.charactersAnimations(true, direction);\n\n\n}\nfunction onSlide_15Leave(source) {\n slide15Animations.charactersAnimations(false);\n}\n\nvar slide16Animations = {\n slide: $(\"#slide-16\"),\n isReferencesVisible: false,\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $logo = self.slide.find(\".logo\");\n var $references = self.slide.find(\".references\");\n var $footerInfo = self.slide.find(\".footer-info\");\n if (enter === true) { // on enter\n $logo.velocity(\"transition.bounceDownIn\", {delay: 400});\n $infoBox.velocity(\"transition.expandIn\", {delay: 500});\n $references.velocity(\"transition.slideLeftBigIn\", {delay: 600});\n $footerInfo.velocity(\"transition.slideUpBigIn\", {delay: 600});\n } else { // on leave\n $logo.velocity('stop', true).velocity(\"transition.bounceUpOut\");\n $infoBox.velocity('stop', true).velocity(\"transition.bounceOut\");\n $references.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $footerInfo.velocity('stop', true).velocity(\"transition.slideDownBigOut\");\n }\n }\n};\nvar references = slide16Animations.slide.find(\".references\");\nvar referencesInfo = slide16Animations.slide.find(\".references-info\");\n\nreferences.on('touchstart click', function() {\n slide16Animations.textAnimations(false);\n referencesInfo.velocity(\"transition.slideUpBigIn\", {delay: 700});\n referencesInfo.addClass('visible');\n slide16Animations.isReferencesVisible = true;\n});\n\nreferencesInfo.on('touchstart click', function() {\n if (slide16Animations.isReferencesVisible === true) {\n referencesInfo.velocity('stop', true).velocity(\"transition.slideDownOut\");\n referencesInfo.removeClass('visible');\n slide16Animations.textAnimations(true);\n }\n});\n\nfunction onSlide_16Enter(source, direction) {\n slide16Animations.textAnimations(true);\n\n}\nfunction onSlide_16Leave(source) {\n slide16Animations.textAnimations(false);\n if (slide16Animations.isReferencesVisible === true) {\n referencesInfo.velocity('stop', true).velocity(\"transition.slideDownOut\");\n }\n}\n\nvar slide2Animations = {\n slide: $(\"#slide-2\"),\n isHoverVisible: true,\n charactersAnimations: function(enter) {\n var self = this;\n var $characters = self.slide.find(\".character\");\n var $infoHover = self.slide.find(\".info-hover\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n stagger: 100,\n complete: function(elements) {\n if (self.isHoverVisible === true) {\n // Show \"Hover over people..\" information\n $infoHover.velocity(\"transition.bounceIn\", {\n complete: function(elements) {\n self.textAnimations(true);\n }\n });\n // Hide \"Hover over people..\" information after hovering on character\n $characters.one('touchstart mouseover', function(e) {\n $infoHover.velocity(\"transition.fadeOut\");\n self.isHoverVisible = false; // don't show information any more\n });\n } else {\n self.textAnimations(true);\n }\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\", {stagger: 100});\n $infoHover.velocity(\"transition.fadeOut\");\n self.textAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.bounceDownIn\");\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.bounceUpOut\");\n }\n }\n};\n\nvar character = slide2Animations.slide.find(\".character\");\n\ncharacter.on('tap', function() {\n $(this).find('.character-data').fadeIn();\n $(this).find('.character-arrow .blue').fadeIn();\n $(this).find('.character-arrow .yellow').fadeOut();\n});\n\nfunction onSlide_2Enter(source, direction) {\n slide2Animations.charactersAnimations(true);\n // enter from previous slide and nav link\n if (direction !== 'left') {\n // prepare next slide and hide slide-bg\n slide3Animations.prepareBackgroundAnimations();\n }\n}\nfunction onSlide_2Leave(source) {\n slide2Animations.charactersAnimations(false);\n}\n\nvar slide3Animations = {\n slide: $(\"#slide-3\"),\n charactersAnimations: function(enter, direction) {\n var self = this;\n var $delay = (direction === 'right') ? 1000 : 100;\n var $characters = self.slide.find(\".character\");\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n delay: $delay,\n complete: function(elements) {\n self.textAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n self.textAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $pinkBubble = self.slide.find(\".pink-bubble\");\n var $orangeBubble = self.slide.find(\".orange-bubble\");\n var $clock = self.slide.find(\".clock\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\");\n $clock.velocity(\"transition.perspectiveDownIn\", {delay: 100});\n $pinkBubble.velocity(\"transition.bounceIn\", {delay: 100});\n $orangeBubble.velocity(\"transition.bounceIn\", {delay: 200});\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $pinkBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $orangeBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $clock.velocity('stop', true).velocity(\"transition.perspectiveDownOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $bgHome = self.slide.find(\".home-bg\");\n var $bgBox = self.slide.find(\".slide-bg\");\n var $homeDelay = 800;\n var $homeDuration = 4000;\n if (enter === true) { // on enter\n if (direction === 'right') { // only when enter from outside\n $bgBox.addClass('animation'); // hide slide-bg\n $bgHome.velocity({width: \"270%\", right: \"-8%\", bottom: '-32%'}, {\n delay: $homeDelay,\n duration: $homeDuration\n });\n $bgBox.velocity(\"transition.fadeIn\", {\n delay: $homeDuration - 500,\n duration: $homeDelay + 500,\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else {\n $bgBox.velocity('stop', true).attr(\"style\", \"\").removeClass('animation');\n self.charactersAnimations(true);\n }\n } else { // on leave\n // when leave outside\n if (direction === 'left') {\n $bgBox.velocity('stop', true).velocity(\"transition.expandOut\", {\n duration: $homeDelay + 500\n });\n // make smaller home\n $bgHome.velocity('stop', true).velocity({width: \"100%\", right: \"28%\", bottom: \"0\"}, {\n duration: $homeDuration - 1500,\n complete: function(elements) {\n // back to entry point\n self.prepareBackgroundAnimations();\n }\n });\n } else if (direction === null) {\n // back to entry point\n self.prepareBackgroundAnimations();\n }\n }\n },\n prepareBackgroundAnimations: function() {\n var self = this;\n var $bgHome = self.slide.find(\".home-bg\");\n var $bgBox = self.slide.find(\".slide-bg\");\n self.slide.css('overflow', 'hidden');\n $bgHome.velocity('stop', true).velocity({width: \"100%\", right: \"0\", bottom: \"0\"}, {\n complete: function(elements) {\n self.slide.css('overflow', '');\n }\n });\n $bgBox.velocity('stop', true).hide();\n self.charactersAnimations(false);\n\n }\n};\n\nfunction onSlide_3Enter(source, direction) {\n slide3Animations.backgroundAnimations(true, direction);\n\n}\nfunction onSlide_3Leave(source, direction) {\n slide3Animations.charactersAnimations(false);\n slide3Animations.backgroundAnimations(false, direction);\n}\n\nvar slide4Animations = {\n slide: $(\"#slide-4\"),\n indicatorAnimations: function(enter) {\n var self = this;\n var $indicator = self.slide.find(\".indicator-hands\");\n if (enter === true) { // on enter\n $indicator.velocity(\"transition.bounceDownIn\");\n } else { // on leave\n $indicator.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n }\n};\n\nfunction onSlide_4Enter(source, direction) {\n slidesView.setIndicatorPosition(0.86, 0.6, 0.1, 0.85, \"#slide-4 .character\", \"#slide-4 .indicator-hands\");\n slide4Animations.indicatorAnimations(true);\n\n}\nfunction onSlide_4Leave(source) {\n slide4Animations.indicatorAnimations(false);\n}\n\nvar slide5Animations = {\n slide: $(\"#slide-5\"),\n indicatorAnimations: function(enter) {\n var self = this;\n var $indicator = self.slide.find(\".indicator-feet\");\n if (enter === true) { // on enter\n $indicator.velocity(\"transition.bounceRightIn\");\n } else { // on leave\n $indicator.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n }\n};\n\nfunction onSlide_5Enter(source, direction) {\n slidesView.setIndicatorPosition(0.6, 0.98, 0.06, 0.93, \"#slide-5 .character\", \".indicator-feet\");\n slide5Animations.indicatorAnimations(true);\n\n}\nfunction onSlide_5Leave(source) {\n slide5Animations.indicatorAnimations(false);\n}\n\nvar slide6Animations = {\n slide: $(\"#slide-6\"),\n indicatorAnimations: function(enter) {\n var self = this;\n var $indicator = self.slide.find(\".indicator-abdomen\");\n if (enter === true) { // on enter\n $indicator.velocity(\"transition.bounceDownIn\");\n } else { // on leave\n $indicator.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n }\n};\n\nfunction onSlide_6Enter(source, direction) {\n slidesView.setIndicatorPosition(0.48, 0.5, 0.08, 0.9, \"#slide-6 .character\", \".indicator-abdomen\");\n slide6Animations.indicatorAnimations(true);\n\n}\nfunction onSlide_6Leave(source) {\n slide6Animations.indicatorAnimations(false);\n}\n\nvar slide7Animations = {\n slide: $(\"#slide-7\"),\n indicatorAnimations: function(enter) {\n var self = this;\n var $indicator = self.slide.find(\".indicator-face\");\n if (enter === true) { // on enter\n $indicator.velocity(\"transition.bounceRightIn\");\n } else { // on leave\n $indicator.velocity('stop', true).velocity(\"transition.fadeOut\");\n }\n }\n};\n\nfunction onSlide_7Enter(source, direction) {\n slidesView.setIndicatorPosition(0.73, 0.23, 0.08, 0.5, \"#slide-7 .character\", \".indicator-face\");\n slide7Animations.indicatorAnimations(true);\n\n}\nfunction onSlide_7Leave(source) {\n slide7Animations.indicatorAnimations(false);\n}\n\nvar slide8Animations = {\n slide: $(\"#slide-8\"),\n indicatorAnimations: function(enter) {\n var self = this;\n var $indicator = self.slide.find(\".indicator-upper-airway\");\n var $greenBubble = self.slide.find(\".green-bubble\");\n var $violetBubble = self.slide.find(\".violet-bubble\");\n if (enter === true) { // on enter\n $indicator.velocity(\"transition.bounceDownIn\");\n $greenBubble.velocity(\"transition.bounceIn\", {delay: 100});\n $violetBubble.velocity(\"transition.bounceIn\", {delay: 200});\n } else { // on leave\n $indicator.velocity('stop', true).velocity(\"transition.fadeOut\");\n $greenBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n $violetBubble.velocity('stop', true).velocity(\"transition.bounceOut\");\n }\n }\n};\n\nfunction onSlide_8Enter(source, direction) {\n slidesView.setIndicatorPosition(0.47, 0.26, 0.08, 0.53, \"#slide-8 .character\", \".indicator-upper-airway\");\n slide8Animations.indicatorAnimations(true);\n\n}\nfunction onSlide_8Leave(source) {\n slide8Animations.indicatorAnimations(false);\n}\n\nvar slide9Animations = {\n slide: $(\"#slide-9\"),\n charactersAnimations: function(enter, direction) {\n var self = this;\n var $characters = self.slide.find(\".character\");\n var $delay = (direction === 'left') ? 1000 : 100;\n if (enter === true) { // on enter\n $characters.velocity(\"transition.slideUpIn\", {\n delay: $delay,\n complete: function(elements) {\n self.textAnimations(true);\n self.triggersAnimations(true);\n }\n });\n } else { // on leave\n $characters.velocity('stop', true).velocity(\"transition.fadeOut\");\n self.textAnimations(false);\n self.triggersAnimations(false);\n }\n },\n textAnimations: function(enter) {\n var self = this;\n var $infoBox = self.slide.find(\".info-box\");\n var $attacksInfo = self.slide.find(\".attacks-info\");\n if (enter === true) { // on enter\n $infoBox.velocity(\"transition.slideLeftBigIn\", {delay: 200});\n $attacksInfo.velocity(\"transition.bounceIn\", {delay: 400});\n } else { // on leave\n $infoBox.velocity('stop', true).velocity(\"transition.slideLeftBigOut\");\n $attacksInfo.velocity('stop', true).velocity(\"transition.bounceOut\");\n }\n },\n triggersAnimations: function(enter) {\n var self = this;\n var $triggers = self.slide.find(\".trigger\");\n if (enter === true) { // on enter\n $triggers.velocity(\"transition.bounceIn\", {stagger: 250, drag: true});\n } else { // on leave\n $triggers.velocity('stop', true).velocity(\"transition.bounceOut\");\n }\n },\n backgroundAnimations: function(enter, direction) {\n var self = this;\n var $transitionBox = $('#slide-9-transition');\n var $bgBox = self.slide.find(\".slide-bg\");\n var $bgHome = $transitionBox.find(\".home-outside-bg\");\n var $homeDelay = 300;\n var $homeDuration = 2300;\n if (enter === true) { // on enter\n if (direction === 'left') { // when enter from outside\n // make bigger home\n $bgHome.velocity('stop', true).velocity({height: \"303%\", left: \"-26%\", bottom: \"-20%\"}, {\n delay: $homeDelay - 300,\n duration: $homeDuration\n });\n $bgBox.velocity('stop', true).velocity(\"transition.fadeOut\", {\n delay: $homeDelay + 1200,\n duration: $homeDuration - 500,\n complete: function(elements) {\n self.charactersAnimations(true);\n }\n });\n } else { // no background fade when enter from a nav link (direction is null)\n $bgBox.hide(); // hide yellow slide-bg\n self.charactersAnimations(true);\n }\n } else { // on leave\n // only when leave to outside, and from nav link (direction is null)\n if (direction !== 'left') {\n $bgHome.velocity({height: \"100%\", left: \"35%\", bottom: \"0\"}, {\n delay: $homeDelay,\n duration: $homeDuration\n });\n $bgBox.velocity(\"transition.fadeIn\", {\n duration: $homeDuration - 500\n });\n }\n }\n },\n prepareBackgroundAnimations: function() {\n var self = this;\n var $transitionBox = $('#slide-9-transition');\n var $bgBox = self.slide.find(\".slide-bg\");\n var $bgHome = $transitionBox.find(\".home-outside-bg\");\n $transitionBox.css('overflow', 'hidden');\n $bgHome.velocity('stop', true).velocity({height: \"303%\", left: \"-26%\", bottom: \"-20%\"}, {\n complete: function(elements) {\n self.slide.css('overflow', '');\n }\n });\n $bgBox.velocity('stop', true).hide();\n}\n};\n\nfunction onSlide_9Enter(source, direction) {\n // ensure that skyscraper is small and background hidden on next slide\n slide10Animations.backgroundAnimations(false, 'left');\n slide10Animations.charactersAnimations(false);\n\n slide9Animations.backgroundAnimations(true, direction);\n // enter from previous slide and nav link\n if(direction !== 'left') {\n // prepare transition background\n slide9Animations.prepareBackgroundAnimations();\n }\n}\nfunction onSlide_9Leave(source, direction) {\n slide9Animations.charactersAnimations(false);\n slide9Animations.backgroundAnimations(false, direction);\n}\n"],"sourceRoot":"/source/"}