{"version":3,"sources":["bundle.js","hammer.min.js","htmlsanitizer.js","htmlsanitizerconfig.js","jquery.fancybox.js","jquery.jscrollpane.js","modernizr-custom.js","0-common-breakpoints.js","bdc-utils.js","common.js","component-ajax-form.js","component-anchor-fixed-header.js","component-blog-list.js","component-hash-scroller.js","component-iframe-resizer.js","component-onepager-header.js","component-page-alert.js","component-scollable-tables.js","component-sticky-stacker.js","component-subtopic-challenges-section.js","component-tabs.js","component-video-lazyload.js","form-button-block.js","form-data-number-block.js","form-element-validation.js"],"names":["window","ratioCalculator","myObj","settings","resultsHtml","calculatorResult","init","this","$","html","on","displayErrors","values","each","push","val","isValueValid","let","i","length","validate","noErrorsFound","valid","removeClass","find","remove","calculate","currentIndex","String","addClass","append","text","error","css","fieldValue","errorObj","isNaN","Number","trim","errors","isnan","belowzero","successAjax","response","replaceAll","result","sendingValues","y","ajaxParams","type","url","data","JSON","stringify","contentType","dataType","success","alert","d","ajax","bind","a","b","e","c","setTimeout","j","f","Array","isArray","g","forEach","call","hasOwnProperty","h","Error","stack","replace","console","warn","log","apply","arguments","prototype","Object","create","constructor","_super","la","k","oa","l","m","q","addEventListener","n","removeEventListener","o","parentNode","p","indexOf","split","r","s","slice","t","sort","u","toUpperCase","ma","w","ownerDocument","defaultView","parentWindow","x","manager","callback","element","target","options","inputTarget","domHandler","enable","handler","z","pointers","changedPointers","Ea","Ga","Ha","isFirst","isFinal","session","eventType","firstInput","D","firstMultiple","center","E","timeStamp","ra","deltaTime","angle","I","distance","H","offsetDelta","prevDelta","prevInput","deltaX","deltaY","offsetDirection","G","F","overallVelocityX","overallVelocityY","overallVelocity","qa","scale","Ra","rotation","maxPointers","lastInterval","Da","velocity","velocityX","velocityY","direction","srcEvent","emit","recognize","clientX","pa","clientY","Ia","Ja","Ka","La","Ma","Qa","Math","sqrt","atan2","PI","L","evEl","Ta","evWin","Ua","pressed","M","Xa","Ya","store","pointerEvents","N","evTarget","started","P","bb","targetIds","R","touch","mouse","primaryTouch","lastTouches","T","identifier","splice","cb","V","set","Y","defaults","id","ua","state","simultaneous","requireFail","Z","_","get","aa","ba","pX","pY","ca","da","_timer","_input","ea","fa","ga","pTime","pCenter","count","ha","recognizers","preset","ia","handlers","oldCssProps","input","inputClass","xa","ya","wa","touchAction","ja","add","recognizeWith","requireFailure","style","cssProps","na","createElement","round","abs","Date","now","assign","TypeError","sa","keys","ta","test","navigator","userAgent","za","Ba","Na","Oa","Pa","Sa","destroy","mousedown","mousemove","mouseup","Va","button","which","pointerType","pointerdown","pointermove","pointerup","pointercancel","pointerout","Wa","2","3","4","5","Za","MSPointerEvent","PointerEvent","toLowerCase","pointerId","touchstart","touchmove","touchend","touchcancel","ab","touches","changedTouches","concat","filter","eb","sourceCapabilities","firesTouchEvents","S","fb","gb","ib","jb","kb","lb","mb","CSS","supports","compute","actions","update","getTouchAction","join","preventDefaults","prevented","preventSrc","preventDefault","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","process","reset","attrTest","threshold","directionTest","time","clearTimeout","taps","interval","posThreshold","failTimeout","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stop","stopped","curRecognizer","off","createEvent","initEvent","gesture","dispatchEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","Manager","Input","TouchAction","TouchInput","MouseInput","PointerEventInput","TouchMouseInput","SingleTouchInput","Recognizer","AttrRecognizer","Tap","Pan","Swipe","Pinch","Rotate","Press","merge","extend","inherit","bindFn","prefixed","self","Hammer","define","amd","module","exports","document","htmlsanitizer","_tagWhitelist","A","ABBR","B","BLOCKQUOTE","BODY","BR","CENTER","CODE","DD","DIV","DL","DT","EM","FONT","H1","H2","H3","H4","H5","H6","HR","IMG","LABEL","LI","OL","PRE","SMALL","SOURCE","SPAN","STRONG","SUB","SUP","TABLE","TBODY","TR","TD","TH","THEAD","UL","U","VIDEO","_contentTagWhiteList","FORM","GOOGLE-SHEETS-HTML-ORIGIN","_attributeWhitelist","align","color","controls","height","href","src","title","width","_cssWhitelist","background-color","font-size","font-weight","text-align","text-decoration","_schemaWhiteList","_uriAttributes","action","_parser","DOMParser","SanitizeHtml","extraSelector","doc","parseFromString","body","tagName","makeSanitizedCopy","node","newNode","nodeType","Node","TEXT_NODE","cloneNode","ELEMENT_NODE","matches","attributes","attr","name","styleName","setProperty","getPropertyValue","value","str","substrings","setAttribute","childNodes","subCopy","appendChild","createDocumentFragment","innerHTML","AllowedTags","AllowedAttributes","AllowedCssStyles","AllowedSchemas","htmlSanitizer","undefined","$W","$D","called","requestAFrame","cancelAFrame","transitionEnd","forceRedraw","mergeOpts","FancyBox","div","buttonStr","focusStr","$pressed","_run","opts","$target","instance","items","index","isDefaultPrevented","currentTarget","trigger","fancybox","getInstance","$trigger","is","selector","open","info","stuff","fn","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","iframe","tpl","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","el","transitions","transition","OTransition","MozTransition","WebkitTransition","$el","offsetHeight","opts1","opts2","rez","key","content","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","$container","firstItemOpts","scrollHeight","innerHeight","innerWidth","documentElement","clientWidth","translate","appendTo","$refs","container","item","activate","jumpTo","obj","arr","match","makeArray","srcParts","$item","$orig","found","charAt","inArray","$thumb","thumb","caption","shift","updateControls","Thumbs","isActive","focus","addEvents","removeEvents","stopPropagation","previous","next","isScaledDown","originalEvent","requestId","stage","hide","show","keycode","keyCode","ctrlKey","altKey","shiftKey","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","clearInterval","duration","pos","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","isMoved","$slide","loadSlide","getTranslate","slide","isComplete","left","className","leftPos","setTranslate","top","animate","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","imgPos","posX","posY","scaleY","$content","canvasWidth","canvasHeight","newImgWidth","newImgHeight","hasError","scaleX","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","parseFloat","minRatio","min","floor","aspectRatio","ratio","adjustCaption","adjustLayout","navigation","toggleClass","clientHeight","centerSlide","siblings","parent","children","hasClass","nextWidth","nextHeight","Guestures","isZoomable","canPan","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","textStatus","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","substring","postfix","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","max-width","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","parents","$placeholder","insertAfter","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","preventOverlap","$caption","captionH","$clone","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","brw","bbw","elem","elemCenter","getBoundingClientRect","offsetWidth","elementFromPoint","thumbPos","btw","blw","Document","exitFullscreen","webkitExitFullscreen","scrollTop","scrollLeft","prev","focusableStr","focusableItems","focusedItemIndex","activeElement","isVisible","done","cleanUp","domRect","$focus","scrollX","scrollY","args","unshift","hasHiddenControls","andCaption","toggleControls","version","command","all","use3d","getComputedStyle","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","jQuery","params","param","youtube","matcher","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","gmap_search","VideoAPILoader","urlParams","paramObj","provider","providerName","providerOpts","decodeURIComponent","p1","origSrc","contentSource","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","YT","Player","events","onStateChange","Vimeo","afterShow.fb","getPointerXY","pageX","pageY","point2","point1","what","pow","isClickable","onclick","atts","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","ontouchmove","ontouchend","newPoints","onSwipe","onPan","onZoom","swiping","transition-duration","sliderLastPos","limitMovement","currentOffsetX","currentOffsetY","currentWidth","currentHeight","newOffsetX","newOffsetY","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","endPanning","endZooming","endSwiping","len","canAdvance","prefix","tapX","tapY","where","addBack","progress","timer","$button","toggle","$progress","inner","force","clear","removeAttr","onInit.fb","beforeShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","FullScreen","fnMap","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","beforeClose.fb","FancyThumbs","CLASS","CLASS_ACTIVE","$grid","$list","list","that","share","currentHash","location","entityMap","encodeURIComponent","&","<",">","\"","'","/","`","=","shareInstance","shareCurrent","click","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","pathname","search","hasCreatedHistory","back","replaceState","reverse","tmp","prevTime","currTime","wheelDelta","detail","factory","require","jScrollPane","JScrollPane","pane","paneWidth","paneHeight","contentWidth","contentHeight","percentInViewH","percentInViewV","isScrollableV","isScrollableH","verticalDrag","dragMaxY","verticalDragPosition","horizontalDrag","dragMaxX","horizontalDragPosition","verticalBar","verticalTrack","scrollbarWidth","verticalTrackHeight","verticalDragHeight","arrowUp","arrowDown","horizontalBar","horizontalTrack","horizontalTrackWidth","horizontalDragWidth","reinitialiseInterval","originalPadding","originalPaddingTotalWidth","previousContentWidth","jsp","wasAtTop","wasAtLeft","wasAtBottom","wasAtRight","originalElement","resizeEventsAdded","mwEvent","mwheelIntent","reinitialiseFn","resizeSensorDelay","initialise","lastContentX","lastContentY","originalScrollTop","originalScrollLeft","newPaneWidth","scrollableHeight","horizontalTrackHeight","verticalTrackWidth","keyDown","elementHasScrolled","validParents","startX","startY","touchStartX","touchStartY","moved","moving","maintainAtBottom","maintainAtRight","overflow","padding","newPaneHeight","stickToBottom","contentPositionY","stickToRight","scrollableWidth","contentPositionX","hasContainingSpaceChanged","keyDownHandler","dX","dY","scrollByY","keyboardSpeed","scrollPagePercent","scrollByX","alwaysShowVScroll","alwaysShowHScroll","isMaintainingPositon","maintainPosition","showArrows","getArrowScroll","nil","arrowScrollOnHover","appendArrows","verticalArrowPositions","positionDragY","cancelDrag","sizeVerticalScrollbar","horizontalArrowPositions","positionDragX","sizeHorizontalScrollbar","horizontalDragMaxWidth","horizontalDragMinWidth","_positionDragX","verticalDragMaxHeight","verticalDragMinHeight","_positionDragY","scrollToX","scrollToY","scrollToElement","delta","factor","deltaFactor","mouseWheelSpeed","scrollBy","ev","touchPos","scrollTo","enableKeyboardNavigation","closest","hideFocus","clickOnTrack","removeClickOnTrack","clickedTrack","scrollTimeout","doScroll","cancelClick","originalTarget","contentDragY","dragY","initialDelay","trackClickRepeatFreq","contentDragX","dragX","retryInt","escape","err","hijackInternalLinks","delegate","elementTop","locationHref","scrollIntoView","resizeSensor","autoReinitialise","autoReinitialiseDelay","detectSizeChanges","resizeWidth","resizeHeight","resizeElement","resizeGrowElement","resizeGrowChildElement","resizeShrinkElement","resizeShrinkChildElement","updateSizes","cssText","verticalGutter","ele","a1","a2","p2","platform","aTemp","dirX","dirY","arrowButtonSpeed","arrowRepeatFreq","arrow","eve","blur","destY","tmpVerticalDragPosition","isAtTop","isAtBottom","destTop","willScrollYEvent","Event","animateScroll","destX","tmpHorizontalDragPosition","isAtLeft","isAtRight","destLeft","willScrollXEvent","stickToTop","eleWidth","viewportLeft","maxVisibleEleLeft","eleTop","eleLeft","eleHeight","offsetParent","maxVisibleEleTop","viewportTop","horizontalGutter","reinitialise","scrollToPercentX","destPercentX","scrollToPercentY","destPercentY","stepCallback","completeCallback","animateDuration","easing","animateEase","queue","step","getContentPositionX","getContentPositionY","getContentWidth","getContentHeight","getPercentScrolledX","getPercentScrolledY","getIsScrollableH","getIsScrollableV","getContentPane","scrollToBottom","currentY","currentX","replaceWith","jspApi","trackClickSpeed","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","addTest","addAsyncTest","Modernizr","aliases","baseVal","RegExp","checkIfBDCLoaded","checkForBDC","BDC","Utils","breakpoints","isBP","bp","breaks","pixel-ratio-zero","matchMedia","s-down","s-up","m-down","m-up","m-up-l-down","l-down","l-up","l-up-xl-down","xl-up","1024-down","breakpoint","getBreakPoints","currentUrl","currentLang","language","funcs","waitReady","documentLang","getElementsByTagName","addScope","scope","domainsList","prod","domain","environnement","prodCms12","dev","local","eloqua","surveyGizmo","alchemer","method","getFuncs","run","exec","space","func","isFunc","funcName","parseNameSpace","timeEnd","groupEnd","ready","timerStart","sNs","oBase","parts","getDateNow","getRunningTimeInMs","returnTotal","getHighestInteger","array","Dict","menuBack","fr","menuClose","gup","results","getUniqueId","detectIE","msie","trident","edge","rv","toggleActiveClassOnClick","leaveOthersOpened","$elem","not","isMobileDevice","getClassList","Cookies","Cookie","cookiePermanentName","cookieSessionNbPages","cookieSessionCreation","cookieSurveyState","createCookie","days","date","expires","setTime","toGMTString","cookie","readCookie","nameEq","eraseCookie","isCookie","cookieName","Main","blogContentChange","prepend","viewportSize","viewPortWidth","viewPortHeight","isSmallMobile","isMobileMode","currentBreakPoint","viewportWidth","viewportHeight","customFieldBehavior","navigateTo","$select","currentPosition","change","boxSlide","$boxButton","$boxSlideArea","$allBoxButton","$allBoxSlideArea","iFrameManagement","$e","origin","getScript","iframeListener","domainFound","msgArray","numberMsg","addFormClassToIframes","emailSpamProtection","email","htmlEnhancer","endUrl","eloquaLanding","iFrameHtml","hostname","uid","lid","elq","elqaid","elqat","elqTrackId","decodeURI","fancyBox","finalMapUrl","boundary","currentScroll","newScroll","currentBoundary","pastBoundary","boundaryNav","boundaryNavSelect","selfBoundary","distanceScrollTop","heightElement","selfMenu","mobileOffset","clickableBlocks","isTargetA","hrefLink","targetLink","toggleElement","expandClass","accordionClass","closeContentClass","showExpandClass","expandOpenClass","$arrExpand","$arrAccordion","$arrAccordionWrapper","previousElementSibling","classList","nextElementSibling","$this","offsetTop","linkAnchor","anchor","itemAccordion","displayNoteForBusinessCentre","policeNote","note","targetElement","datatype","async","processData","xhr","statusText","contactUsMap","activeProvince","selectedProvince","hover","province","rwdImageMaps","nbCentres","slidingTable","linkLoaded","link","sheet","linkEl","isCssLinkLoaded","tabHolderTarget","tab","head","querySelector","timeout","SliderNav","tableHeader","menuHtmlElement","topInitial","numberColumn","menu","columnCount","$wrapper","columnPerPage","$slides","positionTop","getHeader","menuArray","paginate","startSwipe","navigationStatus","nextPage","clickCount","maxPositionTabSlider","positionTabSlider","tabWidth","$tabsSlider","prevPage","minPositionTabSlider","maxScale","displayStart","displayEnd","$menu","visualMenu","$tableHeader","$tableLines","cells","cell","resetActiveTab","activeTab","app","setActiveTab","recalculateArrowsOnResize","$tabs","$tabsContent","prevAll","positionTabMarker","$tabsMarker","setAnchorTiles","setArrows","tabMargin","$prevButton","$nextButton","containerWidth","detectSwipe","pathName","evt","dataToNumber","dataset","posActiveTab","$chevronPrev","$chevronNext","posLeft","activeCat","cat","attachEvent","Mobile","generateMobileTopNavMenu","setActiveSubmenu","parentsUntil","spliceDeleteCount","homePattern","path","pathArray","finalPath","parentLink","$currentNavHome","linkText","levelOneLinks","currentLinkText","mobileMenuEventsBinder","FooterMenuItem","accordToggle","slideToggle","slideUp","shouldHaveOpenableMenu","construct","menuManager","ManageEvent","allMenuUse","condition","pMenu","getIsActive","addMenu","querySelectorAll","parentElem","FilteredAjaxForm","IFrameResizer","StickyStacker","randomDisplay","lazySizes","loader","unveil","Element","loaderSelector","formSelector","contentSelector","boundSubmitHandler","submitForm","checkSelector","bindForm","form","ajaxForm","formElements","hadFindFailure","getAttribute","elementName","disabled","unbindForm","viewMoreCompanies","toggleFormSelects","elements","payload","serialize","toggleVisible","cache","submitFormSuccess","submitFormFailure","refreshedMarkup","refreshedContent","refreshedForm","existingSelect","learnMoreBehavior","idParentContainer","itemList","fixedHeader","import","then","anchorFixedHeader","initAnchorFixedHeader","blogPostListType","setClickActions","callAjax","ajaxCall","skip","take","dataSanitized","skipVal","takeVal","checker","resolver","resolveAfterLoad","Promise","resolve","scrollPage","headerHeight","$scrollTarget","scrollerAmt","await","iframeResizerInternal","observableSelectors","unobservedHeight","elementsSet","observer","disconnect","Set","has","size","ResizeObserver","dimensionsChanged","observedElements","observedElement","observe","entries","entriesMap","Map","entry","contentBoxSize","blockSize","OnepagerHeader","$mainNav","activeMenu","$menuLinks","$scrollActivePosition","scroll","apis","scrollers","stickyStackerInternal","elementsArray","topSeparation","includes","updateElementSeparation","originalSelectors","isStarted","restart","separation","stickySeparation","actualSeparation","tabsContainer","tabs","initTabs","lazyVideoObserver","lazyVideos","IntersectionObserver","isIntersecting","source","videoSource","unobserve","lazyVideo","buttonTrigger","buttonName","hiddenName","targetNodes","config","childList","subtree","decodeHtml","txt","mutationsList","mutation","MutationObserver","targetNode","submitted","setHandlerValidation","_utilsSvc","epi","EPiServer","Forms","getWorkingFormFromInnerElement","formId","getFormIdentifier","field","fieldId","fieldName","getAttributeNode","errorMessage","formInfo","checkbox","boxChecked","checked","hasAttribute","validation","Validation","validators","getElementValidators","ValidationInfo","validateFormValue","every","currentStepIndex","totalStep","isValid","messageSanitized","message","removeFormatting","$$epiforms","setEvent","setUtagMultistep","formName","currentStep","stepcount","utag","stepNumber","view","event_name","content_type","url_override","form_name","reminderNotification","solution","firstName","lastName","jobTitle","phone","phoneExt","xhttp","XMLHttpRequest","setRequestHeader","send","setHandlerByType","handlerElement","fType","optInStatusLive","optInChecked","stepOptIn","optIn","progressBarPercentageVisual","targetStep","progressBarPercentageWidth","workingFormInfo","Name","lastStep","contains","_i","fieldWithoutFormatting","Validators","www.bdc.ca.Features.Forms.EqualPropertiesFormValidator.EqualPropertiesFormValidator","validatorMetaData","getElementValue","model","www.bdc.ca.Features.Forms.MinimumNumberValidator.MinimumNumberValidator","www.bdc.ca.Features.Forms.MaximumNumberValidator.MaximumNumberValidator","www.bdc.ca.Features.Forms.UrlResponseValidator.UrlResponseValidator","www.bdc.ca.Features.Forms.GroupContainerValidator.GroupContainerValidator","additionalAttributes","ElementName"],"mappings":"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","file":"main.min.js","sourcesContent":["window.ratioCalculator = (() => {\n const myObj = {\n settings: {},\n resultsHtml: \"\",\n calculatorResult: \"\",\n init: function (settings) {\n //copy passed in settings\n this.settings = settings;\n //copy the original results html to reuse on click\n this.resultsHtml = $(\".calculatorResultArea\").html();\n this.calculatorResult = $(\"#calculatorResult\");\n //add click event to submit button\n $(\"#btnSubmitCalculator\").on(\"click\", this.displayErrors);\n },\n displayErrors: function () {\n //create arrays holding all values\n const values = [];\n //gets input values\n $(\".ratio-calculator input[type='text']\").each(function () {\n values.push(($(this).val()));\n });\n //checks if values are valid\n const isValueValid = [];\n let i = 0;\n while (i < values.length) {\n isValueValid.push(this.validate(values[i]));\n i++;\n }\n //checks if form has errors and sends or displays errors.\n let noErrorsFound = true;\n i = 0;\n while (noErrorsFound && i < isValueValid.length) {\n noErrorsFound = isValueValid[i].valid;\n i++;\n }\n //remove error messages class colors\n $(\".ratio-calculator .form-group\").removeClass(\"errorMessage\");\n $(\".ratio-calculator .form-group label\").find(\"div\").remove();\n //if no errors found send form\n if (noErrorsFound) {\n this.calculate(values);\n }\n else {\n //cycles through values and show error messages\n for (i = 0; i < isValueValid.length; i++) {\n const currentIndex = String(i + 1);\n if (!isValueValid[i].valid) {\n $(`#label${currentIndex}`).addClass(\"errorMessage\");\n $(`#label${currentIndex} label`).append($(\"
\", {\n text: String(`${isValueValid[i].error}`)\n }));\n }\n }\n this.calculatorResult.css(\"display\", \"none\");\n }\n },\n validate: function (fieldValue) {\n //construct an error object to hold valid switch and associated error message\n const errorObj = {\n \"valid\": false,\n \"error\": \"\"\n };\n //if field value is defined then validate\n if (typeof fieldValue != \"undefined\") {\n //check if not a number or has a decimal\n if (isNaN(Number(fieldValue)) || Number(fieldValue) % 1 !== 0 || fieldValue.trim() === \"\") {\n errorObj.error = this.settings.errors.isnan;\n }\n //check if less than zero\n else if (Number(fieldValue) <= 0) {\n errorObj.error = this.settings.errors.belowzero;\n }\n else {\n errorObj.valid = true;\n }\n }\n return errorObj;\n },\n successAjax: function (response) {\n //replace required value in text area with the appropriate result\n let text = this.resultsHtml;\n text = String(text).replaceAll(/\\{\\{Result\\}\\}/ig, response.result);\n //clobber existing html with adjusted html\n $(\".calculatorResultArea\").html(text);\n this.calculatorResult.css(\"display\", \"block\");\n },\n calculate: function (values) {\n //construct a data object from available fields.\n const sendingValues = {};\n for (let i = 0, y = 1; i < values.length; i++, y++) {\n sendingValues[`FieldValue${String(y)}`] = values[i];\n }\n //build ajax parameters object\n const ajaxParams = {\n type: \"POST\",\n url: this.settings.url,\n data: JSON.stringify(sendingValues),\n contentType: \"application/json\",\n dataType: \"json\",\n success: this.successAjax,\n error(response) {\n alert(response.d);\n }\n };\n $.ajax(ajaxParams);\n }\n };\n myObj.init = myObj.init.bind(myObj);\n myObj.displayErrors = myObj.displayErrors.bind(myObj);\n myObj.calculate = myObj.calculate.bind(myObj);\n myObj.validate = myObj.validate.bind(myObj);\n myObj.successAjax = myObj.successAjax.bind(myObj);\n return myObj;\n})();\n// function hello(compiler: string) {\n// console.log(`Hello and Welcome ${compiler}`);\n// }\n// hello('TypeScript');\n","/*! Hammer.JS - v2.0.8 - 2016-04-23\r\n * http://hammerjs.github.io/\r\n *\r\n * Copyright (c) 2016 Jorik Tangelder;\r\n * Licensed under the MIT license */\r\n!function(a,b,c,d){\"use strict\";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),\"identifier\",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach(function(d){b[d]=c?a.CSS.supports(\"touch-action\",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?\"cancel\":a&qb?\"end\":a&pb?\"move\":a&ob?\"start\":\"\"}function $(a){return a==Ma?\"down\":a==La?\"up\":a==Ja?\"left\":a==Ka?\"right\":\"\"}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||\"\"}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent(\"Event\");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],na=b.createElement(\"div\"),oa=\"function\",pa=Math.round,qa=Math.abs,ra=Date.now;la=\"function\"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;ch&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a=\"touchstart\",_a=\"touchstart touchmove touchend touchcancel\";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb=\"touchstart touchmove touchend touchcancel\";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,\"touchAction\"),fb=eb!==d,gb=\"compute\",hb=\"auto\",ib=\"manipulation\",jb=\"none\",kb=\"pan-x\",lb=\"pan-y\",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(\" \"))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,\"recognizeWith\",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,\"dropRecognizeWith\",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,\"requireFailure\",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,\"dropRequireFailure\",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;af?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?\"in\":\"out\";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+\"up\",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance\") return \"\";\r\n\r\n\t\tif (input.indexOf(\"\" + input + \"\"; //add \"body\" otherwise some tags are skipped, like \"\r\n );\r\n\r\n $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n }\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = \"\";\r\n\r\n $.each(firstItemOpts.buttons, function (index, value) {\r\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate(\r\n self,\r\n firstItemOpts.baseTpl\r\n .replace(\"{{buttons}}\", buttonStr)\r\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n )\r\n )\r\n .attr(\"id\", \"fancybox-container-\" + self.id)\r\n .addClass(firstItemOpts.baseClass)\r\n .data(\"FancyBox\", self)\r\n .appendTo(firstItemOpts.parentEl);\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container: $container\r\n };\r\n\r\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n });\r\n\r\n self.trigger(\"onInit\");\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo(self.currIndex);\r\n },\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate: function (obj, str) {\r\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n return arr[n] === undefined ? match : arr[n];\r\n });\r\n },\r\n\r\n // Populate current group with fresh content\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n addContent: function (content) {\r\n var self = this,\r\n items = $.makeArray(content),\r\n thumbs;\r\n\r\n $.each(items, function (i, item) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ($.isPlainObject(item)) {\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n } else if ($.type(item) === \"object\" && $(item).length) {\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $(item);\r\n\r\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n opts = $item.data() || {};\r\n opts = $.extend(true, {}, opts, opts.options);\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if (!obj.type && !obj.src) {\r\n obj.type = \"inline\";\r\n obj.src = item;\r\n }\r\n } else {\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n obj = {\r\n type: \"html\",\r\n src: item + \"\"\r\n };\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n // Do not merge buttons array\r\n if ($.isArray(opts.buttons)) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n if ($.fancybox.isMobile && obj.opts.mobile) {\r\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n }\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || \"\";\r\n\r\n if (!type && src) {\r\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n type = \"video\";\r\n\r\n if (!obj.opts.video.format) {\r\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n }\r\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n type = \"image\";\r\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n type = \"iframe\";\r\n obj = $.extend(true, obj, {\r\n contentType: \"pdf\",\r\n opts: {\r\n iframe: {\r\n preload: false\r\n }\r\n }\r\n });\r\n } else if (src.charAt(0) === \"#\") {\r\n type = \"inline\";\r\n }\r\n }\r\n\r\n if (type) {\r\n obj.type = type;\r\n } else {\r\n self.trigger(\"objectNeedsType\", obj);\r\n }\r\n\r\n if (!obj.contentType) {\r\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n }\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n if (obj.opts.smallBtn == \"auto\") {\r\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n }\r\n\r\n if (obj.opts.toolbar === \"auto\") {\r\n obj.opts.toolbar = !obj.opts.smallBtn;\r\n }\r\n\r\n // Find thumbnail image, check if exists and if is in the viewport\r\n obj.$thumb = obj.opts.$thumb || null;\r\n\r\n if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n if (obj.$thumb.length) {\r\n obj.opts.$orig = obj.opts.$trigger;\r\n }\r\n }\r\n\r\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n }\r\n\r\n if (obj.$thumb && !obj.$thumb.length) {\r\n obj.$thumb = null;\r\n }\r\n\r\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n if ($.type(obj.opts.caption) === \"function\") {\r\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n if ($.type(self.opts.caption) === \"function\") {\r\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if (!(obj.opts.caption instanceof $)) {\r\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if (obj.type === \"ajax\") {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if (srcParts.length > 1) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if (obj.opts.modal) {\r\n obj.opts = $.extend(true, obj.opts, {\r\n trapFocus: true,\r\n // Remove buttons\r\n infobar: 0,\r\n toolbar: 0,\r\n\r\n smallBtn: 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard: 0,\r\n\r\n // Disable some modules\r\n slideShow: 0,\r\n fullScreen: 0,\r\n thumbs: 0,\r\n touch: 0,\r\n\r\n // Disable click event handlers\r\n clickContent: false,\r\n clickSlide: false,\r\n clickOutside: false,\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false\r\n });\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push(obj);\r\n });\r\n\r\n // Update controls if gallery is already opened\r\n if (Object.keys(self.slides).length) {\r\n self.updateControls();\r\n\r\n // Update thumbnails, if needed\r\n thumbs = self.Thumbs;\r\n\r\n if (thumbs && thumbs.isActive) {\r\n thumbs.create();\r\n\r\n thumbs.focus();\r\n }\r\n }\r\n },\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detecting inactivity\r\n // ======================================\r\n\r\n addEvents: function () {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n // ==================================\r\n\r\n self.$refs.container\r\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n })\r\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n })\r\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n })\r\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n // Click handler for zoom button\r\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n });\r\n\r\n // Handle page scrolling and browser resizing\r\n // ==========================================\r\n\r\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n self.update(e);\r\n });\r\n } else {\r\n if (self.current && self.current.type === \"iframe\") {\r\n self.$refs.stage.hide();\r\n }\r\n\r\n setTimeout(\r\n function () {\r\n self.$refs.stage.show();\r\n\r\n self.update(e);\r\n },\r\n $.fancybox.isMobile ? 600 : 250\r\n );\r\n }\r\n });\r\n\r\n $D.on(\"keydown.fb\", function (e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n current = instance.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n // Trap keyboard focus inside of the modal\r\n // =======================================\r\n\r\n if (keycode == 9) {\r\n if (current.opts.trapFocus) {\r\n self.focus(e);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Enable keyboard navigation\r\n // ==========================\r\n\r\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if (keycode === 8 || keycode === 27) {\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if (keycode === 37 || keycode === 38) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if (keycode === 39 || keycode === 40) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger(\"afterKeydown\", e, keycode);\r\n });\r\n\r\n // Hide controls after some inactivity period\r\n if (self.group[self.currIndex].opts.idleTime) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on(\r\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n function (e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if (self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n }\r\n );\r\n\r\n self.idleInterval = window.setInterval(function () {\r\n self.idleSecondsCounter++;\r\n\r\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n }, 1000);\r\n }\r\n },\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents: function () {\r\n var self = this;\r\n\r\n $W.off(\"orientationchange.fb resize.fb\");\r\n $D.off(\"keydown.fb .fb-idle\");\r\n\r\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n if (self.idleInterval) {\r\n window.clearInterval(self.idleInterval);\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous: function (duration) {\r\n return this.jumpTo(this.currPos - 1, duration);\r\n },\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next: function (duration) {\r\n return this.jumpTo(this.currPos + 1, duration);\r\n },\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo: function (pos, duration) {\r\n var self = this,\r\n groupLen = self.group.length,\r\n firstRun,\r\n isMoved,\r\n loop,\r\n current,\r\n previous,\r\n slidePos,\r\n stagePos,\r\n prop,\r\n diff;\r\n\r\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n return;\r\n }\r\n\r\n // Should loop?\r\n pos = parseInt(pos, 10);\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if (!loop && (pos < 0 || pos >= groupLen)) {\r\n return false;\r\n }\r\n\r\n // Check if opening for the first time; this helps to speed things up\r\n firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n // Create slides\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n current = self.createSlide(pos);\r\n\r\n if (groupLen > 1) {\r\n if (loop || current.index < groupLen - 1) {\r\n self.createSlide(pos + 1);\r\n }\r\n\r\n if (loop || current.index > 0) {\r\n self.createSlide(pos - 1);\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger(\"beforeShow\", firstRun);\r\n\r\n self.updateControls();\r\n\r\n // Validate duration length\r\n current.forcedDuration = undefined;\r\n\r\n if ($.isNumeric(duration)) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n }\r\n\r\n duration = parseInt(duration, 10);\r\n\r\n // Check if user has swiped the slides or if still animating\r\n isMoved = self.isMoved(current);\r\n\r\n // Make sure current slide is visible\r\n current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if (firstRun) {\r\n if (current.opts.animationEffect && duration) {\r\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n // Attempt to load content into slide\r\n // This will later call `afterLoad` -> `revealContent`\r\n self.loadSlide(current);\r\n\r\n self.preload(\"image\");\r\n\r\n return;\r\n }\r\n\r\n // Get actual slide/stage positions (before cleaning up)\r\n slidePos = $.fancybox.getTranslate(previous.$slide);\r\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n // Clean up all slides\r\n $.each(self.slides, function (index, slide) {\r\n $.fancybox.stop(slide.$slide, true);\r\n });\r\n\r\n if (previous.pos !== current.pos) {\r\n previous.isComplete = false;\r\n }\r\n\r\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n // If slides are out of place, then animate them to correct position\r\n if (isMoved) {\r\n // Calculate horizontal swipe distance\r\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n $.each(self.slides, function (index, slide) {\r\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n // Make sure that each slide is in equal distance\r\n // This is mostly needed for freshly added slides, because they are not yet positioned\r\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: 0,\r\n left: leftPos - stagePos.left + diff\r\n });\r\n\r\n if (slide.pos !== current.pos) {\r\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n }\r\n\r\n // Redraw to make sure that transition will start\r\n forceRedraw(slide.$slide);\r\n\r\n // Animate the slide\r\n $.fancybox.animate(\r\n slide.$slide, {\r\n top: 0,\r\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n },\r\n duration,\r\n function () {\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\"\r\n })\r\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n }\r\n );\r\n });\r\n } else if (duration && current.opts.transitionEffect) {\r\n // Set transition effect for previously active slide\r\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n $.fancybox.animate(\r\n previous.$slide,\r\n prop,\r\n duration,\r\n function () {\r\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (current.isLoaded) {\r\n self.revealContent(current);\r\n } else {\r\n self.loadSlide(current);\r\n }\r\n\r\n self.preload(\"image\");\r\n },\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide: function (pos) {\r\n var self = this,\r\n $slide,\r\n index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if (!self.slides[pos] && self.group[index]) {\r\n $slide = $('
').appendTo(self.$refs.stage);\r\n\r\n self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n pos: pos,\r\n $slide: $slide,\r\n isLoaded: false\r\n });\r\n\r\n self.updateSlide(self.slides[pos]);\r\n }\r\n\r\n return self.slides[pos];\r\n },\r\n\r\n // Scale image to the actual size of the image;\r\n // x and y values should be relative to the slide\r\n // ==============================================\r\n\r\n scaleToActual: function (x, y, duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n newImgWidth = current.width,\r\n newImgHeight = current.height,\r\n imgPos,\r\n posX,\r\n posY,\r\n scaleX,\r\n scaleY;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate($content);\r\n\r\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n // Make sure image does not move away from edges\r\n if (newImgWidth > canvasWidth) {\r\n posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n if (posX > 0) {\r\n posX = 0;\r\n }\r\n\r\n if (posX < canvasWidth - newImgWidth) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if (newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n if (posY > 0) {\r\n posY = 0;\r\n }\r\n\r\n if (posY < canvasHeight - newImgHeight) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: posY,\r\n left: posX,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n\r\n // Stop slideshow\r\n if (self.SlideShow && self.SlideShow.isActive) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n end;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n end = self.getFitPos(current);\r\n\r\n self.updateCursor(end.width, end.height);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: end.top,\r\n left: end.left,\r\n scaleX: end.width / $content.width(),\r\n scaleY: end.height / $content.height()\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos: function (slide) {\r\n var self = this,\r\n $content = slide.$content,\r\n $slide = slide.$slide,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n maxWidth,\r\n maxHeight,\r\n minRatio,\r\n aspectRatio,\r\n rez = {};\r\n\r\n if (!slide.isLoaded || !$content || !$content.length) {\r\n return false;\r\n }\r\n\r\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n maxWidth -=\r\n parseFloat($slide.css(\"paddingLeft\")) +\r\n parseFloat($slide.css(\"paddingRight\")) +\r\n parseFloat($content.css(\"marginLeft\")) +\r\n parseFloat($content.css(\"marginRight\"));\r\n\r\n maxHeight -=\r\n parseFloat($slide.css(\"paddingTop\")) +\r\n parseFloat($slide.css(\"paddingBottom\")) +\r\n parseFloat($content.css(\"marginTop\")) +\r\n parseFloat($content.css(\"marginBottom\"));\r\n\r\n if (!width || !height) {\r\n width = maxWidth;\r\n height = maxHeight;\r\n }\r\n\r\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n width = minRatio * width;\r\n height = minRatio * height;\r\n\r\n // Adjust width/height to precisely fit into container\r\n if (width > maxWidth - 0.5) {\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight - 0.5) {\r\n height = maxHeight;\r\n }\r\n\r\n if (slide.type === \"image\") {\r\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n } else if (slide.contentType === \"video\") {\r\n // Force aspect ratio for the video\r\n // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n if (height > width / aspectRatio) {\r\n height = width / aspectRatio;\r\n } else if (width > height * aspectRatio) {\r\n width = height * aspectRatio;\r\n }\r\n }\r\n\r\n rez.width = width;\r\n rez.height = height;\r\n\r\n return rez;\r\n },\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update: function (e) {\r\n var self = this;\r\n\r\n $.each(self.slides, function (key, slide) {\r\n self.updateSlide(slide, e);\r\n });\r\n },\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide: function (slide, e) {\r\n var self = this,\r\n $content = slide && slide.$content,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n $slide = slide.$slide;\r\n\r\n // First, prevent caption overlap, if needed\r\n self.adjustCaption(slide);\r\n\r\n // Then resize content to fit inside the slide\r\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n $.fancybox.stop($content);\r\n\r\n $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n if (slide.pos === self.currPos) {\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n // Then some adjustments\r\n self.adjustLayout(slide);\r\n\r\n if ($slide.length) {\r\n $slide.trigger(\"refresh\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.$refs.toolbar\r\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n }\r\n }\r\n\r\n self.trigger(\"onUpdate\", slide, e);\r\n },\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $slide = current.$slide;\r\n\r\n if (self.isClosing || !current) {\r\n return;\r\n }\r\n\r\n $slide.siblings().css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n $slide\r\n .parent()\r\n .children()\r\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n $.fancybox.animate(\r\n $slide, {\r\n top: 0,\r\n left: 0,\r\n opacity: 1\r\n },\r\n duration === undefined ? 0 : duration,\r\n function () {\r\n // Clean up\r\n $slide.css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (!current.isComplete) {\r\n self.complete();\r\n }\r\n },\r\n false\r\n );\r\n },\r\n\r\n // Check if current slide is moved (swiped)\r\n // ========================================\r\n\r\n isMoved: function (slide) {\r\n var current = slide || this.current,\r\n slidePos,\r\n stagePos;\r\n\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n return (\r\n !current.$slide.hasClass(\"fancybox-animated\") &&\r\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n );\r\n },\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n $container = self.$refs.container,\r\n canPan,\r\n isZoomable;\r\n\r\n if (!current || self.isClosing || !self.Guestures) {\r\n return;\r\n }\r\n\r\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n isZoomable = canPan ? true : self.isZoomable();\r\n\r\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n if (canPan) {\r\n $container.addClass(\"fancybox-can-pan\");\r\n } else if (\r\n isZoomable &&\r\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n ) {\r\n $container.addClass(\"fancybox-can-zoomIn\");\r\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n $container.addClass(\"fancybox-can-swipe\");\r\n }\r\n },\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable: function () {\r\n var self = this,\r\n current = self.current,\r\n fitPos;\r\n\r\n // Assume that slide is zoomable if:\r\n // - image is still loading\r\n // - actual size of the image is smaller than available area\r\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n if (!current.isLoaded) {\r\n return true;\r\n }\r\n\r\n fitPos = self.getFitPos(current);\r\n\r\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown: function (nextWidth, nextHeight) {\r\n var self = this,\r\n rez = false,\r\n current = self.current,\r\n $content = current.$content;\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n rez = nextWidth < current.width && nextHeight < current.height;\r\n } else if ($content) {\r\n rez = $.fancybox.getTranslate($content);\r\n rez = rez.width < current.width && rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n pos = null,\r\n rez = false;\r\n\r\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n rez = self.getFitPos(current);\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n pos = {\r\n width: nextWidth,\r\n height: nextHeight\r\n };\r\n } else if (current.isComplete) {\r\n pos = $.fancybox.getTranslate(current.$content);\r\n }\r\n\r\n if (pos && rez) {\r\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n }\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide: function (slide) {\r\n var self = this,\r\n type,\r\n $slide,\r\n ajaxLoad;\r\n\r\n if (slide.isLoading || slide.isLoaded) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n if (self.trigger(\"beforeLoad\", slide) === false) {\r\n slide.isLoading = false;\r\n\r\n return false;\r\n }\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off(\"refresh\")\r\n .trigger(\"onReset\")\r\n .addClass(slide.opts.slideClass);\r\n\r\n // Create content depending on the type\r\n switch (type) {\r\n case \"image\":\r\n self.setImage(slide);\r\n\r\n break;\r\n\r\n case \"iframe\":\r\n self.setIframe(slide);\r\n\r\n break;\r\n\r\n case \"html\":\r\n self.setContent(slide, slide.src || slide.content);\r\n\r\n break;\r\n\r\n case \"video\":\r\n self.setContent(\r\n slide,\r\n slide.opts.video.tpl\r\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n .replace(\"{{poster}}\", slide.thumb || \"\")\r\n );\r\n\r\n break;\r\n\r\n case \"inline\":\r\n if ($(slide.src).length) {\r\n self.setContent(slide, $(slide.src));\r\n } else {\r\n self.setError(slide);\r\n }\r\n\r\n break;\r\n\r\n case \"ajax\":\r\n self.showLoading(slide);\r\n\r\n ajaxLoad = $.ajax(\r\n $.extend({}, slide.opts.ajax.settings, {\r\n url: slide.src,\r\n success: function (data, textStatus) {\r\n if (textStatus === \"success\") {\r\n self.setContent(slide, data);\r\n }\r\n },\r\n error: function (jqXHR, textStatus) {\r\n if (jqXHR && textStatus !== \"abort\") {\r\n self.setError(slide);\r\n }\r\n }\r\n })\r\n );\r\n\r\n $slide.one(\"onReset\", function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n default:\r\n self.setError(slide);\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage: function (slide) {\r\n var self = this,\r\n ghost;\r\n\r\n // Check if need to show loading icon\r\n setTimeout(function () {\r\n var $img = slide.$image;\r\n\r\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n self.showLoading(slide);\r\n }\r\n }, 50);\r\n\r\n //Check if image has srcset\r\n self.checkSrcset(slide);\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass(\"fancybox-is-hidden\")\r\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n ghost = document.createElement(\"img\");\r\n\r\n ghost.onerror = function () {\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n };\r\n\r\n ghost.onload = function () {\r\n self.afterLoad(slide);\r\n };\r\n\r\n slide.$ghost = $(ghost)\r\n .addClass(\"fancybox-image\")\r\n .appendTo(slide.$content)\r\n .attr(\"src\", slide.thumb);\r\n }\r\n\r\n // Start loading actual image\r\n self.setBigImage(slide);\r\n },\r\n\r\n // Check if image has srcset and get the source\r\n // ============================================\r\n checkSrcset: function (slide) {\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n found,\r\n temp,\r\n pxRatio,\r\n windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if (srcset) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(\",\").map(function (el) {\r\n var ret = {};\r\n\r\n el.trim()\r\n .split(/\\s+/)\r\n .forEach(function (el, i) {\r\n var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n if (i === 0) {\r\n return (ret.url = el);\r\n }\r\n\r\n if (value) {\r\n ret.value = value;\r\n ret.postfix = el[el.length - 1];\r\n }\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for (var j = 0; j < temp.length; j++) {\r\n var el = temp[j];\r\n\r\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if (!found && temp.length) {\r\n found = temp[temp.length - 1];\r\n }\r\n\r\n if (found) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if (slide.width && slide.height && found.postfix == \"w\") {\r\n slide.height = (slide.width / slide.height) * found.value;\r\n slide.width = found.value;\r\n }\r\n\r\n slide.opts.srcset = srcset;\r\n }\r\n }\r\n },\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage: function (slide) {\r\n var self = this,\r\n img = document.createElement(\"img\"),\r\n $img = $(img);\r\n\r\n slide.$image = $img\r\n .one(\"error\", function () {\r\n self.setError(slide);\r\n })\r\n .one(\"load\", function () {\r\n var sizes;\r\n\r\n if (!slide.$ghost) {\r\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n self.afterLoad(slide);\r\n }\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (slide.opts.srcset) {\r\n sizes = slide.opts.sizes;\r\n\r\n if (!sizes || sizes === \"auto\") {\r\n sizes =\r\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n \"vw\";\r\n }\r\n\r\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n }\r\n\r\n // Hide temporary image after some delay\r\n if (slide.$ghost) {\r\n setTimeout(function () {\r\n if (slide.$ghost && !self.isClosing) {\r\n slide.$ghost.hide();\r\n }\r\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n }\r\n\r\n self.hideLoading(slide);\r\n })\r\n .addClass(\"fancybox-image\")\r\n .attr(\"src\", slide.src)\r\n .appendTo(slide.$content);\r\n\r\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n $img.trigger(\"load\");\r\n } else if (img.error) {\r\n $img.trigger(\"error\");\r\n }\r\n },\r\n\r\n // Computes the slide size from image size and maxWidth/maxHeight\r\n // ==============================================================\r\n\r\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n var maxWidth = parseInt(slide.opts.width, 10),\r\n maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n // Sets the default values from the image\r\n slide.width = imgWidth;\r\n slide.height = imgHeight;\r\n\r\n if (maxWidth > 0) {\r\n slide.width = maxWidth;\r\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n }\r\n\r\n if (maxHeight > 0) {\r\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n slide.height = maxHeight;\r\n }\r\n },\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe: function (slide) {\r\n var self = this,\r\n opts = slide.opts.iframe,\r\n $slide = slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css(opts.css)\r\n .appendTo($slide);\r\n\r\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n .attr(opts.attr)\r\n .appendTo(slide.$content);\r\n\r\n if (opts.preload) {\r\n self.showLoading(slide);\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on(\"load.fb error.fb\", function (e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger(\"refresh\");\r\n\r\n self.afterLoad(slide);\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on(\"refresh.fb\", function () {\r\n var $content = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n $contents,\r\n $body;\r\n\r\n if ($iframe[0].isReady !== 1) {\r\n return;\r\n }\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find(\"body\");\r\n } catch (ignore) {}\r\n\r\n // Calculate content dimensions, if it is accessible\r\n if ($body && $body.length && $body.children().length) {\r\n // Avoid scrolling to top (if multiple instances)\r\n $slide.css(\"overflow\", \"visible\");\r\n\r\n $content.css({\r\n width: \"100%\",\r\n \"max-width\": \"100%\",\r\n height: \"9999px\"\r\n });\r\n\r\n if (frameWidth === undefined) {\r\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n }\r\n\r\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n if (frameHeight === undefined) {\r\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n }\r\n\r\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n $slide.css(\"overflow\", \"auto\");\r\n }\r\n\r\n $content.removeClass(\"fancybox-is-hidden\");\r\n });\r\n } else {\r\n self.afterLoad(slide);\r\n }\r\n\r\n $iframe.attr(\"src\", slide.src);\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one(\"onReset\", function () {\r\n // This helps IE not to throw errors when closing\r\n try {\r\n $(this)\r\n .find(\"iframe\")\r\n .hide()\r\n .unbind()\r\n .attr(\"src\", \"//about:blank\");\r\n } catch (ignore) {}\r\n\r\n $(this)\r\n .off(\"refresh.fb\")\r\n .empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n });\r\n },\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent: function (slide, content) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n self.hideLoading(slide);\r\n\r\n if (slide.$content) {\r\n $.fancybox.stop(slide.$content);\r\n }\r\n\r\n slide.$slide.empty();\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n if (isQuery(content) && content.parent().length) {\r\n // Make sure content is not already moved to fancyBox\r\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n }\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $(\"
\")\r\n .hide()\r\n .insertAfter(content);\r\n\r\n // Make sure content is visible\r\n content.css(\"display\", \"inline-block\");\r\n } else if (!slide.hasError) {\r\n // If content is just a plain text, try to convert it to html\r\n if ($.type(content) === \"string\") {\r\n content = $(\"
\")\r\n .append($.trim(content))\r\n .contents();\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if (slide.opts.filter) {\r\n content = $(\"
\")\r\n .html(content)\r\n .find(slide.opts.filter);\r\n }\r\n }\r\n\r\n slide.$slide.one(\"onReset\", function () {\r\n // Pause all html5 video/audio\r\n $(this)\r\n .find(\"video,audio\")\r\n .trigger(\"pause\");\r\n\r\n // Put content back\r\n if (slide.$placeholder) {\r\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if (slide.$smallBtn) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if (!slide.hasError) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n }\r\n });\r\n\r\n $(content).appendTo(slide.$slide);\r\n\r\n if ($(content).is(\"video,audio\")) {\r\n $(content).addClass(\"fancybox-video\");\r\n\r\n $(content).wrap(\"
\");\r\n\r\n slide.contentType = \"video\";\r\n\r\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n }\r\n\r\n slide.$content = slide.$slide\r\n .children()\r\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n .first();\r\n\r\n slide.$content.siblings().hide();\r\n\r\n // Re-check if there is a valid content\r\n // (in some cases, ajax response can contain various elements or plain text)\r\n if (!slide.$content.length) {\r\n slide.$content = slide.$slide\r\n .wrapInner(\"
\")\r\n .children()\r\n .first();\r\n }\r\n\r\n slide.$content.addClass(\"fancybox-content\");\r\n\r\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n self.afterLoad(slide);\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError: function (slide) {\r\n slide.hasError = true;\r\n\r\n slide.$slide\r\n .trigger(\"onReset\")\r\n .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n .addClass(\"fancybox-slide--error\");\r\n\r\n slide.contentType = \"html\";\r\n\r\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n if (slide.pos === this.currPos) {\r\n this.isAnimating = false;\r\n }\r\n },\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && !slide.$spinner) {\r\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n .appendTo(slide.$slide)\r\n .hide()\r\n .fadeIn(\"fast\");\r\n }\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && slide.$spinner) {\r\n slide.$spinner.stop().remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n },\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad: function (slide) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger(\"afterLoad\", slide);\r\n\r\n self.hideLoading(slide);\r\n\r\n // Add small close button\r\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n }\r\n\r\n // Disable right click\r\n if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n slide.$content.on(\"contextmenu.fb\", function (e) {\r\n if (e.button == 2) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if (slide.type === \"image\") {\r\n $('
').appendTo(slide.$content);\r\n }\r\n }\r\n\r\n self.adjustCaption(slide);\r\n\r\n self.adjustLayout(slide);\r\n\r\n if (slide.pos === self.currPos) {\r\n self.updateCursor();\r\n }\r\n\r\n self.revealContent(slide);\r\n },\r\n\r\n // Prevent caption overlap,\r\n // fix css inconsistency across browsers\r\n // =====================================\r\n\r\n adjustCaption: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n caption = current.opts.caption,\r\n preventOverlap = current.opts.preventCaptionOverlap,\r\n $caption = self.$refs.caption,\r\n $clone,\r\n captionH = false;\r\n\r\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n if (preventOverlap && caption && caption.length) {\r\n if (current.pos !== self.currPos) {\r\n $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n $clone\r\n .children()\r\n .eq(0)\r\n .empty()\r\n .html(caption);\r\n\r\n captionH = $clone.outerHeight(true);\r\n\r\n $clone.empty().remove();\r\n } else if (self.$caption) {\r\n captionH = self.$caption.outerHeight(true);\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n }\r\n },\r\n\r\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n // ====================================================================================\r\n\r\n adjustLayout: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n scrollHeight,\r\n marginBottom,\r\n inlinePadding,\r\n actualPadding;\r\n\r\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n current.$content.css(\"margin-bottom\", \"\");\r\n\r\n // If we would always set margin-bottom for the content,\r\n // then it would potentially break vertical align\r\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n if (parseFloat(actualPadding) > 0) {\r\n scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n current.$slide.css(\"padding-bottom\", 0);\r\n\r\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n marginBottom = actualPadding;\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", inlinePadding);\r\n }\r\n }\r\n\r\n current.$content.css(\"margin-bottom\", marginBottom);\r\n }\r\n },\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent: function (slide) {\r\n var self = this,\r\n $slide = slide.$slide,\r\n end = false,\r\n start = false,\r\n isMoved = self.isMoved(slide),\r\n isRevealed = slide.isRevealed,\r\n effect,\r\n effectClassName,\r\n duration,\r\n opacity;\r\n\r\n slide.isRevealed = true;\r\n\r\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n if (isMoved || slide.pos !== self.currPos || !duration) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if (effect === \"zoom\") {\r\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n end = self.getFitPos(slide);\r\n } else {\r\n effect = \"fade\";\r\n }\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n if (effect === \"zoom\") {\r\n self.isAnimating = true;\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n forceRedraw(slide.$content);\r\n\r\n // Start animation\r\n $.fancybox.animate(slide.$content, end, duration, function () {\r\n self.isAnimating = false;\r\n\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide(slide);\r\n\r\n // Simply show content if no effect\r\n // ================================\r\n if (!effect) {\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n slide.$content.hide().fadeIn(\"fast\");\r\n }\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Prepare for CSS transiton\r\n // =========================\r\n $.fancybox.stop($slide);\r\n\r\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n // Force reflow\r\n forceRedraw($slide);\r\n\r\n if (slide.type !== \"image\") {\r\n slide.$content.hide().show(0);\r\n }\r\n\r\n $.fancybox.animate(\r\n $slide,\r\n \"fancybox-slide--current\",\r\n duration,\r\n function () {\r\n $slide.removeClass(effectClassName).css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n },\r\n true\r\n );\r\n },\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos: function (slide) {\r\n var rez = false,\r\n $thumb = slide.$thumb,\r\n thumbPos,\r\n btw,\r\n brw,\r\n bbw,\r\n blw;\r\n\r\n if (!$thumb || !inViewport($thumb[0])) {\r\n return false;\r\n }\r\n\r\n thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n rez = {\r\n top: thumbPos.top + btw,\r\n left: thumbPos.left + blw,\r\n width: thumbPos.width - brw - blw,\r\n height: thumbPos.height - btw - bbw,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n },\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete: function () {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n $el;\r\n\r\n if (self.isMoved() || !current.isLoaded) {\r\n return;\r\n }\r\n\r\n if (!current.isComplete) {\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger(\"onReset\");\r\n\r\n self.preload(\"inline\");\r\n\r\n // Trigger any CSS transiton inside the slide\r\n forceRedraw(current.$slide);\r\n\r\n current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n // Remove unnecessary slides\r\n $.each(self.slides, function (key, slide) {\r\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n slides[slide.pos] = slide;\r\n } else if (slide) {\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n }\r\n\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger(\"afterShow\");\r\n\r\n // Autoplay first html5 video/audio\r\n if (!!current.opts.video.autoStart) {\r\n current.$slide\r\n .find(\"video,audio\")\r\n .filter(\":visible:first\")\r\n .trigger(\"play\")\r\n .one(\"ended\", function () {\r\n if (Document.exitFullscreen) {\r\n Document.exitFullscreen();\r\n } else if (this.webkitExitFullscreen) {\r\n this.webkitExitFullscreen();\r\n }\r\n\r\n self.next();\r\n });\r\n }\r\n\r\n // Try to focus on the first focusable element\r\n if (current.opts.autoFocus && current.contentType === \"html\") {\r\n // Look for the first input with autofocus attribute\r\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n if ($el.length) {\r\n $el.trigger(\"focus\");\r\n } else {\r\n self.focus(null, true);\r\n }\r\n }\r\n\r\n // Avoid jumping\r\n current.$slide.scrollTop(0).scrollLeft(0);\r\n },\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload: function (type) {\r\n var self = this,\r\n prev,\r\n next;\r\n\r\n if (self.group.length < 2) {\r\n return;\r\n }\r\n\r\n next = self.slides[self.currPos + 1];\r\n prev = self.slides[self.currPos - 1];\r\n\r\n if (prev && prev.type === type) {\r\n self.loadSlide(prev);\r\n }\r\n\r\n if (next && next.type === type) {\r\n self.loadSlide(next);\r\n }\r\n },\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus: function (e, firstRun) {\r\n var self = this,\r\n focusableStr = [\r\n \"a[href]\",\r\n \"area[href]\",\r\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n \"select:not([disabled]):not([aria-hidden])\",\r\n \"textarea:not([disabled]):not([aria-hidden])\",\r\n \"button:not([disabled]):not([aria-hidden])\",\r\n \"iframe\",\r\n \"object\",\r\n \"embed\",\r\n \"video\",\r\n \"audio\",\r\n \"[contenteditable]\",\r\n '[tabindex]:not([tabindex^=\"-\"])'\r\n ].join(\",\"),\r\n focusableItems,\r\n focusedItemIndex;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (e || !self.current || !self.current.isComplete) {\r\n // Focus on any element inside fancybox\r\n focusableItems = self.$refs.container.find(\"*:visible\");\r\n } else {\r\n // Focus inside current slide\r\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n }\r\n\r\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n });\r\n\r\n if (focusableItems.length) {\r\n focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n if (e && e.shiftKey) {\r\n // Back tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n e.preventDefault();\r\n\r\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n }\r\n } else {\r\n // Outside or Forward tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n focusableItems.eq(0).trigger(\"focus\");\r\n }\r\n }\r\n } else {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate: function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $(\".fancybox-container\").each(function () {\r\n var instance = $(this).data(\"FancyBox\");\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger(\"onDeactivate\");\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if (self.current || self.isIdle) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger(\"onActivate\");\r\n\r\n self.addEvents();\r\n },\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close: function (e, d) {\r\n var self = this,\r\n current = self.current,\r\n effect,\r\n duration,\r\n $content,\r\n domRect,\r\n opacity,\r\n start,\r\n end;\r\n\r\n var done = function () {\r\n self.cleanUp(e);\r\n };\r\n\r\n if (self.isClosing) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if (self.trigger(\"beforeClose\", e) === false) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function () {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n $content = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n if (e !== true) {\r\n $.fancybox.stop(current.$slide);\r\n } else {\r\n effect = false;\r\n }\r\n\r\n // Remove other slides\r\n current.$slide\r\n .siblings()\r\n .trigger(\"onReset\")\r\n .remove();\r\n\r\n // Trigger animations\r\n if (duration) {\r\n self.$refs.container\r\n .removeClass(\"fancybox-is-open\")\r\n .addClass(\"fancybox-is-closing\")\r\n .css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Clean up\r\n self.hideLoading(current);\r\n\r\n self.hideControls(true);\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if (\r\n effect === \"zoom\" &&\r\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n ) {\r\n effect = \"fade\";\r\n }\r\n\r\n if (effect === \"zoom\") {\r\n $.fancybox.stop($content);\r\n\r\n domRect = $.fancybox.getTranslate($content);\r\n\r\n start = {\r\n top: domRect.top,\r\n left: domRect.left,\r\n scaleX: domRect.width / end.width,\r\n scaleY: domRect.height / end.height,\r\n width: end.width,\r\n height: end.height\r\n };\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n end.opacity = 0;\r\n }\r\n\r\n $.fancybox.setTranslate($content, start);\r\n\r\n forceRedraw($content);\r\n\r\n $.fancybox.animate($content, end, duration, done);\r\n\r\n return true;\r\n }\r\n\r\n if (effect && duration) {\r\n $.fancybox.animate(\r\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n \"fancybox-animated fancybox-fx-\" + effect,\r\n duration,\r\n done\r\n );\r\n } else {\r\n // If skip animation\r\n if (e === true) {\r\n setTimeout(done, duration);\r\n } else {\r\n done();\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp: function (e) {\r\n var self = this,\r\n instance,\r\n $focus = self.current.opts.$orig,\r\n x,\r\n y;\r\n\r\n self.current.$slide.trigger(\"onReset\");\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger(\"afterClose\", e);\r\n\r\n // Place back focus\r\n if (!!self.current.opts.backFocus) {\r\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n $focus = self.$trigger;\r\n }\r\n\r\n if ($focus && $focus.length) {\r\n x = window.scrollX;\r\n y = window.scrollY;\r\n\r\n $focus.trigger(\"focus\");\r\n\r\n $(\"html, body\")\r\n .scrollTop(y)\r\n .scrollLeft(x);\r\n }\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n instance.activate();\r\n } else {\r\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n $(\"#fancybox-style-noscroll\").remove();\r\n }\r\n },\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger: function (name, slide) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if (obj) {\r\n args.unshift(obj);\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift(self);\r\n\r\n if ($.isFunction(obj.opts[name])) {\r\n rez = obj.opts[name].apply(obj, args);\r\n }\r\n\r\n if (rez === false) {\r\n return rez;\r\n }\r\n\r\n if (name === \"afterClose\" || !self.$refs) {\r\n $D.trigger(name + \".fb\", args);\r\n } else {\r\n self.$refs.container.trigger(name + \".fb\", args);\r\n }\r\n },\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls: function () {\r\n var self = this,\r\n current = self.current,\r\n index = current.index,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption,\r\n caption = current.opts.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger(\"refresh\");\r\n\r\n // Set caption\r\n if (caption && caption.length) {\r\n self.$caption = $caption;\r\n\r\n $caption\r\n .children()\r\n .eq(0)\r\n .html(caption);\r\n } else {\r\n self.$caption = null;\r\n }\r\n\r\n if (!self.hasHiddenControls && !self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n if (current.type === \"image\") {\r\n // Re-enable buttons; update download button source\r\n $container\r\n .find(\"[data-fancybox-zoom]\")\r\n .show()\r\n .end()\r\n .find(\"[data-fancybox-download]\")\r\n .attr(\"href\", current.opts.image.src || current.src)\r\n .show();\r\n } else if (current.opts.toolbar) {\r\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n }\r\n\r\n // Make sure focus is not on disabled button/element\r\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls: function (andCaption) {\r\n var self = this,\r\n arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n arr.push(\"caption\");\r\n }\r\n\r\n this.$refs.container.removeClass(\r\n arr\r\n .map(function (i) {\r\n return \"fancybox-show-\" + i;\r\n })\r\n .join(\" \")\r\n );\r\n\r\n this.hasHiddenControls = true;\r\n },\r\n\r\n showControls: function () {\r\n var self = this,\r\n opts = self.current ? self.current.opts : self.opts,\r\n $container = self.$refs.container;\r\n\r\n self.hasHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n },\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls: function () {\r\n if (this.hasHiddenControls) {\r\n this.showControls();\r\n } else {\r\n this.hideControls();\r\n }\r\n }\r\n });\r\n\r\n $.fancybox = {\r\n version: \"3.5.7\",\r\n defaults: defaults,\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance: function (command) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if (instance instanceof FancyBox) {\r\n if ($.type(command) === \"string\") {\r\n instance[command].apply(instance, args);\r\n } else if ($.type(command) === \"function\") {\r\n command.apply(instance, args);\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open: function (items, opts, index) {\r\n return new FancyBox(items, opts, index);\r\n },\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close: function (all) {\r\n var instance = this.getInstance();\r\n\r\n if (instance) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n if (all === true) {\r\n this.close(all);\r\n }\r\n }\r\n },\r\n\r\n // Close all instances and unbind all events\r\n // =========================================\r\n\r\n destroy: function () {\r\n this.close(true);\r\n\r\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n },\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d: (function () {\r\n var div = document.createElement(\"div\");\r\n\r\n return (\r\n window.getComputedStyle &&\r\n window.getComputedStyle(div) &&\r\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n !(document.documentMode && document.documentMode < 11)\r\n );\r\n })(),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate: function ($el) {\r\n var domRect;\r\n\r\n if (!$el || !$el.length) {\r\n return false;\r\n }\r\n\r\n domRect = $el[0].getBoundingClientRect();\r\n\r\n return {\r\n top: domRect.top || 0,\r\n left: domRect.left || 0,\r\n width: domRect.width,\r\n height: domRect.height,\r\n opacity: parseFloat($el.css(\"opacity\"))\r\n };\r\n },\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate: function ($el, props) {\r\n var str = \"\",\r\n css = {};\r\n\r\n if (!$el || !props) {\r\n return;\r\n }\r\n\r\n if (props.left !== undefined || props.top !== undefined) {\r\n str =\r\n (props.left === undefined ? $el.position().left : props.left) +\r\n \"px, \" +\r\n (props.top === undefined ? $el.position().top : props.top) +\r\n \"px\";\r\n\r\n if (this.use3d) {\r\n str = \"translate3d(\" + str + \", 0px)\";\r\n } else {\r\n str = \"translate(\" + str + \")\";\r\n }\r\n }\r\n\r\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n } else if (props.scaleX !== undefined) {\r\n str += \" scaleX(\" + props.scaleX + \")\";\r\n }\r\n\r\n if (str.length) {\r\n css.transform = str;\r\n }\r\n\r\n if (props.opacity !== undefined) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if (props.width !== undefined) {\r\n css.width = props.width;\r\n }\r\n\r\n if (props.height !== undefined) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css(css);\r\n },\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n var self = this,\r\n from;\r\n\r\n if ($.isFunction(duration)) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n self.stop($el);\r\n\r\n from = self.getTranslate($el);\r\n\r\n $el.on(transitionEnd, function (e) {\r\n // Skip events from child elements and z-index change\r\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n return;\r\n }\r\n\r\n self.stop($el);\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", \"\");\r\n }\r\n\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n self.setTranslate($el, {\r\n top: to.top,\r\n left: to.left,\r\n width: from.width * to.scaleX,\r\n height: from.height * to.scaleY,\r\n scaleX: 1,\r\n scaleY: 1\r\n });\r\n }\r\n } else if (leaveAnimationName !== true) {\r\n $el.removeClass(to);\r\n }\r\n\r\n if ($.isFunction(callback)) {\r\n callback(e);\r\n }\r\n });\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Start animation by changing CSS properties or class name\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n delete to.width;\r\n delete to.height;\r\n\r\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n $el.parent().addClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n\r\n $.fancybox.setTranslate($el, to);\r\n } else {\r\n $el.addClass(to);\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\r\n \"timer\",\r\n setTimeout(function () {\r\n $el.trigger(transitionEnd);\r\n }, duration + 33)\r\n );\r\n },\r\n\r\n stop: function ($el, callCallback) {\r\n if ($el && $el.length) {\r\n clearTimeout($el.data(\"timer\"));\r\n\r\n if (callCallback) {\r\n $el.trigger(transitionEnd);\r\n }\r\n\r\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n $el.parent().removeClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n };\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run(e, opts) {\r\n var items = [],\r\n index = 0,\r\n $target,\r\n value,\r\n instance;\r\n\r\n // Avoid opening multiple times\r\n if (e && e.isDefaultPrevented()) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n opts = opts || {};\r\n\r\n if (e && e.data) {\r\n opts = mergeOpts(e.data.options, opts);\r\n }\r\n\r\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n return;\r\n }\r\n\r\n if (opts.selector) {\r\n items = $(opts.selector);\r\n } else {\r\n // Get all related items and find index for clicked one\r\n value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n if (value) {\r\n items = e.data ? e.data.items : [];\r\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n } else {\r\n items = [$target];\r\n }\r\n }\r\n\r\n index = $(items).index($target);\r\n\r\n // Sometimes current item can not be found\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n\r\n instance = $.fancybox.open(items, opts, index);\r\n\r\n // Save last active element\r\n instance.$trigger = $target;\r\n }\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if (selector) {\r\n // Use body element instead of document so it executes first\r\n $(\"body\")\r\n .off(\"click.fb-start\", selector)\r\n .on(\"click.fb-start\", selector, {\r\n options: options\r\n }, _run);\r\n } else {\r\n this.off(\"click.fb-start\").on(\r\n \"click.fb-start\", {\r\n items: this,\r\n options: options\r\n },\r\n _run\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // Self initializing plugin for all elements having `data-fancybox` attribute\r\n // ==========================================================================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n // Enable \"trigger elements\"\r\n // =========================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n .trigger(\"click.fb-start\", {\r\n $trigger: $(this)\r\n });\r\n });\r\n\r\n // Track focus event for better accessibility styling\r\n // ==================================================\r\n (function () {\r\n var buttonStr = \".fancybox-button\",\r\n focusStr = \"fancybox-focus\",\r\n $pressed = null;\r\n\r\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n switch (e.type) {\r\n case \"mousedown\":\r\n $pressed = $(this);\r\n break;\r\n case \"mouseup\":\r\n $pressed = null;\r\n break;\r\n case \"focusin\":\r\n $(buttonStr).removeClass(focusStr);\r\n\r\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n $(this).addClass(focusStr);\r\n }\r\n break;\r\n case \"focusout\":\r\n $(buttonStr).removeClass(focusStr);\r\n break;\r\n }\r\n });\r\n })();\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n \"use strict\";\r\n\r\n // Object containing properties for each media type\r\n var defaults = {\r\n youtube: {\r\n matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n params: {\r\n autoplay: 1,\r\n autohide: 1,\r\n fs: 1,\r\n rel: 0,\r\n hd: 1,\r\n wmode: \"transparent\",\r\n enablejsapi: 1,\r\n html5: 1\r\n },\r\n paramPlace: 8,\r\n type: \"iframe\",\r\n url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n },\r\n\r\n vimeo: {\r\n matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n params: {\r\n autoplay: 1,\r\n hd: 1,\r\n show_title: 1,\r\n show_byline: 1,\r\n show_portrait: 0,\r\n fullscreen: 1\r\n },\r\n paramPlace: 3,\r\n type: \"iframe\",\r\n url: \"//player.vimeo.com/video/$2\"\r\n },\r\n\r\n instagram: {\r\n matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n type: \"image\",\r\n url: \"//$1/p/$2/media/?size=l\"\r\n },\r\n\r\n // Examples:\r\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n gmap_place: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return (\r\n \"//maps.google.\" +\r\n rez[2] +\r\n \"/?ll=\" +\r\n (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n \"&output=\" +\r\n (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n );\r\n }\r\n },\r\n\r\n // Examples:\r\n // https://www.google.com/maps/search/Empire+State+Building/\r\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n gmap_search: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n }\r\n }\r\n };\r\n\r\n // Formats matching url to final form\r\n var format = function (url, rez, params) {\r\n if (!url) {\r\n return;\r\n }\r\n\r\n params = params || \"\";\r\n\r\n if ($.type(params) === \"object\") {\r\n params = $.param(params, true);\r\n }\r\n\r\n $.each(rez, function (key, value) {\r\n url = url.replace(\"$\" + key, value || \"\");\r\n });\r\n\r\n if (params.length) {\r\n url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n var url = item.src || \"\",\r\n type = false,\r\n media,\r\n thumb,\r\n rez,\r\n params,\r\n urlParams,\r\n paramObj,\r\n provider;\r\n\r\n media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n // Look for any matching media type\r\n $.each(media, function (providerName, providerOpts) {\r\n rez = url.match(providerOpts.matcher);\r\n\r\n if (!rez) {\r\n return;\r\n }\r\n\r\n type = providerOpts.type;\r\n provider = providerName;\r\n paramObj = {};\r\n\r\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n urlParams = rez[providerOpts.paramPlace];\r\n\r\n if (urlParams[0] == \"?\") {\r\n urlParams = urlParams.substring(1);\r\n }\r\n\r\n urlParams = urlParams.split(\"&\");\r\n\r\n for (var m = 0; m < urlParams.length; ++m) {\r\n var p = urlParams[m].split(\"=\", 2);\r\n\r\n if (p.length == 2) {\r\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n }\r\n }\r\n }\r\n\r\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n url =\r\n $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n thumb =\r\n $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n if (providerName === \"youtube\") {\r\n url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n });\r\n } else if (providerName === \"vimeo\") {\r\n url = url.replace(\"&%23\", \"#\");\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // If it is found, then change content type and update the url\r\n\r\n if (type) {\r\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n item.opts.thumb = thumb;\r\n }\r\n\r\n if (type === \"iframe\") {\r\n item.opts = $.extend(true, item.opts, {\r\n iframe: {\r\n preload: false,\r\n attr: {\r\n scrolling: \"no\"\r\n }\r\n }\r\n });\r\n }\r\n\r\n $.extend(item, {\r\n type: type,\r\n src: url,\r\n origSrc: item.src,\r\n contentSource: provider,\r\n contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n });\r\n } else if (url) {\r\n item.type = item.opts.defaultType;\r\n }\r\n });\r\n\r\n // Load YouTube/Video API on request to detect when video finished playing\r\n var VideoAPILoader = {\r\n youtube: {\r\n src: \"https://www.youtube.com/iframe_api\",\r\n class: \"YT\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n vimeo: {\r\n src: \"https://player.vimeo.com/api/player.js\",\r\n class: \"Vimeo\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n load: function (vendor) {\r\n var _this = this,\r\n script;\r\n\r\n if (this[vendor].loaded) {\r\n setTimeout(function () {\r\n _this.done(vendor);\r\n });\r\n return;\r\n }\r\n\r\n if (this[vendor].loading) {\r\n return;\r\n }\r\n\r\n this[vendor].loading = true;\r\n\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = this[vendor].src;\r\n\r\n if (vendor === \"youtube\") {\r\n window.onYouTubeIframeAPIReady = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n } else {\r\n script.onload = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n }\r\n\r\n document.body.appendChild(script);\r\n },\r\n done: function (vendor) {\r\n var instance, $el, player;\r\n\r\n if (vendor === \"youtube\") {\r\n delete window.onYouTubeIframeAPIReady;\r\n }\r\n\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n $el = instance.current.$content.find(\"iframe\");\r\n\r\n if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n player = new YT.Player($el.attr(\"id\"), {\r\n events: {\r\n onStateChange: function (e) {\r\n if (e.data == 0) {\r\n instance.next();\r\n }\r\n }\r\n }\r\n });\r\n } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n player = new Vimeo.Player($el);\r\n\r\n player.on(\"ended\", function () {\r\n instance.next();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).on({\r\n \"afterShow.fb\": function (e, instance, current) {\r\n if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n VideoAPILoader.load(current.contentSource);\r\n }\r\n }\r\n });\r\n})(jQuery);\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n var getPointerXY = function (e) {\r\n var result = [];\r\n\r\n e = e.originalEvent || e || window.e;\r\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n for (var key in e) {\r\n if (e[key].pageX) {\r\n result.push({\r\n x: e[key].pageX,\r\n y: e[key].pageY\r\n });\r\n } else if (e[key].clientX) {\r\n result.push({\r\n x: e[key].clientX,\r\n y: e[key].clientY\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var distance = function (point2, point1, what) {\r\n if (!point1 || !point2) {\r\n return 0;\r\n }\r\n\r\n if (what === \"x\") {\r\n return point2.x - point1.x;\r\n } else if (what === \"y\") {\r\n return point2.y - point1.y;\r\n }\r\n\r\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n };\r\n\r\n var isClickable = function ($el) {\r\n if (\r\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n $.isFunction($el.get(0).onclick) ||\r\n $el.data(\"selectable\")\r\n ) {\r\n return true;\r\n }\r\n\r\n // Check for attributes like data-fancybox-next or data-fancybox-close\r\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var hasScrollbars = function (el) {\r\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n return vertical || horizontal;\r\n };\r\n\r\n var isScrollable = function ($el) {\r\n var rez = false;\r\n\r\n while (true) {\r\n rez = hasScrollbars($el.get(0));\r\n\r\n if (rez) {\r\n break;\r\n }\r\n\r\n $el = $el.parent();\r\n\r\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n break;\r\n }\r\n }\r\n\r\n return rez;\r\n };\r\n\r\n var Guestures = function (instance) {\r\n var self = this;\r\n\r\n self.instance = instance;\r\n\r\n self.$bg = instance.$refs.bg;\r\n self.$stage = instance.$refs.stage;\r\n self.$container = instance.$refs.container;\r\n\r\n self.destroy();\r\n\r\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n };\r\n\r\n Guestures.prototype.destroy = function () {\r\n var self = this;\r\n\r\n self.$container.off(\".fb.touch\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n self.requestId = null;\r\n }\r\n\r\n if (self.tapped) {\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n }\r\n };\r\n\r\n Guestures.prototype.ontouchstart = function (e) {\r\n var self = this,\r\n $target = $(e.target),\r\n instance = self.instance,\r\n current = instance.current,\r\n $slide = current.$slide,\r\n $content = current.$content,\r\n isTouchDevice = e.type == \"touchstart\";\r\n\r\n // Do not respond to both (touch and mouse) events\r\n if (isTouchDevice) {\r\n self.$container.off(\"mousedown.fb.touch\");\r\n }\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Ignore taping on links, buttons, input elements\r\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n return;\r\n }\r\n // Ignore clicks on the scrollbar\r\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Ignore clicks while zooming or closing\r\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n if (!self.startPoints.length) {\r\n return;\r\n }\r\n\r\n // Allow other scripts to catch touch event if \"touch\" is set to false\r\n if (current.touch) {\r\n e.stopPropagation();\r\n }\r\n\r\n self.startEvent = e;\r\n\r\n self.canTap = true;\r\n self.$target = $target;\r\n self.$content = $content;\r\n self.opts = current.opts.touch;\r\n\r\n self.isPanning = false;\r\n self.isSwiping = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n self.canPan = instance.canPan();\r\n\r\n self.startTime = new Date().getTime();\r\n self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n self.canvasWidth = Math.round($slide[0].clientWidth);\r\n self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n self.contentLastPos = null;\r\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n top: 0,\r\n left: 0\r\n };\r\n self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n // Since position will be absolute, but we need to make it relative to the stage\r\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n self.sliderStartPos.top -= self.stagePos.top;\r\n self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n self.contentStartPos.top -= self.stagePos.top;\r\n self.contentStartPos.left -= self.stagePos.left;\r\n\r\n $(document)\r\n .off(\".fb.touch\")\r\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n if ($.fancybox.isMobile) {\r\n document.addEventListener(\"scroll\", self.onscroll, true);\r\n }\r\n\r\n // Skip if clicked outside the sliding area\r\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n if ($target.is(\".fancybox-image\")) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n return;\r\n }\r\n }\r\n\r\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n if (!($.fancybox.isMobile && self.isScrollable)) {\r\n e.preventDefault();\r\n }\r\n\r\n // One finger or mouse click - swipe or pan an image\r\n if (self.startPoints.length === 1 || current.hasError) {\r\n if (self.canPan) {\r\n $.fancybox.stop(self.$content);\r\n\r\n self.isPanning = true;\r\n } else {\r\n self.isSwiping = true;\r\n }\r\n\r\n self.$container.addClass(\"fancybox-is-grabbing\");\r\n }\r\n\r\n // Two fingers - zoom image\r\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n self.canTap = false;\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n\r\n self.isZooming = true;\r\n\r\n $.fancybox.stop(self.$content);\r\n\r\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n }\r\n };\r\n\r\n Guestures.prototype.onscroll = function (e) {\r\n var self = this;\r\n\r\n self.isScrolling = true;\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n };\r\n\r\n Guestures.prototype.ontouchmove = function (e) {\r\n var self = this;\r\n\r\n // Make sure user has not released over iframe or disabled element\r\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n self.ontouchend(e);\r\n return;\r\n }\r\n\r\n if (self.isScrolling) {\r\n self.canTap = false;\r\n return;\r\n }\r\n\r\n self.newPoints = getPointerXY(e);\r\n\r\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n return;\r\n }\r\n\r\n if (!(self.isSwiping && self.isSwiping === true)) {\r\n e.preventDefault();\r\n }\r\n\r\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n // Skip false ontouchmove events (Chrome)\r\n if (self.distance > 0) {\r\n if (self.isSwiping) {\r\n self.onSwipe(e);\r\n } else if (self.isPanning) {\r\n self.onPan();\r\n } else if (self.isZooming) {\r\n self.onZoom();\r\n }\r\n }\r\n };\r\n\r\n Guestures.prototype.onSwipe = function (e) {\r\n var self = this,\r\n instance = self.instance,\r\n swiping = self.isSwiping,\r\n left = self.sliderStartPos.left || 0,\r\n angle;\r\n\r\n // If direction is not yet determined\r\n if (swiping === true) {\r\n // We need at least 10px distance to correctly calculate an angle\r\n if (Math.abs(self.distance) > 10) {\r\n self.canTap = false;\r\n\r\n if (instance.group.length < 2 && self.opts.vertical) {\r\n self.isSwiping = \"y\";\r\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n self.isSwiping = \"x\";\r\n } else {\r\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n }\r\n\r\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n self.isScrolling = true;\r\n\r\n return;\r\n }\r\n\r\n instance.isDragging = self.isSwiping;\r\n\r\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n self.startPoints = self.newPoints;\r\n\r\n $.each(instance.slides, function (index, slide) {\r\n var slidePos, stagePos;\r\n\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slidePos = $.fancybox.getTranslate(slide.$slide);\r\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\",\r\n \"transition-duration\": \"\"\r\n })\r\n .removeClass(\"fancybox-animated\")\r\n .removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n if (slide.pos === instance.current.pos) {\r\n self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n }\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: slidePos.top - stagePos.top,\r\n left: slidePos.left - stagePos.left\r\n });\r\n });\r\n\r\n // Stop slideshow\r\n if (instance.SlideShow && instance.SlideShow.isActive) {\r\n instance.SlideShow.stop();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Sticky edges\r\n if (swiping == \"x\") {\r\n if (\r\n self.distanceX > 0 &&\r\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left + Math.pow(self.distanceX, 0.8);\r\n } else if (\r\n self.distanceX < 0 &&\r\n (self.instance.group.length < 2 ||\r\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left - Math.pow(-self.distanceX, 0.8);\r\n } else {\r\n left = left + self.distanceX;\r\n }\r\n }\r\n\r\n self.sliderLastPos = {\r\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n left: left\r\n };\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n if (self.sliderLastPos) {\r\n $.each(self.instance.slides, function (index, slide) {\r\n var pos = slide.pos - self.instance.currPos;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: self.sliderLastPos.top,\r\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n });\r\n });\r\n\r\n self.$container.addClass(\"fancybox-is-sliding\");\r\n }\r\n });\r\n };\r\n\r\n Guestures.prototype.onPan = function () {\r\n var self = this;\r\n\r\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n self.startPoints = self.newPoints;\r\n return;\r\n }\r\n\r\n self.canTap = false;\r\n\r\n self.contentLastPos = self.limitMovement();\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n // Make panning sticky to the edges\r\n Guestures.prototype.limitMovement = function () {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n var distanceX = self.distanceX;\r\n var distanceY = self.distanceY;\r\n\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n if (currentWidth > canvasWidth) {\r\n newOffsetX = currentOffsetX + distanceX;\r\n } else {\r\n newOffsetX = currentOffsetX;\r\n }\r\n\r\n newOffsetY = currentOffsetY + distanceY;\r\n\r\n // Slow down proportionally to traveled distance\r\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n // ->\r\n if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n }\r\n\r\n // <-\r\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n }\r\n\r\n // \\/\r\n if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n }\r\n\r\n // /\\\r\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n if (newWidth > canvasWidth) {\r\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n } else {\r\n // Center horizontally\r\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n }\r\n\r\n if (newHeight > canvasHeight) {\r\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n } else {\r\n // Center vertically\r\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.onZoom = function () {\r\n var self = this;\r\n\r\n // Calculate current distance between points to get pinch ratio and new width and height\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n var newWidth = Math.floor(currentWidth * pinchRatio);\r\n var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n // This is the translation due to pinch-zooming\r\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n // Point between the two touches\r\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n // And this is the translation due to translation of the centerpoint\r\n // between the two fingers\r\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n // The new offset is the old/current one plus the total translation\r\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n var newPos = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n scaleX: pinchRatio,\r\n scaleY: pinchRatio\r\n };\r\n\r\n self.canTap = false;\r\n\r\n self.newWidth = newWidth;\r\n self.newHeight = newHeight;\r\n\r\n self.contentLastPos = newPos;\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n Guestures.prototype.ontouchend = function (e) {\r\n var self = this;\r\n\r\n var swiping = self.isSwiping;\r\n var panning = self.isPanning;\r\n var zooming = self.isZooming;\r\n var scrolling = self.isScrolling;\r\n\r\n self.endPoints = getPointerXY(e);\r\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n\r\n self.instance.isDragging = false;\r\n\r\n if (self.canTap) {\r\n return self.onTap(e);\r\n }\r\n\r\n self.speed = 100;\r\n\r\n // Speed in px/ms\r\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n if (panning) {\r\n self.endPanning();\r\n } else if (zooming) {\r\n self.endZooming();\r\n } else {\r\n self.endSwiping(swiping, scrolling);\r\n }\r\n\r\n return;\r\n };\r\n\r\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n var self = this,\r\n ret = false,\r\n len = self.instance.group.length,\r\n distanceX = Math.abs(self.distanceX),\r\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n speedX = 300;\r\n\r\n self.sliderLastPos = null;\r\n\r\n // Close if swiped vertically / navigate if horizontally\r\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n // Continue vertical movement\r\n $.fancybox.animate(\r\n self.instance.current.$slide, {\r\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n opacity: 0\r\n },\r\n 200\r\n );\r\n ret = self.instance.close(true, 250);\r\n } else if (canAdvance && self.distanceX > 0) {\r\n ret = self.instance.previous(speedX);\r\n } else if (canAdvance && self.distanceX < 0) {\r\n ret = self.instance.next(speedX);\r\n }\r\n\r\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n self.instance.centerSlide(200);\r\n }\r\n\r\n self.$container.removeClass(\"fancybox-is-sliding\");\r\n };\r\n\r\n // Limit panning from edges\r\n // ========================\r\n Guestures.prototype.endPanning = function () {\r\n var self = this,\r\n newOffsetX,\r\n newOffsetY,\r\n newPos;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n if (self.opts.momentum === false || self.dMs > 350) {\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n } else {\r\n // Continue movement\r\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n }\r\n\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n newPos.width = self.contentStartPos.width;\r\n newPos.height = self.contentStartPos.height;\r\n\r\n $.fancybox.animate(self.$content, newPos, 366);\r\n };\r\n\r\n Guestures.prototype.endZooming = function () {\r\n var self = this;\r\n\r\n var current = self.instance.current;\r\n\r\n var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n var newWidth = self.newWidth;\r\n var newHeight = self.newHeight;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n\r\n reset = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n width: newWidth,\r\n height: newHeight,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n $.fancybox.setTranslate(self.$content, reset);\r\n\r\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n self.instance.scaleToFit(150);\r\n } else if (newWidth > current.width || newHeight > current.height) {\r\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n } else {\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n $.fancybox.animate(self.$content, newPos, 150);\r\n }\r\n };\r\n\r\n Guestures.prototype.onTap = function (e) {\r\n var self = this;\r\n var $target = $(e.target);\r\n\r\n var instance = self.instance;\r\n var current = instance.current;\r\n\r\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n var where;\r\n\r\n var process = function (prefix) {\r\n var action = current.opts[prefix];\r\n\r\n if ($.isFunction(action)) {\r\n action = action.apply(instance, [current, e]);\r\n }\r\n\r\n if (!action) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case \"close\":\r\n instance.close(self.startEvent);\r\n\r\n break;\r\n\r\n case \"toggleControls\":\r\n instance.toggleControls();\r\n\r\n break;\r\n\r\n case \"next\":\r\n instance.next();\r\n\r\n break;\r\n\r\n case \"nextOrClose\":\r\n if (instance.group.length > 1) {\r\n instance.next();\r\n } else {\r\n instance.close(self.startEvent);\r\n }\r\n\r\n break;\r\n\r\n case \"zoom\":\r\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n if (instance.canPan()) {\r\n instance.scaleToFit();\r\n } else if (instance.isScaledDown()) {\r\n instance.scaleToActual(tapX, tapY);\r\n } else if (instance.group.length < 2) {\r\n instance.close(self.startEvent);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Skip if clicked on the scrollbar\r\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Check where is clicked\r\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n where = \"Outside\";\r\n } else if ($target.is(\".fancybox-slide\")) {\r\n where = \"Slide\";\r\n } else if (\r\n instance.current.$content &&\r\n instance.current.$content\r\n .find($target)\r\n .addBack()\r\n .filter($target).length\r\n ) {\r\n where = \"Content\";\r\n } else {\r\n return;\r\n }\r\n\r\n // Check if this is a double tap\r\n if (self.tapped) {\r\n // Stop previously created single tap\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n\r\n // Skip if distance between taps is too big\r\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n return this;\r\n }\r\n\r\n // OK, now we assume that this is a double-tap\r\n process(\"dblclick\" + where);\r\n } else {\r\n // Single tap will be processed if user has not clicked second time within 300ms\r\n // or there is no need to wait for double-tap\r\n self.tapX = tapX;\r\n self.tapY = tapY;\r\n\r\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n self.tapped = setTimeout(function () {\r\n self.tapped = null;\r\n\r\n if (!instance.isAnimating) {\r\n process(\"click\" + where);\r\n }\r\n }, 500);\r\n } else {\r\n process(\"click\" + where);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n $(document)\r\n .on(\"onActivate.fb\", function (e, instance) {\r\n if (instance && !instance.Guestures) {\r\n instance.Guestures = new Guestures(instance);\r\n }\r\n })\r\n .on(\"beforeClose.fb\", function (e, instance) {\r\n if (instance && instance.Guestures) {\r\n instance.Guestures.destroy();\r\n }\r\n });\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n slideShow: '\"\r\n },\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000,\r\n progress: true\r\n }\r\n });\r\n\r\n var SlideShow = function (instance) {\r\n this.instance = instance;\r\n this.init();\r\n };\r\n\r\n $.extend(SlideShow.prototype, {\r\n timer: null,\r\n isActive: false,\r\n $button: null,\r\n\r\n init: function () {\r\n var self = this,\r\n instance = self.instance,\r\n opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n if (instance.group.length < 2 || !opts) {\r\n self.$button.hide();\r\n } else if (opts.progress) {\r\n self.$progress = $('
').appendTo(instance.$refs.inner);\r\n }\r\n },\r\n\r\n set: function (force) {\r\n var self = this,\r\n instance = self.instance,\r\n current = instance.current;\r\n\r\n // Check if reached last element\r\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n if (self.isActive && current.contentType !== \"video\") {\r\n if (self.$progress) {\r\n $.fancybox.animate(self.$progress.show(), {\r\n scaleX: 1\r\n }, current.opts.slideShow.speed);\r\n }\r\n\r\n self.timer = setTimeout(function () {\r\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n instance.jumpTo(0);\r\n } else {\r\n instance.next();\r\n }\r\n }, current.opts.slideShow.speed);\r\n }\r\n } else {\r\n self.stop();\r\n instance.idleSecondsCounter = 0;\r\n instance.showControls();\r\n }\r\n },\r\n\r\n clear: function () {\r\n var self = this;\r\n\r\n clearTimeout(self.timer);\r\n\r\n self.timer = null;\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n start: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n if (current) {\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n .removeClass(\"fancybox-button--play\")\r\n .addClass(\"fancybox-button--pause\");\r\n\r\n self.isActive = true;\r\n\r\n if (current.isComplete) {\r\n self.set(true);\r\n }\r\n\r\n self.instance.trigger(\"onSlideShowChange\", true);\r\n }\r\n },\r\n\r\n stop: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n self.clear();\r\n\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n .removeClass(\"fancybox-button--pause\")\r\n .addClass(\"fancybox-button--play\");\r\n\r\n self.isActive = false;\r\n\r\n self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n toggle: function () {\r\n var self = this;\r\n\r\n if (self.isActive) {\r\n self.stop();\r\n } else {\r\n self.start();\r\n }\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n if (instance && !instance.SlideShow) {\r\n instance.SlideShow = new SlideShow(instance);\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (firstRun) {\r\n if (SlideShow && current.opts.slideShow.autoStart) {\r\n SlideShow.start();\r\n }\r\n } else if (SlideShow && SlideShow.isActive) {\r\n SlideShow.clear();\r\n }\r\n },\r\n\r\n \"afterShow.fb\": function (e, instance, current) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n SlideShow.set();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n // \"P\" or Spacebar\r\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n keypress.preventDefault();\r\n\r\n SlideShow.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow) {\r\n SlideShow.stop();\r\n }\r\n }\r\n });\r\n\r\n // Page Visibility API to pause slideshow when window is not active\r\n $(document).on(\"visibilitychange\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n if (document.hidden) {\r\n SlideShow.clear();\r\n } else {\r\n SlideShow.set();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n // Collection of methods supported by user browser\r\n var fn = (function () {\r\n var fnMap = [\r\n [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n // new WebKit\r\n [\r\n \"webkitRequestFullscreen\",\r\n \"webkitExitFullscreen\",\r\n \"webkitFullscreenElement\",\r\n \"webkitFullscreenEnabled\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n // old WebKit (Safari 5.1)\r\n [\r\n \"webkitRequestFullScreen\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitCurrentFullScreenElement\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n [\r\n \"mozRequestFullScreen\",\r\n \"mozCancelFullScreen\",\r\n \"mozFullScreenElement\",\r\n \"mozFullScreenEnabled\",\r\n \"mozfullscreenchange\",\r\n \"mozfullscreenerror\"\r\n ],\r\n [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n ];\r\n\r\n var ret = {};\r\n\r\n for (var i = 0; i < fnMap.length; i++) {\r\n var val = fnMap[i];\r\n\r\n if (val && val[1] in document) {\r\n for (var j = 0; j < val.length; j++) {\r\n ret[fnMap[0][j]] = val[j];\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n if (fn) {\r\n var FullScreen = {\r\n request: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n },\r\n exit: function () {\r\n document[fn.exitFullscreen]();\r\n },\r\n toggle: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n if (this.isFullscreen()) {\r\n this.exit();\r\n } else {\r\n this.request(elem);\r\n }\r\n },\r\n isFullscreen: function () {\r\n return Boolean(document[fn.fullscreenElement]);\r\n },\r\n enabled: function () {\r\n return Boolean(document[fn.fullscreenEnabled]);\r\n }\r\n };\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n fullScreen: '\"\r\n },\r\n fullScreen: {\r\n autoStart: false\r\n }\r\n });\r\n\r\n $(document).on(fn.fullscreenchange, function () {\r\n var isFullscreen = FullScreen.isFullscreen(),\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n // If image is zooming, then force to stop and reposition properly\r\n if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n instance.isAnimating = false;\r\n\r\n instance.update(true, true, 0);\r\n\r\n if (!instance.isComplete) {\r\n instance.complete();\r\n }\r\n }\r\n\r\n instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n instance.$refs.toolbar\r\n .find(\"[data-fancybox-fullscreen]\")\r\n .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n }\r\n });\r\n }\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var $container;\r\n\r\n if (!fn) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n return;\r\n }\r\n\r\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n $container = instance.$refs.container;\r\n\r\n $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n FullScreen.toggle();\r\n });\r\n\r\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n FullScreen.request();\r\n }\r\n\r\n // Expose API\r\n instance.FullScreen = FullScreen;\r\n } else if (instance) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n // \"F\"\r\n if (instance && instance.FullScreen && keycode === 70) {\r\n keypress.preventDefault();\r\n\r\n instance.FullScreen.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n FullScreen.exit();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var CLASS = \"fancybox-thumbs\",\r\n CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n // Make sure there are default values\r\n $.fancybox.defaults = $.extend(\r\n true, {\r\n btnTpl: {\r\n thumbs: '\"\r\n },\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n }\r\n },\r\n $.fancybox.defaults\r\n );\r\n\r\n var FancyThumbs = function (instance) {\r\n this.init(instance);\r\n };\r\n\r\n $.extend(FancyThumbs.prototype, {\r\n $button: null,\r\n $grid: null,\r\n $list: null,\r\n isVisible: false,\r\n isActive: false,\r\n\r\n init: function (instance) {\r\n var self = this,\r\n group = instance.group,\r\n enabled = 0;\r\n\r\n self.instance = instance;\r\n self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n instance.Thumbs = self;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n // Enable thumbs if at least two group items have thumbnails\r\n for (var i = 0, len = group.length; i < len; i++) {\r\n if (group[i].thumb) {\r\n enabled++;\r\n }\r\n\r\n if (enabled > 1) {\r\n break;\r\n }\r\n }\r\n\r\n if (enabled > 1 && !!self.opts) {\r\n self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n self.isActive = true;\r\n } else {\r\n self.$button.hide();\r\n }\r\n },\r\n\r\n create: function () {\r\n var self = this,\r\n instance = self.instance,\r\n parentEl = self.opts.parentEl,\r\n list = [],\r\n src;\r\n\r\n if (!self.$grid) {\r\n // Create main element\r\n self.$grid = $('
').appendTo(\r\n instance.$refs.container\r\n .find(parentEl)\r\n .addBack()\r\n .filter(parentEl)\r\n );\r\n\r\n // Add \"click\" event that performs gallery navigation\r\n self.$grid.on(\"click\", \"a\", function () {\r\n instance.jumpTo($(this).attr(\"data-index\"));\r\n });\r\n }\r\n\r\n // Build the list\r\n if (!self.$list) {\r\n self.$list = $('
').appendTo(self.$grid);\r\n }\r\n\r\n $.each(instance.group, function (i, item) {\r\n src = item.thumb;\r\n\r\n if (!src && item.type === \"image\") {\r\n src = item.src;\r\n }\r\n\r\n list.push(\r\n '\"\r\n );\r\n });\r\n\r\n self.$list[0].innerHTML = list.join(\"\");\r\n\r\n if (self.opts.axis === \"x\") {\r\n // Set fixed width for list element to enable horizontal scrolling\r\n self.$list.width(\r\n parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n instance.group.length *\r\n self.$list\r\n .children()\r\n .eq(0)\r\n .outerWidth(true)\r\n );\r\n }\r\n },\r\n\r\n focus: function (duration) {\r\n var self = this,\r\n $list = self.$list,\r\n $grid = self.$grid,\r\n thumb,\r\n thumbPos;\r\n\r\n if (!self.instance.current) {\r\n return;\r\n }\r\n\r\n thumb = $list\r\n .children()\r\n .removeClass(CLASS_ACTIVE)\r\n .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n .addClass(CLASS_ACTIVE);\r\n\r\n thumbPos = thumb.position();\r\n\r\n // Check if need to scroll to make current thumb visible\r\n if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n $list.stop().animate({\r\n scrollTop: $list.scrollTop() + thumbPos.top\r\n },\r\n duration\r\n );\r\n } else if (\r\n self.opts.axis === \"x\" &&\r\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n ) {\r\n $list\r\n .parent()\r\n .stop()\r\n .animate({\r\n scrollLeft: thumbPos.left\r\n },\r\n duration\r\n );\r\n }\r\n },\r\n\r\n update: function () {\r\n var that = this;\r\n that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n if (that.isVisible) {\r\n if (!that.$grid) {\r\n that.create();\r\n }\r\n\r\n that.instance.trigger(\"onThumbsShow\");\r\n\r\n that.focus(0);\r\n } else if (that.$grid) {\r\n that.instance.trigger(\"onThumbsHide\");\r\n }\r\n\r\n // Update content position\r\n that.instance.update();\r\n },\r\n\r\n hide: function () {\r\n this.isVisible = false;\r\n this.update();\r\n },\r\n\r\n show: function () {\r\n this.isVisible = true;\r\n this.update();\r\n },\r\n\r\n toggle: function () {\r\n this.isVisible = !this.isVisible;\r\n this.update();\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var Thumbs;\r\n\r\n if (instance && !instance.Thumbs) {\r\n Thumbs = new FancyThumbs(instance);\r\n\r\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n Thumbs.show();\r\n }\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible) {\r\n Thumbs.focus(firstRun ? 0 : 250);\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n // \"G\"\r\n if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n keypress.preventDefault();\r\n\r\n Thumbs.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n Thumbs.$grid.hide();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n share: '\"\r\n },\r\n share: {\r\n url: function (instance, item) {\r\n return (\r\n (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n );\r\n },\r\n tpl: '
' +\r\n \"

{{SHARE}}

\" +\r\n \"

\" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","/*!\r\n * jScrollPane - v2.2.1 - 2018-09-27\r\n * http://jscrollpane.kelvinluck.com/\r\n *\r\n * Copyright (c) 2014 Kelvin Luck\r\n * Copyright (c) 2017-2018 Tuukka Pasanen\r\n * Dual licensed under the MIT or GPL licenses.\r\n */\r\n\r\n// Script: jScrollPane - cross browser customisable scrollbars\r\n//\r\n// *Version: 2.2.1, Last updated: 2018-09-27*\r\n//\r\n// Project Home - http://jscrollpane.kelvinluck.com/\r\n// GitHub - http://github.com/vitch/jScrollPane\r\n// CND - https://cdnjs.com/libraries/jScrollPane\r\n// Source - https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.1/script/jquery.jscrollpane.min.js\r\n// (Minified) - https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.1/script/jquery.jscrollpane.js\r\n// CSS - https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.1/style/jquery.jscrollpane.css\r\n// (Minified) - https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.1/style/jquery.jscrollpane.min.css\r\n//\r\n// About: License\r\n//\r\n// Copyright (c) 2017 Kelvin Luck\r\n// Copyright (c) 2017-2018 Tuukka Pasanen\r\n// Dual licensed under the MIT or GPL Version 2 licenses.\r\n// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt\r\n// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt\r\n//\r\n// About: Examples\r\n//\r\n// All examples and demos are available through the jScrollPane example site at:\r\n// http://jscrollpane.kelvinluck.com/\r\n//\r\n// About: Support and Testing\r\n//\r\n// This plugin is tested on the browsers below and has been found to work reliably on them. If you run\r\n// into a problem on one of the supported browsers then please visit the support section on the jScrollPane\r\n// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also\r\n// welcome to fork the project on GitHub if you can contribute a fix for a given issue.\r\n//\r\n// jQuery Versions - jQuery 3.x. Although script should work from jQuery 1.1 and up but no promises are made.\r\n// Browsers Tested - See jQuery browser support page: https://jquery.com/browser-support/. Only modern\r\n// browsers are supported.\r\n//\r\n// About: Release History\r\n//\r\n// 2.2.1 - (2018-09-27) No changed applied to release so same as RC1/2\r\n// 2.2.1-rc.2 - (2018-06-14) Sucked NPM release have to make new Release.. this is 2018!\r\n// 2.2.1-rc.1 - (2018-06-14) Fixed CSSLint warnings which can lead CSS problems in\r\n// production! Please report a issue if this breaks something!\r\n// * Merged:\r\n// - #360 Register to globally available version of jQuery\r\n// 2.2.0 - (2018-05-16) No changes to RC1\r\n// 2.2.0-rc.1 - (2018-04-28) Merged resize sensor to find out size changes of screen and\r\n// again little bit tuned this to support more npm goodies.\r\n// * Merged:\r\n// - #361 Event based reinitialising - Resize Sensor\r\n// - #359 Use npm scripts and local dev dependencies to build the project\r\n// 2.1.3 - (2018-04-04) No changes from Release Candidate 2 so making release\r\n// 2.1.3-rc.2 - (2018-03-13) Now using 'script/jquery.jscrollpane.min.js' main\r\n// in package.json rather than 'Gruntfile.js'\r\n// 2.1.3-rc.1 - (2018-03-05) Moving Gruntfile.js to root and example HTML\r\n// to subdirectory examples\r\n// 2.1.2 - (2018-02-16) Just on console.log remove and Release!\r\n// This version should play nicely with NPM\r\n// 2.1.2-rc.2 - (2018-02-03) Update package.json main-tag\r\n// 2.1.2-rc.1 - (2018-01-18) Release on NPM.\r\n// 2.1.1 - (2018-01-12) As everyone stays silent then we just release! No changes from RC.1\r\n// 2.1.1-rc.1 - (2017-12-23) Started to slowly merge stuff (HO HO HO Merry Christmas!)\r\n// * Merged\r\n// - #349 - ScrollPane reinitialization should adapt to changed container size\r\n// - #335 Set drag bar width/height with .css instead of .width/.height\r\n// - #297 added two settings: always show HScroll and VScroll\r\n// * Bugs\r\n// - #8 Make it possible to tell a scrollbar to be \"always on\"\r\n// 2.1.0 - (2017-12-16) Update jQuery to version 3.x\r\n\r\n(function (factory) {\r\n if ( typeof define === 'function' && define.amd ) {\r\n // AMD. Register as an anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node/CommonJS style for Browserify\r\n module.exports = factory(jQuery || require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function($){\r\n\r\n\t$.fn.jScrollPane = function(settings)\r\n\t{\r\n\t\t// JScrollPane \"class\" - public methods are available through $('selector').data('jsp')\r\n\t\tfunction JScrollPane(elem, s)\r\n\t\t{\r\n\t\t\tvar settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight,\r\n\t\t\t\tpercentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY,\r\n\t\t\t\tverticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition,\r\n\t\t\t\tverticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown,\r\n\t\t\t\thorizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight,\r\n\t\t\t\treinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousContentWidth,\r\n\t\t\t\twasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false,\r\n\t\t\t\toriginalElement = elem.clone(false, false).empty(), resizeEventsAdded = false,\r\n\t\t\t\tmwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp';\r\n\r\n\t\t\tvar reinitialiseFn = function() {\r\n\t\t\t\t// if size has changed then reinitialise\r\n\t\t\t\tif (settings.resizeSensorDelay > 0) {\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tinitialise(settings);\r\n\t\t\t\t\t}, settings.resizeSensorDelay);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tinitialise(settings);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tif (elem.css('box-sizing') === 'border-box') {\r\n\t\t\t\toriginalPadding = 0;\r\n\t\t\t\toriginalPaddingTotalWidth = 0;\r\n\t\t\t} else {\r\n\t\t\t\toriginalPadding = elem.css('paddingTop') + ' ' +\r\n\t\t\t\t\t\t\t\t\telem.css('paddingRight') + ' ' +\r\n\t\t\t\t\t\t\t\t\telem.css('paddingBottom') + ' ' +\r\n\t\t\t\t\t\t\t\t\telem.css('paddingLeft');\r\n\t\t\t\toriginalPaddingTotalWidth = (parseInt(elem.css('paddingLeft'), 10) || 0) +\r\n\t\t\t\t\t\t\t\t\t\t\t(parseInt(elem.css('paddingRight'), 10) || 0);\r\n\t\t\t}\r\n\r\n\t\t\tfunction initialise(s)\r\n\t\t\t{\r\n\r\n\t\t\t\tvar /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY,\r\n\t\t\t\t\t\thasContainingSpaceChanged, originalScrollTop, originalScrollLeft,\r\n\t\t\t\t\t\tnewPaneWidth, newPaneHeight, maintainAtBottom = false, maintainAtRight = false;\r\n\r\n\t\t\t\tsettings = s;\r\n\r\n\t\t\t\tif (pane === undefined) {\r\n\t\t\t\t\toriginalScrollTop = elem.scrollTop();\r\n\t\t\t\t\toriginalScrollLeft = elem.scrollLeft();\r\n\r\n\t\t\t\t\telem.css(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\toverflow: 'hidden',\r\n\t\t\t\t\t\t\tpadding: 0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should\r\n\t\t\t\t\t// come back to it later and check once it is unhidden...\r\n\t\t\t\t\tpaneWidth = elem.innerWidth() + originalPaddingTotalWidth;\r\n\t\t\t\t\tpaneHeight = elem.innerHeight();\r\n\r\n\t\t\t\t\telem.width(paneWidth);\r\n\r\n\t\t\t\t\tpane = $('
').css('padding', originalPadding).append(elem.children());\r\n\t\t\t\t\tcontainer = $('
')\r\n\t\t\t\t\t\t.css({\r\n\t\t\t\t\t\t\t'width': paneWidth + 'px',\r\n\t\t\t\t\t\t\t'height': paneHeight + 'px'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t).append(pane).appendTo(elem);\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t// Move any margins from the first and last children up to the container so they can still\r\n\t\t\t\t\t// collapse with neighbouring elements as they would before jScrollPane\r\n\t\t\t\t\tfirstChild = pane.find(':first-child');\r\n\t\t\t\t\tlastChild = pane.find(':last-child');\r\n\t\t\t\t\telem.css(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t'margin-top': firstChild.css('margin-top'),\r\n\t\t\t\t\t\t\t'margin-bottom': lastChild.css('margin-bottom')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\tfirstChild.css('margin-top', 0);\r\n\t\t\t\t\tlastChild.css('margin-bottom', 0);\r\n\t\t\t\t\t*/\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem.css('width', '');\r\n\r\n\t\t\t\t\t// To measure the required dimensions accurately, temporarily override the CSS positioning\r\n\t\t\t\t\t// of the container and pane.\r\n\t\t\t\t\tcontainer.css({width: 'auto', height: 'auto'});\r\n\t\t\t\t\tpane.css('position', 'static');\r\n\r\n\t\t\t\t\tnewPaneWidth = elem.innerWidth() + originalPaddingTotalWidth;\r\n\t\t\t\t\tnewPaneHeight = elem.innerHeight();\r\n\t\t\t\t\tpane.css('position', 'absolute');\r\n\r\n\t\t\t\t\tmaintainAtBottom = settings.stickToBottom && isCloseToBottom();\r\n\t\t\t\t\tmaintainAtRight = settings.stickToRight && isCloseToRight();\r\n\r\n\t\t\t\t\thasContainingSpaceChanged = newPaneWidth !== paneWidth || newPaneHeight !== paneHeight;\r\n\r\n\t\t\t\t\tpaneWidth = newPaneWidth;\r\n\t\t\t\t\tpaneHeight = newPaneHeight;\r\n\t\t\t\t\tcontainer.css({width: paneWidth, height: paneHeight});\r\n\r\n\t\t\t\t\t// If nothing changed since last check...\r\n\t\t\t\t\tif (!hasContainingSpaceChanged && previousContentWidth == contentWidth && pane.outerHeight() == contentHeight) {\r\n\t\t\t\t\t\telem.width(paneWidth);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpreviousContentWidth = contentWidth;\r\n\r\n\t\t\t\t\tpane.css('width', '');\r\n\t\t\t\t\telem.width(paneWidth);\r\n\r\n\t\t\t\t\tcontainer.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpane.css('overflow', 'auto');\r\n\t\t\t\tif (s.contentWidth) {\r\n\t\t\t\t\tcontentWidth = s.contentWidth;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontentWidth = pane[0].scrollWidth;\r\n\t\t\t\t}\r\n\t\t\t\tcontentHeight = pane[0].scrollHeight;\r\n\t\t\t\tpane.css('overflow', '');\r\n\r\n\t\t\t\tpercentInViewH = contentWidth / paneWidth;\r\n\t\t\t\tpercentInViewV = contentHeight / paneHeight;\r\n\t\t\t\tisScrollableV = percentInViewV > 1 || settings.alwaysShowVScroll;\r\n\t\t\t\tisScrollableH = percentInViewH > 1 || settings.alwaysShowHScroll;\r\n\r\n\t\t\t\tif (!(isScrollableH || isScrollableV)) {\r\n\t\t\t\t\telem.removeClass('jspScrollable');\r\n\t\t\t\t\tpane.css({\r\n top: 0,\r\n left: 0,\r\n\t\t\t\t\t\twidth: container.width() - originalPaddingTotalWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tremoveMousewheel();\r\n\t\t\t\t\tremoveFocusHandler();\r\n\t\t\t\t\tremoveKeyboardNav();\r\n\t\t\t\t\tremoveClickOnTrack();\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem.addClass('jspScrollable');\r\n\r\n\t\t\t\t\tisMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition);\r\n\t\t\t\t\tif (isMaintainingPositon) {\r\n\t\t\t\t\t\tlastContentX = contentPositionX();\r\n\t\t\t\t\t\tlastContentY = contentPositionY();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinitialiseVerticalScroll();\r\n\t\t\t\t\tinitialiseHorizontalScroll();\r\n\t\t\t\t\tresizeScrollbars();\r\n\r\n\t\t\t\t\tif (isMaintainingPositon) {\r\n\t\t\t\t\t\tscrollToX(maintainAtRight ? (contentWidth - paneWidth ) : lastContentX, false);\r\n\t\t\t\t\t\tscrollToY(maintainAtBottom ? (contentHeight - paneHeight) : lastContentY, false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinitFocusHandler();\r\n\t\t\t\t\tinitMousewheel();\r\n\t\t\t\t\tinitTouch();\r\n\r\n\t\t\t\t\tif (settings.enableKeyboardNavigation) {\r\n\t\t\t\t\t\tinitKeyboardNav();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (settings.clickOnTrack) {\r\n\t\t\t\t\t\tinitClickOnTrack();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobserveHash();\r\n\t\t\t\t\tif (settings.hijackInternalLinks) {\r\n\t\t\t\t\t\thijackInternalLinks();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!settings.resizeSensor && settings.autoReinitialise && !reinitialiseInterval) {\r\n\t\t\t\t\treinitialiseInterval = setInterval(\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tinitialise(settings);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tsettings.autoReinitialiseDelay\r\n\t\t\t\t\t);\r\n\t\t\t\t} else if (!settings.resizeSensor && !settings.autoReinitialise && reinitialiseInterval) {\r\n\t\t\t\t\tclearInterval(reinitialiseInterval);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(settings.resizeSensor && !resizeEventsAdded) {\r\n\t\t\r\n\t\t\t\t\t// detect size change in content\r\n\t\t\t\t\tdetectSizeChanges(pane, reinitialiseFn);\r\n\t\t\t\r\n\t\t\t\t\t// detect size changes of scroll element\r\n\t\t\t\t\tdetectSizeChanges(elem, reinitialiseFn);\r\n\t\t\t\r\n\t\t\t\t\t// detect size changes of container\r\n\t\t\t\t\tdetectSizeChanges(elem.parent(), reinitialiseFn);\r\n\r\n\t\t\t\t\t// add a reinit on window resize also for safety\r\n\t\t\t\t\twindow.addEventListener('resize', reinitialiseFn);\r\n\t\t\t\r\n\t\t\t\t\tresizeEventsAdded = true;\r\n\t\t\t\t}\r\n\r\n if(originalScrollTop && elem.scrollTop(0)) {\r\n scrollToY(originalScrollTop, false);\r\n }\r\n\r\n\t\t\t\tif(originalScrollLeft && elem.scrollLeft(0)) {\r\n scrollToX(originalScrollLeft, false);\r\n }\r\n\r\n\t\t\t\telem.trigger('jsp-initialised', [isScrollableH || isScrollableV]);\r\n\t\t\t}\r\n\r\n\t\t\tfunction detectSizeChanges(element, callback) {\r\n \r\n\t\t\t\t// create resize event elements - based on resize sensor: https://github.com/flowkey/resize-sensor/\r\n\t\t\t\tvar resizeWidth, resizeHeight;\r\n\t\t\t\tvar resizeElement = document.createElement('div');\r\n\t\t\t\tvar resizeGrowElement = document.createElement('div');\r\n\t\t\t\tvar resizeGrowChildElement = document.createElement('div');\r\n\t\t\t\tvar resizeShrinkElement = document.createElement('div');\r\n\t\t\t\tvar resizeShrinkChildElement = document.createElement('div');\r\n\t\t\r\n\t\t\t\t// add necessary styling\r\n\t\t\t\tresizeElement.style.cssText = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;';\r\n\t\t\t\tresizeGrowElement.style.cssText = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;';\r\n\t\t\t\tresizeShrinkElement.style.cssText = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;';\r\n\t\t\r\n\t\t\t\tresizeGrowChildElement.style.cssText = 'position: absolute; left: 0; top: 0;';\r\n\t\t\t\tresizeShrinkChildElement.style.cssText = 'position: absolute; left: 0; top: 0; width: 200%; height: 200%;';\r\n\t\t\r\n\t\t\t\t// Create a function to programmatically update sizes\r\n\t\t\t\tvar updateSizes = function() {\r\n\t\t\r\n\t\t\t\t\tresizeGrowChildElement.style.width = resizeGrowElement.offsetWidth + 10 + 'px';\r\n\t\t\t\t\tresizeGrowChildElement.style.height = resizeGrowElement.offsetHeight + 10 + 'px';\r\n\t\t\r\n\t\t\t\t\tresizeGrowElement.scrollLeft = resizeGrowElement.scrollWidth;\r\n\t\t\t\t\tresizeGrowElement.scrollTop = resizeGrowElement.scrollHeight;\r\n\t\t\r\n\t\t\t\t\tresizeShrinkElement.scrollLeft = resizeShrinkElement.scrollWidth;\r\n\t\t\t\t\tresizeShrinkElement.scrollTop = resizeShrinkElement.scrollHeight;\r\n\t\t\r\n\t\t\t\t\tresizeWidth = element.width();\r\n\t\t\t\t\tresizeHeight = element.height();\r\n\t\t\t\t};\r\n\t\t\r\n\t\t\t\t// create functions to call when content grows\r\n\t\t\t\tvar onGrow = function() {\r\n\t\t\r\n\t\t\t\t\t// check to see if the content has change size\r\n\t\t\t\t\tif (element.width() > resizeWidth || element.height() > resizeHeight) {\r\n\t\t\t\r\n\t\t\t\t\t\t// if size has changed then reinitialise\r\n\t\t\t\t\t\tcallback.apply(this, []);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// after reinitialising update sizes\r\n\t\t\t\t\tupdateSizes();\r\n\t\t\t\t};\r\n\t\t\r\n\t\t\t\t// create functions to call when content shrinks\r\n\t\t\t\tvar onShrink = function() {\r\n\t\t\r\n\t\t\t\t\t// check to see if the content has change size\r\n\t\t\t\t\tif (element.width() < resizeWidth || element.height() < resizeHeight) {\r\n\t\t\t\r\n\t\t\t\t\t\t// if size has changed then reinitialise\r\n\t\t\t\t\t\tcallback.apply(this, []);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// after reinitialising update sizes\r\n\t\t\t\t\tupdateSizes();\r\n\t\t\t\t};\r\n\t\t\r\n\t\t\t\t// bind to scroll events\r\n\t\t\t\tresizeGrowElement.addEventListener('scroll', onGrow.bind(this));\r\n\t\t\t\tresizeShrinkElement.addEventListener('scroll', onShrink.bind(this));\r\n\t\t\r\n\t\t\t\t// nest elements before adding to pane\r\n\t\t\t\tresizeGrowElement.appendChild(resizeGrowChildElement);\r\n\t\t\t\tresizeShrinkElement.appendChild(resizeShrinkChildElement);\r\n\t\t\r\n\t\t\t\tresizeElement.appendChild(resizeGrowElement);\r\n\t\t\t\tresizeElement.appendChild(resizeShrinkElement);\r\n\t\t\r\n\t\t\t\telement.append(resizeElement);\r\n\r\n\t\t\t\t// ensure parent element is not statically positioned\r\n\t\t\t\tif(window.getComputedStyle(element[0], null).getPropertyValue('position') === 'static') {\r\n\t\t\t\t\telement[0].style.position = 'relative';\r\n\t\t\t\t}\r\n\t\t\r\n\t\t\t\t// update sizes initially\r\n\t\t\t\tupdateSizes();\r\n\t\t\t}\r\n\r\n\t\t\tfunction initialiseVerticalScroll()\r\n\t\t\t{\r\n\t\t\t\tif (isScrollableV) {\r\n\r\n\t\t\t\t\tcontainer.append(\r\n\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t$('
'),\r\n\t\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t\t\t$('
'),\r\n\t\t\t\t\t\t\t\t\t$('
')\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t$('
')\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tverticalBar = container.find('>.jspVerticalBar');\r\n\t\t\t\t\tverticalTrack = verticalBar.find('>.jspTrack');\r\n\t\t\t\t\tverticalDrag = verticalTrack.find('>.jspDrag');\r\n\r\n\t\t\t\t\tif (settings.showArrows) {\r\n\t\t\t\t\t\tarrowUp = $('').on(\r\n\t\t\t\t\t\t\t'mousedown.jsp', getArrowScroll(0, -1)\r\n\t\t\t\t\t\t).on('click.jsp', nil);\r\n\t\t\t\t\t\tarrowDown = $('').on(\r\n\t\t\t\t\t\t\t'mousedown.jsp', getArrowScroll(0, 1)\r\n\t\t\t\t\t\t).on('click.jsp', nil);\r\n\t\t\t\t\t\tif (settings.arrowScrollOnHover) {\r\n\t\t\t\t\t\t\tarrowUp.on('mouseover.jsp', getArrowScroll(0, -1, arrowUp));\r\n\t\t\t\t\t\t\tarrowDown.on('mouseover.jsp', getArrowScroll(0, 1, arrowDown));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tappendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tverticalTrackHeight = paneHeight;\r\n\t\t\t\t\tcontainer.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each(\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tverticalTrackHeight -= $(this).outerHeight();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\r\n\t\t\t\t\tverticalDrag.on(\r\n \"mouseenter\",\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tverticalDrag.addClass('jspHover');\r\n\t\t\t\t\t\t}\r\n ).on(\r\n \"mouseleave\",\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tverticalDrag.removeClass('jspHover');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t).on(\r\n\t\t\t\t\t\t'mousedown.jsp',\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Stop IE from allowing text selection\r\n\t\t\t\t\t\t\t$('html').on('dragstart.jsp selectstart.jsp', nil);\r\n\r\n\t\t\t\t\t\t\tverticalDrag.addClass('jspActive');\r\n\r\n\t\t\t\t\t\t\tvar startY = e.pageY - verticalDrag.position().top;\r\n\r\n\t\t\t\t\t\t\t$('html').on(\r\n\t\t\t\t\t\t\t\t'mousemove.jsp',\r\n\t\t\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tpositionDragY(e.pageY - startY, false);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t).on('mouseup.jsp mouseleave.jsp', cancelDrag);\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsizeVerticalScrollbar();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction sizeVerticalScrollbar()\r\n\t\t\t{\r\n\t\t\t\tverticalTrack.height(verticalTrackHeight + 'px');\r\n\t\t\t\tverticalDragPosition = 0;\r\n\t\t\t\tscrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth();\r\n\r\n\t\t\t\t// Make the pane thinner to allow for the vertical scrollbar\r\n\t\t\t\tpane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth);\r\n\r\n\t\t\t\t// Add margin to the left of the pane if scrollbars are on that side (to position\r\n\t\t\t\t// the scrollbar on the left or right set it's left or right property in CSS)\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (verticalBar.position().left === 0) {\r\n\t\t\t\t\t\tpane.css('margin-left', scrollbarWidth + 'px');\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction initialiseHorizontalScroll()\r\n\t\t\t{\r\n\t\t\t\tif (isScrollableH) {\r\n\r\n\t\t\t\t\tcontainer.append(\r\n\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t$('
'),\r\n\t\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t\t$('
').append(\r\n\t\t\t\t\t\t\t\t\t$('
'),\r\n\t\t\t\t\t\t\t\t\t$('
')\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t$('
')\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\thorizontalBar = container.find('>.jspHorizontalBar');\r\n\t\t\t\t\thorizontalTrack = horizontalBar.find('>.jspTrack');\r\n\t\t\t\t\thorizontalDrag = horizontalTrack.find('>.jspDrag');\r\n\r\n\t\t\t\t\tif (settings.showArrows) {\r\n\t\t\t\t\t\tarrowLeft = $('').on(\r\n\t\t\t\t\t\t\t'mousedown.jsp', getArrowScroll(-1, 0)\r\n\t\t\t\t\t\t).on('click.jsp', nil);\r\n\t\t\t\t\t\tarrowRight = $('').on(\r\n\t\t\t\t\t\t\t'mousedown.jsp', getArrowScroll(1, 0)\r\n\t\t\t\t\t\t).on('click.jsp', nil);\r\n\t\t\t\t\t\tif (settings.arrowScrollOnHover) {\r\n\t\t\t\t\t\t\tarrowLeft.on('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft));\r\n\t\t\t\t\t\t\tarrowRight.on('mouseover.jsp', getArrowScroll(1, 0, arrowRight));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tappendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\thorizontalDrag.on(\r\n \"mouseenter\",\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thorizontalDrag.addClass('jspHover');\r\n\t\t\t\t\t\t}\r\n ).on(\r\n \"mouseleave\",\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thorizontalDrag.removeClass('jspHover');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t).on(\r\n\t\t\t\t\t\t'mousedown.jsp',\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Stop IE from allowing text selection\r\n\t\t\t\t\t\t\t$('html').on('dragstart.jsp selectstart.jsp', nil);\r\n\r\n\t\t\t\t\t\t\thorizontalDrag.addClass('jspActive');\r\n\r\n\t\t\t\t\t\t\tvar startX = e.pageX - horizontalDrag.position().left;\r\n\r\n\t\t\t\t\t\t\t$('html').on(\r\n\t\t\t\t\t\t\t\t'mousemove.jsp',\r\n\t\t\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tpositionDragX(e.pageX - startX, false);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t).on('mouseup.jsp mouseleave.jsp', cancelDrag);\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\thorizontalTrackWidth = container.innerWidth();\r\n\t\t\t\t\tsizeHorizontalScrollbar();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction sizeHorizontalScrollbar()\r\n\t\t\t{\r\n\t\t\t\tcontainer.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each(\r\n\t\t\t\t\tfunction()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thorizontalTrackWidth -= $(this).outerWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\thorizontalTrack.width(horizontalTrackWidth + 'px');\r\n\t\t\t\thorizontalDragPosition = 0;\r\n\t\t\t}\r\n\r\n\t\t\tfunction resizeScrollbars()\r\n\t\t\t{\r\n\t\t\t\tif (isScrollableH && isScrollableV) {\r\n\t\t\t\t\tvar horizontalTrackHeight = horizontalTrack.outerHeight(),\r\n\t\t\t\t\t\tverticalTrackWidth = verticalTrack.outerWidth();\r\n\t\t\t\t\tverticalTrackHeight -= horizontalTrackHeight;\r\n\t\t\t\t\t$(horizontalBar).find('>.jspCap:visible,>.jspArrow').each(\r\n\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thorizontalTrackWidth += $(this).outerWidth();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\thorizontalTrackWidth -= verticalTrackWidth;\r\n\t\t\t\t\tpaneHeight -= verticalTrackWidth;\r\n\t\t\t\t\tpaneWidth -= horizontalTrackHeight;\r\n\t\t\t\t\thorizontalTrack.parent().append(\r\n\t\t\t\t\t\t$('
').css('width', horizontalTrackHeight + 'px')\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsizeVerticalScrollbar();\r\n\t\t\t\t\tsizeHorizontalScrollbar();\r\n\t\t\t\t}\r\n\t\t\t\t// reflow content\r\n\t\t\t\tif (isScrollableH) {\r\n\t\t\t\t\tpane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px');\r\n\t\t\t\t}\r\n\t\t\t\tcontentHeight = pane.outerHeight();\r\n\t\t\t\tpercentInViewV = contentHeight / paneHeight;\r\n\r\n\t\t\t\tif (isScrollableH) {\r\n\t\t\t\t\thorizontalDragWidth = Math.ceil(1 / percentInViewH * horizontalTrackWidth);\r\n\t\t\t\t\tif (horizontalDragWidth > settings.horizontalDragMaxWidth) {\r\n\t\t\t\t\t\thorizontalDragWidth = settings.horizontalDragMaxWidth;\r\n\t\t\t\t\t} else if (horizontalDragWidth < settings.horizontalDragMinWidth) {\r\n\t\t\t\t\t\thorizontalDragWidth = settings.horizontalDragMinWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\thorizontalDrag.css('width', horizontalDragWidth + 'px');\r\n\t\t\t\t\tdragMaxX = horizontalTrackWidth - horizontalDragWidth;\r\n\t\t\t\t\t_positionDragX(horizontalDragPosition); // To update the state for the arrow buttons\r\n\t\t\t\t}\r\n\t\t\t\tif (isScrollableV) {\r\n\t\t\t\t\tverticalDragHeight = Math.ceil(1 / percentInViewV * verticalTrackHeight);\r\n\t\t\t\t\tif (verticalDragHeight > settings.verticalDragMaxHeight) {\r\n\t\t\t\t\t\tverticalDragHeight = settings.verticalDragMaxHeight;\r\n\t\t\t\t\t} else if (verticalDragHeight < settings.verticalDragMinHeight) {\r\n\t\t\t\t\t\tverticalDragHeight = settings.verticalDragMinHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tverticalDrag.css('height', verticalDragHeight + 'px');\r\n\t\t\t\t\tdragMaxY = verticalTrackHeight - verticalDragHeight;\r\n\t\t\t\t\t_positionDragY(verticalDragPosition); // To update the state for the arrow buttons\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction appendArrows(ele, p, a1, a2)\r\n\t\t\t{\r\n\t\t\t\tvar p1 = \"before\", p2 = \"after\", aTemp;\r\n\r\n\t\t\t\t// Sniff for mac... Is there a better way to determine whether the arrows would naturally appear\r\n\t\t\t\t// at the top or the bottom of the bar?\r\n\t\t\t\tif (p == \"os\") {\r\n\t\t\t\t\tp = /Mac/.test(navigator.platform) ? \"after\" : \"split\";\r\n\t\t\t\t}\r\n\t\t\t\tif (p == p1) {\r\n\t\t\t\t\tp2 = p;\r\n\t\t\t\t} else if (p == p2) {\r\n\t\t\t\t\tp1 = p;\r\n\t\t\t\t\taTemp = a1;\r\n\t\t\t\t\ta1 = a2;\r\n\t\t\t\t\ta2 = aTemp;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tele[p1](a1)[p2](a2);\r\n\t\t\t}\r\n\r\n\t\t\tfunction getArrowScroll(dirX, dirY, ele)\r\n\t\t\t{\r\n\t\t\t\treturn function()\r\n\t\t\t\t{\r\n\t\t\t\t\tarrowScroll(dirX, dirY, this, ele);\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tfunction arrowScroll(dirX, dirY, arrow, ele)\r\n\t\t\t{\r\n\t\t\t\tarrow = $(arrow).addClass('jspActive');\r\n\r\n\t\t\t\tvar eve,\r\n\t\t\t\t\tscrollTimeout,\r\n\t\t\t\t\tisFirst = true,\r\n\t\t\t\t\tdoScroll = function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (dirX !== 0) {\r\n\t\t\t\t\t\t\tjsp.scrollByX(dirX * settings.arrowButtonSpeed);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (dirY !== 0) {\r\n\t\t\t\t\t\t\tjsp.scrollByY(dirY * settings.arrowButtonSpeed);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tscrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.arrowRepeatFreq);\r\n\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\tdoScroll();\r\n\r\n\t\t\t\teve = ele ? 'mouseout.jsp' : 'mouseup.jsp';\r\n\t\t\t\tele = ele || $('html');\r\n\t\t\t\tele.on(\r\n\t\t\t\t\teve,\r\n\t\t\t\t\tfunction()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarrow.removeClass('jspActive');\r\n\t\t\t\t\t\tif(scrollTimeout) {\r\n clearTimeout(scrollTimeout);\r\n }\r\n\t\t\t\t\t\tscrollTimeout = null;\r\n\t\t\t\t\t\tele.off(eve);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tfunction initClickOnTrack()\r\n\t\t\t{\r\n\t\t\t\tremoveClickOnTrack();\r\n\t\t\t\tif (isScrollableV) {\r\n\t\t\t\t\tverticalTrack.on(\r\n\t\t\t\t\t\t'mousedown.jsp',\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (e.originalTarget === undefined || e.originalTarget == e.currentTarget) {\r\n\t\t\t\t\t\t\t\tvar clickedTrack = $(this),\r\n\t\t\t\t\t\t\t\t\toffset = clickedTrack.offset(),\r\n\t\t\t\t\t\t\t\t\tdirection = e.pageY - offset.top - verticalDragPosition,\r\n\t\t\t\t\t\t\t\t\tscrollTimeout,\r\n\t\t\t\t\t\t\t\t\tisFirst = true,\r\n\t\t\t\t\t\t\t\t\tdoScroll = function()\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar offset = clickedTrack.offset(),\r\n\t\t\t\t\t\t\t\t\t\t\tpos = e.pageY - offset.top - verticalDragHeight / 2,\r\n\t\t\t\t\t\t\t\t\t\t\tcontentDragY = paneHeight * settings.scrollPagePercent,\r\n\t\t\t\t\t\t\t\t\t\t\tdragY = dragMaxY * contentDragY / (contentHeight - paneHeight);\r\n\t\t\t\t\t\t\t\t\t\tif (direction < 0) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (verticalDragPosition - dragY > pos) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tjsp.scrollByY(-contentDragY);\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\tpositionDragY(pos);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else if (direction > 0) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (verticalDragPosition + dragY < pos) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tjsp.scrollByY(contentDragY);\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\tpositionDragY(pos);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tcancelClick();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tscrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.trackClickRepeatFreq);\r\n\t\t\t\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tcancelClick = function()\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(scrollTimeout) {\r\n clearTimeout(scrollTimeout);\r\n }\r\n\t\t\t\t\t\t\t\t\t\tscrollTimeout = null;\r\n\t\t\t\t\t\t\t\t\t\t$(document).off('mouseup.jsp', cancelClick);\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tdoScroll();\r\n\t\t\t\t\t\t\t\t$(document).on('mouseup.jsp', cancelClick);\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isScrollableH) {\r\n\t\t\t\t\thorizontalTrack.on(\r\n\t\t\t\t\t\t'mousedown.jsp',\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (e.originalTarget === undefined || e.originalTarget == e.currentTarget) {\r\n\t\t\t\t\t\t\t\tvar clickedTrack = $(this),\r\n\t\t\t\t\t\t\t\t\toffset = clickedTrack.offset(),\r\n\t\t\t\t\t\t\t\t\tdirection = e.pageX - offset.left - horizontalDragPosition,\r\n\t\t\t\t\t\t\t\t\tscrollTimeout,\r\n\t\t\t\t\t\t\t\t\tisFirst = true,\r\n\t\t\t\t\t\t\t\t\tdoScroll = function()\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar offset = clickedTrack.offset(),\r\n\t\t\t\t\t\t\t\t\t\t\tpos = e.pageX - offset.left - horizontalDragWidth / 2,\r\n\t\t\t\t\t\t\t\t\t\t\tcontentDragX = paneWidth * settings.scrollPagePercent,\r\n\t\t\t\t\t\t\t\t\t\t\tdragX = dragMaxX * contentDragX / (contentWidth - paneWidth);\r\n\t\t\t\t\t\t\t\t\t\tif (direction < 0) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (horizontalDragPosition - dragX > pos) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tjsp.scrollByX(-contentDragX);\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\tpositionDragX(pos);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else if (direction > 0) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (horizontalDragPosition + dragX < pos) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tjsp.scrollByX(contentDragX);\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\tpositionDragX(pos);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tcancelClick();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tscrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.trackClickRepeatFreq);\r\n\t\t\t\t\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tcancelClick = function()\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(scrollTimeout) {\r\n clearTimeout(scrollTimeout);\r\n }\r\n\t\t\t\t\t\t\t\t\t\tscrollTimeout = null;\r\n\t\t\t\t\t\t\t\t\t\t$(document).off('mouseup.jsp', cancelClick);\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tdoScroll();\r\n\t\t\t\t\t\t\t\t$(document).on('mouseup.jsp', cancelClick);\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeClickOnTrack()\r\n\t\t\t{\r\n\t\t\t\tif (horizontalTrack) {\r\n\t\t\t\t\thorizontalTrack.off('mousedown.jsp');\r\n\t\t\t\t}\r\n\t\t\t\tif (verticalTrack) {\r\n\t\t\t\t\tverticalTrack.off('mousedown.jsp');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction cancelDrag()\r\n\t\t\t{\r\n\t\t\t\t$('html').off('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp');\r\n\r\n\t\t\t\tif (verticalDrag) {\r\n\t\t\t\t\tverticalDrag.removeClass('jspActive');\r\n\t\t\t\t}\r\n\t\t\t\tif (horizontalDrag) {\r\n\t\t\t\t\thorizontalDrag.removeClass('jspActive');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction positionDragY(destY, animate)\r\n\t\t\t{\r\n\t\t\t\tif (!isScrollableV) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (destY < 0) {\r\n\t\t\t\t\tdestY = 0;\r\n\t\t\t\t} else if (destY > dragMaxY) {\r\n\t\t\t\t\tdestY = dragMaxY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// allow for devs to prevent the JSP from being scrolled\r\n\t\t\t\tvar willScrollYEvent = new $.Event(\"jsp-will-scroll-y\");\r\n\t\t\t\telem.trigger(willScrollYEvent, [destY]);\r\n\r\n\t\t\t\tif (willScrollYEvent.isDefaultPrevented()) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar tmpVerticalDragPosition = destY || 0;\r\n\r\n\t\t\t\tvar isAtTop = tmpVerticalDragPosition === 0,\r\n\t\t\t\t\tisAtBottom = tmpVerticalDragPosition == dragMaxY,\r\n\t\t\t\t\tpercentScrolled = destY/ dragMaxY,\r\n\t\t\t\t\tdestTop = -percentScrolled * (contentHeight - paneHeight);\r\n\r\n\t\t\t\t// can't just check if(animate) because false is a valid value that could be passed in...\r\n\t\t\t\tif (animate === undefined) {\r\n\t\t\t\t\tanimate = settings.animateScroll;\r\n\t\t\t\t}\r\n\t\t\t\tif (animate) {\r\n\t\t\t\t\tjsp.animate(verticalDrag, 'top', destY,\t_positionDragY, function() {\r\n\t\t\t\t\t\telem.trigger('jsp-user-scroll-y', [-destTop, isAtTop, isAtBottom]);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tverticalDrag.css('top', destY);\r\n\t\t\t\t\t_positionDragY(destY);\r\n\t\t\t\t\telem.trigger('jsp-user-scroll-y', [-destTop, isAtTop, isAtBottom]);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction _positionDragY(destY)\r\n\t\t\t{\r\n\t\t\t\tif (destY === undefined) {\r\n\t\t\t\t\tdestY = verticalDrag.position().top;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer.scrollTop(0);\r\n\t\t\t\tverticalDragPosition = destY || 0;\r\n\r\n\t\t\t\tvar isAtTop = verticalDragPosition === 0,\r\n\t\t\t\t\tisAtBottom = verticalDragPosition == dragMaxY,\r\n\t\t\t\t\tpercentScrolled = destY/ dragMaxY,\r\n\t\t\t\t\tdestTop = -percentScrolled * (contentHeight - paneHeight);\r\n\r\n\t\t\t\tif (wasAtTop != isAtTop || wasAtBottom != isAtBottom) {\r\n\t\t\t\t\twasAtTop = isAtTop;\r\n\t\t\t\t\twasAtBottom = isAtBottom;\r\n\t\t\t\t\telem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tupdateVerticalArrows(isAtTop, isAtBottom);\r\n\t\t\t\tpane.css('top', destTop);\r\n\t\t\t\telem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]).trigger('scroll');\r\n\t\t\t}\r\n\r\n\t\t\tfunction positionDragX(destX, animate)\r\n\t\t\t{\r\n\t\t\t\tif (!isScrollableH) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (destX < 0) {\r\n\t\t\t\t\tdestX = 0;\r\n\t\t\t\t} else if (destX > dragMaxX) {\r\n\t\t\t\t\tdestX = dragMaxX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t// allow for devs to prevent the JSP from being scrolled\r\n\t\t\t\tvar willScrollXEvent = new $.Event(\"jsp-will-scroll-x\");\r\n\t\t\t\telem.trigger(willScrollXEvent, [destX]);\r\n\r\n\t\t\t\tif (willScrollXEvent.isDefaultPrevented()) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar tmpHorizontalDragPosition = destX ||0;\r\n\r\n\t\t\t\tvar isAtLeft = tmpHorizontalDragPosition === 0,\r\n\t\t\t\t\tisAtRight = tmpHorizontalDragPosition == dragMaxX,\r\n\t\t\t\t\tpercentScrolled = destX / dragMaxX,\r\n\t\t\t\t\tdestLeft = -percentScrolled * (contentWidth - paneWidth);\r\n\r\n\t\t\t\tif (animate === undefined) {\r\n\t\t\t\t\tanimate = settings.animateScroll;\r\n\t\t\t\t}\r\n\t\t\t\tif (animate) {\r\n\t\t\t\t\tjsp.animate(horizontalDrag, 'left', destX,\t_positionDragX, function() {\r\n\t\t\t\t\t\telem.trigger('jsp-user-scroll-x', [-destLeft, isAtLeft, isAtRight]);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\thorizontalDrag.css('left', destX);\r\n\t\t\t\t\t_positionDragX(destX);\r\n\t\t\t\t\telem.trigger('jsp-user-scroll-x', [-destLeft, isAtLeft, isAtRight]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction _positionDragX(destX)\r\n\t\t\t{\r\n\t\t\t\tif (destX === undefined) {\r\n\t\t\t\t\tdestX = horizontalDrag.position().left;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer.scrollTop(0);\r\n\t\t\t\thorizontalDragPosition = destX ||0;\r\n\r\n\t\t\t\tvar isAtLeft = horizontalDragPosition === 0,\r\n\t\t\t\t\tisAtRight = horizontalDragPosition == dragMaxX,\r\n\t\t\t\t\tpercentScrolled = destX / dragMaxX,\r\n\t\t\t\t\tdestLeft = -percentScrolled * (contentWidth - paneWidth);\r\n\r\n\t\t\t\tif (wasAtLeft != isAtLeft || wasAtRight != isAtRight) {\r\n\t\t\t\t\twasAtLeft = isAtLeft;\r\n\t\t\t\t\twasAtRight = isAtRight;\r\n\t\t\t\t\telem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tupdateHorizontalArrows(isAtLeft, isAtRight);\r\n\t\t\t\tpane.css('left', destLeft);\r\n\t\t\t\telem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]).trigger('scroll');\r\n\t\t\t}\r\n\r\n\t\t\tfunction updateVerticalArrows(isAtTop, isAtBottom)\r\n\t\t\t{\r\n\t\t\t\tif (settings.showArrows) {\r\n\t\t\t\t\tarrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled');\r\n\t\t\t\t\tarrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction updateHorizontalArrows(isAtLeft, isAtRight)\r\n\t\t\t{\r\n\t\t\t\tif (settings.showArrows) {\r\n\t\t\t\t\tarrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled');\r\n\t\t\t\t\tarrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollToY(destY, animate)\r\n\t\t\t{\r\n\t\t\t\tvar percentScrolled = destY / (contentHeight - paneHeight);\r\n\t\t\t\tpositionDragY(percentScrolled * dragMaxY, animate);\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollToX(destX, animate)\r\n\t\t\t{\r\n\t\t\t\tvar percentScrolled = destX / (contentWidth - paneWidth);\r\n\t\t\t\tpositionDragX(percentScrolled * dragMaxX, animate);\r\n\t\t\t}\r\n\r\n\t\t\tfunction scrollToElement(ele, stickToTop, animate)\r\n\t\t\t{\r\n\t\t\t\tvar e, eleHeight, eleWidth, eleTop = 0, eleLeft = 0, viewportTop, viewportLeft, maxVisibleEleTop, maxVisibleEleLeft, destY, destX;\r\n\r\n\t\t\t\t// Legal hash values aren't necessarily legal jQuery selectors so we need to catch any\r\n\t\t\t\t// errors from the lookup...\r\n\t\t\t\ttry {\r\n\t\t\t\t\te = $(ele);\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\teleHeight = e.outerHeight();\r\n\t\t\t\teleWidth= e.outerWidth();\r\n\r\n\t\t\t\tcontainer.scrollTop(0);\r\n\t\t\t\tcontainer.scrollLeft(0);\r\n\r\n\t\t\t\t// loop through parents adding the offset top of any elements that are relatively positioned between\r\n\t\t\t\t// the focused element and the jspPane so we can get the true distance from the top\r\n\t\t\t\t// of the focused element to the top of the scrollpane...\r\n\t\t\t\twhile (!e.is('.jspPane')) {\r\n\t\t\t\t\teleTop += e.position().top;\r\n\t\t\t\t\teleLeft += e.position().left;\r\n\t\t\t\t\te = e.offsetParent();\r\n\t\t\t\t\tif (/^body|html$/i.test(e[0].nodeName)) {\r\n\t\t\t\t\t\t// we ended up too high in the document structure. Quit!\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tviewportTop = contentPositionY();\r\n\t\t\t\tmaxVisibleEleTop = viewportTop + paneHeight;\r\n\t\t\t\tif (eleTop < viewportTop || stickToTop) { // element is above viewport\r\n\t\t\t\t\tdestY = eleTop - settings.horizontalGutter;\r\n\t\t\t\t} else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport\r\n\t\t\t\t\tdestY = eleTop - paneHeight + eleHeight + settings.horizontalGutter;\r\n\t\t\t\t}\r\n\t\t\t\tif (!isNaN(destY)) {\r\n\t\t\t\t\tscrollToY(destY, animate);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tviewportLeft = contentPositionX();\r\n\t maxVisibleEleLeft = viewportLeft + paneWidth;\r\n\t if (eleLeft < viewportLeft || stickToTop) { // element is to the left of viewport\r\n\t destX = eleLeft - settings.horizontalGutter;\r\n\t } else if (eleLeft + eleWidth > maxVisibleEleLeft) { // element is to the right viewport\r\n\t destX = eleLeft - paneWidth + eleWidth + settings.horizontalGutter;\r\n\t }\r\n\t if (!isNaN(destX)) {\r\n\t scrollToX(destX, animate);\r\n\t }\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction contentPositionX()\r\n\t\t\t{\r\n\t\t\t\treturn -pane.position().left;\r\n\t\t\t}\r\n\r\n\t\t\tfunction contentPositionY()\r\n\t\t\t{\r\n\t\t\t\treturn -pane.position().top;\r\n\t\t\t}\r\n\r\n\t\t\tfunction isCloseToBottom()\r\n\t\t\t{\r\n\t\t\t\tvar scrollableHeight = contentHeight - paneHeight;\r\n\t\t\t\treturn (scrollableHeight > 20) && (scrollableHeight - contentPositionY() < 10);\r\n\t\t\t}\r\n\r\n\t\t\tfunction isCloseToRight()\r\n\t\t\t{\r\n\t\t\t\tvar scrollableWidth = contentWidth - paneWidth;\r\n\t\t\t\treturn (scrollableWidth > 20) && (scrollableWidth - contentPositionX() < 10);\r\n\t\t\t}\r\n\r\n\t\t\tfunction initMousewheel()\r\n\t\t\t{\r\n\t\t\t\tcontainer.off(mwEvent).on(\r\n\t\t\t\t\tmwEvent,\r\n\t\t\t\t\tfunction (event, delta, deltaX, deltaY) {\r\n\r\n if (!horizontalDragPosition) horizontalDragPosition = 0;\r\n if (!verticalDragPosition) verticalDragPosition = 0;\r\n\r\n\t\t\t\t\t\tvar dX = horizontalDragPosition, dY = verticalDragPosition, factor = event.deltaFactor || settings.mouseWheelSpeed;\r\n\t\t\t\t\t\tjsp.scrollBy(deltaX * factor, -deltaY * factor, false);\r\n\t\t\t\t\t\t// return true if there was no movement so rest of screen can scroll\r\n\t\t\t\t\t\treturn dX == horizontalDragPosition && dY == verticalDragPosition;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeMousewheel()\r\n\t\t\t{\r\n\t\t\t\tcontainer.off(mwEvent);\r\n\t\t\t}\r\n\r\n\t\t\tfunction nil()\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tfunction initFocusHandler()\r\n\t\t\t{\r\n\t\t\t\tpane.find(':input,a').off('focus.jsp').on(\r\n\t\t\t\t\t'focus.jsp',\r\n\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToElement(e.target, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeFocusHandler()\r\n\t\t\t{\r\n\t\t\t\tpane.find(':input,a').off('focus.jsp');\r\n\t\t\t}\r\n\r\n\t\t\tfunction initKeyboardNav()\r\n\t\t\t{\r\n\t\t\t\tvar keyDown, elementHasScrolled, validParents = [];\r\n\t\t\t\tif(isScrollableH) {\r\n validParents.push(horizontalBar[0]);\r\n }\r\n\r\n\t\t\t\tif(isScrollableV) {\r\n validParents.push(verticalBar[0]);\r\n }\r\n\r\n\t\t\t\t// IE also focuses elements that don't have tabindex set.\r\n\t\t\t\tpane.on(\r\n\t\t\t\t\t'focus.jsp',\r\n\t\t\t\t\tfunction()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\telem.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\telem.attr('tabindex', 0)\r\n\t\t\t\t\t.off('keydown.jsp keypress.jsp')\r\n\t\t\t\t\t.on(\r\n\t\t\t\t\t\t'keydown.jsp',\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (e.target !== this && !(validParents.length && $(e.target).closest(validParents).length)){\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar dX = horizontalDragPosition, dY = verticalDragPosition;\r\n\t\t\t\t\t\t\tswitch(e.keyCode) {\r\n\t\t\t\t\t\t\t\tcase 40: // down\r\n\t\t\t\t\t\t\t\tcase 38: // up\r\n\t\t\t\t\t\t\t\tcase 34: // page down\r\n\t\t\t\t\t\t\t\tcase 32: // space\r\n\t\t\t\t\t\t\t\tcase 33: // page up\r\n\t\t\t\t\t\t\t\tcase 39: // right\r\n\t\t\t\t\t\t\t\tcase 37: // left\r\n\t\t\t\t\t\t\t\t\tkeyDown = e.keyCode;\r\n\t\t\t\t\t\t\t\t\tkeyDownHandler();\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 35: // end\r\n\t\t\t\t\t\t\t\t\tscrollToY(contentHeight - paneHeight);\r\n\t\t\t\t\t\t\t\t\tkeyDown = null;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 36: // home\r\n\t\t\t\t\t\t\t\t\tscrollToY(0);\r\n\t\t\t\t\t\t\t\t\tkeyDown = null;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\telementHasScrolled = e.keyCode == keyDown && dX != horizontalDragPosition || dY != verticalDragPosition;\r\n\t\t\t\t\t\t\treturn !elementHasScrolled;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t).on(\r\n\t\t\t\t\t\t'keypress.jsp', // For FF/ OSX so that we can cancel the repeat key presses if the JSP scrolls...\r\n\t\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (e.keyCode == keyDown) {\r\n\t\t\t\t\t\t\t\tkeyDownHandler();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// If the keypress is not related to the area, ignore it. Fixes problem with inputs inside scrolled area. Copied from line 955.\r\n\t\t\t\t\t\t\tif (e.target !== this && !(validParents.length && $(e.target).closest(validParents).length)){\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn !elementHasScrolled;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tif (settings.hideFocus) {\r\n\t\t\t\t\telem.css('outline', 'none');\r\n\t\t\t\t\tif ('hideFocus' in container[0]){\r\n\t\t\t\t\t\telem.attr('hideFocus', true);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem.css('outline', '');\r\n\t\t\t\t\tif ('hideFocus' in container[0]){\r\n\t\t\t\t\t\telem.attr('hideFocus', false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction keyDownHandler()\r\n\t\t\t\t{\r\n\t\t\t\t\tvar dX = horizontalDragPosition, dY = verticalDragPosition;\r\n\t\t\t\t\tswitch(keyDown) {\r\n\t\t\t\t\t\tcase 40: // down\r\n\t\t\t\t\t\t\tjsp.scrollByY(settings.keyboardSpeed, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 38: // up\r\n\t\t\t\t\t\t\tjsp.scrollByY(-settings.keyboardSpeed, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 34: // page down\r\n\t\t\t\t\t\tcase 32: // space\r\n\t\t\t\t\t\t\tjsp.scrollByY(paneHeight * settings.scrollPagePercent, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 33: // page up\r\n\t\t\t\t\t\t\tjsp.scrollByY(-paneHeight * settings.scrollPagePercent, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 39: // right\r\n\t\t\t\t\t\t\tjsp.scrollByX(settings.keyboardSpeed, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 37: // left\r\n\t\t\t\t\t\t\tjsp.scrollByX(-settings.keyboardSpeed, false);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telementHasScrolled = dX != horizontalDragPosition || dY != verticalDragPosition;\r\n\t\t\t\t\treturn elementHasScrolled;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeKeyboardNav()\r\n\t\t\t{\r\n\t\t\t\telem.attr('tabindex', '-1')\r\n\t\t\t\t\t.removeAttr('tabindex')\r\n\t\t\t\t\t.off('keydown.jsp keypress.jsp');\r\n\r\n\t\t\t\tpane.off('.jsp');\r\n\t\t\t}\r\n\r\n\t\t\tfunction observeHash()\r\n\t\t\t{\r\n\t\t\t\tif (location.hash && location.hash.length > 1) {\r\n\t\t\t\t\tvar e,\r\n\t\t\t\t\t\tretryInt,\r\n\t\t\t\t\t\thash = escape(location.hash.substr(1)) // hash must be escaped to prevent XSS\r\n\t\t\t\t\t\t;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\te = $('#' + hash + ', a[name=\"' + hash + '\"]');\r\n\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (e.length && pane.find(hash)) {\r\n\t\t\t\t\t\t// nasty workaround but it appears to take a little while before the hash has done its thing\r\n\t\t\t\t\t\t// to the rendered page so we just wait until the container's scrollTop has been messed up.\r\n\t\t\t\t\t\tif (container.scrollTop() === 0) {\r\n\t\t\t\t\t\t\tretryInt = setInterval(\r\n\t\t\t\t\t\t\t\tfunction()\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (container.scrollTop() > 0) {\r\n\t\t\t\t\t\t\t\t\t\tscrollToElement(e, true);\r\n\t\t\t\t\t\t\t\t\t\t$(document).scrollTop(container.position().top);\r\n\t\t\t\t\t\t\t\t\t\tclearInterval(retryInt);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t50\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tscrollToElement(e, true);\r\n\t\t\t\t\t\t\t$(document).scrollTop(container.position().top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction hijackInternalLinks()\r\n\t\t\t{\r\n\t\t\t\t// only register the link handler once\r\n\t\t\t\tif ($(document.body).data('jspHijack')) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// remember that the handler was bound\r\n\t\t\t\t$(document.body).data('jspHijack', true);\r\n\r\n\t\t\t\t// use live handler to also capture newly created links\r\n\t\t\t\t$(document.body).delegate('a[href*=\"#\"]', 'click', function(event) {\r\n\t\t\t\t\t// does the link point to the same page?\r\n\t\t\t\t\t// this also takes care of cases with a -Tag or Links not starting with the hash #\r\n\t\t\t\t\t// e.g. when the current url already is index.html\r\n\t\t\t\t\tvar href = this.href.substr(0, this.href.indexOf('#')),\r\n\t\t\t\t\t\tlocationHref = location.href,\r\n\t\t\t\t\t\thash,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\tcontainer,\r\n\t\t\t\t\t\tjsp,\r\n\t\t\t\t\t\tscrollTop,\r\n\t\t\t\t\t\telementTop;\r\n\t\t\t\t\tif (location.href.indexOf('#') !== -1) {\r\n\t\t\t\t\t\tlocationHref = location.href.substr(0, location.href.indexOf('#'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (href !== locationHref) {\r\n\t\t\t\t\t\t// the link points to another page\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// check if jScrollPane should handle this click event\r\n\t\t\t\t\thash = escape(this.href.substr(this.href.indexOf('#') + 1));\r\n\r\n\t\t\t\t\t// find the element on the page\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\telement = $('#' + hash + ', a[name=\"' + hash + '\"]');\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t// hash is not a valid jQuery identifier\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!element.length) {\r\n\t\t\t\t\t\t// this link does not point to an element on this page\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontainer = element.closest('.jspScrollable');\r\n\t\t\t\t\tjsp = container.data('jsp');\r\n\r\n\t\t\t\t\t// jsp might be another jsp instance than the one, that bound this event\r\n\t\t\t\t\t// remember: this event is only bound once for all instances.\r\n\t\t\t\t\tjsp.scrollToElement(element, true);\r\n\r\n\t\t\t\t\tif (container[0].scrollIntoView) {\r\n\t\t\t\t\t\t// also scroll to the top of the container (if it is not visible)\r\n\t\t\t\t\t\tscrollTop = $(window).scrollTop();\r\n\t\t\t\t\t\telementTop = element.offset().top;\r\n\t\t\t\t\t\tif (elementTop < scrollTop || elementTop > scrollTop + $(window).height()) {\r\n\t\t\t\t\t\t\tcontainer[0].scrollIntoView();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// jsp handled this event, prevent the browser default (scrolling :P)\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Init touch on iPad, iPhone, iPod, Android\r\n\t\t\tfunction initTouch()\r\n\t\t\t{\r\n\t\t\t\tvar startX,\r\n\t\t\t\t\tstartY,\r\n\t\t\t\t\ttouchStartX,\r\n\t\t\t\t\ttouchStartY,\r\n\t\t\t\t\tmoved,\r\n\t\t\t\t\tmoving = false;\r\n\r\n\t\t\t\tcontainer.off('touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick').on(\r\n\t\t\t\t\t'touchstart.jsp',\r\n\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar touch = e.originalEvent.touches[0];\r\n\t\t\t\t\t\tstartX = contentPositionX();\r\n\t\t\t\t\t\tstartY = contentPositionY();\r\n\t\t\t\t\t\ttouchStartX = touch.pageX;\r\n\t\t\t\t\t\ttouchStartY = touch.pageY;\r\n\t\t\t\t\t\tmoved = false;\r\n\t\t\t\t\t\tmoving = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t).on(\r\n\t\t\t\t\t'touchmove.jsp',\r\n\t\t\t\t\tfunction(ev)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(!moving) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar touchPos = ev.originalEvent.touches[0],\r\n\t\t\t\t\t\t\tdX = horizontalDragPosition, dY = verticalDragPosition;\r\n\r\n\t\t\t\t\t\tjsp.scrollTo(startX + touchStartX - touchPos.pageX, startY + touchStartY - touchPos.pageY);\r\n\r\n\t\t\t\t\t\tmoved = moved || Math.abs(touchStartX - touchPos.pageX) > 5 || Math.abs(touchStartY - touchPos.pageY) > 5;\r\n\r\n\t\t\t\t\t\t// return true if there was no movement so rest of screen can scroll\r\n\t\t\t\t\t\treturn dX == horizontalDragPosition && dY == verticalDragPosition;\r\n\t\t\t\t\t}\r\n\t\t\t\t).on(\r\n\t\t\t\t\t'touchend.jsp',\r\n\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmoving = false;\r\n\t\t\t\t\t\t/*if(moved) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}*/\r\n\t\t\t\t\t}\r\n\t\t\t\t).on(\r\n\t\t\t\t\t'click.jsp-touchclick',\r\n\t\t\t\t\tfunction(e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(moved) {\r\n\t\t\t\t\t\t\tmoved = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tfunction destroy(){\r\n\t\t\t\tvar currentY = contentPositionY(),\r\n\t\t\t\t\tcurrentX = contentPositionX();\r\n\t\t\t\telem.removeClass('jspScrollable').off('.jsp');\r\n\t\t\t\tpane.off('.jsp');\r\n\t\t\t\telem.replaceWith(originalElement.append(pane.children()));\r\n\t\t\t\toriginalElement.scrollTop(currentY);\r\n\t\t\t\toriginalElement.scrollLeft(currentX);\r\n\r\n\t\t\t\t// clear reinitialize timer if active\r\n\t\t\t\tif (reinitialiseInterval) {\r\n\t\t\t\t\tclearInterval(reinitialiseInterval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Public API\r\n\t\t\t$.extend(\r\n\t\t\t\tjsp,\r\n\t\t\t\t{\r\n\t\t\t\t\t// Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it\r\n\t\t\t\t\t// was initialised). The settings object which is passed in will override any settings from the\r\n\t\t\t\t\t// previous time it was initialised - if you don't pass any settings then the ones from the previous\r\n\t\t\t\t\t// initialisation will be used.\r\n\t\t\t\t\treinitialise: function(s)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ts = $.extend({}, settings, s);\r\n\t\t\t\t\t\tinitialise(s);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so\r\n\t\t\t\t\t// that it can be seen within the viewport. If stickToTop is true then the element will appear at\r\n\t\t\t\t\t// the top of the viewport, if it is false then the viewport will scroll as little as possible to\r\n\t\t\t\t\t// show the element. You can also specify if you want animation to occur. If you don't provide this\r\n\t\t\t\t\t// argument then the animateScroll value from the settings object is used instead.\r\n\t\t\t\t\tscrollToElement: function(ele, stickToTop, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToElement(ele, stickToTop, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane so that the specified co-ordinates within the content are at the top left\r\n\t\t\t\t\t// of the viewport. animate is optional and if not passed then the value of animateScroll from\r\n\t\t\t\t\t// the settings object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollTo: function(destX, destY, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToX(destX, animate);\r\n\t\t\t\t\t\tscrollToY(destY, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane so that the specified co-ordinate within the content is at the left of the\r\n\t\t\t\t\t// viewport. animate is optional and if not passed then the value of animateScroll from the settings\r\n\t\t\t\t\t// object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollToX: function(destX, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToX(destX, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane so that the specified co-ordinate within the content is at the top of the\r\n\t\t\t\t\t// viewport. animate is optional and if not passed then the value of animateScroll from the settings\r\n\t\t\t\t\t// object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollToY: function(destY, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToY(destY, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane to the specified percentage of its maximum horizontal scroll position. animate\r\n\t\t\t\t\t// is optional and if not passed then the value of animateScroll from the settings object this\r\n\t\t\t\t\t// jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollToPercentX: function(destPercentX, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToX(destPercentX * (contentWidth - paneWidth), animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane to the specified percentage of its maximum vertical scroll position. animate\r\n\t\t\t\t\t// is optional and if not passed then the value of animateScroll from the settings object this\r\n\t\t\t\t\t// jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollToPercentY: function(destPercentY, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tscrollToY(destPercentY * (contentHeight - paneHeight), animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then\r\n\t\t\t\t\t// the value of animateScroll from the settings object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollBy: function(deltaX, deltaY, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tjsp.scrollByX(deltaX, animate);\r\n\t\t\t\t\t\tjsp.scrollByY(deltaY, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then\r\n\t\t\t\t\t// the value of animateScroll from the settings object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollByX: function(deltaX, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar destX = contentPositionX() + Math[deltaX<0 ? 'floor' : 'ceil'](deltaX),\r\n\t\t\t\t\t\t\tpercentScrolled = destX / (contentWidth - paneWidth);\r\n\t\t\t\t\t\tpositionDragX(percentScrolled * dragMaxX, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then\r\n\t\t\t\t\t// the value of animateScroll from the settings object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tscrollByY: function(deltaY, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar destY = contentPositionY() + Math[deltaY<0 ? 'floor' : 'ceil'](deltaY),\r\n\t\t\t\t\t\t\tpercentScrolled = destY / (contentHeight - paneHeight);\r\n\t\t\t\t\t\tpositionDragY(percentScrolled * dragMaxY, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Positions the horizontal drag at the specified x position (and updates the viewport to reflect\r\n\t\t\t\t\t// this). animate is optional and if not passed then the value of animateScroll from the settings\r\n\t\t\t\t\t// object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tpositionDragX: function(x, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpositionDragX(x, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Positions the vertical drag at the specified y position (and updates the viewport to reflect\r\n\t\t\t\t\t// this). animate is optional and if not passed then the value of animateScroll from the settings\r\n\t\t\t\t\t// object this jScrollPane was initialised with is used.\r\n\t\t\t\t\tpositionDragY: function(y, animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpositionDragY(y, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// This method is called when jScrollPane is trying to animate to a new position. You can override\r\n\t\t\t\t\t// it if you want to provide advanced animation functionality. It is passed the following arguments:\r\n\t\t\t\t\t// * ele - the element whose position is being animated\r\n\t\t\t\t\t// * prop - the property that is being animated\r\n\t\t\t\t\t// * value - the value it's being animated to\r\n\t\t\t\t\t// * stepCallback - a function that you must execute each time you update the value of the property\r\n\t\t\t\t\t// * completeCallback - a function that will be executed after the animation had finished\r\n\t\t\t\t\t// You can use the default implementation (below) as a starting point for your own implementation.\r\n\t\t\t\t\tanimate: function(ele, prop, value, stepCallback, completeCallback)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar params = {};\r\n\t\t\t\t\t\tparams[prop] = value;\r\n\t\t\t\t\t\tele.animate(\r\n\t\t\t\t\t\t\tparams,\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t'duration'\t: settings.animateDuration,\r\n\t\t\t\t\t\t\t\t'easing'\t: settings.animateEase,\r\n\t\t\t\t\t\t\t\t'queue'\t\t: false,\r\n\t\t\t\t\t\t\t\t'step'\t\t: stepCallback,\r\n\t\t\t\t\t\t\t\t'complete'\t: completeCallback\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the current x position of the viewport with regards to the content pane.\r\n\t\t\t\t\tgetContentPositionX: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentPositionX();\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the current y position of the viewport with regards to the content pane.\r\n\t\t\t\t\tgetContentPositionY: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentPositionY();\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the width of the content within the scroll pane.\r\n\t\t\t\t\tgetContentWidth: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentWidth;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the height of the content within the scroll pane.\r\n\t\t\t\t\tgetContentHeight: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentHeight;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the horizontal position of the viewport within the pane content.\r\n\t\t\t\t\tgetPercentScrolledX: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentPositionX() / (contentWidth - paneWidth);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns the vertical position of the viewport within the pane content.\r\n\t\t\t\t\tgetPercentScrolledY: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn contentPositionY() / (contentHeight - paneHeight);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns whether or not this scrollpane has a horizontal scrollbar.\r\n\t\t\t\t\tgetIsScrollableH: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn isScrollableH;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Returns whether or not this scrollpane has a vertical scrollbar.\r\n\t\t\t\t\tgetIsScrollableV: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn isScrollableV;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Gets a reference to the content pane. It is important that you use this method if you want to\r\n\t\t\t\t\t// edit the content of your jScrollPane as if you access the element directly then you may have some\r\n\t\t\t\t\t// problems (as your original element has had additional elements for the scrollbars etc added into\r\n\t\t\t\t\t// it).\r\n\t\t\t\t\tgetContentPane: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn pane;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the\r\n\t\t\t\t\t// animateScroll value from settings is used instead.\r\n\t\t\t\t\tscrollToBottom: function(animate)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpositionDragY(dragMaxY, animate);\r\n\t\t\t\t\t},\r\n\t\t\t\t\t// Hijacks the links on the page which link to content inside the scrollpane. If you have changed\r\n\t\t\t\t\t// the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the\r\n\t\t\t\t\t// contents of your scroll pane will work then call this function.\r\n\t\t\t\t\thijackInternalLinks: $.noop,\r\n\t\t\t\t\t// Removes the jScrollPane and returns the page to the state it was in before jScrollPane was\r\n\t\t\t\t\t// initialised.\r\n\t\t\t\t\tdestroy: function()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdestroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\tinitialise(s);\r\n\t\t}\r\n\r\n\t\t// Pluginifying code...\r\n\t\tsettings = $.extend({}, $.fn.jScrollPane.defaults, settings);\r\n\r\n\t\t// Apply default speed\r\n\t\t$.each(['arrowButtonSpeed', 'trackClickSpeed', 'keyboardSpeed'], function() {\r\n\t\t\tsettings[this] = settings[this] || settings.speed;\r\n\t\t});\r\n\r\n\t\treturn this.each(\r\n\t\t\tfunction()\r\n\t\t\t{\r\n\t\t\t\tvar elem = $(this), jspApi = elem.data('jsp');\r\n\t\t\t\tif (jspApi) {\r\n\t\t\t\t\tjspApi.reinitialise(settings);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(\"script\",elem).filter('[type=\"text/javascript\"],:not([type])').remove();\r\n\t\t\t\t\tjspApi = new JScrollPane(elem, settings);\r\n\t\t\t\t\telem.data('jsp', jspApi);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n\r\n\t$.fn.jScrollPane.defaults = {\r\n\t\tshowArrows\t\t\t\t\t: false,\r\n\t\tmaintainPosition\t\t\t: true,\r\n\t\tstickToBottom\t\t\t\t: false,\r\n\t\tstickToRight\t\t\t\t: false,\r\n\t\tclickOnTrack\t\t\t\t: true,\r\n\t\tautoReinitialise\t\t\t: false,\r\n\t\tautoReinitialiseDelay\t\t: 500,\r\n\t\tverticalDragMinHeight\t\t: 0,\r\n\t\tverticalDragMaxHeight\t\t: 99999,\r\n\t\thorizontalDragMinWidth\t\t: 0,\r\n\t\thorizontalDragMaxWidth\t\t: 99999,\r\n\t\tcontentWidth\t\t\t\t: undefined,\r\n\t\tanimateScroll\t\t\t\t: false,\r\n\t\tanimateDuration\t\t\t\t: 300,\r\n\t\tanimateEase\t\t\t\t\t: 'linear',\r\n\t\thijackInternalLinks\t\t\t: false,\r\n\t\tverticalGutter\t\t\t\t: 4,\r\n\t\thorizontalGutter\t\t\t: 4,\r\n\t\tmouseWheelSpeed\t\t\t\t: 3,\r\n\t\tarrowButtonSpeed\t\t\t: 0,\r\n\t\tarrowRepeatFreq\t\t\t\t: 50,\r\n\t\tarrowScrollOnHover\t\t\t: false,\r\n\t\ttrackClickSpeed\t\t\t\t: 0,\r\n\t\ttrackClickRepeatFreq\t\t: 70,\r\n\t\tverticalArrowPositions\t\t: 'split',\r\n\t\thorizontalArrowPositions\t: 'split',\r\n\t\tenableKeyboardNavigation\t: true,\r\n\t\thideFocus\t\t\t\t\t: false,\r\n\t\tkeyboardSpeed\t\t\t\t: 0,\r\n\t\tinitialDelay : 300, // Delay before starting repeating\r\n\t\tspeed\t\t\t\t\t\t: 30,\t\t// Default speed when others falsey\r\n\t\tscrollPagePercent\t\t\t: 0.8,\t\t// Percent of visible area scrolled when pageUp/Down or track area pressed\r\n\t\talwaysShowVScroll\t\t\t: false,\r\n\t\talwaysShowHScroll\t\t\t: false,\r\n\t\tresizeSensor\t\t\t\t: false,\r\n\t\tresizeSensorDelay\t\t\t: 0,\r\n\t};\r\n\r\n}));\r\n","/*! modernizr 3.6.0 (Custom Build) | MIT *\r\n * https://modernizr.com/download/?-setclasses !*/\r\n!function(n,e,s){function o(n){var e=r.className,s=Modernizr._config.classPrefix||\"\";if(c&&(e=e.baseVal),Modernizr._config.enableJSClass){var o=new RegExp(\"(^|\\\\s)\"+s+\"no-js(\\\\s|$)\");e=e.replace(o,\"$1\"+s+\"js$2\")}Modernizr._config.enableClasses&&(e+=\" \"+s+n.join(\" \"+s),c?r.className.baseVal=e:r.className=e)}function a(n,e){return typeof n===e}function i(){var n,e,s,o,i,l,r;for(var c in f)if(f.hasOwnProperty(c)){if(n=[],e=f[c],e.name&&(n.push(e.name.toLowerCase()),e.options&&e.options.aliases&&e.options.aliases.length))for(s=0;s 1) {\r\n const t = [];\r\n for (var r = a[1], e = r.split(\"&\"), s = 0; s < e.length; s++) {\r\n n = e[s].split(\"=\");\r\n t.push(n[0]);\r\n t[n[0]] = n[1];\r\n }\r\n\r\n if (t[\"elqCampaignId\"] !== undefined) {\r\n t[\"elqCampaignId\"] = window.location.hash.split(\"&\")[0];\r\n }\r\n\r\n if (/(manage-subscriptions|gerez-abonnements|manage-preferences|gerez-preferences)/.test(window.location\r\n .href)) {\r\n window.location.hash = \"\";\r\n }\r\n\r\n return t;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * In some pages, this inline property will override the current page URL for social media counters. \r\n * Examples of pages would be \"Thank you\", \"informations sent\", and so on.\r\n *\r\n * @type object\r\n * @memberof BDC\r\n */\r\n BDC.urlParams = urlParams = getParams();\r\n\r\n //pull lang attribute out of html document which may be different from browser language\r\n //use html language attribute to pick translation dictionary\r\n if(documentLang.match(BDC.currentLang)==null){\r\n BDC.currentLang = documentLang;\r\n }\r\n\r\n /**\r\n\t * Define load sub-namespace object.\r\n\t * @namespace load\r\n\t * @memberOf BDC\r\n \t */\r\n\r\n BDC.load = (function() {\r\n // Private properties\r\n // Object containing different scope properties for execution\r\n var funcs = {},\r\n\t\t// Functions push with public \"ready\" method. Those function are execute before \"funcs\"\r\n\t\t\twaitReady = [];\r\n\r\n /**\r\n\t\t * Private: Add an execution scope. This define an array to push methods for execution on document ready.\r\n\t\t * @param {string} scope Namespace name of the scope\r\n\t\t * @returns {array} Newly scope array.\r\n\t\t */\r\n function addScope(scope) {\r\n if(!funcs[scope]) {\r\n funcs[scope] = [];\r\n }\r\n return funcs[scope];\r\n }\r\n /**\r\n\t\t * Private: Add an execution methods to a specific scope.\r\n\t\t * @param {string} scope Name of namespace to add the method to for execution\r\n\t\t * @param {string|Array|function} method Name of the method to execute in the namespace or an anonymous function. Can be an array of methods to push more than one method in a single call.\r\n\t\t * @param {array} [args] Opional - Arguments array to pass to the method on execution\r\n\t\t * @returns {array} Scope array\r\n\t\t */\r\n function push(scope, method, args) {\r\n var i;\r\n if(!funcs[scope]) {\r\n addScope(scope);\r\n }\r\n // Register more than one functions\r\n if($.isArray(method)) {\r\n // Loop in method array\r\n for(i=0;method[i];i++) {\r\n // If current method is an array, this refer to a method with arguments to be pass on execution. Use this format [method, [arguments_list]]\r\n if($.isArray(method[i])) {\r\n push(scope, method[i][0], method[i].slice(1));\r\n } else {\r\n push(scope, method[i]);\r\n }\r\n }\r\n } else {\r\n funcs[scope].push([method, (args||[])]);\r\n }\r\n // Return the scope array\r\n return funcs[scope];\r\n }\r\n /**\r\n\t\t * Private: Execute all registered methods added with _push\r\n\t\t * @returns {undefined}\r\n\t\t */\r\n function exec() {\r\n var space, scope, func, args, isFunc, funcName, i;\r\n if(BDC.console) {\r\n BDC.console.time(\"All registered Group & Events:\");\r\n }\r\n // Loop through all scope in funcs\r\n for(scope in funcs) {\r\n if(funcs.hasOwnProperty(scope)) {\r\n space = BDC.Utils.parseNameSpace(scope);\r\n if(BDC.console) {\r\n BDC.console.group((space ? scope : \"window\") + '\" registered methods:');\r\n BDC.console.time(`Group \"${space ? scope : \"window\"}\" execution time:`);\r\n }\r\n for(i=0; funcs[scope][i]; i++) {\r\n isFunc = $.isFunction(window[funcs[scope][i]]); //$.isArray(funcs[scope][i]);\r\n // A function was added without a defined namespace or out of a namespace context\r\n if((space===false) || isFunc) {\r\n funcName = \"anonymous\";\r\n // No arguments function\r\n if(isFunc) {\r\n func = funcs[scope][i];\r\n args = [];\r\n // An array indicate a proper add with a push with arguments array [method, [args]].\r\n } else if ($.isArray(funcs[scope][i]) && funcs[scope][i].length === 2) {\r\n func = funcs[scope][i][0];\r\n args = funcs[scope][i][1];\r\n if(!$.isFunction(func)) {\r\n if(BDC.console) {\r\n BDC.console.warn(\"L'index 0 doit être une fonction pour être exécuté correctement via le _exec!\", funcs[scope][i], func, args);\r\n }\r\n isFunc = func = false;\r\n }\r\n }\r\n // Name space found\r\n } else {\r\n // No arguments function\r\n if(!$.isArray(funcs[scope][i])) {\r\n funcName = $.isFunction(space[funcs[scope][i]]) ? funcs[scope][i] : ((!!space[funcs[scope][i]] && $.isFunction(space[funcs[scope][i]].init)) ? funcs[scope][i]+\".init\" : \"unknown!\");\r\n func = $.isFunction(space[funcs[scope][i]]) ? space[funcs[scope][i]] : ((!!space[funcs[scope][i]] && $.isFunction(space[funcs[scope][i]].init)) ? space[funcs[scope][i]].init : false);\r\n args = [];\r\n isFunc = (!!func);\r\n // An array indicate a proper add with a push with arguments array [method, [args]].\r\n } else if ($.isArray(funcs[scope][i]) && funcs[scope][i].length === 2) {\r\n func = funcs[scope][i][0];\r\n funcName = $.isFunction(space[func]) ? func : ((!!space[func] && $.isFunction(space[func].init)) ? func+\".init\" : \"unknown!\");\r\n func = $.isFunction(space[func]) ? space[func] : ((!!space[func] && $.isFunction(space[func].init)) ? space[func].init : false);\r\n args = funcs[scope][i][1];\r\n if(!$.isFunction(func)) {\r\n if(BDC.console) {\r\n BDC.console.warn(\"L'index 0 doit être une fonction pour être exécuté correctement via le _exec!\", funcs[scope][i]);\r\n }\r\n func = false;\r\n }\r\n isFunc = (!!func);\r\n }\r\n\r\n }\r\n if(BDC.console) {\r\n BDC.console.time(`Apply name space \"${space ? scope : \"window\"}.${funcName}\"...`);\r\n }\r\n if(isFunc) {\r\n func.apply(this, args);\r\n } else {\r\n if(BDC.console) {\r\n BDC.console.warn(\"load._exec failed to execute \", scope, funcs[scope][i]);\r\n }\r\n }\r\n if(BDC.console) {\r\n BDC.console.timeEnd(`Apply name space \"${space ? scope : \"window\"}.${funcName}\"...`);\r\n }\r\n }\r\n if(BDC.console) {\r\n BDC.console.groupEnd();\r\n BDC.console.timeEnd(`Group \"${space ? scope : \"window\"}\" execution time:`);\r\n }\r\n }\r\n }\r\n if(BDC.console) {\r\n BDC.console.timeEnd(\"All registered Group & Events:\");\r\n }\r\n // Reset funcs\r\n funcs = {};\r\n }\r\n // Accès public aux méthodes\r\n return {\r\n addScope: function(scope) {\r\n return addScope(scope);\r\n },\r\n push: function(scope, method, args) {\r\n return push(scope, method, args);\r\n },\r\n getFuncs: function() {\r\n return funcs;\r\n },\r\n run: function() {\r\n for(let f in waitReady) {\r\n if(waitReady.hasOwnProperty(f)) {\r\n if($.isFunction(waitReady[f])) {\r\n waitReady[f]();\r\n } else {\r\n BDC.console.warn(\"run.waitReady failed to execute \", f, waitReady[f]);\r\n }\r\n }\r\n }\r\n exec();\r\n },\r\n ready: function(func) {\r\n waitReady.push(func);\r\n }\r\n };\r\n })();\r\n\t\r\n // Update global scope BDC namespace\r\n window.BDC = BDC;\r\n\r\n // Auto trigger all self implemented (plugin) functionalities on document ready\r\n $(function () {\r\n BDC.load.run();\r\n });\r\n}(jQuery, document, window, (window.BDC || {})));\r\n\r\n\r\n\r\n\r\n(function($, document, window, BDC) {\r\n\r\n if (!window.jQuery) {\r\n console.error (\"jQuery is not loaded!\");\r\n }\r\n\r\n BDC.Utils = $.extend(BDC.Utils, {\r\n timerStart: Date.now(),\r\n\r\n parseNameSpace: function(sNs, oBase) {\r\n oBase = oBase || window;\r\n if(typeof sNs === \"string\") {\r\n const parts = sNs.split(\".\");\r\n if(parts.length > 1 && typeof oBase[parts[0]] === \"object\") {\r\n // Recursively call parseNameSpace\r\n return BDC.Utils.parseNameSpace(parts.splice(1).join(\".\"), oBase[parts[0]]);\r\n } else {\r\n return oBase[parts[0]] || false;\r\n }\r\n }\r\n return sNs;\r\n },\r\n\r\n getDateNow: function() {\r\n return Date.now();\r\n },\r\n\r\n getRunningTimeInMs: function (now, returnTotal) {\r\n returnTotal = returnTotal || false;\r\n now = now || BDC.Utils.timerStart;\r\n return (!returnTotal ? (` -> Function executed in ${(Date.now() - now) / 1000} seconds.`) : `${((Date.now() - BDC.Utils.timerStart) / 1000)} seconds.`);\r\n },\r\n \r\n getHighestInteger: function(array) {\r\n return Math.max.apply(Math, array);\r\n }\r\n\r\n });\r\n\r\n window.BDC = BDC;\r\n\r\n BDC.load.push(\r\n \"BDC.Utils\",\r\n [\r\n \"getRunningTimeInMs\",\r\n \"parseNameSpace\",\r\n \"getDateNow\"\r\n ]\r\n );\r\n\r\n})(jQuery, document, window, (window.BDC || {}));\r\n","/**\r\n*\r\n* Dictionnary extension in the global namespace\r\n* @copyright 2016 BDC\r\n*\r\n* @namespace Dict\r\n* @memberof BDC\r\n* @param {object} @global jQuery\r\n* @param {object} document\r\n* @param {object} window\r\n* @param {object} @namespace BDC\r\n*/\r\n(function ($, document, window, BDC) {\r\n //'use strict';\r\n\r\n // Define or extend Dict sub-namespace, the Javascript dictionary\r\n BDC.Dict = $.extend(BDC.Dict, {});\r\n\r\n BDC.Dict = {\r\n \"menuBack\": {\r\n \"fr\": \"Retour\",\r\n \"en\": \"Back\"\r\n },\r\n \"menuClose\": {\r\n \"fr\": \"fermer\", \r\n \"en\": \"close\"\r\n }\r\n };\r\n //Updates the global scope with BDC namespace\r\n window.BDC = BDC;\r\n\r\n}(jQuery, document, window, (window.BDC || {})));\r\n\r\n/**\r\n* Utility functions extension in the global namespace\r\n* @copyright 2016 BDC\r\n*\r\n* @namespace Utils\r\n* @memberof BDC\r\n* @copyright 2016 BDC\r\n* @param {object} @global jQuery\r\n* @param {object} document\r\n* @param {object} window\r\n* @param {object} @namespace BDC\r\n*/\r\n(function ($, document, window, BDC) {\r\n\r\n //Exits if jQuery is not loaded (Fatal)\r\n if (!window.jQuery) {\r\n console.error(\"jQuery is not loaded!\");\r\n return false;\r\n }\r\n\r\n //Extends or create the Utils sub-namespace\r\n BDC.Utils = $.extend(BDC.Utils, {\r\n\r\n /**\r\n * Returns value of a specific parameter in URL\r\n *\r\n * @function gup\r\n * @memberof BDC.Utils\r\n * @param {string} URL parameter\r\n * @returns {string} parameter value\r\n */\r\n gup: function (name) {\r\n if (typeof name !== \"string\") return false;\r\n\r\n name = name.replace(/[\\[]/, \"\\\\\\[\").replace(/[\\]]/, \"\\\\\\]\");\r\n const regexS = `[\\\\?&]${name}=([^&#]*)`,\r\n regex = new RegExp(regexS),\r\n results = regex.exec(BDC.currentUrl);\r\n\r\n return results == null ? \"\" : results[1];\r\n },\r\n\r\n /**\r\n * Returns unique number based on date timestamp\r\n *\r\n * @function getUniqueId\r\n * @memberof BDC.Utils\r\n * @returns {number} unique ID\r\n */\r\n getUniqueId: function () {\r\n return new Date / 1E3 | 0;\r\n },\r\n\r\n /**\r\n * Detect which version of IE is used (if any)\r\n *\r\n * @function detectIE\r\n * @memberof BDC.Utils\r\n * @returns {boolean|string} IE version of false if not used (or not detected)\r\n */\r\n detectIE: function () {\r\n const ua = window.navigator.userAgent,\r\n msie = ua.indexOf(\"MSIE \"),\r\n trident = ua.indexOf(\"Trident/\"),\r\n edge = ua.indexOf(\"Edge/\");\r\n\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf(\".\", msie)), 10);\r\n }\r\n\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n const rv = ua.indexOf(\"rv:\");\r\n return parseInt(ua.substring(rv + 3, ua.indexOf(\".\", rv)), 10);\r\n }\r\n\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n\r\n /**\r\n * jQuery plugin - Adds a class \"active\" on top container when clicking on an element\r\n * You have to pass a jQuery collection of the element you want to have a class active on it when clicked.\r\n * You declare this in the DocReady state\r\n *\r\n * @function toggleActiveClassOnClick\r\n * @memberof BDC.Utils\r\n */\r\n toggleActiveClassOnClick: function () {\r\n $.fn.toggleActiveClassOnClick = function (leaveOthersOpened) {\r\n var $elem = $(this);\r\n leaveOthersOpened = leaveOthersOpened || false;\r\n\r\n $elem.on(\"click\", function () {\r\n //e.preventDefault();\r\n if (!leaveOthersOpened) $elem.not($(this)).removeClass(\"active\");\r\n $(this).toggleClass(\"active\");\r\n });\r\n };\r\n },\r\n\r\n /**\r\n * Detects if is mobile device\r\n * Returns true if mobile is detected\r\n *\r\n\t\t *@function : isMobileDevice\r\n\t\t * @memberof BDC.Utils\r\n\t\t **/\r\n isMobileDevice: function () {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n },\r\n\r\n /**\r\n * jQuery plugin - returns class list applied on a specific jQuery object.\r\n * example : $('html').getClassList();\r\n *\r\n * @function getClassList\r\n * @memberof BDC.Utils\r\n * @returns {object} array of all the classes applied on the element.\r\n */\r\n getClassList: function () {\r\n $.fn.getClassList = function () {\r\n return this[0].className.split(/\\s+/);\r\n };\r\n }\r\n\r\n });\r\n\r\n // Updates global scope with BDC namespace\r\n window.BDC = BDC;\r\n\r\n return true;\r\n})(jQuery, document, window, (window.BDC || {}));\r\n\r\n/**\r\n* Cookie functions extension in the global namespace\r\n* @copyright 2016 BDC\r\n*\r\n* @namespace Cookies\r\n* @memberof BDC\r\n* @param {object} @global jQuery\r\n* @param {object} document\r\n* @param {object} window\r\n* @param {object} @namespace BDC\r\n*/\r\n(function ($, document, window, BDC) {\r\n //\"use strict\";\r\n\r\n if (!window.jQuery) {\r\n console.error(\"jQuery is not loaded!\");\r\n return false;\r\n }\r\n\r\n //Extends or create Cookies sub-namespace in the global BDC namespace\r\n BDC.Cookies = $.extend((BDC.Cookie || {}), {\r\n\r\n /**\r\n * permanent cookie name. will store surveyOpened (true / false)\r\n *\r\n * @type string\r\n */\r\n cookiePermanentName: \"expandableSurvey\",\r\n\r\n /**\r\n * Will store number of visited pages during the session\r\n *\r\n * @type string\r\n */\r\n cookieSessionNbPages: \"expandableSessionNbPages\",\r\n\r\n /**\r\n * will store creation date of the cookie (gmt time) to calculate time laps.\r\n *\r\n * @type string\r\n */\r\n //\r\n cookieSessionCreation: \"expandableSessionCreation\",\r\n\r\n /**\r\n * will store survey state as it's open or not\r\n *\r\n * @type string\r\n */\r\n //\r\n cookieSurveyState: \"surveyOpened\",\r\n\r\n /**\r\n * creates a session cookie\r\n *\r\n * @function createCookie\r\n * @memberof BDC.Cookies\r\n * @param {string} cookie name\r\n * @param {string} value to put in cookie\r\n * @param {number} number of days before expiration\r\n */\r\n createCookie: function (name, value, days) {\r\n if (typeof name !== \"string\") return false;\r\n //days = days || 365;\r\n\r\n //var expires = \"\";\r\n var date, expires;\r\n if (days) {\r\n date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); // now + days\r\n expires = `; expires=${date.toGMTString()}`;\r\n //console.log('expires', expires);\r\n }\r\n else {\r\n expires = \"\";\r\n }\r\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Reads an existing cookie\r\n *\r\n * @function readCookie\r\n * @memberof BDC.Cookies\r\n * @param {string} cookie name\r\n */\r\n readCookie: function (name) {\r\n if (typeof name !== \"string\") return false;\r\n const nameEq = name + \"=\",\r\n ca = document.cookie.split(\";\");\r\n\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\r\n if (c.indexOf(nameEq) === 0) return c.substring(nameEq.length, c.length);\r\n }\r\n return null;\r\n },\r\n\r\n /**\r\n * Erases an existing cookie\r\n *\r\n * @function eraseCookie\r\n * @memberof BDC.Cookies\r\n * @param {string} cookie name\r\n */\r\n eraseCookie: function (name) {\r\n name = name || \"\";\r\n BDC.Cookies.createCookie(name, \"\", -1);\r\n },\r\n\r\n /**\r\n * Check if a cookie exists\r\n *\r\n * @function isCookie\r\n * @memberof BDC.Cookies\r\n * @param {string} cookie name\r\n * @returns {boolean} cookie exists of not\r\n */\r\n isCookie: function (cookieName) {\r\n if (typeof cookieName !== \"string\") return false;\r\n return (document.cookie.indexOf(cookieName) >= 0 ? true : false);\r\n }\r\n\r\n });\r\n\r\n //Updates global scope with BDC Namespace\r\n window.BDC = BDC;\r\n\r\n return true;\r\n})(jQuery, document, window, (window.BDC || {}));\r\n\r\n\r\n/**\r\n* All the regular functions to get the site running smoothly\r\n* @copyright 2016 BDC\r\n*\r\n* @namespace Main\r\n* @memberof BDC\r\n* @param {object} @global jQuery\r\n* @param {object} document\r\n* @param {object} window\r\n* @param {object} @namespace BDC\r\n*/\r\n(function ($, document, window, BDC) {\r\n //\"use strict\";\r\n\r\n if (!window.jQuery) {\r\n console.error(\"jQuery is not loaded!\");\r\n return false;\r\n }\r\n\r\n //Extends of create the \"Main\" subnamespace in global BDC namespace\r\n BDC.Main = $.extend((BDC.Main || {}), {\r\n\r\n /**\r\n FUNCTION NAME : blogContentChange()\r\n DESCRIPTION : Changes the order of the display of blogger picture once in mobile. Called on resize as well\r\n ARGUMENTS : None.\r\n HTML EXAMPLE : /fr/a-propos/qa-ref/qa-contentpage-type/qa-blog-post/\r\n **/\r\n\r\n /* à supprimer dans un prochain PBI */\r\n blogContentChange: function () {\r\n\r\n if ($(\".js-profile-author\").length) {\r\n\r\n const isMobileDevice = $(\"html\").hasClass(\"media-phone\");\r\n\r\n if (isMobileDevice) {\r\n //<768 MOBILE\r\n //on small screens : display the blogger pic after the title and the top ssocial shares:\r\n $(\".js-profile-author\").insertAfter(\".share-this\");\r\n }\r\n else {\r\n //>= 768 LARGE\r\n //on large screens, displays the \r\n $(\".js-change-display\").prepend($(\".js-profile-author\"));\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * get viewport size, defines global variable BDC.currentBreakpoint according to Bootstrap 3 standards breakpoints and add proper class to HTML tag\r\n *\r\n * @function viewportSize\r\n * @memberof BDC.Main\r\n * @returns {array} viewport width and height\r\n */\r\n viewportSize: function () {\r\n var viewPortWidth,\r\n viewPortHeight,\r\n breakpoint;\r\n\r\n // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight\r\n if (typeof window.innerWidth != \"undefined\") {\r\n viewPortWidth = window.innerWidth,\r\n viewPortHeight = window.innerHeight;\r\n }\r\n\r\n // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)\r\n else if (typeof document.documentElement != \"undefined\" && typeof document.documentElement.clientWidth != \"undefined\" && document.documentElement.clientWidth !== 0) {\r\n viewPortWidth = document.documentElement.clientWidth,\r\n viewPortHeight = document.documentElement.clientHeight;\r\n }\r\n\r\n // older versions of IE\r\n else {\r\n viewPortWidth = document.getElementsByTagName(\"body\")[0].clientWidth,\r\n viewPortHeight = document.getElementsByTagName(\"body\")[0].clientHeight;\r\n }\r\n\r\n BDC.isSmallMobile = false;\r\n BDC.isMobileMode = false;\r\n\r\n if (viewPortWidth < 768) {\r\n BDC.isSmallMobile = true;\r\n BDC.isMobileMode = true;\r\n breakpoint = \"phone\";\r\n }\r\n else if (viewPortWidth >= 768 && viewPortWidth < 992) {\r\n BDC.isMobileMode = true;\r\n breakpoint = \"tablet\";\r\n }\r\n else if (viewPortWidth >= 992 && viewPortWidth < 1200) {\r\n if (BDC.Utils.isMobileDevice() === true) {\r\n BDC.isMobileMode = true;\r\n breakpoint = \"tablet\";\r\n }\r\n else {\r\n breakpoint = \"desktop-small\";\r\n }\r\n\r\n }\r\n else {\r\n breakpoint = \"desktop-large\";\r\n }\r\n\r\n BDC.currentBreakPoint = `media-${breakpoint}`;\r\n $(\"html\").removeClass(\"media-phone media-tablet media-desktop-small media-desktop-large\").addClass(BDC.currentBreakPoint);\r\n\r\n BDC.viewportWidth = viewPortWidth;\r\n BDC.viewportHeight = viewPortHeight;\r\n\r\n return [viewPortWidth, viewPortHeight];\r\n },\r\n\r\n /**\r\n * Enable behaviors on different custom fields.\r\n * Also hook the custom field on an hidden input field with the help of a data atribute \"field\".\r\n *\r\n * @function customFieldBehavior\r\n * @memberof BDC.Main\r\n */\r\n customFieldBehavior: function () {\r\n /**\r\n * Assign the value of the custom field in the existing input field.\r\n * If Input field does not exist, it will be created then linked to the custom field.\r\n *\r\n * @function linkToInputField\r\n * @param {object} The jQuery parent custom field\r\n * @param {string} The field name that links the custom field with the hidden one. Use : data-field=\"field_name\" on the custom field.\r\n * @param {string} Value from the custom field to passe to the input hidden field\r\n */\r\n if ($(\".js-select\").length) {\r\n var navigateTo = function (url) {\r\n window.open(url, \"_self\");\r\n };\r\n\r\n var showNext = function (target, position) {\r\n $(`.${target}`).removeClass(\"hide\");\r\n $(\".js-select-slide\").css(\"transform\", `translate(${position}%, 0)`);\r\n };\r\n\r\n $(\".js-select\").each(function () {\r\n var $select = $(this),\r\n \t\t\tcurrentPosition = 0;\r\n\r\n if ($select.hasClass(\"js-select-with-button\")) {\r\n const $selectWrapper = $select.closest(\".js-select-wrapper\"),\r\n $selectButton = $selectWrapper.find(\".js-select-button\");\r\n\r\n $selectButton.click(function () {\r\n if (typeof $select.find(\":selected\").data(\"href\") === \"string\") {\r\n navigateTo($select.find(\":selected\").data(\"href\"));\r\n }\r\n if (typeof $select.find(\":selected\").data(\"target\") === \"string\") {\r\n currentPosition -= 100;\r\n showNext($select.find(\":selected\").data(\"target\"), currentPosition);\r\n }\r\n });\r\n }\r\n else {\r\n $select.change(function () {\r\n if (typeof $select.find(\":selected\").data(\"href\") === \"string\") {\r\n navigateTo($select.find(\":selected\").data(\"href\"));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n //console.log (\"customFieldBehavior\" + BDC.Utils.getRunningTimeInMs(dateNow, false));\r\n },\r\n\r\n /**\r\n * Manage behaviors of sliders boxes\r\n * Also hook the custom field on an hidden input field with the help of a data atribute \"field\".\r\n *\r\n * @function boxSlide\r\n * @memberof BDC.Main\r\n */\r\n boxSlide: function () {\r\n\r\n if ($(\".js-box-slide\").length) {\r\n $(\".js-btn-slider\").click(function () {\r\n\r\n const $boxButton = $(this),\r\n $boxArea = $boxButton.closest(\".js-box-slide-wrapper\"),\r\n $boxSlideArea = $boxArea.find(\".js-box-slide\"),\r\n $allBoxButton = $(\".js-btn-slider\"),\r\n $allBoxSlideArea = $(\".js-box-slide\");\r\n\r\n if ($boxButton.hasClass(\"icon-plus\")) {\r\n $allBoxButton.removeClass(\"icon-minus\").addClass(\"icon-plus\");\r\n $allBoxSlideArea.css(\"transform\", \"translate(0, 0)\");\r\n $boxButton.removeClass(\"icon-plus\").addClass(\"icon-minus\");\r\n $boxSlideArea.css(\"transform\", \"translate(-100%, 0)\");\r\n }\r\n else {\r\n $boxButton.removeClass(\"icon-minus\").addClass(\"icon-plus\");\r\n $boxSlideArea.css(\"transform\", \"translate(0, 0)\");\r\n }\r\n });\r\n }\r\n //console.log(\"careerBehavior\" + BDC.Utils.getRunningTimeInMs(dateNow, false));\r\n },\r\n\r\n /**\r\n * Manage all to deal the differents IFrame scenarios across the webSite depending of the Iframe source\r\n *\r\n * @function iFrameManagement\r\n * @memberof BDC.Main\r\n */\r\n iFrameManagement: function () {\r\n $(\"iframe\").each(function (i, e) {\r\n const $e = $(e);\r\n\r\n if (typeof $e.attr(\"src\") !== \"undefined\") {\r\n \r\n\r\n if(typeof BDC.domainsList != \"undefined\"){\r\n if ($e.attr(\"src\").indexOf(BDC.domainsList.eloqua.domain) > 0) {\r\n let origin = $e.attr(\"src\").split(\"/\");\r\n\r\n origin = origin[3].split(\"?\");\r\n $e.addClass(origin[0]);\r\n\r\n }\r\n }\r\n\r\n }\r\n else if ((typeof $e.attr(\"data-src\") !== \"undefined\") && ($e.hasClass(\"js-gaid\"))) {\r\n // if iframe contains 'data-src' attribute and has js-gaid as classname, we inject specific local script:\r\n const scriptGaid = \"/Style%20Library/site/scripts/analytics/pick_send_gaid.min.js\";\r\n $.getScript(scriptGaid, function () {});\r\n }\r\n\r\n });\r\n //console.log (\"iFrameManagement\" + BDC.Utils.getRunningTimeInMs(dateNow, false));\r\n },\r\n\r\n /**\r\n * Manage all to deal the differents IFrame scenarios across the webSite depending of the Iframe source\r\n *\r\n * @function iframeListener\r\n * @param {object} event data sent from the other domain and cought by the listener\r\n * @param {iframe} ? TBD\r\n * @memberof BDC.Main\r\n */\r\n iframeListener: function (event) {\r\n\r\n let domainFound = false;\r\n let domain;\r\n for (let key in BDC.domainsList) {\r\n if (Object.prototype.hasOwnProperty.call(BDC.domainsList, key)) {\r\n domain = `https://${BDC.domainsList[key].domain}`;\r\n if (domain === event.origin) {\r\n domainFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (domainFound === false) return;\r\n\r\n if (typeof event.data === \"string\") {\r\n const msgArray = event.data.split(\"|\");\r\n\r\n if (msgArray[0] === \"trigger\" && !$(\".fancybox-opened\").get(0)) {\r\n BDC.Utils.gup(msgArray);\r\n $(`[data-src=\"#${msgArray[1]}\"]`).trigger(\"click\");\r\n $(`#${msgArray[1]}`).find(\"a\").focus();\r\n if (msgArray.length > 2) {\r\n $(`[data-name=\"notificationTitle\"]`).each(function () {\r\n $(this).val(msgArray[2]);\r\n });\r\n $(`[data-name=\"sg_id\"]`).each(function () {\r\n $(this).val(msgArray[3]);\r\n });\r\n $(`[data-name=\"surveyID\"]`).each(function () {\r\n $(this).val(msgArray[4]);\r\n });\r\n $(`[data-name=\"assessementName\"]`).each(function () {\r\n $(this).val(msgArray[5]);\r\n });\r\n $(`[data-name=\"assessmentURL\"]`).each(function () {\r\n $(this).val(msgArray[6]);\r\n });\r\n }\r\n }\r\n if (msgArray[0] === \"anchor\") {\r\n $(\"html,body\").animate({ scrollTop: $(`#${msgArray[1]}`).offset().top }, \"slow\");\r\n }\r\n\r\n let numberMsg;\r\n if (msgArray[0] === \"hauteur\") {\r\n const spacing = 1;\r\n numberMsg = parseInt(msgArray[1], 10) - spacing;\r\n } else {\r\n numberMsg = msgArray[0];\r\n }\r\n\r\n if (!isNaN(Number(numberMsg)) && Number(numberMsg) > 0) {\r\n let selector;\r\n if (domain === \"https://ca.surveygizmo.com\" || domain === \"https://survey.alchemer-ca.com\") {\r\n selector = $(\"#js-frame\");\r\n } else {\r\n selector = $(`.${msgArray[2]}`);\r\n }\r\n\r\n selector.each(function () {\r\n if ($(this).parent().hasClass(\"fancybox-inner\") && BDC.Utils.isMobileDevice() === false) {\r\n const width = $(`[href$='${$(this)[0].src}']`).data(\"width\");\r\n $(this).parent().width(width);\r\n $(\".fancybox-wrap.fancybox-desktop.fancybox-type-iframe\").width(width + 30).css({ left: ($(window).width() - (width + 30)) / 2 });\r\n $(this).parent().height(Math.round(numberMsg));\r\n }\r\n\r\n $(this).height(Math.round(numberMsg));\r\n if (msgArray[3] !== undefined && msgArray[3] === true) $(this).addClass(\"send-success\");\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Add form class to iframes (won't be necessary once all Eloqua form are epi form)\r\n *\r\n * @function addFormClassToIframes\r\n * @memberof BDC.Main\r\n */\r\n addFormClassToIframes: function() {\r\n\t \r\n $(\"iframe\").each( function(i, e) {\r\n const $el = $(e);\r\n if ($el.attr(\"src\") != undefined && $el.attr(\"src\").indexOf(\"services.bdc.ca\") > 0) {\r\n let origin = $el.attr(\"src\").split(\"/\");\r\n origin = origin[3].split(\"?\");\r\n $el.addClass(origin[0]);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Email address decoder to avoid email picks by spam bots.\r\n * Anchor must have class \"email-to\".\r\n * NOTE : Email address must be specified in the text node of the anchor and in this form : name|AT|bdc|DOT|ca\r\n * AT will be replaced by a \"@\" and DOT will be replaced by a \".\"\r\n *\r\n * @function emailSpamProtection\r\n * @memberof BDC.Main\r\n */\r\n emailSpamProtection: function () {\r\n\r\n $('a[href*=\"mailto:\"]').each(function () {\r\n const $el = $(this);\r\n var email = String($el.attr(\"href\")).replace(\"mailto:\",\"\").trim();\r\n \r\n email = email.replace(\"|DOT|\", \".\");\r\n email = email.replace(\"|AT|\", \"@\");\r\n\r\n if($el.text().match(/\\|DOT\\||\\|AT\\|/) ){\r\n $el.text(email);\r\n }\r\n\r\n $el.attr(\"href\", `mailto:${email}`);\r\n });\r\n \r\n },\r\n\r\n /**\r\n * A list of jQuery selectors to enhance the DOM in specific situations\r\n *\r\n * @function htmlEnhancer\r\n * @memberof BDC.Main\r\n */\r\n htmlEnhancer: function () {\r\n\r\n //Build the Iframe string for section \"Manage Subscription\" or \"Manage Preferences\" based on arguments taken in URL and appends the iframe\r\n if ($(\"#manageSubsIFrame\").length && typeof BDC.domainsList != \"undefined\") {\r\n let endUrl = \"\",\r\n eloquaLanding = \"\";\r\n\r\n if (window.location.hostname === BDC.domainsList.dev.domain || window.location.hostname === BDC.domainsList.local.domain) {\r\n endUrl = \"_DEV\";\r\n }\r\n else if (window.location.hostname === BDC.domainsList.test.domain) {\r\n endUrl = \"_TEST\";\r\n }\r\n\r\n if (/(manage-subscriptions|gerez-abonnements)/.test(BDC.currentUrl)) {\r\n eloquaLanding = `Subscription-Management--LP--${BDC.currentLang}_branding${endUrl}`;\r\n }\r\n else if (/(manage-preferences|gerez-preferences)/.test(BDC.currentUrl)) {\r\n eloquaLanding = `Manage-my-preferences--${BDC.currentLang}${endUrl}`;\r\n }\r\n\r\n let iFrameHtml = `\";\r\n $(\"#manageSubsIFrame\").append(decodeURI(iFrameHtml));\r\n }\r\n \r\n },\r\n\r\n /**\r\n * Manages Fancybox options and calls depending on the content type and class\r\n *js-fancybox: class shouldn't be used in the Css.\r\n *\r\n * @function fancyBox\r\n * @memberof BDC.Main\r\n */\r\n fancyBox: function () {\r\n\r\n $('[data-fancybox=\"images\"]').fancybox({ \r\n afterLoad : function(instance, current) {\r\n current.$image.attr(\"alt\", current.opts.$orig.attr(\"data-alt\") );\r\n }\r\n });\r\n\r\n // keep this function for mpa button integration with Google MAPs API once BDC has an API Key\r\n $('[data-type=\"iframe\"]').fancybox({\r\n beforeLoad: function (instance, current) { \r\n\r\n if(typeof current.opts.$orig.attr(\"data-center\") != \"undefined\"){\r\n\r\n if(typeof current.opts.$orig.attr(\"data-place-map\") == \"undefined\"){\r\n const url = String(current.opts.$orig.attr(\"data-src\")).split(\"&\");\r\n\r\n //asign first index to final url\r\n let finalMapUrl = url[0];\r\n\r\n //replace maptype\r\n finalMapUrl = finalMapUrl.replace(\"place\",\"view\");\r\n \r\n //start at second indice and add parameters\r\n for(let i =1; i distanceScrollTop - offset && currentScroll < heightPlusOffset - offset) {\r\n currentBoundary = selfBoundary;\r\n if (currentBoundary !== pastBoundary) {\r\n //active\r\n boundaryNav.removeClass(\"boundary-active\");\r\n boundary.removeClass(\"boundary-active\");\r\n $(`[data-boundary-nav='${currentBoundary}']`).addClass(\"boundary-active\");\r\n $(`[data-boundary='${currentBoundary}']`).addClass(\"boundary-active\");\r\n //active select\r\n boundaryNavSelect.find(\"option[data-boundary-nav]\").prop(\"selected\", false);\r\n boundaryNavSelect.find(`option[data-boundary-nav='${currentBoundary}']`).prop(\"selected\", true);\r\n pastBoundary = currentBoundary;\r\n //console.log( currentBoundary );\r\n }\r\n }\r\n });\r\n });\r\n\r\n //destination\r\n boundaryNav.on(\"click\", function () {\r\n const selfBoundary = $(this).attr(\"data-boundary-nav\");\r\n\r\n $(\"html, body\").animate({\r\n scrollTop: ($(`[data-boundary='${selfBoundary}']`).offset().top)\r\n }, 500);\r\n });\r\n\r\n boundaryNavSelect.on(\"change\", function () {\r\n const self = $(this),\r\n selfBoundary = self.find(\":selected\").data(\"boundary-nav\"),\r\n selfMenu = self.parents(\"[data-absolute-to-fix]\");\r\n var mobileOffset = 0;\r\n\r\n if (selfMenu.length) {\r\n mobileOffset = selfMenu.outerHeight() + 24;\r\n }\r\n\r\n $(\"html, body\").animate({\r\n scrollTop: ($(`[data-boundary='${selfBoundary}']`).offset().top - mobileOffset)\r\n }, 500);\r\n });\r\n }\r\n },\r\n\r\n /**\r\n\t\t*When Clicking on divs with js-clickable-block class, fetch the href attribute to redirect the page to:\r\n\r\n\t\t*@function clickableBlocks\r\n\t\t*@member of BDC.Main\r\n\t\t*/\r\n clickableBlocks: function () {\r\n $(\".js-clickable-block\").off().on(\"click\", function (event) {\r\n\r\n const isTargetA = $(event.target).is(\".js-clickable-link\"),\r\n hrefLink = $(this).find(\".js-clickable-link\").attr(\"href\");\r\n var targetLink = $(this).find(\".js-clickable-link\").attr(\"target\");\r\n\r\n if (targetLink === undefined) {\r\n targetLink = \"_self\";\r\n }\r\n\r\n //fire the window.open, only if other elements within the block than a link is clicked\r\n if (isTargetA === false) {\r\n window.open(hrefLink, targetLink);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n *By clicking on item with class=js-expand, toggle event is fired on the closest element\r\n *CLass: js-accordion: should be used only for script.\r\n *CLass: js-expand: should be used only for script.\r\n *Includes :\r\n *Multiple expandos\r\n *Accordion\r\n *Hubs\r\n *\r\n *@function toggleElement\r\n *@memberof BDC.Main\r\n */\r\n toggleElement: function () {\r\n\r\n const expandClass = \".js-expand\",\r\n accordionClass = \".js-accordion\",\r\n closeContentClass = \"close-content\",\r\n showExpandClass = \"show-expand\",\r\n expandOpenClass = \".js-expand-open\",\r\n $arrExpand = $(expandClass),\r\n\r\n //single accordion at a time:\r\n $arrAccordion = $(accordionClass);\r\n let i,\r\n $prevSibling,\r\n $alertBoxHeight = 0;\r\n const $arrAccordionWrapper = $(\".js-accordion-wrapper\");\r\n\r\n if ($arrExpand.length > 0) {\r\n\r\n $(\".title-expand\").each(function () {\r\n if (!$(this).find(\".icon-expand\").length) {\r\n $(this).append('');\r\n }\r\n });\r\n\r\n //Default expando/accordion active: should exist in only one element:\r\n //Add class js-expand-open. #170869\r\n if ($(expandOpenClass).length > 0) {\r\n $(expandOpenClass).toggleClass(closeContentClass);\r\n $(expandOpenClass).next().toggleClass(showExpandClass);\r\n }\r\n\r\n if ($arrAccordion.length === 0) {\r\n //...multiple expandos : free to low cost\r\n //The user can choose to open/close expandos\r\n\r\n for (i = 0; i < $arrExpand.length; i++) {\r\n $prevSibling = $arrExpand[i].previousElementSibling;\r\n $prevSibling.onclick = function () {\r\n this.classList.toggle(closeContentClass);\r\n this.nextElementSibling.classList.toggle(showExpandClass);\r\n };\r\n }\r\n }\r\n else {\r\n //....single Accordion:\r\n //Only one expando at a time, is opened\r\n $arrAccordionWrapper.each(function () {\r\n const $this = $(this);\r\n\r\n $this.find(accordionClass).click(function () {\r\n const offsetTop = $(this).offset().top,\r\n scrollTo = $(`.${closeContentClass}`).length && $(`.${closeContentClass}`).offset().top < offsetTop ? offsetTop - $(`.${showExpandClass}`).height() : offsetTop;\r\n\r\n $(this).toggleClass(closeContentClass);\r\n $(this).siblings(expandClass).toggleClass(showExpandClass);\r\n\r\n $this.find(expandClass).not($(this).siblings(expandClass)).removeClass(showExpandClass);\r\n $this.find(accordionClass).not($(this)).removeClass(closeContentClass);\r\n\r\n $(\"html, body\").animate({\r\n scrollTop: scrollTo - $alertBoxHeight\r\n }, 500, function () {\r\n\r\n });\r\n });\r\n });\r\n\r\n $(document).on(\"click\", `a[href^=\"#\"], a[href^=\"${window.location.pathname}#\"]`, function (event) {\r\n const linkAnchor = event.target.hash,\r\n anchor = $(accordionClass).find(linkAnchor);\r\n\r\n if (anchor.length) {\r\n const itemAccordion = anchor.closest(accordionClass),\r\n offsetTop = itemAccordion.offset().top,\r\n scrollTo = $(`.${closeContentClass}`).length && $(`.${closeContentClass}`).offset().top < offsetTop ? offsetTop - $(`.${showExpandClass}`).height() : offsetTop;\r\n\r\n $(expandClass).removeClass(showExpandClass);\r\n $(accordionClass).removeClass(closeContentClass);\r\n\r\n itemAccordion.addClass(closeContentClass);\r\n itemAccordion.siblings(expandClass).addClass(showExpandClass);\r\n\r\n $(\"html, body\").animate({\r\n scrollTop: scrollTo - $alertBoxHeight\r\n }, 500);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Queries Sharepoint to retrieve text or html code based on ID and inject it in the page\r\n *\r\n * @function loadBcContentFromSharePoint\r\n * @memberof BDC.Main\r\n */\r\n\r\n displayNoteForBusinessCentre: function() {\r\n if(typeof window.policeNote != \"undefined\") {\r\n const note = window.policeNote;\r\n if(typeof note.url != \"undefined\" && typeof note.targetElement != \"undefined\" ) {\r\n const params = {\r\n url: note.url, \r\n type: \"GET\", \r\n contentType: \"application/json\", \r\n datatype: \"text\", \r\n async: true,\r\n processData: false,\r\n error: function (xhr) { \r\n console.log(`Error: ${xhr.statusText}`); \r\n }, \r\n success: function (result) {\r\n\r\n if($(note.targetElement).length > 0){\r\n $(note.targetElement).html(result); \r\n }\r\n else{\r\n console.log(`Cannot find ${note.targetElement}`);\r\n }\r\n \r\n }\r\n };\r\n $.ajax(params);\r\n } else{\r\n console.log(\"url and targetElement Required to Display Note\");\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Adds Canada map and provinces dots in the contactUs section\r\n *\r\n * @function contactUsMap\r\n * @memberof BDC.Main\r\n */\r\n contactUsMap: function () { \r\n if ($(\".js-map\").length) { \r\n // Set number of in map dot\r\n const dotNumber = function () {\r\n $(\".js-business-list\").each(function () {\r\n const nbCentres = $(this).find(\"li\").length,\r\n province = $(this).data(\"province\");\r\n\r\n $(`.js-map-dot[data-province=\"${province}\"] .map-dot-number`).html(nbCentres);\r\n });\r\n };\r\n\r\n // Set active province\r\n var activeProvince = function () {\r\n const selectedProvince = $(\".js-map-select\").val();\r\n $(\".js-map-prov\").removeClass(\"active hover\");\r\n $(\".js-business-list\").addClass(\"hide\");\r\n \r\n $(`.js-business-list[data-province=\"${selectedProvince}\"]`).removeClass(\"hide\");\r\n $(`.js-map-prov[data-province=\"${selectedProvince}\"]`).addClass(\"active\");\r\n };\r\n\r\n // Hover event for map area, img and dot\r\n $(\".js-map-area, .js-map-prov, .js-map-dot\").hover(function () { \r\n const province = $(this).data(\"province\");\r\n \r\n $(\".js-map-prov\").removeClass(\"hover\");\r\n $(`.js-map-prov[data-province=\"${province}\"]`).addClass(\"hover\");\r\n },\r\n function () {\r\n $(\".map-img\").hover(function () {\r\n $(\".js-map-prov\").removeClass(\"hover\");\r\n });\r\n });\r\n \r\n // Click or touchend event for map area, img and dot\r\n $(\"area, .js-map-prov, .js-map-dot\").on(\"click touchend\", function () {\r\n const province = $(this).data(\"province\");\r\n \r\n $(`.js-map-select [value=\"${province}\"]`).prop(\"selected\", true);\r\n activeProvince();\r\n });\r\n \r\n // Change event on select\r\n $(\".js-map-select\").change(function () {\r\n activeProvince();\r\n });\r\n \r\n if($(\".js-rwd-image\").length) {\r\n const scriptPath = \"/assets/js/vendors/split/jquery.rwd-image-maps.min.js\";\r\n //Call the script partner.js:\r\n $.getScript(scriptPath, function () {\r\n $(\".js-rwd-image\").rwdImageMaps();\r\n });\r\n };\r\n \r\n dotNumber();\r\n activeProvince();\r\n }\r\n },\r\n\r\n /*\r\n\t\t* Adds a slider to free-to-low-cost \"tables\"\r\n * @function slidingTable\r\n * @memberof BDC.Main\r\n */\r\n slidingTable: function () {\r\n\r\n $(\".js-tabs-trigger\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n const index = parseInt($(this).attr(\"data-open-tab\"));\r\n let tabHolderTarget = $(this).attr(\"data-tab-target\");\r\n\r\n //if no tab target defined uses js-tabs-wrapper\r\n if (typeof tabHolderTarget == \"undefined\") {\r\n tabHolderTarget = \"js-tabs-wrapper\";\r\n }\r\n\r\n const tab = $(`.${tabHolderTarget}`).find(`.tabs-list .js-tab:eq(${index})`);\r\n tab[0].scrollIntoView();\r\n tab.trigger(\"click\");\r\n\r\n return false;\r\n });\r\n\r\n if ($(\".js-swipe\").length) {\r\n\r\n var linkEl = document.head.querySelector('link[href^=\"/assets/scss/main.min.css?v=\"]');\r\n function linkLoaded(link) {\r\n return Boolean(link.sheet);\r\n }\r\n var isCssLinkLoaded = linkLoaded(linkEl); \r\n function timeout() {\r\n setTimeout(function () {\r\n if (!isCssLinkLoaded) {\r\n isCssLinkLoaded = linkLoaded(linkEl);\r\n timeout();\r\n }\r\n else {\r\n $(\".js-swipe\").each(function () {\r\n\r\n var $wrapper = $(this), // wrapper of the slider element (HtmlElement)\r\n $prevButton = $wrapper.find(\".js-swipe-prev\"), // Previous button (HtmlElement)\r\n $nextButton = $wrapper.find(\".js-swipe-next\"), // Next button (HtmlElement)\r\n $menu,\r\n $tabsSlider,\r\n $tableHeader,\r\n $tableLines,\r\n $tabs,\r\n $tabsContent,\r\n $tabsMarker,\r\n clickCount = 0,\r\n positionTabMarker = 0,\r\n positionTabSlider = 0,\r\n minPositionTabSlider = 0,\r\n maxPositionTabSlider,\r\n i,\r\n startSwipe,\r\n navigationStatus,\r\n tabWidth,\r\n activeTab,\r\n recalculateArrowsOnResize,\r\n containerWidth,\r\n detectSwipe,\r\n tabMargin,\r\n pathName;\r\n\r\n // Variables necessary for js-table-swipe\r\n if ($wrapper.hasClass(\"js-table-swipe\")) {\r\n $menu = $wrapper.find(\".js-table-swipe-menu\"); // The element where the menu will be inserted (HtmlElement)\r\n $tableHeader = $wrapper.find(\".js-table-swipe-header span\"); // Table column header (NodeList)\r\n $tableLines = $wrapper.find(\".available-features\"); // Table lines (NodeList)\r\n }\r\n // Variables necessary for js-tabs-swipe\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n pathName = BDC.currentUrl; // URL for the verification if another tab should be active\r\n $tabs = $wrapper.find(\".js-tab\"); // All tabs (NodeList)\r\n $tabsSlider = $wrapper.find(\".js-tabs-slider\"); // Element that is moving inside the overflow hidden (HtmlElement)\r\n $tabsContent = $wrapper.parent(\".js-tabs-wrapper\").find(\".js-tab-content\"); // The content associated with each tabs (HtmlElement)\r\n $tabsMarker = $wrapper.find(\".js-tab-marker\"); // Marker indicating wich tab is active (HtmlElement)\r\n tabMargin = parseInt($tabs.css(\"marginRight\")); // Margin right of the tabs\r\n tabWidth = $tabs.outerWidth() + tabMargin; // Get the total width of a tab, margin included\r\n maxPositionTabSlider = ((tabWidth * $tabs.length) - tabMargin) - containerWidth; // Set the maximum position of the slider\r\n activeTab = $(\".js-tab-active\").length > 0 ? $(\".js-tab-active\").index() : 0; // Indicate the active tabs\r\n containerWidth = $wrapper.width(); // Get the width of the container\r\n }\r\n // Variables necessary for js-slider-swiper\r\n else if ($wrapper.hasClass(\"js-slider-swipe\")) {\r\n $menu = $wrapper.find(\".js-slider-swipe-menu\");\r\n $wrapper.$slides = $wrapper.find(\".js-slide\");\r\n }\r\n\r\n // Slider navigation\r\n var SliderNav = function (tableHeader, menuHtmlElement) {\r\n this.menu = [];\r\n this.columnCount = 0;\r\n if ($wrapper.hasClass(\"js-table-swipe\")) {\r\n this.columnPerPage = 4;\r\n\r\n if (BDC.currentBreakPoint === \"media-desktop-large\") {\r\n this.columnPerPage = 5;\r\n }\r\n }\r\n else if ($wrapper.hasClass(\"js-slider-swipe\")) {\r\n var topInitial = 0,\r\n numberColumn = 0;\r\n\r\n $wrapper.$slides.each(function () {\r\n const positionTop = $(this).position().top;\r\n\r\n if (topInitial === 0) {\r\n topInitial = positionTop;\r\n }\r\n if (topInitial === positionTop) {\r\n numberColumn++;\r\n }\r\n });\r\n\r\n this.columnPerPage = numberColumn;\r\n }\r\n\r\n // Provide a table with name of columns in the HTML\r\n this.getHeader = function () {\r\n if (tableHeader.length > this.columnPerPage) {\r\n const menuArray = [];\r\n for (i = 0; i < tableHeader.length; i++) {\r\n // Update the table header\r\n // add an entry in the control bar for each column found\r\n menuArray.push(tableHeader[i].innerHTML);\r\n menuHtmlElement[0].innerHTML += ``;\r\n }\r\n this.columnCount = menuArray.length; // update the number of columns found\r\n this.menu = menuArray; // crate the table with all header (strings)\r\n this.paginate(0, this.columnPerPage, this.columnCount); // set the pagination to 0 by default\r\n startSwipe(); // launch the listeners\r\n navigationStatus();\r\n } else {\r\n $wrapper.addClass(\"unswipe-table\");\r\n }\r\n };\r\n // pagination - page suivante\r\n this.nextPage = function () {\r\n\r\n // If table or slider\r\n if ($wrapper.hasClass(\"js-table-swipe\") || $wrapper.hasClass(\"js-slider-swipe\")) {\r\n\r\n if (clickCount >= (this.columnCount - this.columnPerPage)) {\r\n clickCount = this.columnCount - this.columnPerPage;\r\n } else {\r\n clickCount += 1;\r\n }\r\n this.paginate(clickCount, this.columnPerPage, this.columnCount);\r\n }\r\n // If tabs\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n positionTabSlider = positionTabSlider + tabWidth;\r\n\r\n if (positionTabSlider >= maxPositionTabSlider) {\r\n positionTabSlider = maxPositionTabSlider;\r\n }\r\n $tabsSlider.css(\"transform\", `translate(-${positionTabSlider}px, 0)`);\r\n }\r\n\r\n navigationStatus();\r\n };\r\n // pagination - previous page\r\n this.prevPage = function () {\r\n\r\n // If table or slider\r\n if ($wrapper.hasClass(\"js-table-swipe\") || $wrapper.hasClass(\"js-slider-swipe\")) {\r\n\r\n if (clickCount > 0) {\r\n clickCount -= 1;\r\n }\r\n this.paginate(clickCount, this.columnPerPage, this.columnCount);\r\n }\r\n // If tabs\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n positionTabSlider = positionTabSlider - tabWidth;\r\n\r\n if (positionTabSlider <= minPositionTabSlider) {\r\n positionTabSlider = minPositionTabSlider;\r\n }\r\n $tabsSlider.css(\"transform\", `translate(-${positionTabSlider}px, 0)`);\r\n }\r\n\r\n navigationStatus();\r\n };\r\n // pagination of the elements\r\n this.paginate = function (start, scale, maxScale) {\r\n\r\n const displayStart = start;\r\n var displayEnd = parseInt(displayStart) + parseInt(scale);\r\n\r\n // limit\r\n if (displayEnd > maxScale) {\r\n displayEnd = maxScale;\r\n }\r\n // menu - indicator\r\n if ($menu) {\r\n const visualMenu = $wrapper.find(\".item-p\"); // (NodeList)\r\n for (i = 0; i < visualMenu.length; i++) {\r\n if (i >= displayStart && i < displayEnd) {\r\n $(visualMenu[i]).addClass(\"item-p-active\");\r\n }\r\n else {\r\n $(visualMenu[i]).removeClass(\"item-p-active\");\r\n }\r\n }\r\n }\r\n if ($wrapper.hasClass(\"js-table-swipe\")) {\r\n // header\r\n for (i = 0; i < $tableHeader.length; i++) {\r\n if (i < displayStart || i >= displayEnd) {\r\n $($tableHeader[i]).addClass(\"d-block d-md-none\");\r\n } else {\r\n $($tableHeader[i]).removeClass(\"d-block d-md-none\");\r\n }\r\n }\r\n // table\r\n for (i = 0; i < $tableLines.length; i++) {\r\n const cells = $($tableLines[i]).find(\".expandable-data-col\");\r\n for (let cell = 0; cell < cells.length; cell++) {\r\n if (cell < displayStart || cell >= displayEnd) {\r\n $(cells[cell]).addClass(\"d-md-none\").removeClass(\"d-md-inline-block\");\r\n } else {\r\n $(cells[cell]).removeClass(\"d-md-none\").addClass(\"d-md-inline-block\");\r\n }\r\n }\r\n }\r\n }\r\n else if ($wrapper.hasClass(\"js-slider-swipe\")) {\r\n // Slides\r\n for (i = 0; i < $wrapper.$slides.length; i++) {\r\n if (i < displayStart || i >= displayEnd) {\r\n $($wrapper.$slides[i]).addClass(\"hide\");\r\n } else {\r\n $($wrapper.$slides[i]).removeClass(\"hide\");\r\n }\r\n }\r\n }\r\n\r\n clickCount = displayStart;\r\n navigationStatus();\r\n };\r\n\r\n this.resetActiveTab = function () {\r\n //console.log(\"Triggering new search\");\r\n activeTab = 0;\r\n positionTabSlider = 0;\r\n $wrapper.app.setActiveTab();\r\n recalculateArrowsOnResize();\r\n };\r\n\r\n // Set the active tab\r\n this.setActiveTab = function () {\r\n $tabs.removeClass(\"tab-active js-tab-active\");\r\n $($tabs[activeTab]).addClass(\"tab-active js-tab-active\");\r\n $tabsContent.addClass(\"hide\");\r\n $($tabsContent[activeTab - $($tabs[activeTab]).prevAll(\".tab-small-disabled\").length]).removeClass(\"hide\");\r\n positionTabMarker = tabWidth * activeTab;\r\n $tabsMarker.css(\"transform\", `translate(${positionTabMarker}px, 0)`);\r\n\r\n this.setAnchorTiles();\r\n };\r\n\r\n this.setAnchorTiles = function () {\r\n $(\".js-tabs-anchor-tiles-wrapper .js-tabs-anchor-tile\").each(function (index) {\r\n index === activeTab ? $(this).addClass(\"hide\") : $(this).removeClass(\"hide\");\r\n });\r\n };\r\n\r\n // Set arrows for tabs where they appear depending of width of the container\r\n this.setArrows = function () {\r\n if ((tabWidth * $tabs.length) - tabMargin > $wrapper.outerWidth()) {\r\n $wrapper.addClass(\"tabs-container-arrow\");\r\n\r\n $prevButton.removeClass(\"hide\");\r\n $nextButton.removeClass(\"hide\");\r\n\r\n containerWidth = $wrapper.width();\r\n maxPositionTabSlider = ((tabWidth * $tabs.length) - tabMargin) - containerWidth;\r\n }\r\n else if ($wrapper.hasClass(\"tabs-container-arrow\")) {\r\n $wrapper.removeClass(\"tabs-container-arrow\");\r\n $prevButton.addClass(\"hide\");\r\n $nextButton.addClass(\"hide\");\r\n\r\n containerWidth = $wrapper.width();\r\n maxPositionTabSlider = ((tabWidth * $tabs.length) - tabMargin) - containerWidth;\r\n }\r\n };\r\n\r\n\r\n $(window).on(\"getNewSearchResults\", this.resetActiveTab);\r\n\r\n };\r\n\r\n recalculateArrowsOnResize = function () {\r\n // Verify if arrow is needed\r\n containerWidth = $wrapper.width();\r\n maxPositionTabSlider = ((tabWidth * $tabs.length) - tabMargin) - containerWidth;\r\n\r\n $wrapper.app.setArrows();\r\n\r\n // If tabs slider should be moved due to resize\r\n if (positionTabSlider > maxPositionTabSlider) {\r\n positionTabSlider = maxPositionTabSlider;\r\n }\r\n if (positionTabSlider < minPositionTabSlider) {\r\n positionTabSlider = minPositionTabSlider;\r\n }\r\n\r\n $tabsSlider.css(\"transform\", `translate(-${positionTabSlider}px, 0)`);\r\n\r\n navigationStatus();\r\n };\r\n\r\n startSwipe = function () {\r\n\r\n // Click on previous button\r\n $prevButton.click(function (evt) {\r\n evt.preventDefault();\r\n $wrapper.app.prevPage();\r\n });\r\n // Click on next button\r\n $nextButton.click(function (evt) {\r\n //console.log($nextButton);\r\n evt.preventDefault();\r\n $wrapper.app.nextPage();\r\n });\r\n // swipe left (Hammer.js)\r\n detectSwipe.on(\"swipeleft\", function () {\r\n $wrapper.app.nextPage();\r\n });\r\n // swipe right (Hammer.js)\r\n detectSwipe.on(\"swiperight\", function () {\r\n $wrapper.app.prevPage();\r\n });\r\n\r\n // If table or slider\r\n if ($wrapper.hasClass(\"js-table-swipe\") || $wrapper.hasClass(\"js-slider-swipe\")) {\r\n // menu clicable\r\n $menu.click(function (evt) {\r\n if ($(evt.target).hasClass(\"item-p\")) {\r\n let dataToNumber = Number(evt.target.dataset.count);\r\n clickCount = dataToNumber;\r\n if (dataToNumber > ($wrapper.app.columnCount - $wrapper.app.columnPerPage)) {\r\n dataToNumber = ($wrapper.app.columnCount - $wrapper.app.columnPerPage);\r\n }\r\n $wrapper.app.paginate(dataToNumber, $wrapper.app.columnPerPage, $wrapper.app.columnCount);\r\n }\r\n navigationStatus();\r\n });\r\n }\r\n // If tabs\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n // On click on tab\r\n $tabs.click(function () {\r\n\r\n if (!$(this).hasClass(\"tab-small-disabled\")) {\r\n\r\n // Set the tab clicked as the active tab\r\n activeTab = $(this).index();\r\n $wrapper.app.setActiveTab();\r\n\r\n // Verify if we need to check if there's a posibility that the clicked tab isn't fully visible\r\n if ($wrapper.hasClass(\"tabs-container-arrow\")) {\r\n const posActiveTab = -(positionTabSlider - (tabWidth * (activeTab))); // Calculate the position the active tab should have\r\n\r\n if (posActiveTab < minPositionTabSlider) {\r\n $wrapper.app.prevPage();\r\n }\r\n else if ((posActiveTab + tabWidth - tabMargin) > containerWidth) {\r\n $wrapper.app.nextPage();\r\n }\r\n }\r\n }\r\n });\r\n\r\n // If the screen is resized or the orientation of the device changed\r\n $(window).on(\"resize orientationchange\", recalculateArrowsOnResize);\r\n }\r\n\r\n\r\n }; //END startSwipe()\r\n\r\n navigationStatus = function () {\r\n\r\n var $chevronPrev = $wrapper.find(\".js-swipe-prev\"),\r\n $chevronNext = $wrapper.find(\".js-swipe-next\");\r\n\r\n // If chevron-swipe is not on the element where the click is verified\r\n if (!$chevronPrev.hasClass(\"chevron-swipe\")) {\r\n $chevronPrev = $prevButton.find(\".chevron-swipe\");\r\n }\r\n if (!$chevronNext.hasClass(\"chevron-swipe\")) {\r\n $chevronNext = $nextButton.find(\".chevron-swipe\");\r\n }\r\n\r\n if ($wrapper.hasClass(\"js-table-swipe\") || $wrapper.hasClass(\"js-slider-swipe\")) {\r\n if (clickCount === 0) {\r\n $chevronPrev.removeClass(\"chevron-swipe-active\");\r\n $chevronNext.addClass(\"chevron-swipe-active\");\r\n }\r\n else if (clickCount >= ($wrapper.app.columnCount - $wrapper.app.columnPerPage)) {\r\n // Got to max page\r\n $chevronPrev.addClass(\"chevron-swipe-active\");\r\n $chevronNext.removeClass(\"chevron-swipe-active\");\r\n\r\n }\r\n else {\r\n // default\r\n $chevronPrev.addClass(\"chevron-swipe-active\");\r\n $chevronNext.addClass(\"chevron-swipe-active\");\r\n\r\n }\r\n }\r\n // If tabs\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n if (positionTabSlider === minPositionTabSlider) {\r\n $chevronPrev.removeClass(\"chevron-swipe-active\");\r\n }\r\n else {\r\n $chevronPrev.addClass(\"chevron-swipe-active\");\r\n }\r\n\r\n if (positionTabSlider === maxPositionTabSlider) {\r\n $chevronNext.removeClass(\"chevron-swipe-active\");\r\n }\r\n else {\r\n $chevronNext.addClass(\"chevron-swipe-active\");\r\n }\r\n }\r\n };\r\n\r\n /*****\r\n * Calls\r\n ********************/\r\n $wrapper.app = null;\r\n detectSwipe = new Hammer($wrapper[0]); // hammer.js\r\n\r\n if ($wrapper.hasClass(\"js-table-swipe\")) {\r\n $wrapper.app = new SliderNav($tableHeader, $menu);\r\n $wrapper.app.getHeader(); // d�marre le script\r\n }\r\n else if ($wrapper.hasClass(\"js-tabs-swipe\")) {\r\n navigationStatus();\r\n $wrapper.app = new SliderNav();\r\n $wrapper.app.setArrows();\r\n\r\n var posLeft;\r\n if (pathName.indexOf(\"onglet\") !== -1) {\r\n var userQueryParam = pathName.split(\"#\")[1],\r\n tab = userQueryParam.split(\"=\")[1];\r\n\r\n posLeft = $(\".js-tab\").eq(tab).position().left;\r\n activeTab = tab;\r\n\r\n if ((posLeft + tabWidth - tabMargin) > containerWidth) {\r\n for (i = 0; i <= activeTab; i++) {\r\n $wrapper.app.nextPage();\r\n }\r\n }\r\n }\r\n else if (BDC.Utils.gup(\"tab\") != \"\" || BDC.Utils.gup(\"cat\") != \"\" ) {\r\n\r\n // if tab really exist + add 1 for user experience\r\n var tab = parseInt(BDC.Utils.gup(\"tab\")) - 1;\r\n var cat = parseInt(BDC.Utils.gup(\"cat\")) - 1;\r\n\r\n // go to right tab\r\n posLeft = $(\".js-tab\").eq(tab).position().left;\r\n activeTab = tab;\r\n if ((posLeft + tabWidth - tabMargin) > containerWidth) {\r\n for (i = 0; i <= activeTab; i++) {\r\n $wrapper.app.nextPage();\r\n }\r\n }\r\n //open the right \r\n if (BDC.Utils.gup(\"cat\") != \"\") {\r\n var activeCat = $(\".js-tabs-wrapper .js-tab-content\").eq(tab).find(\"article\").eq(cat),\r\n offset = 0;\r\n\r\n activeCat.find(\".js-expando\").addClass(\"close-content\");\r\n activeCat.find(\".js-expand\").addClass(\"show-expand\");\r\n setTimeout(function () {\r\n $(\"html, body\").animate({\r\n scrollTop: activeCat.offset().top - offset\r\n }, 1500);\r\n }, 600);\r\n }\r\n\r\n } else if (activeTab >= 0) {\r\n if (typeof $(\".js-tab\").eq(activeTab).position() != \"undefined\") {\r\n posLeft = $(\".js-tab\").eq(activeTab).position().left;\r\n if ((posLeft + tabWidth - tabMargin) > containerWidth) {\r\n for (i = 0; i <= activeTab; i++) {\r\n $wrapper.app.nextPage();\r\n }\r\n }\r\n }\r\n }\r\n\r\n $wrapper.app.setActiveTab();\r\n startSwipe();\r\n }\r\n else if ($wrapper.hasClass(\"js-slider-swipe\")) {\r\n $wrapper.app = new SliderNav($wrapper.$slides, $menu);\r\n $wrapper.app.getHeader();\r\n }\r\n }); // END js-swipe each\r\n }\r\n }, 100);\r\n }\r\n timeout();\r\n }\r\n }\r\n });\r\n\r\n window.BDC = BDC;\r\n\r\n if (!$(\"html\").hasClass(\"js-main-func-applied\")) {\r\n\r\n BDC.load.push(\r\n \"BDC.Main\",\r\n [\r\n \"viewportSize\", //get viewport size, defines global variable BDC.currentBreakpoint according to Bootstrap 3 standards breakpoints and add proper class to HTML tag\r\n \"customFieldBehavior\", //Enable behaviors on different custom fields.\r\n \"iFrameManagement\", //Manage all to deal the differents IFrame scenarios across the webSite depending of the Iframe source\r\n \"emailSpamProtection\", //Email address decoder to avoid email picks by spam bots.\r\n \"boundary\", //Highligts the good elemnt in the scrollable left nav\r\n \"addFormClassToIframes\",\r\n \"fancyBox\", //Manages Fancybox options and calls depending on the content type and class\r\n \"htmlEnhancer\", //A list of jQuery selectors to enhance the DOM in specific situations\r\n \"contactUsMap\", //Adds Canada map and provinces dots in the contactUs section\r\n \"displayNoteForBusinessCentre\", //displays a business center note if variable and target identifier are passed into function\r\n \"toggleElement\",\t\t\t\t\t\t//Expand Collapse elements\r\n \"clickableBlocks\",\t\t\t\t\t\t//by clicking on divs redirect the page to its href\r\n \"slidingTable\", // add a sliding on fake tables\r\n \"boxSlide\", //Manage slider boxes in page.\r\n \"blogContentChange\" //Displayfix for bolog author mobile-large\r\n ]\r\n );\r\n\r\n $(\"html\").addClass(\"js-main-func-applied\");\r\n }\r\n\r\n //Listen to requests sent by Validation Form : Messages received contains the height of the form and function will apply this\r\n //height to the concerned Iframe. This will adjust automatically the iframe to the height of the form.\r\n if (window.addEventListener) {\r\n addEventListener(\"message\", BDC.Main.iframeListener, false);\r\n } else {\r\n attachEvent(\"onmessage\", BDC.Main.iframeListener);\r\n }\r\n\r\n return true;\r\n})(jQuery, document, window, (window.BDC || {}));\r\n\r\n/**\r\n* All the functions relatives to the mobile usage\r\n* @copyright 2016 BDC\r\n*\r\n* @namespace Mobile\r\n* @memberof BDC\r\n* @param {object} @global jQuery\r\n* @param {object} document\r\n* @param {object} window\r\n* @param {object} @namespace BDC\r\n*/\r\n(function ($, document, window, BDC) {\r\n //\"use strict\";\r\n\r\n if (!window.jQuery) {\r\n console.error(\"jQuery is not loaded!\");\r\n }\r\n\r\n BDC.Mobile = $.extend((BDC.Mobile || {}), {\r\n\r\n /**\r\n * Generates the mobile top navigation menu\r\n *\r\n * @function generateMobileTopNavMenu\r\n * @memberof BDC.Mobile\r\n */\r\n generateMobileTopNavMenu: function () {\r\n if ($(\".dropdown-list\").length) {\r\n //show available languages on drop down\r\n $(\".current-language\").on(\"click\",function(){\r\n $(this).toggleClass(\"active\");\r\n $(\".dropdown-content\").toggleClass(\"d-block\");\r\n });\r\n\r\n //clicking outside of menu will close it\r\n $(window).on(\"click\",\r\n function(e) {\r\n if (!$(e.target).hasClass(\"current-language\") &&\r\n !$(e.target).hasClass(\"dropdown-content\") &&\r\n !$(e.target).parent().hasClass(\"dropdown-content\")) {\r\n $(\".current-language\").removeClass(\"active\");\r\n $(\".dropdown-content\").removeClass(\"d-block\");\r\n }\r\n });\r\n }\r\n\r\n if($(\".js-main-menu\").length) {\r\n // DOM change needed for mobile\r\n const menuHtml = function () {\r\n // Set the active link for mobile\r\n var spliceDeleteCount = 0; // We will use splice to walk-up page tree and find the page or the lower level parent page that is being displayed in the menu to make it active\r\n const homePattern = new RegExp(/^\\/((fr|en)(\\/)*)?$/,\"i\"),\r\n path = window.location.pathname.toLowerCase(),\r\n splitChar = \"/\",\r\n pathArray = path.split(splitChar);\r\n\r\n //match top level\r\n while (pathArray.length > spliceDeleteCount && !homePattern.test(path)) {\r\n pathArray.splice((pathArray.length - 1), spliceDeleteCount); // Remove N pages (last pages) from path\r\n const finalPath = pathArray.join(splitChar), // To make sure with have a match either with or without the trailing '/'\r\n link = $(\".js-main-menu\").find(`[href=\\\"${finalPath}\\\"]`);\r\n\r\n if (link.length > 1) {\r\n // Verify which link is the correct one\r\n link.each(function () {\r\n const parentLink = $(this).closest(\"ol\").parent().children(\"a\").attr(\"href\");\r\n if ($(this).attr(\"href\").indexOf(parentLink) > -1) {\r\n $(this).addClass(\"nav-link-active\");\r\n }\r\n });\r\n break;\r\n }\r\n else if (link.length === 1) {\r\n link.addClass(\"nav-link-active\");\r\n break;\r\n }\r\n spliceDeleteCount++;\r\n }\r\n\r\n $(\".js-main-menu .nav\").prepend(`
  • ${BDC.Dict.menuBack[BDC.currentLang]}
  • `);\r\n }; //END menuHtml\r\n\r\n // Set which link are supposed to be shown on mobile\r\n var setActiveSubmenu = function () {\r\n // Reset\r\n $(\".nav-submenu-active\").removeClass(\"nav-submenu-active\");\r\n $(\".nav-hide-link\").removeClass(\"nav-hide-link\");\r\n $(\".nav-show-link\").removeClass(\"nav-show-link\");\r\n\r\n if ($(\".js-main-menu .nav-link-active\").next().length) {\r\n $(\".js-main-menu .nav-link-active\").addClass(\"nav-show-link\");\r\n $(\".js-main-menu .nav-link-active\").next().addClass(\"nav-submenu-active\").addClass(\"nav-indent-link\");\r\n $(\".nav-link-active\").parentsUntil(\".js-main-menu\").each(function() {\r\n if ($(this).prop(\"tagName\") === \"OL\") {\r\n !$(this).hasClass(\"nav\") ? $(this).addClass(\"nav-hide-link\").addClass(\"nav-submenu-active\") : $(this).addClass(\"nav-hide-link\");\r\n }\r\n });\r\n }\r\n else {\r\n var first = false;\r\n $(\".nav-link-active\").parentsUntil(\".js-main-menu\").each(function () {\r\n if ($(this).prop(\"tagName\") === \"OL\") {\r\n if (first) {\r\n !$(this).hasClass(\"nav\") ? $(this).addClass(\"nav-hide-link\").addClass(\"nav-submenu-active\"): $(this).addClass(\"nav-hide-link\");\r\n }\r\n else if (!$(this).hasClass(\"nav\")) {\r\n $(this).addClass(\"nav-submenu-active\").addClass(\"nav-indent-link\").prev().addClass(\"nav-show-link\");\r\n }\r\n first = true;\r\n }\r\n });\r\n }\r\n // Show the back button for mobile if needed\r\n $(\".nav-submenu-active\").length ? $(\".js-main-menu-back\").removeClass(\"hide\") : $(\".js-main-menu-back\").addClass(\"hide\");\r\n }; //END setActiveSubmenu()\r\n menuHtml();\r\n setActiveSubmenu();\r\n\r\n // Toggle the menu when burger menu is clicked\r\n $(\".js-menu-btn\").on(\"click\", function() {\r\n $(\".js-menu-burger\").toggleClass(\"burger-menu-icon-active\");\r\n $(\".js-main-menu\").toggleClass(\"main-menu-active\");\r\n $(\".js-main-menu-overlay\").toggleClass(\"main-menu-overlay-active\");\r\n \r\n $(\".burger-menu-label\").toggleClass(\"burger-menu-label-active\");\r\n $(\".burger-menu-label\").hasClass(\"burger-menu-label-active\") ? $(\".burger-menu-label\").text(BDC.Dict.menuClose[BDC.currentLang]) : $(\".burger-menu-label\").text(\"menu\");\r\n if ($(\".js-main-menu\").hasClass(\"main-menu-active\")) {\r\n setActiveSubmenu();\r\n }\r\n });\r\n\r\n // Remove state active on the menu when overlay is clicked\r\n $(\".js-main-menu-overlay\").on(\"click\", function () {\r\n $(\".js-menu-burger\").removeClass(\"burger-menu-icon-active\");\r\n $(\".js-main-menu\").removeClass(\"main-menu-active\");\r\n $(\".js-main-menu-overlay\").removeClass(\"main-menu-overlay-active\");\r\n });\r\n\r\n // Go back one parent in the navigation tree when you click on the back button\r\n $(\".js-main-menu-back\").click(function () {\r\n const $currentNavHome = $(\".js-main-menu .nav-show-link\");\r\n $currentNavHome.next().hasClass(\"nav-submenu-active\") ? $currentNavHome.next().removeClass(\"nav-submenu-active\").removeClass(\"nav-indent-link\") : $currentNavHome.closest(\".nav-submenu-active\").removeClass(\"nav-submenu-active\").removeClass(\"nav-indent-link\");\r\n $currentNavHome.closest(\".nav-submenu-active\").addClass(\"nav-indent-link\").prev().addClass(\"nav-show-link\");\r\n $currentNavHome.closest(\".nav-hide-link\").removeClass(\"nav-hide-link\");\r\n $currentNavHome.removeClass(\"nav-show-link\");\r\n\r\n // If no more back are possible, hide button\r\n if (!$(\".js-main-menu .nav-submenu-active\").length) {\r\n $(this).addClass(\"hide\");\r\n }\r\n });\r\n\r\n // When link clicked, navigate to page or show next navigation\r\n $(\".js-main-menu a:not(.js-main-menu-back)\").click(function (evt) {\r\n\r\n //target first level\r\n if($(\".js-menu-btn\").css(\"display\") === \"none\"){\r\n \r\n //check is top level\r\n //check if already clicked\r\n //check is viewport max width is 1024\r\n //check if has a sibling \"ol submenu\"\r\n if ($(evt.currentTarget).parentsUntil(\".nav\").length && !$(evt.currentTarget).hasClass(\"mobile-click\") && window.BDC.Utils.breakpoints.isBP(\"l-down\") && !$(evt.currentTarget).next().length) {\r\n evt.preventDefault(); \r\n $(evt.currentTarget).addClass(\"mobile-click\");\r\n\r\n //doing text match to remove other mobile click classes JUST IN CASE addClass and removeClass are not fired in order\r\n var linkText = String($(evt.currentTarget).text()).trim();\r\n const levelOneLinks = $(\".topNav > ol.nav > li:not(.hide-menu-item-desktop) > a:not(.js-main-menu-back)\");\r\n\r\n //cycle through top links and find non-selected matches\r\n $(levelOneLinks).each(function() {\r\n const currentLinkText = String($(this).text()).trim();\r\n if(!linkText.match(currentLinkText)){\r\n $(this).removeClass(\"mobile-click\");\r\n }\r\n });\r\n }\r\n }\r\n else if ($(this).next().length > 0 && !$(this).hasClass(\"nav-show-link\")) {\r\n evt.preventDefault();\r\n $(this).closest(\"ol\").addClass(\"nav-hide-link\").removeClass(\"nav-indent-link\");\r\n $(\".js-main-menu .nav-show-link\").removeClass(\"nav-show-link\");\r\n $(this).addClass(\"nav-show-link\");\r\n $(this).next().addClass(\"nav-submenu-active\").addClass(\"nav-indent-link\");\r\n $(\".js-main-menu-back\").removeClass(\"hide\");\r\n }\r\n\r\n return true;\r\n });\r\n }//END $('.js-main-menu').length){..\r\n },//END generateMobileTopNavMenu()\r\n\r\n /**\r\n * Mobile Main menu, footer and left menu event binder\r\n *\r\n * @function mobileMenuEventsBinder\r\n * @memberof BDC.Mobile\r\n */\r\n mobileMenuEventsBinder: function () {\r\n function FooterMenuItem(ele) {\r\n\r\n var menu = this;\r\n menu.element = $(ele);\r\n menu.accordToggle = menu.element.find(\".js-accord-toggle\");\r\n\r\n menu.toggle = function () {\r\n //Accordion new concept & arrow visual up and down\r\n $(this).next().slideToggle(\"slow\");\r\n menu.element.toggleClass(\"active\");\r\n $(\".js-accord-content\").not($(this).next()).slideUp(\"slow\");\r\n $(\".js-accord-content\").not($(this).next()).closest(\".footer-useful-links\").removeClass(\"active\").find(\"span\").removeClass(\"arrow-up\").addClass(\"arrow-down\");\r\n $(this).find(\"span\").toggleClass(\"arrow-down arrow-up\");\r\n };\r\n\r\n menu.shouldHaveOpenableMenu = function () {\r\n return window.matchMedia(\"(max-width: 991px)\").matches;\r\n };\r\n\r\n menu.construct = function () {\r\n\r\n menu.accordToggle.unbind(\"click\");\r\n menu.element.height(\"auto\");\r\n\r\n if (menu.shouldHaveOpenableMenu()) {\r\n menu.accordToggle.bind(\"click\", menu.toggle);\r\n }\r\n else {\r\n menu.element.find(\">*\").css(\"display\", \"\");\r\n menu.element.find(\"span\").removeClass(\"arrow-up\").addClass(\"arrow-down\");\r\n }\r\n };\r\n\r\n $(window).bind(\"orientationchange resize\", menu.construct); // Bind build menu to resize\r\n menu.construct(); // Build menu for the first time\r\n }\r\n\r\n function menuManager() {\r\n const thisMenuManager = this;\r\n var list = new Array();\r\n\r\n thisMenuManager.ManageEvent = function (event) {\r\n var menu = this;\r\n if (event.type === \"Open\") {\r\n // Close all menu that is not the one that will be open\r\n allMenuUse(\"close\", function (pMenu) {\r\n if (pMenu.getIsActive()) {\r\n return !!$(pMenu.element).not(menu).length;\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n thisMenuManager.addMenu = function (menu) {\r\n list.push(menu);\r\n for (let i = 0; i < menu.Event.length; i++) {\r\n menu.element.bind(menu.Event[i], menuManager.ManageEvent);\r\n }\r\n };\r\n\r\n // function to order menus\r\n // condition got current menu\r\n function allMenuUse(method, condition) {\r\n if (typeof condition != \"function\") {\r\n condition = function () { return true };\r\n }\r\n for (let i = 0; i < list.length; i++) {\r\n if (condition(list[i])) {\r\n list[i][method]();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // call menuManager\r\n menuManager();\r\n\r\n var items = new Array(); // menus are archived in items\r\n $(\".footer-useful-links\").each(function () {\r\n if (!$(this).find(\".link-container\").length) {\r\n items.push(new FooterMenuItem(this));\r\n }\r\n });\r\n }\r\n }); //END BDC.Mobile func\r\n\r\n window.BDC = BDC;\r\n\r\n if (!$(\"html\").hasClass(\"js-mobile-func-applied\")) {\r\n\r\n BDC.load.push(\r\n \"BDC.Mobile\",\r\n [\r\n \"generateMobileTopNavMenu\" //Generates the mobile top navigation menu\r\n ]\r\n );\r\n\r\n $(\"html\").addClass(\"js-mobile-func-applied\");\r\n }\r\n\r\n})(jQuery, document, window, (window.BDC || {}));\r\n\r\nwindow.onload = function () {\r\n //Load script for loanCalulator:\r\n if ($(\".js-loancalculator\").length > 0) {\r\n const script = document.createElement(\"script\");\r\n\r\n script.src = \"/assets/js/loan-calculator/jquery.accrue.js\";\r\n\r\n script.async = true;\r\n \r\n document.body.appendChild(script);\r\n }\r\n};\r\n\r\n$(document).ready(function () {\r\n\r\n BDC.Mobile.mobileMenuEventsBinder();\r\n\r\n const parentElems = document.querySelectorAll(\".js-ajax-form\");\r\n parentElems.forEach(function (parentElem) {\r\n try {\r\n new FilteredAjaxForm({\r\n targetElement: parentElem\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n });\r\n\r\n //Initialize IframeResizer for site preview modes\r\n window.IFrameResizer.start(\r\n window.parent.document.querySelector(\"iframe[name=sitePreview], iframe[name=advancedSitePreview]\"),\r\n [\"div.container\"]\r\n );\r\n\r\n window.StickyStacker.start([\".position-sticky, .fixed-header header.header, .advanced-preview-message\"]);\r\n\r\n //exple: articles & tools landing: sliders\r\n BDC.Utils.toggleActiveClassOnClick();\r\n $(\".fn-slide-panel\").toggleActiveClassOnClick(false);\r\n\r\n /* Add a new function to random videos when loading the page */\r\n if ($(\"#randomVid\").length) {\r\n $(\"#randomVid .js-random-vid\").randomDisplay(); //Random the 3 first videos on /en/bank-devoted-exclusively-to-entrepreneurs/pages/webseries.aspx\r\n }\r\n});\r\n\r\nvar timer;\r\n\r\n$(window).on(\"resize orientationchange\", function () {\r\n\r\n window.clearTimeout(timer);\r\n\r\n timer = setTimeout(function () {\r\n BDC.Main.viewportSize();\r\n BDC.Main.blogContentChange();\r\n }, 200);\r\n});\r\n\r\nwindow.addEventListener(\"beforeprint\", function() {\r\n\r\n const images = document.querySelectorAll(\"img.lazyload\");\r\n\r\n images.forEach(function(item){\r\n window.lazySizes.loader.unveil(item);\r\n });\r\n});","function FilteredAjaxForm(settings) {\r\n if (typeof settings === \"undefined\" || settings === null) {\r\n throw \"No settings supplied.\";\r\n }\r\n\r\n if (!(settings.targetElement instanceof Element)) {\r\n throw `Cannot initialize AjaxForm for ${settings.targetElement}, it's not an Element.`;\r\n }\r\n\r\n this.settings = {\r\n container: settings.targetElement,\r\n loader: settings.targetElement.querySelector(settings.loaderSelector || \".js-loader\"),\r\n formSelector: settings.formSelector || \"form\",\r\n contentSelector: settings.contentSelector || \".js-ajax-form-content\",\r\n boundSubmitHandler: this.submitForm.bind(this)\r\n };\r\n\r\n FilteredAjaxForm.checkSelector(this.settings.container, this.settings.formSelector);\r\n FilteredAjaxForm.checkSelector(this.settings.container, this.settings.contentSelector);\r\n\r\n this.bindForm();\r\n}\r\n\r\nFilteredAjaxForm.prototype.bindForm = function () {\r\n const container = this.settings.container;\r\n const form = container.querySelector(this.settings.formSelector);\r\n\r\n this.ajaxForm = {\r\n form: form,\r\n formElements: Array.from(form),\r\n content: container.querySelector(this.settings.contentSelector)\r\n };\r\n\r\n const hadFindFailure = this.ajaxForm.form.getAttribute(\"data-findfailure\").toLowerCase() === \"true\";\r\n\r\n this.ajaxForm.formElements.forEach(function (element) {\r\n const elementName = element.nodeName.toLowerCase();\r\n\r\n if (elementName === \"select\") {\r\n element.disabled = hadFindFailure;\r\n element.addEventListener(\"change\", this.settings.boundSubmitHandler);\r\n return;\r\n }\r\n\r\n if (elementName === \"button\") {\r\n element.addEventListener(\"click\", this.settings.boundSubmitHandler);\r\n return;\r\n }\r\n\r\n }, this);\r\n}\r\n\r\nFilteredAjaxForm.prototype.unbindForm = function () {\r\n this.ajaxForm.formElements.forEach(function (element) {\r\n const elementName = element.nodeName.toLowerCase();\r\n\r\n if (elementName === \"select\") {\r\n element.removeEventListener(\"change\", this.settings.boundSubmitHandler);\r\n return;\r\n }\r\n\r\n if (elementName === \"button\") {\r\n element.removeEventListener(\"click\", this.settings.boundSubmitHandler);\r\n return;\r\n }\r\n\r\n }, this);\r\n}\r\n\r\nFilteredAjaxForm.prototype.submitForm = function (event) {\r\n const that = this;\r\n const trigger = event.currentTarget;\r\n\r\n const triggerName = trigger.nodeName.toLowerCase();\r\n \r\n if (triggerName === \"button\" && trigger.type === \"submit\") {\r\n event.preventDefault();\r\n }\r\n if (trigger.dataset.type === \"viewMore\") {\r\n this.viewMoreCompanies(event);\r\n }\r\n else {\r\n\r\n FilteredAjaxForm.toggleFormSelects(this.ajaxForm.formElements, false);\r\n\r\n const form = $(trigger.form);\r\n if (event.currentTarget.form.elements[\"pageNumber\"] !== undefined) { trigger.form.elements[\"pageNumber\"].value = 1; }\r\n let payload = form.serialize();\r\n \r\n if (payload.indexOf(\"managementFilter\")!==-1) {\r\n payload += \"&isManagement=true\";\r\n }\r\n else {\r\n payload += \"&isManagement=false\";\r\n }\r\n\r\n FilteredAjaxForm.toggleFormSelects(this.ajaxForm.formElements, true);\r\n FilteredAjaxForm.toggleVisible(this.ajaxForm.content);\r\n FilteredAjaxForm.toggleVisible(this.settings.loader);\r\n\r\n $.ajax({\r\n type: form.attr(\"method\"),\r\n url: form.data(\"action\"),\r\n cache: false,\r\n data: payload,\r\n success: function (response) {\r\n that.submitFormSuccess(response);\r\n },\r\n error: function (response) {\r\n that.submitFormFailure(response);\r\n }\r\n });\r\n }\r\n}\r\n\r\nFilteredAjaxForm.prototype.submitFormSuccess = function (response) {\r\n try {\r\n this.unbindForm();\r\n\r\n const refreshedMarkup = document.createElement(\"div\");\r\n refreshedMarkup.innerHTML = htmlsanitizer.SanitizeHtml(response);\r\n\r\n const refreshedContent = refreshedMarkup.querySelector(this.settings.contentSelector);\r\n const refreshedForm = refreshedMarkup.querySelector(this.settings.formSelector);\r\n\r\n if (refreshedForm != null && refreshedForm.getAttribute(\"data-findfailure\").toLowerCase() !== \"true\") {\r\n Array.from(refreshedForm).forEach(function (element) {\r\n if (element.nodeName.toLowerCase() === \"select\") {\r\n const existingSelect = this.ajaxForm.formElements.find(function (item) {\r\n return item.name === element.name;\r\n });\r\n\r\n if (existingSelect !== undefined && existingSelect != null) {\r\n existingSelect.replaceWith(element);\r\n }\r\n }\r\n }, this);\r\n }\r\n\r\n if (refreshedForm !== undefined && refreshedForm != null) {\r\n this.ajaxForm.form.setAttribute(\"data-findfailure\", refreshedForm.getAttribute(\"data-findfailure\"));\r\n }\r\n this.ajaxForm.content.replaceWith(refreshedContent);\r\n\r\n BDC.Mobile.learnMoreBehavior();\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n finally {\r\n this.bindForm();\r\n\r\n FilteredAjaxForm.toggleVisible(this.settings.loader);\r\n this.ajaxForm.content.classList.remove(\"hide\");\r\n }\r\n}\r\n\r\nFilteredAjaxForm.prototype.submitFormFailure = function (response) {\r\n console.log(\"Error submitting form.\");\r\n console.log(response);\r\n\r\n FilteredAjaxForm.toggleFormSelects(this.ajaxForm.formElements, false);\r\n FilteredAjaxForm.toggleVisible(this.ajaxForm.content);\r\n FilteredAjaxForm.toggleVisible(this.settings.loader);\r\n}\r\n\r\nFilteredAjaxForm.toggleFormSelects = function (formElements, disabled) {\r\n formElements.forEach(function (element) {\r\n if (element.nodeName.toLowerCase() === \"select\") {\r\n element.disabled = disabled;\r\n }\r\n });\r\n}\r\n\r\nFilteredAjaxForm.toggleVisible = function (element) {\r\n if (element != null) {\r\n element.classList.toggle(\"hide\");\r\n }\r\n}\r\n\r\nFilteredAjaxForm.checkSelector = function (targetElement, selector) {\r\n const element = targetElement.querySelector(selector);\r\n if (element == null) {\r\n throw `Cannot initialize AjaxForm for ${targetElement}, cannot find element for selector '${selector}'.`;\r\n }\r\n\r\n return element;\r\n}\r\n\r\nFilteredAjaxForm.prototype.viewMoreCompanies = function (event) {\r\n const that = this;\r\n event.stopPropagation();\r\n const target = event.currentTarget;\r\n const idParentContainer = $(target).data(\"container-id\");\r\n const form = $(target.form);\r\n const itemList = $(`#${idParentContainer}`).find(\".companies-list\");\r\n\r\n target.form.elements[\"pageNumber\"].value++;\r\n const payload = form.serialize();\r\n $(`#${idParentContainer}`).find(\".view-more-company-container\").remove();\r\n FilteredAjaxForm.toggleVisible(this.settings.loader);\r\n \r\n $.ajax({\r\n type: \"GET\",\r\n url: itemList.data(\"url\"),\r\n data: payload,\r\n cache: false,\r\n success: function (data) {\r\n FilteredAjaxForm.toggleVisible(that.settings.loader);\r\n\r\n itemList.append(htmlsanitizer.SanitizeHtml(data));\r\n\r\n $(`#${idParentContainer}`).find(\"button\").on(\"click\", that.settings.boundSubmitHandler);\r\n },\r\n error: function (data) {\r\n console.warn(\"error data\", data);\r\n }\r\n });\r\n}","const fixedHeader = document.querySelectorAll(\".fixed-header\");\r\n\r\nif (fixedHeader.length) {\r\n import(\"./modules/anchor-fixed-header.min.js\")\r\n .then(\r\n anchorFixedHeader => {\r\n anchorFixedHeader.initAnchorFixedHeader();\r\n }\r\n );\r\n}","(function() {\r\n\r\n const myObj = {\r\n url: $(\".js-blog-post-list\").data(\"url\"),\r\n blogPostListType: $(\".blog-post-large\").length ? \"Horizontal - Large\" : \"Horizontal - Small\"\r\n };\r\n\r\n myObj.setClickActions = function () {\r\n $(\"#btnViewMore\").click(function () {\r\n $(\".js-loader\").removeClass(\"hide\");\r\n $(\"#btnViewMore\").addClass(\"d-none\");\r\n myObj.callAjax();\r\n });\r\n }\r\n\r\n myObj.ajaxCall = function (skip, take) {\r\n $.get(myObj.url,\r\n {\r\n skip: skip,\r\n take: take,\r\n blogPostListType: myObj.blogPostListType\r\n },\r\n function (data) {\r\n const dataSanitized = htmlsanitizer.SanitizeHtml(data);\r\n\r\n $(\".js-loader\").addClass(\"hide\");\r\n $(\"#btnViewMore\").removeClass(\"d-none\");\r\n $(\"#skip\").val(parseInt(skip) + parseInt(take));\r\n\r\n $(\"#blogPostList\").append(dataSanitized);\r\n if ($(\"#hasMoreItemsToDisplay\").val() === \"false\") {\r\n $(\"#btnViewMore\").addClass(\"d-none\");\r\n }\r\n });\r\n }\r\n\r\n myObj.callAjax = function (skip, take) {\r\n const skipVal = (typeof skip == \"undefined\") ? $(\"#skip\").val() : skip,\r\n takeVal = (typeof take == \"undefined\") ? $(\"#take\").val() : take;\r\n myObj.ajaxCall(skipVal, takeVal);\r\n }\r\n\r\n myObj.init = function () {\r\n myObj.setClickActions();\r\n }\r\n\r\n myObj.checker = function () {\r\n if (typeof window.jQuery != \"undefined\") {\r\n if ($(\".js-blog-post-list\").length) {\r\n this.init();\r\n }\r\n }\r\n else {\r\n //restart request animation frame\r\n window.requestAnimationFrame(this.checker);\r\n }\r\n }\r\n\r\n //bing this to myObj is each function\r\n myObj.setClickActions = myObj.setClickActions.bind(myObj);\r\n myObj.ajaxCall = myObj.ajaxCall.bind(myObj);\r\n myObj.callAjax = myObj.callAjax.bind(myObj);\r\n myObj.init = myObj.init.bind(myObj);\r\n myObj.checker = myObj.checker.bind(myObj);\r\n \r\n //start request animation frame\r\n window.requestAnimationFrame(myObj.checker);\r\n})();"," (function(){\r\n\r\n var myObj = {\r\n resolver:null\r\n };\r\n\r\n myObj.checker = function(){\r\n if(typeof window.jQuery==\"undefined\"){\r\n window.requestAnimationFrame(this.checker);\r\n }else{\r\n this.resolver(\"ready\");\r\n }\r\n }\r\n\r\n myObj.resolveAfterLoad = function() {\r\n return new Promise(resolve => {\r\n this.resolver = resolve;\r\n window.requestAnimationFrame(this.checker);\r\n });\r\n }\r\n\r\n myObj.scrollPage = function(e){\r\n e.preventDefault;\r\n\r\n\r\n var $scrollTarget = $($(e.currentTarget).attr(\"href\"));\r\n //check if target ID exists on DOM\r\n if($scrollTarget.length>0){\r\n var headerHeight = $(\"header\").length>0?$(\"header\").outerHeight():0;\r\n //subtrack header height from scoll offset\r\n var scrollerAmt = $scrollTarget.offset().top - headerHeight;\r\n $(\"html, body\").animate({\r\n scrollTop: scrollerAmt\r\n }, 500);\r\n }\r\n }\r\n\r\n myObj.init = function(){\r\n $(\"[data-hash-scroller]\").each(function(){\r\n $(this).click(myObj.scrollPage);\r\n });\r\n }\r\n\r\n async function initCheck() {\r\n const result = await myObj.resolveAfterLoad();\r\n if(result==\"ready\"){\r\n myObj.init();\r\n }\r\n }\r\n\r\n myObj.checker = myObj.checker.bind(myObj);\r\n myObj.init = myObj.init.bind(myObj);\r\n myObj.resolveAfterLoad = myObj.resolveAfterLoad.bind(myObj);\r\n \r\n initCheck();\r\n\r\n })();","window.IFrameResizer = (function () {\r\n\r\n var iframeResizerInternal =\r\n {\r\n state: {},\r\n\r\n start: function (target, observableSelectors) {\r\n if (typeof target === 'undefined' || target === null) {\r\n //console.log(\"No target provided.\");\r\n return;\r\n }\r\n\r\n if (typeof observableSelectors === 'undefined'\r\n || observableSelectors === null\r\n || observableSelectors.length === 0) {\r\n //console.log(\"No selectors provided.\");\r\n return;\r\n }\r\n\r\n if (Object.prototype.toString.call(target) !== '[object HTMLIFrameElement]') {\r\n //console.log(\"target must be an iframe, got: %s\", Object.prototype.toString.call(target));\r\n return;\r\n }\r\n\r\n if (!Array.isArray(observableSelectors)) {\r\n //console.log(\"selectors must be an array, got: %s\", Object.prototype.toString.call(selectors));\r\n return;\r\n }\r\n\r\n //disconnect existing observer if somebody calls init twice\r\n if (Object.prototype.toString.call(this.state.observer) === '[object ResizeObserver]') {\r\n this.state.observer.disconnect();\r\n }\r\n\r\n var totalHeight = document.body.offsetHeight;\r\n var unobservedHeight = totalHeight;\r\n\r\n //only want unique elements, in case some selectors produce overlapping results, otherwise height would be duplicated\r\n var elementsSet = new Set();\r\n observableSelectors.forEach(function (selector) {\r\n try {\r\n var elements = document.querySelectorAll(String(selector));\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (!elementsSet.has(elements[i])) {\r\n elementsSet.add(elements[i]);\r\n unobservedHeight -= elements[i].offsetHeight;\r\n }\r\n }\r\n } catch (err) { } //don't care if it's not a valid selector\r\n }, this);\r\n\r\n //selectors produced no results, we can just return\r\n if (elementsSet.size === 0) {\r\n return;\r\n }\r\n\r\n this.state = {\r\n iframe: target,\r\n observer: new ResizeObserver(this.dimensionsChanged),\r\n observedElements: elementsSet,\r\n unobservedHeight: unobservedHeight\r\n };\r\n\r\n this.state.observedElements.forEach(function (observedElement) {\r\n this.state.observer.observe(observedElement);\r\n }, this);\r\n },\r\n\r\n stop: function () {\r\n if (Object.prototype.toString.call(this.state.observer) === '[object ResizeObserver]') {\r\n this.state.observer.disconnect();\r\n }\r\n },\r\n\r\n dimensionsChanged: function (entries) {\r\n var newHeight = this.state.unobservedHeight;\r\n\r\n //convert to a map for faster lookup, O(n) for all entries to convert, then O(1) for each lookup\r\n var entriesMap = new Map();\r\n entries.forEach(function (entry) {\r\n entriesMap.set(entry.target, entry);\r\n });\r\n\r\n this.state.observedElements.forEach(function (observedElement) {\r\n var entry = entriesMap.get(observedElement);\r\n if (entry === undefined) {\r\n newHeight += observedElement.offsetHeight;\r\n } else {\r\n //firefox gives a simple object, chrome/chromium gives an array\r\n var contentBoxSize = Array.isArray(entry.contentBoxSize) ? entry.contentBoxSize[0] : entry.contentBoxSize;\r\n newHeight += contentBoxSize.blockSize;\r\n }\r\n });\r\n\r\n this.state.iframe.style.height = newHeight + \"px\";\r\n }\r\n };\r\n\r\n iframeResizerInternal.dimensionsChanged = iframeResizerInternal.dimensionsChanged.bind(iframeResizerInternal);\r\n\r\n return iframeResizerInternal;\r\n})();\r\n","window.OnepagerHeader = (function () {\r\n\r\n const $mainNav = $(\".js-main-menu a[href*=\\\"#\\\"]\").not('[href=\"#\"]').not(\"[href=\\\"#0\\\"]\");\r\n\r\n function activeMenu($menuLinks) {\r\n const $scrollActivePosition = $(\"header\").outerHeight() + 24;\r\n\r\n $menuLinks.each(function (i) {\r\n const href = $(this).attr(\"href\");\r\n\r\n if ($(href).length) {\r\n if ($(href).offset().top - $(window).scrollTop() < $scrollActivePosition) {\r\n $mainNav.removeClass(\"nav-link-md-active nav-link-active\");\r\n $(this).addClass(\"nav-link-md-active nav-link-active\");\r\n return false;\r\n }\r\n else if (i === ($menuLinks.length - 1) && $(href).offset().top - $(window).scrollTop() >= $scrollActivePosition) {\r\n $mainNav.removeClass(\"nav-link-md-active nav-link-active\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {\r\n init: function () {\r\n\r\n activeMenu($mainNav);\r\n\r\n $(window).scroll(function () {\r\n activeMenu($($mainNav.get().reverse()));\r\n });\r\n\r\n $mainNav.click(function () {\r\n if ($(\".js-menu-burger\").hasClass(\"burger-menu-icon-active\")) {\r\n $(\".js-menu-burger\").toggleClass(\"burger-menu-icon-active\");\r\n $(\".js-main-menu\").toggleClass(\"main-menu-active\");\r\n $(\".js-main-menu-overlay\").toggleClass(\"main-menu-overlay-active\");\r\n }\r\n });\r\n }\r\n };\r\n})();","$('.alert-close-button').click(function () {\r\n const $container = $(this).closest('.alert-box-container');\r\n $container.addClass('d-none');\r\n\r\n BDC.Cookies.createCookie($container.data(\"alertId\"), \"true\", 1);\r\n});","\r\n(function(){\r\n\r\n\tvar myObj = {\r\n\t\tapis:[]\r\n\t};\r\n\r\n\tmyObj.checkForBDC = function(){\r\n if(typeof window.BDC.Utils.breakpoints != \"undefined\"){\r\n this.init();\r\n }\r\n else{\r\n \t//restart request animation frame\r\n \twindow.requestAnimationFrame(this.checkForBDC);\r\n }\r\n };\r\n\r\n //checks if tables are within a text or html block\r\n myObj.scrollers = function(){\r\n \t//target smaller screens\r\n\r\n \tif(window.BDC.Utils.breakpoints.isBP(\"m-down\")){\r\n\t\t if(this.apis.length == 0){\r\n\t\t \tvar $tables = $(\".textblock table, .htmlblock table\");\r\n\t \t\t$tables.each(function(){\r\n\t \t\t\tvar tableWidth = $(this).width()\r\n\t \t\t\tvar tableRowWidth = $(this).find(\"tr\").width()\r\n\t \t\t\tif(tableRowWidth > tableWidth){\r\n\t \t\t\t\tmyObj.apis.push($(this).jScrollPane().data().jsp);\r\n\t \t\t\t}\r\n\t \t\t});\r\n \t\t}\r\n \t\telse{\r\n \t\t\t//if smaller screen and apis are set - then reinitialize\r\n \t\t\t$.each(\r\n\t\t\t\t\tmyObj.apis,\r\n\t\t\t\t\tfunction(i) {\r\n\t\t\t\t\t\tthis.reinitialise();\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n \t\t}\r\n \t}\r\n \telse{\r\n \t\t//http://jscrollpane.kelvinluck.com/destroy.html\r\n\t\t\tif (this.apis.length > 0) {\r\n\t \t\t$.each(\r\n\t\t\t\t\tmyObj.apis,\r\n\t\t\t\t\tfunction(i) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t\tthis.apis = [];\r\n \t\t}\r\n \t}\r\n \t\r\n };\r\n\r\n //initialize\r\n myObj.init = function() {\r\n \t$(window).on(\"resize orientationchange\",myObj.scrollers);\r\n \tthis.scrollers();\r\n\r\n };\r\n\r\n //bing this to myObj is each function\r\n myObj.checkForBDC = myObj.checkForBDC.bind(myObj);\r\n myObj.init = myObj.init.bind(myObj);\r\n myObj.scrollers = myObj.scrollers.bind(myObj);\r\n \r\n //start request animation frame\r\n \twindow.requestAnimationFrame(myObj.checkForBDC);\r\n\t\r\n})();\r\n","window.StickyStacker = (function () {\r\n\r\n var stickyStackerInternal =\r\n {\r\n state: {},\r\n\r\n start: function (observableSelectors) {\r\n if (typeof observableSelectors === 'undefined'\r\n || observableSelectors === null\r\n || observableSelectors.length === 0) {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(observableSelectors)) {\r\n return;\r\n }\r\n\r\n //disconnect existing observer if somebody calls init twice\r\n if (Object.prototype.toString.call(this.state.observer) === '[object ResizeObserver]') {\r\n this.state.observer.disconnect();\r\n }\r\n\r\n //only want unique elements, in case some selectors produce overlapping results, otherwise height would be duplicated\r\n var elementsArray = new Array();\r\n observableSelectors.forEach(function (selector) {\r\n try {\r\n var elements = document.querySelectorAll(String(selector));\r\n var topSeparation = 0;\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (!elementsArray.includes(elements[i])) {\r\n this.updateElementSeparation(elements[i], topSeparation);\r\n elementsArray.push(elements[i]);\r\n\r\n topSeparation += elements[i].offsetHeight;\r\n }\r\n }\r\n } catch (err) { } //don't care if it's not a valid selector\r\n }, this);\r\n\r\n //selectors produced no results, we can just return\r\n if (elementsArray.size === 0) {\r\n return;\r\n }\r\n\r\n this.state = {\r\n originalSelectors: observableSelectors,\r\n observer: new ResizeObserver(this.dimensionsChanged),\r\n observedElements: elementsArray,\r\n isStarted = true\r\n };\r\n\r\n this.state.observedElements.forEach(function (observedElement) {\r\n this.state.observer.observe(observedElement);\r\n }, this);\r\n },\r\n\r\n stop: function () {\r\n if (Object.prototype.toString.call(this.state.observer) === '[object ResizeObserver]') {\r\n this.state.observer.disconnect();\r\n }\r\n\r\n this.state = {};\r\n },\r\n\r\n restart: function () {\r\n if (this.state.isStarted) {\r\n var originalSelectors = this.state.originalSelectors;\r\n\r\n this.stop();\r\n this.start(originalSelectors);\r\n }\r\n },\r\n\r\n dimensionsChanged: function () {\r\n //start from zero in case the topmost sticky also has added separation\r\n for (var i = 0; i < this.state.observedElements.length; i++) {\r\n var topSeparation = 0;\r\n\r\n for (var j = i - 1; j >= 0; j--) {\r\n topSeparation += this.state.observedElements[j].offsetHeight;\r\n }\r\n\r\n this.updateElementSeparation(this.state.observedElements[i], topSeparation);\r\n }\r\n },\r\n\r\n updateElementSeparation: function (element, separation) {\r\n var actualSeparation = separation;\r\n\r\n if (element.dataset.stickySeparation !== undefined) {\r\n actualSeparation += parseInt(element.dataset.stickySeparation);\r\n }\r\n\r\n element.style.top = actualSeparation + \"px\";\r\n }\r\n };\r\n\r\n stickyStackerInternal.dimensionsChanged = stickyStackerInternal.dimensionsChanged.bind(stickyStackerInternal);\r\n stickyStackerInternal.updateElementSeparation = stickyStackerInternal.updateElementSeparation.bind(stickyStackerInternal);\r\n\r\n return stickyStackerInternal;\r\n\r\n})();\r\n","(function () {\r\n\r\n var myObj = {\r\n };\r\n\r\n myObj.setClickActions = function () {\r\n document.querySelectorAll('[data-link=\"more-challenges\"]').forEach(item => {\r\n item.addEventListener('click', function () {\r\n item.classList.add(\"hide\");\r\n item.closest('[data-section=\"subtopic-challenges-section\"]').querySelector('[data-link=\"less-challenges\"]').classList.remove(\"hide\");\r\n item.closest('[data-section=\"subtopic-challenges-section\"]').querySelector('[data-section=\"collapsible\"]').classList.remove(\"hide\");\r\n });\r\n });\r\n\r\n document.querySelectorAll('[data-link=\"less-challenges\"]').forEach(item => {\r\n item.addEventListener('click', function () {\r\n item.classList.add(\"hide\");\r\n item.closest('[data-section=\"subtopic-challenges-section\"]').querySelector('[data-link=\"more-challenges\"]').classList.remove(\"hide\");\r\n item.closest('[data-section=\"subtopic-challenges-section\"]').querySelector('[data-section=\"collapsible\"]').classList.add(\"hide\");\r\n });\r\n });\r\n };\r\n\r\n myObj.init = function () {\r\n myObj.setClickActions();\r\n };\r\n\r\n //bind this to myObj is each function\r\n myObj.setClickActions = myObj.setClickActions.bind(myObj);\r\n myObj.init = myObj.init.bind(myObj);\r\n\r\n myObj.init();\r\n})();","const tabsContainer = document.querySelectorAll(\"[data-tabs-container]\");\r\n\r\nif (tabsContainer.length) {\r\n import(\"./modules/tabs.min.js\")\r\n .then(\r\n tabs => tabs.initTabs(tabsContainer)\r\n );\r\n}"," (function(){\r\n\r\n const lazyVideos = [].slice.call(document.querySelectorAll(\"video.lazy\"));\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n var lazyVideoObserver = new IntersectionObserver(function(entries) {\r\n entries.forEach(function(video) {\r\n if (video.isIntersecting) {\r\n for (let source in video.target.children) {\r\n if (Object.prototype.hasOwnProperty.call(video.target.children, source)) {\r\n const videoSource = video.target.children[source];\r\n if (typeof videoSource.tagName === \"string\" && videoSource.tagName === \"SOURCE\") {\r\n videoSource.src = videoSource.dataset.src;\r\n }\r\n }\r\n }\r\n\r\n video.target.load();\r\n video.target.classList.remove(\"lazy\");\r\n lazyVideoObserver.unobserve(video.target);\r\n }\r\n });\r\n });\r\n\r\n lazyVideos.forEach(function(lazyVideo) {\r\n lazyVideoObserver.observe(lazyVideo);\r\n });\r\n }\r\n\r\n})();","var buttonTrigger = $(\".button-trigger\");\r\nif (buttonTrigger.get(0)) {\r\n buttonTrigger.on(\"click\", function (event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n var self = $(this);\r\n var buttonName = self.attr(\"name\");\r\n var hiddenName = buttonName.substr(0, buttonName.indexOf('-'));\r\n var form = self.parents(\".EPiServerForms\");\r\n //check if is multistep form\r\n if (form.find(\".FormStep\").get(0)) {\r\n var step = self.parents(\".FormStep\");\r\n step.find(\".FormChoice__Input--Radio[value='not selected']\").trigger(\"click\");\r\n step.find(\".FormChoice__Input--Radio[name='\" + hiddenName + \"'][value='selected']\").trigger(\"click\");\r\n\r\n form.find(\".Form__NextPreviousUi .btnNext\").trigger(\"click\");\r\n\r\n } else {\r\n form.find(\".FormChoice__Input--Radio[value='not selected']\").trigger(\"click\");\r\n form.find(\".FormChoice__Input--Radio[name='\" + hiddenName + \"'][value='selected']\").trigger(\"click\");\r\n\r\n form.find(\".Form__NextPreviousUi .btnNext\").trigger(\"click\");\r\n }\r\n return false;\r\n });\r\n}","const targetNodes = document.querySelectorAll(\".Form__Element__ValidationError\");\r\nconst config = { attributes: false, childList: true, subtree: true };\r\n\r\nfunction decodeHtml(html) {\r\n const txt = document.createElement(\"textarea\");\r\n txt.innerHTML = html;\r\n return htmlsanitizer.SanitizeHtml(txt.value);\r\n}\r\n\r\nconst callback = function (mutationsList) {\r\n for (const mutation of mutationsList) {\r\n if (mutation.type === 'childList') {\r\n const html = mutation.target.innerHTML;\r\n if (html.indexOf(\"<\") !== -1) {\r\n mutation.target.innerHTML = htmlsanitizer.SanitizeHtml(decodeHtml(html));\r\n }\r\n }\r\n }\r\n};\r\nconst observer = new MutationObserver(callback);\r\ntargetNodes.forEach(function (targetNode) {\r\n observer.observe(targetNode, config);\r\n});\r\n\r\n","(function () {\r\n const myObj = {\r\n resolver: null,\r\n submitted: false\r\n };\r\n\r\n myObj.checker = function () {\r\n if (typeof window.$$epiforms == \"undefined\") {\r\n window.requestAnimationFrame(this.checker);\r\n } else {\r\n this.resolver(\"ready\");\r\n }\r\n }\r\n\r\n myObj.resolveAfterLoad = function () {\r\n return new Promise(resolve => {\r\n this.resolver = resolve;\r\n window.requestAnimationFrame(this.checker);\r\n });\r\n }\r\n\r\n myObj.init = function () {\r\n console.log(\"Ending $$epiforms Check \", typeof window.$$epiforms);\r\n\r\n myObj.setEvent();\r\n }\r\n\r\n myObj.setUtagMultistep = function (formName, currentStep, stepcount) {\r\n if (window.utag !== null && window.utag !== undefined) {\r\n const stepNumber = currentStep + \"-of-\" + stepcount;\r\n window.utag.view({\r\n event_name: \"form-virtual-step\",\r\n content_type: \"form-step-\" + stepNumber,\r\n url_override: window.location.href + \"?form_step=\" + stepNumber,\r\n form_name: formName\r\n });\r\n }\r\n }\r\n\r\n myObj.reminderNotification = function (email, currentLang, solution, currentUrl, action, firstName, lastName, jobTitle, phone, phoneExt) {\r\n const url = \"https://s1896.t.eloqua.com/e/f2.aspx?elqFormName=Reminder-emails-forms--Financing-Consulting&elqSiteID=1896\",\r\n xhttp = new XMLHttpRequest();\r\n\r\n xhttp.open(\"POST\", url, true);\r\n xhttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\r\n xhttp.send(url + \"&emailAddress=\" + email + \"&lang=\" + currentLang + \"&type=\" + solution + \"&url=\" + currentUrl + \"&action=\" + action + \"&firstname=\" + firstName + \"&lastname=\" + lastName + \"&jobtitle=\" + jobTitle + \"&phone=\" + phone + \"%20ext%20\" + phoneExt);\r\n }\r\n\r\n myObj.setEvent = function() {\r\n\r\n $$epiforms(document).ready(function myfunction() {\r\n $$epiforms(\".EPiServerForms\").each(function (i, f) {\r\n\r\n $$epiforms(f).find(\"[data-f-type=submitbutton]\").on(\"click\", function () {\r\n myObj.submitted = true;\r\n\r\n $(this).prop(\"disabled\", true);\r\n });\r\n\r\n $$epiforms(f).on(\"formsSubmitted\", function () {\r\n $$epiforms(f).addClass(\"formsSubmittedCustomClass\");\r\n });\r\n\r\n var optInStatusLive = $$epiforms(f).find('#optInStatusLive').length;\r\n\r\n const setHandlerByType = function(element, handlerElement) {\r\n if (element.dataset.fType === 'choice') {\r\n $(element).find('input').on('change',\r\n function() {\r\n setHandlerValidation(handlerElement);\r\n });\r\n } else if (element.dataset.fType === 'selection') {\r\n $(element).find('select').on('change',\r\n function() {\r\n setHandlerValidation(handlerElement);\r\n });\r\n $(element).on('focusout',\r\n function() {\r\n setHandlerValidation(handlerElement);\r\n });\r\n } else if (element.dataset.fType === 'fileupload') {\r\n ; // nothing here\r\n } else {\r\n $(element).on('focusout',\r\n function() {\r\n setHandlerValidation(handlerElement);\r\n });\r\n }\r\n };\r\n\r\n $$epiforms(f).find('.Form__Element').each(function(i, e) {\r\n if (this.dataset.fType === 'groupelements') {\r\n const elements = $(this).children().children(\":not(.formgroupelementscontainerblock)\").find(\".Form__Element\");\r\n\r\n elements.each(function() {\r\n setHandlerByType(this, e);\r\n });\r\n } else {\r\n setHandlerByType(this, e);\r\n }\r\n });\r\n\r\n if (optInStatusLive) {\r\n var email,\r\n currentLang = $$epiforms(f).find(\"input[name=__FormLanguage]\").val(),\r\n solution = $$epiforms(f).find('[data-taxon-component=\"form\"]').data('taxon-form-title'),\r\n currentUrl = window.location.href,\r\n firstName,\r\n lastName,\r\n jobTitle,\r\n phone,\r\n phoneExt,\r\n optInChecked = false;\r\n\r\n if (currentLang === \"en-CA\") {\r\n currentLang = \"English\";\r\n } else if (currentLang === \"fr-CA\") {\r\n currentLang = \"French\";\r\n }\r\n }\r\n\r\n if ($$epiforms(f).find('[data-f-mainbody]').data(\"f-stepcount\") > 1) {\r\n\r\n myObj.setUtagMultistep($$epiforms(f).find('[data-f-mainbody]').data(\"taxon-form-title\"),\r\n 1,\r\n $$epiforms(f).find('.progress-bar-percentage-visual').data(\"progressbar-stepcount\"));\r\n\r\n if (optInStatusLive) {\r\n $$epiforms(f).on(\"formsNavigationNextStep\",\r\n function (event) {\r\n var stepOptIn = $$epiforms(f).find('.FormStep:not(.hide)').find('#optInStatusLive');\r\n\r\n email = $$epiforms(f).find(\"input[data-name=emailAddress]\").val(),\r\n firstName = $$epiforms(f).find(\"input[data-name=firstName]\").val(),\r\n lastName = $$epiforms(f).find(\"input[data-name=lastName]\").val(),\r\n jobTitle = $$epiforms(f).find(\"select[data-name=jobRole]\").val(),\r\n phone = $$epiforms(f).find(\"input[data-name=businessPhone]\").val(),\r\n phoneExt = $$epiforms(f).find(\"input[data-name=businessPhoneExtension]\").val();\r\n if (stepOptIn.length) {\r\n if (stepOptIn.find('[data-f-datainput]').prop(\"checked\")) {\r\n myObj.reminderNotification(email,\r\n currentLang,\r\n solution,\r\n currentUrl,\r\n \"a\",\r\n firstName,\r\n lastName,\r\n jobTitle,\r\n phone,\r\n phoneExt);\r\n optInChecked = true;\r\n } else if (optInChecked) {\r\n myObj.reminderNotification(email,\r\n currentLang,\r\n solution,\r\n currentUrl,\r\n \"r\",\r\n firstName,\r\n lastName,\r\n jobTitle,\r\n phone,\r\n phoneExt);\r\n }\r\n }\r\n });\r\n }\r\n } else if (optInStatusLive) {\r\n const optIn = $$epiforms(f).find('#optInStatusLive').find('[data-f-datainput]');\r\n\r\n optIn.change(function() {\r\n email = $$epiforms(f).find(\"input[data-name=emailAddress]\").val(),\r\n firstName = $$epiforms(f).find(\"input[data-name=firstName]\").val(),\r\n lastName = $$epiforms(f).find(\"input[data-name=lastName]\").val(),\r\n jobTitle = $$epiforms(f).find(\"select[data-name=jobRole]\").val(),\r\n phone = $$epiforms(f).find(\"input[data-name=businessPhone]\").val(),\r\n phoneExt = $$epiforms(f).find(\"input[data-name=businessPhoneExtension]\").val();\r\n if (optIn.prop(\"checked\")) {\r\n myObj.reminderNotification(email,\r\n currentLang,\r\n solution,\r\n currentUrl,\r\n \"a\",\r\n firstName,\r\n lastName,\r\n jobTitle,\r\n phone,\r\n phoneExt);\r\n optInChecked = true;\r\n } else if (optInChecked) {\r\n myObj.reminderNotification(email,\r\n currentLang,\r\n solution,\r\n currentUrl,\r\n \"r\",\r\n firstName,\r\n lastName,\r\n jobTitle,\r\n phone,\r\n phoneExt);\r\n }\r\n });\r\n }\r\n\r\n // check if the Next/Previous Ui should be visible at initial load\r\n if (!($$epiforms(f).find('[data-f-stepindex=0].DisableNextPrevious')[0]) && $$epiforms(f).find('[data-f-mainbody]').data(\"f-stepcount\") > 1) {\r\n $$epiforms(f).find('.Form__NextPreviousUi').removeClass(\"hide\");\r\n }\r\n\r\n $$epiforms(f).on(\"formsNavigationNextStep formsNavigationPrevStep\",\r\n function(event) {\r\n const progressBarPercentageVisual = document.querySelector('.progress-bar-percentage-visual'),\r\n stepcount = progressBarPercentageVisual.getAttribute('data-progressbar-stepcount'),\r\n currentStep = event.targetStep.index,\r\n progressBarPercentageWidth = 100 * ((currentStep) / (stepcount - 1)) + \"%\";\r\n\r\n myObj.setUtagMultistep(event.workingFormInfo.Name, currentStep + 1, stepcount);\r\n\r\n //progress bar %\r\n progressBarPercentageVisual.style.width = progressBarPercentageWidth;\r\n //progress bar next\r\n let lastStep;\r\n\r\n if (event.type == \"formsNavigationNextStep\") {\r\n lastStep = currentStep - 1;\r\n\r\n document.querySelector(\"[data-progressbar-stepindex='\" + currentStep + \"']\").classList\r\n .add(\"progress-bar-bubble-progress\");\r\n document.querySelector(\"[data-progressbar-stepindex='\" + currentStep + \"']\").classList\r\n .remove(\"progress-bar-bubble-incomplete\");\r\n\r\n document.querySelector(\"[data-progressbar-stepindex='\" + lastStep + \"']\").classList\r\n .add(\"progress-bar-bubble-complete\");\r\n document.querySelector(\"[data-progressbar-stepindex='\" + lastStep + \"']\").classList\r\n .remove(\"progress-bar-bubble-progress\");\r\n\r\n }\r\n //progress bar prev\r\n if (event.type == \"formsNavigationPrevStep\") {\r\n lastStep = currentStep + 1;\r\n\r\n document.querySelector(\"[data-progressbar-stepindex='\" + currentStep + \"']\").classList\r\n .add(\"progress-bar-bubble-progress\");\r\n document.querySelector(\"[data-progressbar-stepindex='\" + currentStep + \"']\").classList\r\n .remove(\"progress-bar-bubble-complete\");\r\n\r\n document.querySelector(\"[data-progressbar-stepindex='\" + lastStep + \"']\").classList\r\n .add(\"progress-bar-bubble-incomplete\");\r\n document.querySelector(\"[data-progressbar-stepindex='\" + lastStep + \"']\").classList\r\n .remove(\"progress-bar-bubble-progress\");\r\n\r\n }\r\n\r\n //check if is the first step to change justify class\r\n if ((currentStep + 1) == 1) {\r\n document.querySelector(\".Form__NextPreviousUi\").classList.add(\"justify-content-end\");\r\n document.querySelector(\".Form__NextPreviousUi\").classList.remove(\"justify-content-between\");\r\n } else {\r\n document.querySelector(\".Form__NextPreviousUi\").classList.add(\"justify-content-between\");\r\n document.querySelector(\".Form__NextPreviousUi\").classList.remove(\"justify-content-end\");\r\n }\r\n\r\n //check if it is the last step so the submit button can be enable\r\n if ((currentStep + 1) == stepcount) {\r\n document.querySelector(\".Form__NextPreviousUi .FormSubmitButton\").disabled = false;\r\n } else {\r\n document.querySelector(\".Form__NextPreviousUi .FormSubmitButton\").disabled = true;\r\n }\r\n\r\n // check if the Next/Previous Ui should be visible\r\n if (!document.querySelector(\"[data-f-stepindex='\" + currentStep + \"']\").classList\r\n .contains(\"DisableNextPrevious\")) {\r\n document.querySelector(\".Form__NextPreviousUi\").classList.remove(\"hide\");\r\n } else {\r\n document.querySelector(\".Form__NextPreviousUi\").classList.add(\"hide\");\r\n }\r\n\r\n });\r\n\r\n $$epiforms(f).on(\"formsStepValidating\",\r\n function () {\r\n validateSubmissionFormats(f);\r\n });\r\n });\r\n });\r\n }\r\n\r\n async function initCheck() {\r\n console.log(\"Starting $$epiforms Check \", typeof window.$$epiforms);\r\n const result = await myObj.resolveAfterLoad();\r\n if (result == \"ready\") {\r\n myObj.init();\r\n }\r\n }\r\n\r\n myObj.checker = myObj.checker.bind(myObj);\r\n myObj.init = myObj.init.bind(myObj);\r\n myObj.resolveAfterLoad = myObj.resolveAfterLoad.bind(myObj);\r\n\r\n initCheck();\r\n\r\n function setHandlerValidation(element) {\r\n const _utilsSvc = window.epi.EPiServer.Forms.Utils,\r\n form = _utilsSvc.getWorkingFormFromInnerElement(element),\r\n formId = _utilsSvc.getFormIdentifier(form),\r\n field = element.querySelector('[data-f-datainput]');\r\n\r\n if (field) {\r\n let fieldId,\r\n fieldName = field.getAttributeNode('name').value,\r\n fieldValue = typeof field.value === \"string\" ? field.value : \"\",\r\n errorMessage = element.querySelector(`#${fieldName}_desc`),\r\n formInfo = window.epi.EPiServer.Forms[formId];\r\n\r\n if (field.matches('[type=\"checkbox\"], [type=\"radio\"]')) {\r\n if (field.matches('[type=\"checkbox\"]')) {\r\n const checkboxes = field.closest('div[data-f-element-name]').querySelectorAll('input[type=\"checkbox\"]');\r\n let boxChecked = 0;\r\n for (const checkbox of checkboxes) {\r\n if (checkbox.checked) {\r\n boxChecked++;\r\n }\r\n }\r\n if (boxChecked > 0) {\r\n fieldValue = \"checked\";\r\n } else {\r\n fieldValue = \"\";\r\n }\r\n }\r\n if (field.closest('div[data-f-element-name]').hasAttribute('data-guid')) {\r\n fieldId = field.closest('div[data-f-element-name]').getAttributeNode('data-guid').value;\r\n } else {\r\n fieldId = field.closest('div[data-f-element-name]').getAttributeNode('id').value;\r\n }\r\n } else {\r\n if (field.hasAttribute('data-guid')) {\r\n fieldId = field.getAttributeNode('data-guid').value;\r\n } else {\r\n fieldId = field.getAttributeNode('id').value;\r\n }\r\n }\r\n\r\n const validation = window.epi.EPiServer.Forms.Validation;\r\n const validators = validation.getElementValidators(formInfo.ValidationInfo, fieldId);\r\n const validated = validation.validateFormValue(fieldName, fieldValue, validators);\r\n\r\n validated.every(function (entry) {\r\n const currentStepIndex = parseInt(form.find(\"[name=__FormCurrentStepIndex\").val());\r\n const totalStep = parseInt(form.find(\"[name=__FormTotalSteps\").val());\r\n\r\n if (!myObj.submitted) {\r\n\r\n if (!entry.isValid) {\r\n\r\n const messageSanitized = htmlsanitizer.SanitizeHtml(entry.message);\r\n\r\n errorMessage.classList.remove(\"hidden\");\r\n errorMessage.innerHTML = messageSanitized;\r\n\r\n if (currentStepIndex + 1 === totalStep) {\r\n form.find(\"[data-f-type=submitbutton]\").prop(\"disabled\", false);\r\n }\r\n\r\n return false;\r\n } else {\r\n errorMessage.classList.add(\"hidden\");\r\n\r\n if (currentStepIndex + 1 === totalStep) {\r\n form.find(\"[data-f-type=submitbutton]\").prop(\"disabled\", false);\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n myObj.submitted = false;\r\n \r\n });\r\n }\r\n }\r\n\r\n function validateSubmissionFormats(f) {\r\n $$epiforms(f).find('.FormAmount__Input').each(function (_i, element) {\r\n const field = $(element);\r\n const fieldWithoutFormatting = removeFormatting(field.val());\r\n\r\n field.val(fieldWithoutFormatting);\r\n });\r\n }\r\n\r\n function removeFormatting(value) {\r\n const currentLang = $(\"input[name=__FormLanguage]\").val();\r\n\r\n if (currentLang === \"en-CA\") {\r\n value = value.replaceAll(',', '');\r\n }\r\n\r\n if (currentLang === \"fr-CA\") {\r\n value = value.replace(',', '.').replaceAll(/\\s/g, '');\r\n }\r\n\r\n return value.replaceAll('$', '');\r\n }\r\n\r\n // extend the EpiForm JavaScript API in ViewMode\r\n if ((typeof epi !== 'undefined') && epi !== null && epi.EPiServer && epi.EPiServer.Forms) {\r\n $.extend(true,\r\n epi.EPiServer.Forms,\r\n {\r\n // extend the Validator to validate Visitor's value in Clientside. \r\n Validators:\r\n {\r\n \"www.bdc.ca.Features.Forms.EqualPropertiesFormValidator.EqualPropertiesFormValidator\":\r\n function (fieldName, fieldValue, validatorMetaData) {\r\n // this function is used to validate visitor's data value in ViewMode\r\n\r\n if (epi.EPiServer.Forms.Utils.getElementValue($(\"[name='\" +\r\n validatorMetaData.model.fieldName +\r\n \"']\")) !==\r\n fieldValue) {\r\n return { isValid: false, message: validatorMetaData.model.message };\r\n }\r\n\r\n return { isValid: true };\r\n },\r\n \"www.bdc.ca.Features.Forms.MinimumNumberValidator.MinimumNumberValidator\":\r\n function (fieldName, fieldValue, validatorMetaData) {\r\n // this function is used to validate visitor's data value in ViewMode\r\n\r\n fieldValue = removeFormatting(fieldValue);\r\n\r\n if (parseInt(fieldValue) < parseInt($(\"[name='\" + fieldName + \"']\").attr(\"minimumlength\"))) {\r\n return { isValid: false, message: validatorMetaData.model.message };\r\n }\r\n\r\n return { isValid: true };\r\n },\r\n \"www.bdc.ca.Features.Forms.MaximumNumberValidator.MaximumNumberValidator\":\r\n function (fieldName, fieldValue, validatorMetaData) {\r\n // this function is used to validate visitor's data value in ViewMode\r\n\r\n fieldValue = removeFormatting(fieldValue);\r\n\r\n if (parseInt(fieldValue) > parseInt($(\"[name='\" + fieldName + \"']\").attr(\"maximumlength\"))) {\r\n return { isValid: false, message: validatorMetaData.model.message };\r\n }\r\n\r\n return { isValid: true };\r\n },\r\n \"www.bdc.ca.Features.Forms.UrlResponseValidator.UrlResponseValidator\":\r\n function () {\r\n // this function is used to validate visitor's data value in ViewMode\r\n return { isValid: true };\r\n },\r\n \"www.bdc.ca.Features.Forms.GroupContainerValidator.GroupContainerValidator\":\r\n function (fieldName, fieldValue, validatorMetaData) {\r\n // this function is used to validate visitor's data value in ViewMode\r\n\r\n const elements = $(\"[name='\" + validatorMetaData.model.additionalAttributes.ElementName + \"']\").children(\":not(.formgroupelementscontainerblock)\").find(\"input, textarea, select\");\r\n let valid = false;\r\n \r\n elements.each(function() {\r\n switch ($(this).attr(\"type\")) {\r\n case \"checkbox\":\r\n case \"radio\":\r\n if ($(this).is(\":checked\")) {\r\n valid = true;\r\n }\r\n break;\r\n\r\n default:\r\n if ($(this).val().length) {\r\n valid = true;\r\n }\r\n\r\n }\r\n });\r\n\r\n if (valid) {\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, message: validatorMetaData.model.message };\r\n }\r\n }\r\n });\r\n }\r\n})();"]}