{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/js-cookie/dist/js.cookie.js","webpack:///./Assets/js/navbar.js","webpack:///./Assets/main.js","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/bootstrap-slider/dist/bootstrap-slider.js","webpack:///external \"jQuery\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","assign","target","arguments","length","source","init","converter","defaultAttributes","set","attributes","document","expires","Date","now","toUTCString","encodeURIComponent","replace","decodeURIComponent","escape","stringifiedAttributes","attributeName","split","cookie","write","cookies","jar","parts","slice","join","foundKey","read","e","remove","withAttributes","this","withConverter","freeze","path","factory","setupNavbar","initializeProfileMenu","idPrefix","$signIn","$","$signUp","$navbarProfile","$profileLink","$logoutLink","$controlCenterButton","signedInCookie","window","octopus","getSignedInUserCookie","data","JSON","parse","fullName","email","profileImageUrl","find","attr","show","toggle","method","text","_dcq","push","prospect","FS","identify","userHash","displayName","hide","$navItems","$body","$navbar","lastClickedSubsection","showNavOnMobile","css","removeClass","filter","undefined","on","navbarWidth","width","isClosing","innerText","addClass","newNavbarWidth","addEventListener","innerWidth","configureNavbarInteraction","timerId","elapsed","normalizeUtm","utmValue","maxLength","substring","trim","toLowerCase","sanitizeUrlData","forEach","pattern","require","isUserSignedIn","Cookies","searchParams","URLSearchParams","location","search","hasUtmParams","keys","startsWith","Intercom","host","hostname","pathname","medium","campaign","term","content","googleClickId","initializeFeatherlight","ts","closeFeatherlightOnScroll","event","nowTs","featherlight","close","off","defaults","closeOnClick","afterOpen","copyToClipboard","str","hiddenElement","createElement","setAttribute","style","display","body","appendChild","select","execCommand","removeChild","miniStateMachine","parentElement","steps","defaultWait","repeat","step","next","result","Number","isInteger","console","log","setTimeout","loaded","IntersectionObserver","entries","isIntersecting","observe","querySelector","initializeTableOfContents","documentRef","contentElementId","selectors","toc","getElementById","headings","querySelectorAll","html","groupId","heading","index","tag","tagName","id","title","textContent","element","className","innerHTML","click","preventDefault","delay","animate","scrollTop","offset","top","refreshScrollPosition","scrollY","closest","each","pos","first","groupToExpand","$toc","height","$results","$input","$clearBtn","$prevBtn","$nextBtn","currentClass","$content","currentIndex","jumpTo","position","$current","eq","scrollTo","searchVal","unmark","done","mark","separateWordSearch","val","focus","add","is","enablePasswordStrength","output","password","checkPassword","zxcvbn","score","warnings","feedback","warning","suggestions","tooltip","enableDynamicValidation","$form","url","urlFunc","dynamicValidation","$element","validationRequest","validationTimer","statusElementTimer","validationControls","propertyName","$validationError","append","resetValidationStatus","abort","clearTimeout","validate","inputValue","$submit","prop","start","performance","end","valid","requestDuration","uiDelay","Math","max","error","always","setInterval","hidden","hasFocus","gtag","clearInterval","hasShadow","lazyImages","lazyImageObserver","observer","entry","lazyImage","src","dataset","srcset","classList","unobserve","hasPageLoaded","initializeLoadOnScroll","intercomSettings","user_id","user_hash","intercomUserHash","profileImage","avatar","type","image_url","updateIntercom","scroll","implementation","hasFeature","ajaxSetup","cache","popover","trigger","animation","toggleAttr","includes","placement","timer","trackLeave","ev","clientY","exitIntent","settings","sensitivity","trackEnter","enable","options","extend","mouseleave","mouseenter","unbind","jQuery","cookieName","eventsCookie","events","Type","WriteTrackingEvent","WriteFormProgressEvent","WriteLeadTrackingEvent","debug","scriptUrl","callback","marketoFormId","Data","MarketoFormId","marketoAccountId","MarketoAccountId","hiddenForm","getElementsByTagName","MktoForms2","loadForm","form","addHiddenFields","MarketoFields","onSuccess","submit","async","onreadystatechange","readyState","onload","action","Action","category","Category","uetq","event_category","dataLayer","Step","stepNumber","StepNumber","platform","Platform","pathTrackingValue","secure","sameSite","UTCDate","UTC","apply","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","deprecationMsg","fn","datepicker","deprecated","isValidDate","isNaN","getTime","extras","DateArray","contains","valueOf","splice","new_array","isArray","clear","copy","a","Datepicker","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","inputField","component","hasClass","isInline","picker","DPGlobal","template","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","appendTo","rtl","calendarWeeks","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","update","constructor","_resolveViewName","view","viewModes","viewMode","inArray","names","_resolveDaysOfWeek","daysOfWeek","map","tmp","match","ex","opts","lang","language","minViewMode","maxViewMode","min","multidate","multidateSeparator","String","weekStart","weekEnd","format","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","Infinity","plc","orientation","_plc","grep","word","test","x","y","year","month","day","_applyEvents","evs","el","ch","_unapplyEvents","keyup","proxy","keyCode","keydown","paste","showOnFocus","blur","_focused_from","immediateUpdates","date","navArrowsClick","dayCellClick","resize","place","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","_utc_to_local","ix","formatDate","enableOnReadonly","container","navigator","msMaxTouchPoints","disableTouchKeyboard","detach","forceParse","setValue","destroy","dateString","originalEvent","clipboardData","types","getData","setDate","utc","local","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","args","setUTCDates","setUTCDate","formatted","getFormattedDate","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","visualPadding","windowWidth","appendOffset","parentsZindex","parents","itemZIndex","zIndex","zIndexOffset","parent","left","yorient","parseInt","right","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","localDate","monthsShort","setRange","range","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","selector","cssClass","factor","startYear","endYear","beforeFn","classes","before","startVal","floor","endVal","focusedVal","selected","currVal","noop","enabled","concat","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","th","yth","calWeek","beforeShowDay","isFunction","uniqueSort","unique","toString","monthsTitle","months","beforeShowMonth","that","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","toggleClass","stopPropagation","_setDate","setUTCMonth","timestamp","currentTarget","dir","navStep","moveMonth","_toggle_multidate","toggleActive","which","moveDay","newDate","moveWeek","new_month","new_date","mag","abs","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","ctrlKey","shiftKey","children","DateRangePicker","inputs","jquery","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","prefix","out","RegExp","re_lower","_","opts_from_locale","locale_opts","k","updateRanges","updating","dp","keep_empty_values","j","old","option","internal_return","Array","shift","$this","elopts","locopts","toArray","Error","Constructor","en","days","daysShort","validParts","nonpunctuation","toValue","toDisplay","separators","assumeNearby","part","fn_map","w","dateAliases","yesterday","tomorrow","applyNearbyYear","threshold","filtered","parsed","setters_order","setters_map","yyyy","v","fparts","match_part","cnt","_date","D","DD","M","MM","yy","dd","mm","seps","headTemplate","contTemplate","footTemplate","noConflict","version","msg","warn","_typeof","iterator","obj","windowIsDefined","Slider","NAMESPACE_MAIN","NAMESPACE_ALTERNATE","defineBridget","logError","message","bridget","namespace","PluginClass","addOptionMethod","bridge","isPlainObject","len","elem","instance","charAt","returnValue","objects","_init","autoRegisterNamespace","ErrorMsgs","formatInvalidInputErrorMsg","input","callingContextNotSliderInstance","SliderScale","linear","getValue","percentage","rawValue","shouldAdjustWithBase","ticks_positions","minv","maxv","minp","maxp","ticks","round","toPercentage","logarithmic","exp","createNewSlider","_state","size","inDrag","over","tickIndex","ticksCallbackMap","handleCallbackMap","HTMLElement","optionTypes","defaultOptions","isMinSet","isMaxSet","optName","getDataAttrib","ticksAreValid","lock_to_ticks","computedStyle","getComputedStyle","direction","dataName","dataValString","getAttribute","err","tooltip_position","sliderTrackSelection","sliderTrackLow","sliderTrackHigh","sliderMinHandle","sliderMaxHandle","origWidth","updateSlider","parentNode","sliderElem","sliderTrack","rangeHighlightElements","rangeHighlightsOpts","rangeHighlights","rangeHighlightElement","customClassString","class","isLabelledbyArray","labelledby","ticksContainer","tick","ticks_tooltip","tickListenerReference","_addTickListener","enterCallback","addMouseEnter","leaveCallback","addMouseLeave","mouseEnter","mouseLeave","tickLabels","ticks_labels","tickLabelContainer","label","noTickPositionsSpecified","tickLabelsIndex","reversed","createAndAppendTooltipSubElements","tooltipElem","arrow","inner","sliderTooltip","sliderTooltipMin","sliderTooltipMax","insertBefore","$sliderElem","eventToCallbackMap","touchCapable","DocumentTouch","touchX","touchY","tooltipInner","tooltip_min","tooltipInner_min","tooltip_max","tooltipInner_max","scale","_removeClass","_removeProperty","trackLow","trackSelection","trackHigh","handle1","handle2","handle","_addClass","stylePos","mousePos","sizePos","_setTooltipPosition","selection","indexOf","_offset","handle1Keydown","_keydown","handle2Keydown","mousedown","_mousedown","touchstart","_touchstart","touchmove","_touchmove","_resize","_showTooltip","_alwaysShowTooltip","showTooltip","hideTooltip","_hideTooltip","callbackHandle","disable","precision","tooltip_split","formatter","natural_arrow_keys","ticks_snap_bounds","getElement","triggerSlideEvent","triggerChangeEvent","oldValue","_validateInputValue","applyPrecision","_applyPrecision","_getClosestTickIndex","_setTickIndex","_toPercentage","_layout","newValue","_setDataVal","_removeSliderEventHandlers","_cleanUpEventCallbacksMap","removeAttribute","_unbindJQueryEventHandlers","removeData","isEnabled","evt","_bindNonQueryEventHandler","_unbindNonQueryEventHandler","attribute","refresh","currentValue","useCurrentValue","relayout","_removeTooltipListener","handler","removeEventListener","getElementsByClassName","callbacks","eventNames","eventName","_setToolTipOnMouseOver","tempState","self","formattedTooltipVal","positionPercentages","getPositionPercentages","state","_setText","_copyState","dragged","keyCtrl","reference","enter","per","leave","formattedValue","_i","startPercent","endPercent","sp","currentRange","_createHighlightRange","styleMargin","styleSize","labelSize","extraMargin","offsetHeight","childNodes","marginBottom","offsetWidth","innerTooltipMinText","innerTooltipMaxText","bottom","offset_min","getBoundingClientRect","offset_max","_isHighlightRange","removeProperty","_getPercentage","diff1","diff2","_adjustPercentageForRangeSliders","mousemove","mouseup","_mousemove","_mouseup","_calculateValue","_triggerFocusOnHandle","handleIdx","isHorizontal","isVertical","isRTL","isReversed","val1","val2","_pauseEvent","cancelBubble","changedTouches","_getNumDigitsAfterDecimalPlace","percentageWithAdjustedPrecision","_applyToFixedAndParseFloat","_setValues","comp","_toValue","snapToClosestTick","_snapToClosestTick","parseFloat","diff","num","toFixedInput","truncatedNum","toFixed","distanceToSlide","_validateArray","callbackFnArray","callbackFn","_triggerJQueryEvent","eventData","classString","newClasses","classTag","regex","_offsetLeft","_offsetRight","_offsetTop","offsetTop","offsetParent","_css","elementRef","styleName","all","letter","toUpperCase","tooltips","tooltipPos","oppositeSide","difference","slider"],"mappings":"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","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 180);\n","/*! js-cookie v3.0.1 | MIT */\n;\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, (function () {\n var current = global.Cookies;\n var exports = global.Cookies = factory();\n exports.noConflict = function () { global.Cookies = current; return exports; };\n }()));\n}(this, (function () { 'use strict';\n\n /* eslint-disable no-var */\n function assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n }\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n var defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n };\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n\n function init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n }\n\n var api = init(defaultConverter, { path: '/' });\n /* eslint-enable no-var */\n\n return api;\n\n})));\n","export default function setupNavbar() {\n initializeProfileMenu(\"\");\n initializeProfileMenu(\"mobile-\");\n configureNavbarInteraction();\n\n function initializeProfileMenu(idPrefix) {\n const $signIn = $(`#${idPrefix}navbar-sign-in`);\n const $signUp = $(`#${idPrefix}navbar-sign-up`);\n const $navbarProfile = $(`#${idPrefix}navbar-profile`);\n const $profileLink = $(`#${idPrefix}navbar-profile-link`);\n const $logoutLink = $(`#mobile-navbar-profile-sign-out`);\n const $controlCenterButton = $(\".control-center-button\");\n const signedInCookie = window.octopus.getSignedInUserCookie();\n\n // if user is signed in\n if (!!signedInCookie && $navbarProfile.length > 0) {\n let data = JSON.parse(signedInCookie);\n\n const name = data.fullName ?? data.email;\n\n //if the image is available, show the image and hide the circle\n if (!!data.profileImageUrl) {\n $navbarProfile\n .find(`#${idPrefix}navbar-profile-image img`)\n .attr('title', name)\n .attr('src', data.profileImageUrl)\n .show();\n $navbarProfile.find(`#${idPrefix}navbar-profile-image :not(img)`).remove();\n }\n\n $navbarProfile\n .find(`#${idPrefix}navbar-profile-sign-out`)\n .toggle(data.method === 'Auth');\n \n $(`#${idPrefix}navbar-profile-name`).text(name);\n $navbarProfile.show();\n\n window._dcq = window._dcq || [];\n _dcq.push(['identify', { email: data.email, prospect: true }]);\n\n if (window.FS) {\n FS.identify(data.userHash, {\n displayName: data.fullName,\n email: data.email,\n });\n }\n\n $signIn.hide();\n $signUp.hide();\n $logoutLink.show();\n } else {\n $signIn.show();\n $signUp.show();\n $profileLink.hide();\n $controlCenterButton.hide();\n }\n }\n\n function configureNavbarInteraction() {\n var $navItems = $(\".nav-item\");\n var $body = $(\"body\");\n var $navbar = $($(\".navbar-v2\")[0]);\n let lastClickedSubsection = \"\";\n\n // only do this for nav items that have additional content (Product, Resources, etc)\n $navItems = $navItems.filter(function () {\n return $(this).attr(\"data-target\") !== undefined;\n });\n\n $navItems.on(\"click\", function (e) {\n let navbarWidth = $navbar.width();\n\n const isClosing = e.target.innerText === lastClickedSubsection;\n\n lastClickedSubsection = isClosing ? \"\" : e.target.innerText;\n\n /**\n * The better approach would be to not have the second \"nav bar\" that displays\n * the back and close buttons, and instead just swap the Octopus Logo with the back button\n * when the menu is open. However that would require further restructuring that exceeds\n * the current appetite for change at the time of writing.\n */\n $(\".navbar-nav, .navbar-header\").addClass(\"d-none d-xl-flex\");\n $(\".navbar-main\").addClass(\"show\"); // This is required for the mobile menu to be visible after a user has expanded a subsection on desktop \n $(\"#main-navbar\").css(\"height\", \"100vh\");\n\n if (isClosing) {\n showNavOnMobile();\n $(\"#main-navbar\").css(\"height\", \"0\");\n } else {\n hideNavOnMobile();\n let newNavbarWidth = $navbar.width();\n if (newNavbarWidth - navbarWidth > 0) {\n $(\".nav-container\").css(\"padding-right\", newNavbarWidth - navbarWidth);\n $(\"main\").css(\"padding-right\", newNavbarWidth - navbarWidth);\n }\n }\n });\n\n $(\".navbar-toggler-reset, .nav-overflow-back\").on(\"click\", function () {\n showNavOnMobile();\n lastClickedSubsection = \"\";\n });\n\n // addresses an edge case where the user opens a subsection, then resizes the window\n // without this the mobile nav would be hidden\n $(\".navbar-toggler\").on(\"click\", function () {\n showNavOnMobile();\n lastClickedSubsection = \"\";\n });\n\n $(\".overflow-background\").on(\"click\", function () {\n showNavOnMobile();\n lastClickedSubsection = \"\";\n $(\"#main-navbar\").css(\"height\", \"0px\");\n });\n\n addEventListener(\"resize\", () => {\n if (window.innerWidth < 1200) {\n if (lastClickedSubsection === \"\") {\n $(\"#main-navbar\").css(\"height\", \"calc(100vh - 75px)\");\n }\n else {\n $(\"#main-navbar\").css(\"height\", \"100vh\");\n }\n }\n else {\n if (lastClickedSubsection === \"\") {\n $(\"#main-navbar\").css(\"height\", \"0px\");\n }\n else {\n $(\"#main-navbar\").css(\"height\", \"100vh\");\n }\n }\n });\n\n function showNavOnMobile() {\n $(\"body\").css(\"overflow\", \"auto\");\n $(\".navbar-nav, .navbar-header\").removeClass(\"d-none\").removeClass(\"d-xl-flex\");\n $(\".nav-container\").css(\"padding-right\", 0);\n $(\"main\").css(\"padding-right\", 0);\n }\n function hideNavOnMobile() {\n $body.css(\"overflow\", \"hidden\");\n $(\".navbar-nav, .navbar-header\").addClass(\"d-none d-xl-flex\");\n }\n }\n}","import $ from \"jquery\";\nimport Cookies from \"js-cookie\";\nimport setupNavbar from \"./js/navbar\"\n\n\nwindow.jQuery = $;\nwindow.$ = $;\nrequire(\"bootstrap-datepicker\");\nrequire(\"bootstrap-slider\");\n\nwindow.octopus = {\n isUserSignedIn: () => !!Cookies.get('OctopusSignedInUser'),\n getSignedInUserCookie: () => Cookies.get('OctopusSignedInUser'),\n};\n\nsetupNavbar();\n\nfunction normalizeUtm(utmValue, maxLength = 100){\n if(!utmValue){\n return \"\";\n }\n\n return utmValue.substring(0, maxLength).trim().toLowerCase();\n}\n\nfunction sanitizeUrlData(data) {\n if (typeof data !== \"string\") {\n return \"\";\n }\n\n // Remove script tags and event handlers\n const dangerousPatterns = [\n /javascript:[^\\s]+/gi, // Removes 'javascript:' including any whitespace following it.\n /vbscript:[^\\s]+/gi, // Removes 'vbscript:' including any whitespace following it.\n /data:[^\\s]+/gi, // Removes 'data:' including any whitespace following it.\n /file:[^\\s]+/gi, // Removes 'file:' including any whitespace following it.\n /base64,[^\\s]+/gi, // Removes 'base64,' including any whitespace following it.\n /(&#x?\\d+;)+/gi, // Removes HTML entity encodings\n /.*?<\\/script>/gis, // Removes complete script tags and their contents.\n /<[^>]+>/gi, // Removes any other complete HTML tags.\n /%0a|%0d|%09/gi, // Removes encoded line breaks, carriage returns, and tabs.\n /&#[xX]?[0-9a-fA-F]+;/gi, // Removes numeric HTML entities.\n /on\\w+\\s*=\\s*[\"']?[^\"'>]*[\"']?/gi, // Removes HTML event handlers with quotes\n /on\\w+\\s*=\\s*[^\"'\\s>]+/gi, // Removes HTML event handlers without quotes\n /<\\/script>/gi, // Removes script tag terminators.\n /\\(['\"]?[^)'\"]*['\"]?\\)/gi, // Removes parentheses with optional quotes and content\n /['\"()]/g, // Final cleanup for stray single/double quotes and parentheses\n ];\n\n dangerousPatterns.forEach((pattern) => {\n data = data.replace(pattern, \"\");\n });\n\n // URL encode the sanitized data to safely use or display it\n return encodeURIComponent(data);\n}\n\n// If this function is updated also update it in Octopus-com\nfunction intercomUtmTracking() {\n const signedInCookie = Cookies.get('OctopusSignedInUser');\n const searchParams = new URLSearchParams(window.location.search);\n let hasUtmParams = false;\n for(const key of searchParams.keys()) {\n if(key.startsWith(\"utm_\")){\n hasUtmParams = true;\n break;\n }\n }\n\n // if user is not signed in and has UTM params\n // If further throttling is required for event sending we could deduplicate events by comparing the last sent to the event to be sent\n if (!signedInCookie && hasUtmParams && Intercom) {\n Intercom('trackEvent', \"OctopusAnonymousUtmTracking\", {\n host: sanitizeUrlData(window.location.hostname),\n path: sanitizeUrlData(window.location.pathname),\n source: normalizeUtm(searchParams.get(\"utm_source\")),\n medium: normalizeUtm(searchParams.get(\"utm_medium\")),\n campaign: normalizeUtm(searchParams.get(\"utm_campaign\")),\n term: normalizeUtm(searchParams.get(\"utm_term\")),\n content: normalizeUtm(searchParams.get(\"utm_content\")),\n googleClickId: normalizeUtm(searchParams.get(\"gclid\")),\n });\n }\n}\nwindow.addEventListener('load', intercomUtmTracking);\n\nwindow.initializeFeatherlight = function initializeFeatherlight() {\n let ts;\n $.featherlight.defaults.closeOnClick = 'anywhere';\n $.featherlight.defaults.afterOpen = function () {\n ts = +new Date();\n $(window).on('scroll', closeFeatherlightOnScroll);\n };\n\n function closeFeatherlightOnScroll(event) {\n const nowTs = +new Date();\n\n if (ts + 500 > nowTs) {\n return;\n }\n $.featherlight.close(event);\n $(window).off('scroll', closeFeatherlightOnScroll);\n }\n};\n\nwindow.copyToClipboard = function copyStringToClipboard(str) {\n const hiddenElement = document.createElement('textarea');\n hiddenElement.value = str;\n hiddenElement.setAttribute('readonly', '');\n hiddenElement.style = {display: 'none'};\n document.body.appendChild(hiddenElement);\n hiddenElement.select();\n document.execCommand('copy');\n document.body.removeChild(hiddenElement);\n}\n\nwindow.miniStateMachine = function (parentElement, steps, defaultWait, repeat) {\n let step = 0;\n\n const next = function () {\n let result = steps[step]();\n if (!Number.isInteger(result)) {\n result = defaultWait || 300;\n }\n step++;\n if (step >= steps.length && repeat) {\n console.log(\"msm repeating\");\n step = 0;\n }\n\n if (step < steps.length) {\n setTimeout(next, result);\n }\n };\n\n let loaded = false;\n const onIntersection = (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n if (!loaded) {\n loaded = true;\n next();\n }\n }\n }\n };\n\n const observer = new IntersectionObserver(onIntersection);\n observer.observe(document.querySelector(parentElement));\n};\n\nwindow.initializeTableOfContents = function (documentRef, contentElementId, selectors) {\n documentRef = documentRef || window.document;\n const toc = documentRef.getElementById('toc');\n const headings = [].slice.call(documentRef.getElementById(contentElementId).querySelectorAll(selectors));\n\n const html = [];\n html.push(\"
On this page
\");\n \n // toc search\n html.push(\"
\");\n\n let groupId = \"\";\n headings.forEach(function (heading, index) {\n const tag = heading.tagName.toLowerCase();\n const id = heading.id;\n const title = heading.textContent;\n if (tag === \"h2\") {\n groupId = id;\n }\n\n const element = \"\" + heading.textContent + \"\";\n if (title === \"Next\") {\n return;\n }\n html.push(element);\n });\n\n if (html.length < 4) {\n document.getElementById(\"toc-column\").className = \"d-none\";\n } else {\n toc.innerHTML = html.join('');\n }\n\n $(function () {\n $(\".toc-item\").click(function (e) {\n e.preventDefault();\n const id = $(this).attr(\"href\");\n if (id) {\n $(\"html, body\").delay(100).animate({scrollTop: $(id).offset().top - 140}, 300);\n }\n return false;\n });\n\n const headings = [].slice.call(document.querySelectorAll(selectors));\n const refreshScrollPosition = function () {\n const scrollY = window.scrollY;\n let closest = null;\n $(selectors, $(documentRef.getElementById(contentElementId))).each(function () {\n const me = $(this);\n const pos = me.offset();\n if (scrollY + 180 > pos.top) {\n closest = this;\n }\n });\n\n let current = null;\n $(\"#toc a.active\").removeClass(\"active\");\n if (closest) {\n current = $(\"#toc a[data-target='\" + closest.id + \"']\");\n } else {\n current = $(\"#toc a\").first();\n }\n\n current.addClass(\"active\");\n\n const groupToExpand = $(\"#toc .toc-item.active\").data(\"group\");\n $(\"#toc .toc-item.toc-h3,.toc-item.toc-h4\").each(function () {\n if ($(this).data(\"group\") === groupToExpand) {\n $(this).show();\n } else {\n $(this).hide();\n }\n });\n };\n\n window.addEventListener(\"scroll\", refreshScrollPosition);\n window.addEventListener(\"resize\", refreshScrollPosition);\n refreshScrollPosition();\n\n const $toc = $(\"#toc\");\n const tocHeight = $toc.height();\n if (tocHeight + 100 > $(window).height()) {\n $toc.css(\"position\", \"static\");\n } else {\n $toc.css(\"position\", \"sticky\");\n }\n\n // toc-search \n let $input = $(\".toc-search-input\"),\n $clearBtn = $(\".toc-search-clear\"),\n $prevBtn = $(\".toc-search-prev\"),\n $nextBtn = $(\".toc-search-next\"),\n currentClass = \"current\"\n\n let $content = $(documentRef.getElementById(contentElementId)),\n $results,\n offsetTop = 66,\n currentIndex = 0;\n \n // Jumps to the element matching the currentIndex\n function jumpTo() {\n if ($results?.length) {\n let position,\n $current = $results.eq(currentIndex);\n $results.removeClass(currentClass);\n if ($current.length) {\n $current.addClass(currentClass);\n position = $current.offset().top - offsetTop;\n window.scrollTo(0, position);\n }\n }\n }\n \n // Searches for the entered keyword in the specified context on input\n $input.on(\"input\", function () {\n let searchVal = this.value;\n $content.unmark({\n done: function () {\n $content.mark(searchVal, {\n separateWordSearch: true,\n done: function () {\n $results = $content.find(\"mark\");\n currentIndex = 0;\n jumpTo();\n }\n });\n }\n });\n });\n\n // Clears the search\n $clearBtn.on(\"click\", function () {\n $content.unmark();\n $input.val(\"\").focus();\n });\n\n // Next and previous search jump to\n $nextBtn.add($prevBtn).on(\"click\", function () {\n if ($results?.length) {\n currentIndex += $(this).is($prevBtn) ? -1 : 1;\n if (currentIndex < 0) {\n currentIndex = $results.length - 1;\n }\n if (currentIndex > $results.length - 1) {\n currentIndex = 0;\n }\n jumpTo();\n }\n });\n });\n};\n\nwindow.enablePasswordStrength = function () {\n $('.password-strength-meter').each(function () {\n const output = $(this);\n const password = $($(this).data(\"target\"));\n\n const checkPassword = function () {\n output.removeClass(\"bg-danger bg-warning bg-success\");\n const val = password.val();\n if (val === \"\") {\n output.css(\"width\", \"0%\");\n return;\n }\n\n const result = zxcvbn(val);\n\n // Update the password strength meter\n if (result.score < 1) {\n output.addClass(\"bg-danger\");\n } else if (result.score < 3) {\n output.addClass(\"bg-warning\");\n } else {\n output.addClass(\"bg-success\");\n }\n\n const warnings = [];\n if (result.feedback.warning) {\n warnings.push(result.feedback.warning);\n }\n\n if (result.feedback && result.feedback.suggestions) {\n for (let i = 0; i < result.feedback.suggestions.length; i++) {\n warnings.push(result.feedback.suggestions[i]);\n }\n }\n\n output.css(\"width\", 20 + (result.score * 20) + \"%\");\n let text = warnings.join(\"
\");\n if (text === \"\") text = \"Great password!\";\n output.attr(\"title\", text).attr(\"data-original-title\", text).tooltip({\n html: true\n }).tooltip('update');\n };\n\n password.on('input', function () {\n checkPassword();\n });\n\n checkPassword();\n });\n};\n\nwindow.enableDynamicValidation = function ($form, url) {\n let urlFunc = typeof url === 'function' ? url : function() { return url; };\n function dynamicValidation($element) {\n let validationRequest = null;\n let validationTimer = null;\n let statusElementTimer = null;\n\n const validationControls = $('\\n' +\n ' \\n' +\n ' \\n' +\n ' \\n' +\n ' ');\n\n const $input = $(\"input\", $element);\n \n // We want to avoid sending any potentially sensitive values to the server via query string parameters\n if($input.attr(\"type\") === \"password\"){\n return;\n }\n \n const propertyName = $input.attr(\"name\");\n let $validationError = $(`[data-valmsg-for='${propertyName}']`);\n\n $element.append(validationControls);\n\n const resetValidationStatus = function () {\n $(\".validation-status-valid\", $element).hide();\n $(\".validation-status-invalid\", $element).hide();\n $(\".validation-status-container\", $element).attr(\"title\", \"\").attr(\"data-original-title\", \"\").tooltip('hide');\n if (validationRequest) validationRequest.abort();\n if (validationTimer) clearTimeout(validationTimer);\n if (statusElementTimer) clearTimeout(statusElementTimer);\n if ($input.val() === \"\") {\n $(\".validation-status-validating\", $element).hide();\n } else {\n $(\".validation-status-validating\", $element).show();\n }\n };\n\n const resetValidationError = function () {\n $validationError.html(null);\n $validationError.removeClass();\n $validationError.addClass(\"field-validation-valid\");\n };\n\n const validate = function () {\n resetValidationStatus();\n\n const inputValue = $input.val();\n let $form = $input.closest(\"form\");\n let $submit = $form.find(\"[type=submit]\");\n\n if (inputValue !== \"\") {\n $submit.prop(\"disabled\", true);\n const start = performance.now();\n validationRequest = $.get(urlFunc() + '?propertyName=' + propertyName + \"&\" + propertyName + \"=\" + encodeURIComponent(inputValue), function (data) {\n const end = performance.now();\n $input.removeClass('invalid valid');\n $input.addClass(data.valid ? 'valid' : 'invalid');\n\n //calculate timeout for the UI\n const requestDuration = end - start;\n const uiDelay = Math.max(0, 500 - requestDuration);\n\n statusElementTimer = setTimeout(function () {\n $(\".validation-status-validating\", $element).hide();\n if (data.valid) {\n $(\".validation-status-valid\", $element).show();\n } else {\n $(\".validation-status-container\", $element).attr(\"title\", data.error).attr(\"data-original-title\", data.error).tooltip();\n $(\".validation-status-invalid\", $element).show();\n\n $validationError.html(data.error);\n $validationError.removeClass();\n $validationError.addClass(\"field-validation-error\");\n }\n }, uiDelay);\n }).always(function () {\n if ($form.find('input.invalid:visible').length === 0)\n $submit.prop(\"disabled\", false);\n });\n } else {\n // resets validation when the input is cleared\n resetValidationStatus();\n $input.removeClass('invalid valid');\n if ($form.find('input.invalid:visible').length === 0)\n $submit.prop(\"disabled\", false);\n }\n };\n\n $input.on('input', function () {\n resetValidationStatus();\n resetValidationError();\n $(\".validation-status-validating\", $element).hide();\n\n validationTimer = setTimeout(function () {\n validate();\n }, 500);\n });\n\n validate();\n }\n\n $(\".dynamic-validation\", $form).each(function () {\n dynamicValidation($(this));\n });\n};\n\n// Report an event to Google Analytics after 30 seconds of the browser tab being active. This helps us to have a\n// bounce rate metric that's more useful than the default bounce rate.\n(function () {\n let elapsed = 0;\n const pollFrequency = 500;\n let timerId;\n\n timerId = setInterval(function () {\n if (document.hidden || !document.hasFocus()) {\n return;\n }\n\n elapsed += pollFrequency;\n\n if (elapsed >= 30000) {\n if (typeof window.gtag !== \"undefined\") {\n gtag('event', 'Page active 30s', {'event_category': 'Page'});\n }\n clearInterval(timerId);\n }\n }, pollFrequency);\n})();\n\n$(function () {\n\n function initializeSvgImageFallback() {\n // We use lots of .svg files. If the browser doesn't\n // support SVG, we have to fall back to .png's in the\n // same folder. Assumption is that if we use a .svg there will\n // be a corresponding fallback .png.\n\n if (!document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\")) {\n $(\"img[src$='.svg']\").each(function (i) {\n $(this).attr(\"src\", $(this).attr(\"src\").replace(\".svg\", \".png\"));\n });\n\n $(\".without-svg\").show();\n $(\".with-svg\").hide();\n }\n }\n\n function initializeAjax() {\n // Some pages like pricing make use of AJAX - let's make sure the responses aren't cached\n $.ajaxSetup({cache: false});\n }\n\n function initializeNavbarShadowOnScroll() {\n let hasShadow = false;\n window.addEventListener(\"scroll\", function (event) {\n const scroll = this.scrollY;\n if (scroll <= 10 && hasShadow) {\n $(\".navbar.fixed-top\").removeClass(\"navbar-sticky-scrolling\");\n hasShadow = false;\n } else if (scroll > 10 && !hasShadow) {\n $(\".navbar.fixed-top\").addClass(\"navbar-sticky-scrolling\");\n hasShadow = true;\n }\n });\n }\n\n $(function () {\n const lazyImages = [].slice.call(document.querySelectorAll(\"img.lazy\"));\n\n if (\"IntersectionObserver\" in window) {\n const lazyImageObserver = new IntersectionObserver(function (entries, observer) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting) {\n var lazyImage = entry.target;\n lazyImage.src = lazyImage.dataset.src;\n if (typeof (lazyImage.dataset.srcset) !== 'undefined') {\n lazyImage.srcset = lazyImage.dataset.srcset;\n }\n lazyImage.classList.add(\"loaded\");\n lazyImageObserver.unobserve(lazyImage);\n }\n });\n });\n\n lazyImages.forEach(function (lazyImage) {\n lazyImageObserver.observe(lazyImage);\n });\n } else {\n // Load automatically\n setTimeout(function () {\n lazyImages.forEach(function (lazyImage) {\n lazyImage.src = lazyImage.dataset.src;\n if (typeof (lazyImage.dataset.srcset) !== 'undefined') {\n lazyImage.srcset = lazyImage.dataset.srcset;\n }\n lazyImage.classList.add(\"loaded\");\n });\n }, 1000);\n }\n });\n\n\n function initializePopovers() {\n $('[data-toggle=\"popover\"]')\n .popover({html: true, trigger: 'focus'})\n .click(function (e) {\n e.preventDefault();\n });\n }\n\n function updateIntercom(data) {\n window.intercomSettings = window.intercomSettings || {};\n window.intercomSettings.name = data.fullName;\n window.intercomSettings.email = data.email;\n window.intercomSettings.user_id = data.id;\n window.intercomSettings.user_hash = data.intercomUserHash;\n if (data.profileImage) {\n window.intercomSettings.avatar = {\n type: 'avatar',\n image_url: data.profileImage\n };\n }\n if(typeof Intercom !== 'undefined')\n Intercom('update');\n }\n\n function initializeProfileMenu() {\n const $signIn = $(\"#navbar-sign-in\");\n const $signUp = $(\"#navbar-sign-up\");\n const $navbarProfile = $('#navbar-profile');\n const signedInCookie = Cookies.get('OctopusSignedInUser'); \n // if user is signed in\n if (!!signedInCookie && $navbarProfile.length > 0) {\n let data = JSON.parse(signedInCookie);\n\n const name = data.fullName ?? data.email;\n\n //if the image is available, show the image and hide the circle\n if (!!data.profileImageUrl) {\n $navbarProfile.find('#navbar-profile-image img').attr('title', name).attr('src', data.profileImageUrl).show();\n $navbarProfile.find('#navbar-profile-image :not(img)').remove();\n }\n\n $navbarProfile.find('#navbar-profile-sign-out').toggle(data.method === 'Auth');\n\n $navbarProfile.find('#navbar-profile-name').text(name);\n $navbarProfile.show();\n\n window._dcq = window._dcq || [];\n _dcq.push([\"identify\", {email: data.email, prospect: true}]);\n\n if (window.FS) {\n FS.identify(data.userHash, {\n displayName: data.fullName,\n email: data.email\n });\n }\n\n $signIn.hide();\n $signUp.hide();\n\n updateIntercom(data);\n } else {\n $signIn.show();\n $signUp.show();\n }\n }\n\n function initializeLoadOnScroll() {\n let hasPageLoaded = false;\n const onIntersection = (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n entry.target.classList.add('loaded');\n } else {\n if (!hasPageLoaded) {\n entry.target.classList.add('awaiting-scroll');\n }\n }\n }\n };\n\n setTimeout(function () {\n hasPageLoaded = true;\n }, 1000);\n\n const observer = new IntersectionObserver(onIntersection);\n document.querySelectorAll('.load-on-scroll').forEach(e => observer.observe(e));\n }\n \n\n initializeLoadOnScroll();\n\n initializeProfileMenu();\n initializeNavbarShadowOnScroll();\n initializeSvgImageFallback();\n initializeAjax();\n initializePopovers();\n});\n\n// Global tooltips\n$(function () {\n $('[data-toggle=\"tooltip\"]').tooltip();\n $('[data-toggle=\"tooltip-click\"]').tooltip(\n {\n trigger: 'click',\n animation: true\n }\n );\n $(document).on('click', hideTooltips);\n function hideTooltips(e){\n const toggleAttr = $(e.target).attr('data-toggle');\n if ([\"tooltip-click\", \"tooltip\"].includes(toggleAttr)){\n return;\n }\n $('[data-toggle=\"tooltip-click\"]').tooltip('hide');\n }\n});\n\n// Copy to clipboard tooltip\n$(function () {\n $('.copy-to-clipboard-tooltip').tooltip(\n {\n trigger: 'focus',\n placement: 'top',\n animation: true,\n delay: {hide: 1500}\n }\n );\n});\n\n\n(function ($) {\n 'use strict';\n\n var timer;\n\n function trackLeave(ev) {\n if (ev.clientY > 0) {\n return;\n }\n\n if (timer) {\n clearTimeout(timer);\n }\n\n if ($.exitIntent.settings.sensitivity <= 0) {\n $.event.trigger('exitintent');\n return;\n }\n\n timer = setTimeout(\n function () {\n timer = null;\n $.event.trigger('exitintent');\n }, $.exitIntent.settings.sensitivity);\n }\n\n function trackEnter() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n\n $.exitIntent = function (enable, options) {\n $.exitIntent.settings = $.extend($.exitIntent.settings, options);\n\n if (enable === 'enable') {\n $(window).mouseleave(trackLeave);\n $(window).mouseenter(trackEnter);\n } else if (enable === 'disable') {\n trackEnter(); // Turn off any outstanding timer\n $(window).unbind('mouseleave', trackLeave);\n $(window).unbind('mouseenter', trackEnter);\n } else {\n throw \"Invalid parameter to jQuery.exitIntent -- should be 'enable'/'disable'\";\n }\n }\n\n $.exitIntent.settings = {\n 'sensitivity': 300\n };\n\n})(jQuery);\n\n// NOTE: If this is changed, it also needs to be changed in OctopusMarketing/Octopus.Web.Public\n// handle the OctopusEvents cookie\n$(function () {\n const cookieName = 'OctopusEvents'\n const eventsCookie = Cookies.get(cookieName);\n if (!!eventsCookie) {\n let events = JSON.parse(eventsCookie);\n\n for (let i = 0; i < events.length; i++) {\n const ev = events[i];\n switch (ev.Type) {\n case 'TrackingEvent':\n WriteTrackingEvent(ev);\n break;\n case 'FormProgressEvent':\n WriteFormProgressEvent(ev);\n break;\n case 'LeadTrackingEvent':\n WriteLeadTrackingEvent(ev);\n break;\n default:\n console.debug(`Unknown event type encountered: ${ev.Type}`);\n break;\n }\n }\n\n //Remove the cookie once we are done processing it\n Cookies.remove(cookieName);\n }\n \n function WriteLeadTrackingEvent(ev) {\n\n // Marketo\n const marketoFormId = ev.Data.MarketoFormId;\n const marketoAccountId = ev.Data.MarketoAccountId;\n if (marketoFormId && marketoAccountId) {\n LoadScriptAsync(\"//get.octopus.com/js/forms2/js/forms2.min.js\", function () {\n // add hidden form\n let hiddenForm = document.createElement('form');\n hiddenForm.id = \"mktoForm_\" + marketoFormId;\n hiddenForm.style.display = \"none\";\n document.getElementsByTagName('body')[0].appendChild(hiddenForm);\n\n MktoForms2.loadForm('//get.octopus.com', marketoAccountId, marketoFormId, function (form) {\n form.addHiddenFields(ev.Data.MarketoFields);\n form.onSuccess(function () {\n // Return false to prevent the submission handler continuing with its own processing\n return false;\n });\n form.submit();\n });\n });\n }\n }\n\n function WriteTrackingEvent(ev) {\n const action = ev.Data.Action;\n const category = ev.Data.Category;\n\n //Write LinkedIn image but only for new accounts\n if (action === 'NewAccount') {\n $('body').append('\"\"');\n }\n\n //Microsoft Ads\n if (window.uetq) {\n window.uetq.push('event', action, {event_category: category});\n }\n\n // Drip\n if (window._dcq) {\n _dcq.push(['track', action, {category: category}]);\n }\n\n //FullStory\n if (window.FS) {\n window.FS.event(action, {category: category});\n }\n\n //Google Tag Manager\n if (window.dataLayer) {\n window.dataLayer.push({\n event: 'eventTracking',\n category: category,\n action: action\n });\n }\n }\n\n function WriteFormProgressEvent(ev){\n const step = ev.Data.Step;\n const stepNumber = ev.Data.StepNumber;\n const platform = ev.Data.Platform;\n\n //Google Tag Manager\n if (window.dataLayer) {\n window.dataLayer.push({\n 'event': 'form_progress',\n 'step': step,\n 'stepNumber': stepNumber,\n 'platform': platform\n });\n }\n\n }\n \n function LoadScriptAsync(scriptUrl, callback) {\n var s = document.createElement('script');\n s.type = 'text/javascript';\n s.async = true;\n s.src = scriptUrl;\n s.onreadystatechange = function () {\n if (this.readyState == 'complete' || this.readyState == 'loaded') {\n callback();\n }\n };\n s.onload = callback;\n document.getElementsByTagName('head')[0].appendChild(s);\n }\n});\n\n$(function () {\n // handles the PathTracking cookie for URL tracking\n function setPageCookie() {\n const sanitizedHostname = sanitizeUrlData(window.location.hostname);\n const sanitizedPathname = sanitizeUrlData(window.location.pathname);\n const pathTrackingValue = sanitizedHostname + sanitizedPathname;\n\n Cookies.set(\"OctopusPathTracking\", pathTrackingValue, {\n secure: true,\n expires: 7,\n sameSite: \"strict\",\n });\n }\n window.addEventListener('load', setPageCookie);\n});","/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\t\tthis.isInline = !this.component && this.element.is('div');\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!$.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!$.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n var events = {\n keyup: $.proxy(function(e){\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) { // single input\n this._events = [\n [this.element, events]\n ];\n }\n // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [\n // For components that are not readonly, allow keyboard nav\n [this.inputField, events],\n [this.component, {\n click: $.proxy(this.show, this)\n }]\n ];\n }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis.update();\n\t\t\tthis._trigger('changeDate');\n\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += ' ';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '';\n\t\t\t}\n\t\t\thtml += '';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n }\n\t\t},\n\n\t\tfillMonths: function(){\n var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '' + dates[this.o.language].monthsShort[i] + '';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n cls.push('range-start');\n }\n if (date.valueOf() === this.range[this.range.length-1]){\n cls.push('range-end');\n }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t classes.push('focused');\n }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '' + currVal + '';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push(''+ calWeek +'');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif ($.isFunction($.uniqueSort)) {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('' + content + '');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n if (this.viewMode === 0) {\n \t\t\t\t\tif (e.ctrlKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n \t\t\t\t\t} else if (e.shiftKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n \t\t\t\t\t}\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j]){\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k]){\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '«',\n\t\t\trightArrow: '»'\n\t\t},\n showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n return format;\n // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n return format.toDisplay(date, format, language);\n var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: ''+\n\t\t\t ''+\n\t\t\t ''+\n\t\t\t ''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+defaults.templates.leftArrow+''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+defaults.templates.rightArrow+''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t'',\n\t\tcontTemplate: '',\n\t\tfootTemplate: ''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t''\n\t};\n\tDPGlobal.template = '
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.9.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n","/*! =======================================================\n VERSION 11.0.2 \n========================================================= */\n\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! =========================================================\n * bootstrap-slider.js\n *\n * Maintainers:\n *\t\tKyle Kemp\n *\t\t\t- Twitter: @seiyria\n *\t\t\t- Github: seiyria\n *\t\tRohit Kalkur\n *\t\t\t- Twitter: @Rovolutionary\n *\t\t\t- Github: rovolution\n *\n * =========================================================\n *\n * bootstrap-slider is released under the MIT License\n * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * ========================================================= */\n\n/**\n * Bridget makes jQuery widgets\n * v1.0.1\n * MIT license\n */\nvar windowIsDefined = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\";\n\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\"], factory);\n\t} else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n\t\tvar jQuery;\n\t\ttry {\n\t\t\tjQuery = require(\"jquery\");\n\t\t} catch (err) {\n\t\t\tjQuery = null;\n\t\t}\n\t\tmodule.exports = factory(jQuery);\n\t} else if (window) {\n\t\twindow.Slider = factory(window.jQuery);\n\t}\n})(function ($) {\n\t// Constants\n\tvar NAMESPACE_MAIN = 'slider';\n\tvar NAMESPACE_ALTERNATE = 'bootstrapSlider';\n\n\t// Polyfill console methods\n\tif (windowIsDefined && !window.console) {\n\t\twindow.console = {};\n\t}\n\tif (windowIsDefined && !window.console.log) {\n\t\twindow.console.log = function () {};\n\t}\n\tif (windowIsDefined && !window.console.warn) {\n\t\twindow.console.warn = function () {};\n\t}\n\n\t// Reference to Slider constructor\n\tvar Slider;\n\n\t(function ($) {\n\n\t\t'use strict';\n\n\t\t// -------------------------- utils -------------------------- //\n\n\t\tvar slice = Array.prototype.slice;\n\n\t\tfunction noop() {}\n\n\t\t// -------------------------- definition -------------------------- //\n\n\t\tfunction defineBridget($) {\n\n\t\t\t// bail if no jQuery\n\t\t\tif (!$) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// -------------------------- addOptionMethod -------------------------- //\n\n\t\t\t/**\n * adds option method -> $().plugin('option', {...})\n * @param {Function} PluginClass - constructor class\n */\n\t\t\tfunction addOptionMethod(PluginClass) {\n\t\t\t\t// don't overwrite original option method\n\t\t\t\tif (PluginClass.prototype.option) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// option setter\n\t\t\t\tPluginClass.prototype.option = function (opts) {\n\t\t\t\t\t// bail out if not an object\n\t\t\t\t\tif (!$.isPlainObject(opts)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.options = $.extend(true, this.options, opts);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// -------------------------- plugin bridge -------------------------- //\n\n\t\t\t// helper function for logging errors\n\t\t\t// $.error breaks jQuery chaining\n\t\t\tvar logError = typeof console === 'undefined' ? noop : function (message) {\n\t\t\t\tconsole.error(message);\n\t\t\t};\n\n\t\t\t/**\n * jQuery plugin bridge, access methods like $elem.plugin('method')\n * @param {String} namespace - plugin name\n * @param {Function} PluginClass - constructor class\n */\n\t\t\tfunction bridge(namespace, PluginClass) {\n\t\t\t\t// add to jQuery fn namespace\n\t\t\t\t$.fn[namespace] = function (options) {\n\t\t\t\t\tif (typeof options === 'string') {\n\t\t\t\t\t\t// call plugin method when first argument is a string\n\t\t\t\t\t\t// get arguments for method\n\t\t\t\t\t\tvar args = slice.call(arguments, 1);\n\n\t\t\t\t\t\tfor (var i = 0, len = this.length; i < len; i++) {\n\t\t\t\t\t\t\tvar elem = this[i];\n\t\t\t\t\t\t\tvar instance = $.data(elem, namespace);\n\t\t\t\t\t\t\tif (!instance) {\n\t\t\t\t\t\t\t\tlogError(\"cannot call methods on \" + namespace + \" prior to initialization; \" + \"attempted to call '\" + options + \"'\");\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!$.isFunction(instance[options]) || options.charAt(0) === '_') {\n\t\t\t\t\t\t\t\tlogError(\"no such method '\" + options + \"' for \" + namespace + \" instance\");\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// trigger method with arguments\n\t\t\t\t\t\t\tvar returnValue = instance[options].apply(instance, args);\n\n\t\t\t\t\t\t\t// break look and return first value if provided\n\t\t\t\t\t\t\tif (returnValue !== undefined && returnValue !== instance) {\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// return this if no return value\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar objects = this.map(function () {\n\t\t\t\t\t\t\tvar instance = $.data(this, namespace);\n\t\t\t\t\t\t\tif (instance) {\n\t\t\t\t\t\t\t\t// apply options & init\n\t\t\t\t\t\t\t\tinstance.option(options);\n\t\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// initialize new instance\n\t\t\t\t\t\t\t\tinstance = new PluginClass(this, options);\n\t\t\t\t\t\t\t\t$.data(this, namespace, instance);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn $(this);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (objects.length === 1) {\n\t\t\t\t\t\t\treturn objects[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn objects;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// -------------------------- bridget -------------------------- //\n\n\t\t\t/**\n * converts a Prototypical class into a proper jQuery plugin\n * the class must have a ._init method\n * @param {String} namespace - plugin name, used in $().pluginName\n * @param {Function} PluginClass - constructor class\n */\n\t\t\t$.bridget = function (namespace, PluginClass) {\n\t\t\t\taddOptionMethod(PluginClass);\n\t\t\t\tbridge(namespace, PluginClass);\n\t\t\t};\n\n\t\t\treturn $.bridget;\n\t\t}\n\n\t\t// get jquery from browser global\n\t\tdefineBridget($);\n\t})($);\n\n\t/*************************************************\n \t\t\tBOOTSTRAP-SLIDER SOURCE CODE\n \t**************************************************/\n\n\t(function ($) {\n\t\tvar autoRegisterNamespace = void 0;\n\n\t\tvar ErrorMsgs = {\n\t\t\tformatInvalidInputErrorMsg: function formatInvalidInputErrorMsg(input) {\n\t\t\t\treturn \"Invalid input value '\" + input + \"' passed in\";\n\t\t\t},\n\t\t\tcallingContextNotSliderInstance: \"Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method\"\n\t\t};\n\n\t\tvar SliderScale = {\n\t\t\tlinear: {\n\t\t\t\tgetValue: function getValue(value, options) {\n\t\t\t\t\tif (value < options.min) {\n\t\t\t\t\t\treturn options.min;\n\t\t\t\t\t} else if (value > options.max) {\n\t\t\t\t\t\treturn options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttoValue: function toValue(percentage) {\n\t\t\t\t\tvar rawValue = percentage / 100 * (this.options.max - this.options.min);\n\t\t\t\t\tvar shouldAdjustWithBase = true;\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv,\n\t\t\t\t\t\t maxv,\n\t\t\t\t\t\t minp,\n\t\t\t\t\t\t maxp = 0;\n\t\t\t\t\t\tfor (var i = 1; i < this.options.ticks_positions.length; i++) {\n\t\t\t\t\t\t\tif (percentage <= this.options.ticks_positions[i]) {\n\t\t\t\t\t\t\t\tminv = this.options.ticks[i - 1];\n\t\t\t\t\t\t\t\tminp = this.options.ticks_positions[i - 1];\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar partialPercentage = (percentage - minp) / (maxp - minp);\n\t\t\t\t\t\trawValue = minv + partialPercentage * (maxv - minv);\n\t\t\t\t\t\tshouldAdjustWithBase = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar adjustment = shouldAdjustWithBase ? this.options.min : 0;\n\t\t\t\t\tvar value = adjustment + Math.round(rawValue / this.options.step) * this.options.step;\n\t\t\t\t\treturn SliderScale.linear.getValue(value, this.options);\n\t\t\t\t},\n\t\t\t\ttoPercentage: function toPercentage(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv,\n\t\t\t\t\t\t maxv,\n\t\t\t\t\t\t minp,\n\t\t\t\t\t\t maxp = 0;\n\t\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\t\tif (value <= this.options.ticks[i]) {\n\t\t\t\t\t\t\t\tminv = i > 0 ? this.options.ticks[i - 1] : 0;\n\t\t\t\t\t\t\t\tminp = i > 0 ? this.options.ticks_positions[i - 1] : 0;\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tvar partialPercentage = (value - minv) / (maxv - minv);\n\t\t\t\t\t\t\treturn minp + partialPercentage * (maxp - minp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 100 * (value - this.options.min) / (this.options.max - this.options.min);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tlogarithmic: {\n\t\t\t\t/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */\n\t\t\t\ttoValue: function toValue(percentage) {\n\t\t\t\t\tvar offset = 1 - this.options.min;\n\t\t\t\t\tvar min = Math.log(this.options.min + offset);\n\t\t\t\t\tvar max = Math.log(this.options.max + offset);\n\t\t\t\t\tvar value = Math.exp(min + (max - min) * percentage / 100) - offset;\n\t\t\t\t\tif (Math.round(value) === max) {\n\t\t\t\t\t\treturn max;\n\t\t\t\t\t}\n\t\t\t\t\tvalue = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;\n\t\t\t\t\t/* Rounding to the nearest step could exceed the min or\n * max, so clip to those values. */\n\t\t\t\t\treturn SliderScale.linear.getValue(value, this.options);\n\t\t\t\t},\n\t\t\t\ttoPercentage: function toPercentage(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar offset = 1 - this.options.min;\n\t\t\t\t\t\tvar max = Math.log(this.options.max + offset);\n\t\t\t\t\t\tvar min = Math.log(this.options.min + offset);\n\t\t\t\t\t\tvar v = Math.log(value + offset);\n\t\t\t\t\t\treturn 100 * (v - min) / (max - min);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/*************************************************\n \t\t\t\t\t\tCONSTRUCTOR\n \t**************************************************/\n\t\tSlider = function Slider(element, options) {\n\t\t\tcreateNewSlider.call(this, element, options);\n\t\t\treturn this;\n\t\t};\n\n\t\tfunction createNewSlider(element, options) {\n\n\t\t\t/*\n \tThe internal state object is used to store data about the current 'state' of slider.\n \tThis includes values such as the `value`, `enabled`, etc...\n */\n\t\t\tthis._state = {\n\t\t\t\tvalue: null,\n\t\t\t\tenabled: null,\n\t\t\t\toffset: null,\n\t\t\t\tsize: null,\n\t\t\t\tpercentage: null,\n\t\t\t\tinDrag: false,\n\t\t\t\tover: false,\n\t\t\t\ttickIndex: null\n\t\t\t};\n\n\t\t\t// The objects used to store the reference to the tick methods if ticks_tooltip is on\n\t\t\tthis.ticksCallbackMap = {};\n\t\t\tthis.handleCallbackMap = {};\n\n\t\t\tif (typeof element === \"string\") {\n\t\t\t\tthis.element = document.querySelector(element);\n\t\t\t} else if (element instanceof HTMLElement) {\n\t\t\t\tthis.element = element;\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\tProcess Options\n \t**************************************************/\n\t\t\toptions = options ? options : {};\n\t\t\tvar optionTypes = Object.keys(this.defaultOptions);\n\n\t\t\tvar isMinSet = options.hasOwnProperty('min');\n\t\t\tvar isMaxSet = options.hasOwnProperty('max');\n\n\t\t\tfor (var i = 0; i < optionTypes.length; i++) {\n\t\t\t\tvar optName = optionTypes[i];\n\n\t\t\t\t// First check if an option was passed in via the constructor\n\t\t\t\tvar val = options[optName];\n\t\t\t\t// If no data attrib, then check data atrributes\n\t\t\t\tval = typeof val !== 'undefined' ? val : getDataAttrib(this.element, optName);\n\t\t\t\t// Finally, if nothing was specified, use the defaults\n\t\t\t\tval = val !== null ? val : this.defaultOptions[optName];\n\n\t\t\t\t// Set all options on the instance of the Slider\n\t\t\t\tif (!this.options) {\n\t\t\t\t\tthis.options = {};\n\t\t\t\t}\n\t\t\t\tthis.options[optName] = val;\n\t\t\t}\n\n\t\t\tthis.ticksAreValid = Array.isArray(this.options.ticks) && this.options.ticks.length > 0;\n\n\t\t\t// Lock to ticks only when ticks[] is defined and set\n\t\t\tif (!this.ticksAreValid) {\n\t\t\t\tthis.options.lock_to_ticks = false;\n\t\t\t}\n\n\t\t\t// Check options.rtl\n\t\t\tif (this.options.rtl === 'auto') {\n\t\t\t\tvar computedStyle = window.getComputedStyle(this.element);\n\t\t\t\tif (computedStyle != null) {\n\t\t\t\t\tthis.options.rtl = computedStyle.direction === 'rtl';\n\t\t\t\t} else {\n\t\t\t\t\t// Fix for Firefox bug in versions less than 62:\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1467722\n\t\t\t\t\tthis.options.rtl = this.element.style.direction === 'rtl';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n \tValidate `tooltip_position` against 'orientation`\n \t- if `tooltip_position` is incompatible with orientation, switch it to a default compatible with specified `orientation`\n \t\t-- default for \"vertical\" -> \"right\", \"left\" if rtl\n \t\t-- default for \"horizontal\" -> \"top\"\n */\n\t\t\tif (this.options.orientation === \"vertical\" && (this.options.tooltip_position === \"top\" || this.options.tooltip_position === \"bottom\")) {\n\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\tthis.options.tooltip_position = \"left\";\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.tooltip_position = \"right\";\n\t\t\t\t}\n\t\t\t} else if (this.options.orientation === \"horizontal\" && (this.options.tooltip_position === \"left\" || this.options.tooltip_position === \"right\")) {\n\n\t\t\t\tthis.options.tooltip_position = \"top\";\n\t\t\t}\n\n\t\t\tfunction getDataAttrib(element, optName) {\n\t\t\t\tvar dataName = \"data-slider-\" + optName.replace(/_/g, '-');\n\t\t\t\tvar dataValString = element.getAttribute(dataName);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(dataValString);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn dataValString;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\tCreate Markup\n \t**************************************************/\n\n\t\t\tvar origWidth = this.element.style.width;\n\t\t\tvar updateSlider = false;\n\t\t\tvar parent = this.element.parentNode;\n\t\t\tvar sliderTrackSelection;\n\t\t\tvar sliderTrackLow, sliderTrackHigh;\n\t\t\tvar sliderMinHandle;\n\t\t\tvar sliderMaxHandle;\n\n\t\t\tif (this.sliderElem) {\n\t\t\t\tupdateSlider = true;\n\t\t\t} else {\n\t\t\t\t/* Create elements needed for slider */\n\t\t\t\tthis.sliderElem = document.createElement(\"div\");\n\t\t\t\tthis.sliderElem.className = \"slider\";\n\n\t\t\t\t/* Create slider track elements */\n\t\t\t\tvar sliderTrack = document.createElement(\"div\");\n\t\t\t\tsliderTrack.className = \"slider-track\";\n\n\t\t\t\tsliderTrackLow = document.createElement(\"div\");\n\t\t\t\tsliderTrackLow.className = \"slider-track-low\";\n\n\t\t\t\tsliderTrackSelection = document.createElement(\"div\");\n\t\t\t\tsliderTrackSelection.className = \"slider-selection\";\n\n\t\t\t\tsliderTrackHigh = document.createElement(\"div\");\n\t\t\t\tsliderTrackHigh.className = \"slider-track-high\";\n\n\t\t\t\tsliderMinHandle = document.createElement(\"div\");\n\t\t\t\tsliderMinHandle.className = \"slider-handle min-slider-handle\";\n\t\t\t\tsliderMinHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderMaxHandle = document.createElement(\"div\");\n\t\t\t\tsliderMaxHandle.className = \"slider-handle max-slider-handle\";\n\t\t\t\tsliderMaxHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderTrack.appendChild(sliderTrackLow);\n\t\t\t\tsliderTrack.appendChild(sliderTrackSelection);\n\t\t\t\tsliderTrack.appendChild(sliderTrackHigh);\n\n\t\t\t\t/* Create highlight range elements */\n\t\t\t\tthis.rangeHighlightElements = [];\n\t\t\t\tvar rangeHighlightsOpts = this.options.rangeHighlights;\n\t\t\t\tif (Array.isArray(rangeHighlightsOpts) && rangeHighlightsOpts.length > 0) {\n\t\t\t\t\tfor (var j = 0; j < rangeHighlightsOpts.length; j++) {\n\t\t\t\t\t\tvar rangeHighlightElement = document.createElement(\"div\");\n\t\t\t\t\t\tvar customClassString = rangeHighlightsOpts[j].class || \"\";\n\t\t\t\t\t\trangeHighlightElement.className = \"slider-rangeHighlight slider-selection \" + customClassString;\n\t\t\t\t\t\tthis.rangeHighlightElements.push(rangeHighlightElement);\n\t\t\t\t\t\tsliderTrack.appendChild(rangeHighlightElement);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Add aria-labelledby to handle's */\n\t\t\t\tvar isLabelledbyArray = Array.isArray(this.options.labelledby);\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[0]) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);\n\t\t\t\t}\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[1]) {\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);\n\t\t\t\t}\n\t\t\t\tif (!isLabelledbyArray && this.options.labelledby) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t}\n\n\t\t\t\t/* Create ticks */\n\t\t\t\tthis.ticks = [];\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\t\tthis.ticksContainer = document.createElement('div');\n\t\t\t\t\tthis.ticksContainer.className = 'slider-tick-container';\n\n\t\t\t\t\tfor (i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\tvar tick = document.createElement('div');\n\t\t\t\t\t\ttick.className = 'slider-tick';\n\t\t\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\t\t\tvar tickListenerReference = this._addTickListener();\n\t\t\t\t\t\t\tvar enterCallback = tickListenerReference.addMouseEnter(this, tick, i);\n\t\t\t\t\t\t\tvar leaveCallback = tickListenerReference.addMouseLeave(this, tick);\n\n\t\t\t\t\t\t\tthis.ticksCallbackMap[i] = {\n\t\t\t\t\t\t\t\tmouseEnter: enterCallback,\n\t\t\t\t\t\t\t\tmouseLeave: leaveCallback\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.ticks.push(tick);\n\t\t\t\t\t\tthis.ticksContainer.appendChild(tick);\n\t\t\t\t\t}\n\n\t\t\t\t\tsliderTrackSelection.className += \" tick-slider-selection\";\n\t\t\t\t}\n\n\t\t\t\tthis.tickLabels = [];\n\t\t\t\tif (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {\n\t\t\t\t\tthis.tickLabelContainer = document.createElement('div');\n\t\t\t\t\tthis.tickLabelContainer.className = 'slider-tick-label-container';\n\n\t\t\t\t\tfor (i = 0; i < this.options.ticks_labels.length; i++) {\n\t\t\t\t\t\tvar label = document.createElement('div');\n\t\t\t\t\t\tvar noTickPositionsSpecified = this.options.ticks_positions.length === 0;\n\t\t\t\t\t\tvar tickLabelsIndex = this.options.reversed && noTickPositionsSpecified ? this.options.ticks_labels.length - (i + 1) : i;\n\t\t\t\t\t\tlabel.className = 'slider-tick-label';\n\t\t\t\t\t\tlabel.innerHTML = this.options.ticks_labels[tickLabelsIndex];\n\n\t\t\t\t\t\tthis.tickLabels.push(label);\n\t\t\t\t\t\tthis.tickLabelContainer.appendChild(label);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar createAndAppendTooltipSubElements = function createAndAppendTooltipSubElements(tooltipElem) {\n\t\t\t\t\tvar arrow = document.createElement(\"div\");\n\t\t\t\t\tarrow.className = \"arrow\";\n\n\t\t\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t\t\tinner.className = \"tooltip-inner\";\n\n\t\t\t\t\ttooltipElem.appendChild(arrow);\n\t\t\t\t\ttooltipElem.appendChild(inner);\n\t\t\t\t};\n\n\t\t\t\t/* Create tooltip elements */\n\t\t\t\tvar sliderTooltip = document.createElement(\"div\");\n\t\t\t\tsliderTooltip.className = \"tooltip tooltip-main\";\n\t\t\t\tsliderTooltip.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltip);\n\n\t\t\t\tvar sliderTooltipMin = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMin.className = \"tooltip tooltip-min\";\n\t\t\t\tsliderTooltipMin.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMin);\n\n\t\t\t\tvar sliderTooltipMax = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMax.className = \"tooltip tooltip-max\";\n\t\t\t\tsliderTooltipMax.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMax);\n\n\t\t\t\t/* Append components to sliderElem */\n\t\t\t\tthis.sliderElem.appendChild(sliderTrack);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltip);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMin);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMax);\n\n\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\tthis.sliderElem.appendChild(this.tickLabelContainer);\n\t\t\t\t}\n\t\t\t\tif (this.ticksContainer) {\n\t\t\t\t\tthis.sliderElem.appendChild(this.ticksContainer);\n\t\t\t\t}\n\n\t\t\t\tthis.sliderElem.appendChild(sliderMinHandle);\n\t\t\t\tthis.sliderElem.appendChild(sliderMaxHandle);\n\n\t\t\t\t/* Append slider element to parent container, right before the original element */\n\t\t\t\tparent.insertBefore(this.sliderElem, this.element);\n\n\t\t\t\t/* Hide original element */\n\t\t\t\tthis.element.style.display = \"none\";\n\t\t\t}\n\t\t\t/* If JQuery exists, cache JQ references */\n\t\t\tif ($) {\n\t\t\t\tthis.$element = $(this.element);\n\t\t\t\tthis.$sliderElem = $(this.sliderElem);\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\t\tSetup\n \t**************************************************/\n\t\t\tthis.eventToCallbackMap = {};\n\t\t\tthis.sliderElem.id = this.options.id;\n\n\t\t\tthis.touchCapable = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;\n\n\t\t\tthis.touchX = 0;\n\t\t\tthis.touchY = 0;\n\n\t\t\tthis.tooltip = this.sliderElem.querySelector('.tooltip-main');\n\t\t\tthis.tooltipInner = this.tooltip.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_min = this.sliderElem.querySelector('.tooltip-min');\n\t\t\tthis.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_max = this.sliderElem.querySelector('.tooltip-max');\n\t\t\tthis.tooltipInner_max = this.tooltip_max.querySelector('.tooltip-inner');\n\n\t\t\tif (SliderScale[this.options.scale]) {\n\t\t\t\tthis.options.scale = SliderScale[this.options.scale];\n\t\t\t}\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-vertical');\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-rtl');\n\t\t\t\tthis._removeClass(this.tooltip, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_max, 'hide');\n\n\t\t\t\t// Undo existing inline styles for track\n\t\t\t\t[\"left\", \"right\", \"top\", \"width\", \"height\"].forEach(function (prop) {\n\t\t\t\t\tthis._removeProperty(this.trackLow, prop);\n\t\t\t\t\tthis._removeProperty(this.trackSelection, prop);\n\t\t\t\t\tthis._removeProperty(this.trackHigh, prop);\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles on handles\n\t\t\t\t[this.handle1, this.handle2].forEach(function (handle) {\n\t\t\t\t\tthis._removeProperty(handle, 'left');\n\t\t\t\t\tthis._removeProperty(handle, 'right');\n\t\t\t\t\tthis._removeProperty(handle, 'top');\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles and classes on tooltips\n\t\t\t\t[this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function (tooltip) {\n\t\t\t\t\tthis._removeProperty(tooltip, 'bs-tooltip-left');\n\t\t\t\t\tthis._removeProperty(tooltip, 'bs-tooltip-right');\n\t\t\t\t\tthis._removeProperty(tooltip, 'bs-tooltip-top');\n\n\t\t\t\t\tthis._removeClass(tooltip, 'bs-tooltip-right');\n\t\t\t\t\tthis._removeClass(tooltip, 'bs-tooltip-left');\n\t\t\t\t\tthis._removeClass(tooltip, 'bs-tooltip-top');\n\t\t\t\t}, this);\n\t\t\t}\n\n\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-vertical');\n\t\t\t\tthis.stylePos = 'top';\n\t\t\t\tthis.mousePos = 'pageY';\n\t\t\t\tthis.sizePos = 'offsetHeight';\n\t\t\t} else {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis.sliderElem.style.width = origWidth;\n\t\t\t\tthis.options.orientation = 'horizontal';\n\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\tthis.stylePos = 'right';\n\t\t\t\t} else {\n\t\t\t\t\tthis.stylePos = 'left';\n\t\t\t\t}\n\t\t\t\tthis.mousePos = 'clientX';\n\t\t\t\tthis.sizePos = 'offsetWidth';\n\t\t\t}\n\t\t\t// specific rtl class\n\t\t\tif (this.options.rtl) {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-rtl');\n\t\t\t}\n\t\t\tthis._setTooltipPosition();\n\t\t\t/* In case ticks are specified, overwrite the min and max bounds */\n\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\tif (!isMaxSet) {\n\t\t\t\t\tthis.options.max = Math.max.apply(Math, this.options.ticks);\n\t\t\t\t}\n\t\t\t\tif (!isMinSet) {\n\t\t\t\t\tthis.options.min = Math.min.apply(Math, this.options.ticks);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Array.isArray(this.options.value)) {\n\t\t\t\tthis.options.range = true;\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t} else if (this.options.range) {\n\t\t\t\t// User wants a range, but value is not an array\n\t\t\t\tthis._state.value = [this.options.value, this.options.max];\n\t\t\t} else {\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t}\n\n\t\t\tthis.trackLow = sliderTrackLow || this.trackLow;\n\t\t\tthis.trackSelection = sliderTrackSelection || this.trackSelection;\n\t\t\tthis.trackHigh = sliderTrackHigh || this.trackHigh;\n\n\t\t\tif (this.options.selection === 'none') {\n\t\t\t\tthis._addClass(this.trackLow, 'hide');\n\t\t\t\tthis._addClass(this.trackSelection, 'hide');\n\t\t\t\tthis._addClass(this.trackHigh, 'hide');\n\t\t\t} else if (this.options.selection === 'after' || this.options.selection === 'before') {\n\t\t\t\tthis._removeClass(this.trackLow, 'hide');\n\t\t\t\tthis._removeClass(this.trackSelection, 'hide');\n\t\t\t\tthis._removeClass(this.trackHigh, 'hide');\n\t\t\t}\n\n\t\t\tthis.handle1 = sliderMinHandle || this.handle1;\n\t\t\tthis.handle2 = sliderMaxHandle || this.handle2;\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.handle1, 'round triangle');\n\t\t\t\tthis._removeClass(this.handle2, 'round triangle hide');\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._removeClass(this.ticks[i], 'round triangle hide');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar availableHandleModifiers = ['round', 'triangle', 'custom'];\n\t\t\tvar isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;\n\t\t\tif (isValidHandleType) {\n\t\t\t\tthis._addClass(this.handle1, this.options.handle);\n\t\t\t\tthis._addClass(this.handle2, this.options.handle);\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._addClass(this.ticks[i], this.options.handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\t\t\tthis.setValue(this._state.value);\n\n\t\t\t/******************************************\n \t\t\t\tBind Event Listeners\n \t******************************************/\n\n\t\t\t// Bind keyboard handlers\n\t\t\tthis.handle1Keydown = this._keydown.bind(this, 0);\n\t\t\tthis.handle1.addEventListener(\"keydown\", this.handle1Keydown, false);\n\n\t\t\tthis.handle2Keydown = this._keydown.bind(this, 1);\n\t\t\tthis.handle2.addEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\tthis.mousedown = this._mousedown.bind(this);\n\t\t\tthis.touchstart = this._touchstart.bind(this);\n\t\t\tthis.touchmove = this._touchmove.bind(this);\n\n\t\t\tif (this.touchCapable) {\n\t\t\t\tthis.sliderElem.addEventListener(\"touchstart\", this.touchstart, false);\n\t\t\t\tthis.sliderElem.addEventListener(\"touchmove\", this.touchmove, false);\n\t\t\t}\n\n\t\t\tthis.sliderElem.addEventListener(\"mousedown\", this.mousedown, false);\n\n\t\t\t// Bind window handlers\n\t\t\tthis.resize = this._resize.bind(this);\n\t\t\twindow.addEventListener(\"resize\", this.resize, false);\n\n\t\t\t// Bind tooltip-related handlers\n\t\t\tif (this.options.tooltip === 'hide') {\n\t\t\t\tthis._addClass(this.tooltip, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_max, 'hide');\n\t\t\t} else if (this.options.tooltip === 'always') {\n\t\t\t\tthis._showTooltip();\n\t\t\t\tthis._alwaysShowTooltip = true;\n\t\t\t} else {\n\t\t\t\tthis.showTooltip = this._showTooltip.bind(this);\n\t\t\t\tthis.hideTooltip = this._hideTooltip.bind(this);\n\n\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\tvar callbackHandle = this._addTickListener();\n\t\t\t\t\t//create handle1 listeners and store references in map\n\t\t\t\t\tvar mouseEnter = callbackHandle.addMouseEnter(this, this.handle1);\n\t\t\t\t\tvar mouseLeave = callbackHandle.addMouseLeave(this, this.handle1);\n\t\t\t\t\tthis.handleCallbackMap.handle1 = {\n\t\t\t\t\t\tmouseEnter: mouseEnter,\n\t\t\t\t\t\tmouseLeave: mouseLeave\n\t\t\t\t\t};\n\t\t\t\t\t//create handle2 listeners and store references in map\n\t\t\t\t\tmouseEnter = callbackHandle.addMouseEnter(this, this.handle2);\n\t\t\t\t\tmouseLeave = callbackHandle.addMouseLeave(this, this.handle2);\n\t\t\t\t\tthis.handleCallbackMap.handle2 = {\n\t\t\t\t\t\tmouseEnter: mouseEnter,\n\t\t\t\t\t\tmouseLeave: mouseLeave\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.sliderElem.addEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\t\tthis.sliderElem.addEventListener(\"mouseleave\", this.hideTooltip, false);\n\n\t\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.handle1.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle1.addEventListener(\"blur\", this.hideTooltip, false);\n\n\t\t\t\tthis.handle2.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle2.addEventListener(\"blur\", this.hideTooltip, false);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\tthis.handle1.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\tthis.handle1.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\tthis.handle1.addEventListener(\"touchend\", this.hideTooltip, false);\n\n\t\t\t\t\tthis.handle2.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\tthis.handle2.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\tthis.handle2.addEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.options.enabled) {\n\t\t\t\tthis.enable();\n\t\t\t} else {\n\t\t\t\tthis.disable();\n\t\t\t}\n\t\t}\n\n\t\t/*************************************************\n \t\t\t\tINSTANCE PROPERTIES/METHODS\n \t- Any methods bound to the prototype are considered\n part of the plugin's `public` interface\n \t**************************************************/\n\t\tSlider.prototype = {\n\t\t\t_init: function _init() {}, // NOTE: Must exist to support bridget\n\n\t\t\tconstructor: Slider,\n\n\t\t\tdefaultOptions: {\n\t\t\t\tid: \"\",\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10,\n\t\t\t\tstep: 1,\n\t\t\t\tprecision: 0,\n\t\t\t\torientation: 'horizontal',\n\t\t\t\tvalue: 5,\n\t\t\t\trange: false,\n\t\t\t\tselection: 'before',\n\t\t\t\ttooltip: 'show',\n\t\t\t\ttooltip_split: false,\n\t\t\t\tlock_to_ticks: false,\n\t\t\t\thandle: 'round',\n\t\t\t\treversed: false,\n\t\t\t\trtl: 'auto',\n\t\t\t\tenabled: true,\n\t\t\t\tformatter: function formatter(val) {\n\t\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\t\treturn val[0] + \" : \" + val[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnatural_arrow_keys: false,\n\t\t\t\tticks: [],\n\t\t\t\tticks_positions: [],\n\t\t\t\tticks_labels: [],\n\t\t\t\tticks_snap_bounds: 0,\n\t\t\t\tticks_tooltip: false,\n\t\t\t\tscale: 'linear',\n\t\t\t\tfocus: false,\n\t\t\t\ttooltip_position: null,\n\t\t\t\tlabelledby: null,\n\t\t\t\trangeHighlights: []\n\t\t\t},\n\n\t\t\tgetElement: function getElement() {\n\t\t\t\treturn this.sliderElem;\n\t\t\t},\n\n\t\t\tgetValue: function getValue() {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\treturn this._state.value;\n\t\t\t\t} else {\n\t\t\t\t\treturn this._state.value[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetValue: function setValue(val, triggerSlideEvent, triggerChangeEvent) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tval = 0;\n\t\t\t\t}\n\t\t\t\tvar oldValue = this.getValue();\n\t\t\t\tthis._state.value = this._validateInputValue(val);\n\t\t\t\tvar applyPrecision = this._applyPrecision.bind(this);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tthis._state.value[0] = applyPrecision(this._state.value[0]);\n\t\t\t\t\tthis._state.value[1] = applyPrecision(this._state.value[1]);\n\n\t\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\t\tthis._state.value[0] = this.options.ticks[this._getClosestTickIndex(this._state.value[0])];\n\t\t\t\t\t\tthis._state.value[1] = this.options.ticks[this._getClosestTickIndex(this._state.value[1])];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));\n\t\t\t\t\tthis._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.value = applyPrecision(this._state.value);\n\n\t\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\t\tthis._state.value = this.options.ticks[this._getClosestTickIndex(this._state.value)];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._state.value = [Math.max(this.options.min, Math.min(this.options.max, this._state.value))];\n\t\t\t\t\tthis._addClass(this.handle2, 'hide');\n\t\t\t\t\tif (this.options.selection === 'after') {\n\t\t\t\t\t\tthis._state.value[1] = this.options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._state.value[1] = this.options.min;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Determine which ticks the handle(s) are set at (if applicable)\n\t\t\t\tthis._setTickIndex();\n\n\t\t\t\tif (this.options.max > this.options.min) {\n\t\t\t\t\tthis._state.percentage = [this._toPercentage(this._state.value[0]), this._toPercentage(this._state.value[1]), this.options.step * 100 / (this.options.max - this.options.min)];\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.percentage = [0, 0, 100];\n\t\t\t\t}\n\n\t\t\t\tthis._layout();\n\t\t\t\tvar newValue = this.options.range ? this._state.value : this._state.value[0];\n\n\t\t\t\tthis._setDataVal(newValue);\n\t\t\t\tif (triggerSlideEvent === true) {\n\t\t\t\t\tthis._trigger('slide', newValue);\n\t\t\t\t}\n\n\t\t\t\tvar hasChanged = false;\n\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\thasChanged = oldValue[0] !== newValue[0] || oldValue[1] !== newValue[1];\n\t\t\t\t} else {\n\t\t\t\t\thasChanged = oldValue !== newValue;\n\t\t\t\t}\n\n\t\t\t\tif (hasChanged && triggerChangeEvent === true) {\n\t\t\t\t\tthis._trigger('change', {\n\t\t\t\t\t\toldValue: oldValue,\n\t\t\t\t\t\tnewValue: newValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tdestroy: function destroy() {\n\t\t\t\t// Remove event handlers on slider elements\n\t\t\t\tthis._removeSliderEventHandlers();\n\n\t\t\t\t// Remove the slider from the DOM\n\t\t\t\tthis.sliderElem.parentNode.removeChild(this.sliderElem);\n\t\t\t\t/* Show original element */\n\t\t\t\tthis.element.style.display = \"\";\n\n\t\t\t\t// Clear out custom event bindings\n\t\t\t\tthis._cleanUpEventCallbacksMap();\n\n\t\t\t\t// Remove data values\n\t\t\t\tthis.element.removeAttribute(\"data\");\n\n\t\t\t\t// Remove JQuery handlers/data\n\t\t\t\tif ($) {\n\t\t\t\t\tthis._unbindJQueryEventHandlers();\n\t\t\t\t\tif (autoRegisterNamespace === NAMESPACE_MAIN) {\n\t\t\t\t\t\tthis.$element.removeData(autoRegisterNamespace);\n\t\t\t\t\t}\n\t\t\t\t\tthis.$element.removeData(NAMESPACE_ALTERNATE);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdisable: function disable() {\n\t\t\t\tthis._state.enabled = false;\n\t\t\t\tthis.handle1.removeAttribute(\"tabindex\");\n\t\t\t\tthis.handle2.removeAttribute(\"tabindex\");\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideDisabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tenable: function enable() {\n\t\t\t\tthis._state.enabled = true;\n\t\t\t\tthis.handle1.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis.handle2.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideEnabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\ttoggle: function toggle() {\n\t\t\t\tif (this._state.enabled) {\n\t\t\t\t\tthis.disable();\n\t\t\t\t} else {\n\t\t\t\t\tthis.enable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tisEnabled: function isEnabled() {\n\t\t\t\treturn this._state.enabled;\n\t\t\t},\n\n\t\t\ton: function on(evt, callback) {\n\t\t\t\tthis._bindNonQueryEventHandler(evt, callback);\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\toff: function off(evt, callback) {\n\t\t\t\tif ($) {\n\t\t\t\t\tthis.$element.off(evt, callback);\n\t\t\t\t\tthis.$sliderElem.off(evt, callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis._unbindNonQueryEventHandler(evt, callback);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tgetAttribute: function getAttribute(attribute) {\n\t\t\t\tif (attribute) {\n\t\t\t\t\treturn this.options[attribute];\n\t\t\t\t} else {\n\t\t\t\t\treturn this.options;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetAttribute: function setAttribute(attribute, value) {\n\t\t\t\tthis.options[attribute] = value;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trefresh: function refresh(options) {\n\t\t\t\tvar currentValue = this.getValue();\n\t\t\t\tthis._removeSliderEventHandlers();\n\t\t\t\tcreateNewSlider.call(this, this.element, this.options);\n\t\t\t\t// Don't reset slider's value on refresh if `useCurrentValue` is true\n\t\t\t\tif (options && options.useCurrentValue === true) {\n\t\t\t\t\tthis.setValue(currentValue);\n\t\t\t\t}\n\t\t\t\tif ($) {\n\t\t\t\t\t// Bind new instance of slider to the element\n\t\t\t\t\tif (autoRegisterNamespace === NAMESPACE_MAIN) {\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_MAIN, this);\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_ALTERNATE, this);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_ALTERNATE, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trelayout: function relayout() {\n\t\t\t\tthis._resize();\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/******************************+\n \t\t\t\tHELPERS\n \t- Any method that is not part of the public interface.\n - Place it underneath this comment block and write its signature like so:\n \t\t_fnName : function() {...}\n \t********************************/\n\t\t\t_removeTooltipListener: function _removeTooltipListener(event, handler) {\n\t\t\t\tthis.handle1.removeEventListener(event, handler, false);\n\t\t\t\tthis.handle2.removeEventListener(event, handler, false);\n\t\t\t},\n\t\t\t_removeSliderEventHandlers: function _removeSliderEventHandlers() {\n\t\t\t\t// Remove keydown event listeners\n\t\t\t\tthis.handle1.removeEventListener(\"keydown\", this.handle1Keydown, false);\n\t\t\t\tthis.handle2.removeEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\t\t//remove the listeners from the ticks and handles if they had their own listeners\n\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\tvar ticks = this.ticksContainer.getElementsByClassName('slider-tick');\n\t\t\t\t\tfor (var i = 0; i < ticks.length; i++) {\n\t\t\t\t\t\tticks[i].removeEventListener('mouseenter', this.ticksCallbackMap[i].mouseEnter, false);\n\t\t\t\t\t\tticks[i].removeEventListener('mouseleave', this.ticksCallbackMap[i].mouseLeave, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.handleCallbackMap.handle1 && this.handleCallbackMap.handle2) {\n\t\t\t\t\t\tthis.handle1.removeEventListener('mouseenter', this.handleCallbackMap.handle1.mouseEnter, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener('mouseenter', this.handleCallbackMap.handle2.mouseEnter, false);\n\t\t\t\t\t\tthis.handle1.removeEventListener('mouseleave', this.handleCallbackMap.handle1.mouseLeave, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener('mouseleave', this.handleCallbackMap.handle2.mouseLeave, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.handleCallbackMap = null;\n\t\t\t\tthis.ticksCallbackMap = null;\n\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis._removeTooltipListener(\"focus\", this.showTooltip);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis._removeTooltipListener(\"blur\", this.hideTooltip);\n\t\t\t\t}\n\n\t\t\t\t// Remove event listeners from sliderElem\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseleave\", this.hideTooltip, false);\n\t\t\t\t}\n\n\t\t\t\tthis.sliderElem.removeEventListener(\"mousedown\", this.mousedown, false);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Remove touch event listeners from handles\n\t\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove event listeners from sliderElem\n\t\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchstart\", this.touchstart, false);\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchmove\", this.touchmove, false);\n\t\t\t\t}\n\n\t\t\t\t// Remove window event listener\n\t\t\t\twindow.removeEventListener(\"resize\", this.resize, false);\n\t\t\t},\n\t\t\t_bindNonQueryEventHandler: function _bindNonQueryEventHandler(evt, callback) {\n\t\t\t\tif (this.eventToCallbackMap[evt] === undefined) {\n\t\t\t\t\tthis.eventToCallbackMap[evt] = [];\n\t\t\t\t}\n\t\t\t\tthis.eventToCallbackMap[evt].push(callback);\n\t\t\t},\n\t\t\t_unbindNonQueryEventHandler: function _unbindNonQueryEventHandler(evt, callback) {\n\t\t\t\tvar callbacks = this.eventToCallbackMap[evt];\n\t\t\t\tif (callbacks !== undefined) {\n\t\t\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\t\t\tif (callbacks[i] === callback) {\n\t\t\t\t\t\t\tcallbacks.splice(i, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_cleanUpEventCallbacksMap: function _cleanUpEventCallbacksMap() {\n\t\t\t\tvar eventNames = Object.keys(this.eventToCallbackMap);\n\t\t\t\tfor (var i = 0; i < eventNames.length; i++) {\n\t\t\t\t\tvar eventName = eventNames[i];\n\t\t\t\t\tdelete this.eventToCallbackMap[eventName];\n\t\t\t\t}\n\t\t\t},\n\t\t\t_showTooltip: function _showTooltip() {\n\t\t\t\tif (this.options.tooltip_split === false) {\n\t\t\t\t\tthis._addClass(this.tooltip, 'show');\n\t\t\t\t\tthis.tooltip_min.style.display = 'none';\n\t\t\t\t\tthis.tooltip_max.style.display = 'none';\n\t\t\t\t} else {\n\t\t\t\t\tthis._addClass(this.tooltip_min, 'show');\n\t\t\t\t\tthis._addClass(this.tooltip_max, 'show');\n\t\t\t\t\tthis.tooltip.style.display = 'none';\n\t\t\t\t}\n\t\t\t\tthis._state.over = true;\n\t\t\t},\n\t\t\t_hideTooltip: function _hideTooltip() {\n\t\t\t\tif (this._state.inDrag === false && this._alwaysShowTooltip !== true) {\n\t\t\t\t\tthis._removeClass(this.tooltip, 'show');\n\t\t\t\t\tthis._removeClass(this.tooltip_min, 'show');\n\t\t\t\t\tthis._removeClass(this.tooltip_max, 'show');\n\t\t\t\t}\n\t\t\t\tthis._state.over = false;\n\t\t\t},\n\t\t\t_setToolTipOnMouseOver: function _setToolTipOnMouseOver(tempState) {\n\t\t\t\tvar self = this;\n\t\t\t\tvar formattedTooltipVal = this.options.formatter(!tempState ? this._state.value[0] : tempState.value[0]);\n\t\t\t\tvar positionPercentages = !tempState ? getPositionPercentages(this._state, this.options.reversed) : getPositionPercentages(tempState, this.options.reversed);\n\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\n\t\t\t\tthis.tooltip.style[this.stylePos] = positionPercentages[0] + \"%\";\n\n\t\t\t\tfunction getPositionPercentages(state, reversed) {\n\t\t\t\t\tif (reversed) {\n\t\t\t\t\t\treturn [100 - state.percentage[0], self.options.range ? 100 - state.percentage[1] : state.percentage[1]];\n\t\t\t\t\t}\n\t\t\t\t\treturn [state.percentage[0], state.percentage[1]];\n\t\t\t\t}\n\t\t\t},\n\t\t\t_copyState: function _copyState() {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: [this._state.value[0], this._state.value[1]],\n\t\t\t\t\tenabled: this._state.enabled,\n\t\t\t\t\toffset: this._state.offset,\n\t\t\t\t\tsize: this._state.size,\n\t\t\t\t\tpercentage: [this._state.percentage[0], this._state.percentage[1], this._state.percentage[2]],\n\t\t\t\t\tinDrag: this._state.inDrag,\n\t\t\t\t\tover: this._state.over,\n\t\t\t\t\t// deleted or null'd keys\n\t\t\t\t\tdragged: this._state.dragged,\n\t\t\t\t\tkeyCtrl: this._state.keyCtrl\n\t\t\t\t};\n\t\t\t},\n\t\t\t_addTickListener: function _addTickListener() {\n\t\t\t\treturn {\n\t\t\t\t\taddMouseEnter: function addMouseEnter(reference, element, index) {\n\t\t\t\t\t\tvar enter = function enter() {\n\t\t\t\t\t\t\tvar tempState = reference._copyState();\n\t\t\t\t\t\t\t// Which handle is being hovered over?\n\t\t\t\t\t\t\tvar val = element === reference.handle1 ? tempState.value[0] : tempState.value[1];\n\t\t\t\t\t\t\tvar per = void 0;\n\n\t\t\t\t\t\t\t// Setup value and percentage for tick's 'mouseenter'\n\t\t\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\t\t\tval = reference.options.ticks[index];\n\t\t\t\t\t\t\t\tper = reference.options.ticks_positions.length > 0 && reference.options.ticks_positions[index] || reference._toPercentage(reference.options.ticks[index]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tper = reference._toPercentage(val);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttempState.value[0] = val;\n\t\t\t\t\t\t\ttempState.percentage[0] = per;\n\t\t\t\t\t\t\treference._setToolTipOnMouseOver(tempState);\n\t\t\t\t\t\t\treference._showTooltip();\n\t\t\t\t\t\t};\n\t\t\t\t\t\telement.addEventListener(\"mouseenter\", enter, false);\n\t\t\t\t\t\treturn enter;\n\t\t\t\t\t},\n\t\t\t\t\taddMouseLeave: function addMouseLeave(reference, element) {\n\t\t\t\t\t\tvar leave = function leave() {\n\t\t\t\t\t\t\treference._hideTooltip();\n\t\t\t\t\t\t};\n\t\t\t\t\t\telement.addEventListener(\"mouseleave\", leave, false);\n\t\t\t\t\t\treturn leave;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t_layout: function _layout() {\n\t\t\t\tvar positionPercentages;\n\t\t\t\tvar formattedValue;\n\n\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\tpositionPercentages = [100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];\n\t\t\t\t} else {\n\t\t\t\t\tpositionPercentages = [this._state.percentage[0], this._state.percentage[1]];\n\t\t\t\t}\n\n\t\t\t\tthis.handle1.style[this.stylePos] = positionPercentages[0] + \"%\";\n\t\t\t\tthis.handle1.setAttribute('aria-valuenow', this._state.value[0]);\n\t\t\t\tformattedValue = this.options.formatter(this._state.value[0]);\n\t\t\t\tif (isNaN(formattedValue)) {\n\t\t\t\t\tthis.handle1.setAttribute('aria-valuetext', formattedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.handle1.removeAttribute('aria-valuetext');\n\t\t\t\t}\n\n\t\t\t\tthis.handle2.style[this.stylePos] = positionPercentages[1] + \"%\";\n\t\t\t\tthis.handle2.setAttribute('aria-valuenow', this._state.value[1]);\n\t\t\t\tformattedValue = this.options.formatter(this._state.value[1]);\n\t\t\t\tif (isNaN(formattedValue)) {\n\t\t\t\t\tthis.handle2.setAttribute('aria-valuetext', formattedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.handle2.removeAttribute('aria-valuetext');\n\t\t\t\t}\n\n\t\t\t\t/* Position highlight range elements */\n\t\t\t\tif (this.rangeHighlightElements.length > 0 && Array.isArray(this.options.rangeHighlights) && this.options.rangeHighlights.length > 0) {\n\t\t\t\t\tfor (var _i = 0; _i < this.options.rangeHighlights.length; _i++) {\n\t\t\t\t\t\tvar startPercent = this._toPercentage(this.options.rangeHighlights[_i].start);\n\t\t\t\t\t\tvar endPercent = this._toPercentage(this.options.rangeHighlights[_i].end);\n\n\t\t\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\t\t\tvar sp = 100 - endPercent;\n\t\t\t\t\t\t\tendPercent = 100 - startPercent;\n\t\t\t\t\t\t\tstartPercent = sp;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentRange = this._createHighlightRange(startPercent, endPercent);\n\n\t\t\t\t\t\tif (currentRange) {\n\t\t\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.top = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.height = currentRange.size + \"%\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.right = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.left = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.width = currentRange.size + \"%\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.display = \"none\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Position ticks and labels */\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\n\t\t\t\t\tvar styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';\n\t\t\t\t\tvar styleMargin;\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tstyleMargin = 'marginTop';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\tstyleMargin = 'marginRight';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyleMargin = 'marginLeft';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar labelSize = this._state.size / (this.options.ticks.length - 1);\n\n\t\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\t\tvar extraMargin = 0;\n\t\t\t\t\t\tif (this.options.ticks_positions.length === 0) {\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical') {\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style[styleMargin] = -labelSize / 2 + \"px\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.offsetHeight;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t/* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */\n\t\t\t\t\t\t\tfor (i = 0; i < this.tickLabelContainer.childNodes.length; i++) {\n\t\t\t\t\t\t\t\tif (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {\n\t\t\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.orientation === 'horizontal') {\n\t\t\t\t\t\t\tthis.sliderElem.style.marginBottom = extraMargin + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\n\t\t\t\t\t\tvar percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);\n\n\t\t\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.ticks[i].style[this.stylePos] = percentage + \"%\";\n\n\t\t\t\t\t\t/* Set class labels to denote whether ticks are in the selection */\n\t\t\t\t\t\tthis._removeClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\tif (!this.options.range) {\n\t\t\t\t\t\t\tif (this.options.selection === 'after' && percentage >= positionPercentages[0]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {\n\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.tickLabels[i]) {\n\t\t\t\t\t\t\tthis.tickLabels[i].style[styleSize] = labelSize + \"px\";\n\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style.position = 'absolute';\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[this.stylePos] = percentage + \"%\";\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[styleMargin] = -labelSize / 2 + 'px';\n\t\t\t\t\t\t\t} else if (this.options.orientation === 'vertical') {\n\t\t\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\t\t\tthis.tickLabels[i].style['marginRight'] = this.sliderElem.offsetWidth + \"px\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.tickLabels[i].style['marginLeft'] = this.sliderElem.offsetWidth + \"px\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style[styleMargin] = this.sliderElem.offsetWidth / 2 * -1 + 'px';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/* Set class labels to indicate tick labels are in the selection or selected */\n\t\t\t\t\t\t\tthis._removeClass(this.tickLabels[i], 'label-in-selection label-is-selection');\n\t\t\t\t\t\t\tif (!this.options.range) {\n\t\t\t\t\t\t\t\tif (this.options.selection === 'after' && percentage >= positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\t} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (percentage === positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-is-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\tif (percentage === positionPercentages[0] || positionPercentages[1]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-is-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar formattedTooltipVal;\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0]) / 2 + \"%\";\n\n\t\t\t\t\tvar innerTooltipMinText = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner_min, innerTooltipMinText);\n\n\t\t\t\t\tvar innerTooltipMaxText = this.options.formatter(this._state.value[1]);\n\t\t\t\t\tthis._setText(this.tooltipInner_max, innerTooltipMaxText);\n\n\t\t\t\t\tthis.tooltip_min.style[this.stylePos] = positionPercentages[0] + \"%\";\n\n\t\t\t\t\tthis.tooltip_max.style[this.stylePos] = positionPercentages[1] + \"%\";\n\t\t\t\t} else {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = positionPercentages[0] + \"%\";\n\t\t\t\t}\n\n\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\tthis.trackLow.style.top = '0';\n\t\t\t\t\tthis.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\n\t\t\t\t\tthis.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\tthis.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tthis.trackHigh.style.bottom = '0';\n\t\t\t\t\tthis.trackHigh.style.height = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackLow.style.right = '0';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackLow.style.left = '0';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackSelection.style.right = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackHigh.style.left = '0';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackHigh.style.right = '0';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackHigh.style.width = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tvar offset_min = this.tooltip_min.getBoundingClientRect();\n\t\t\t\t\tvar offset_max = this.tooltip_max.getBoundingClientRect();\n\n\t\t\t\t\tif (this.options.tooltip_position === 'bottom') {\n\t\t\t\t\t\tif (offset_min.right > offset_max.left) {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bs-tooltip-bottom');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bs-tooltip-top');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = '';\n\t\t\t\t\t\t\tthis.tooltip_max.style.bottom = 22 + 'px';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bs-tooltip-top');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bs-tooltip-bottom');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = this.tooltip_min.style.top;\n\t\t\t\t\t\t\tthis.tooltip_max.style.bottom = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (offset_min.right > offset_max.left) {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bs-tooltip-top');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bs-tooltip-bottom');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = 18 + 'px';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bs-tooltip-bottom');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bs-tooltip-top');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = this.tooltip_min.style.top;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_createHighlightRange: function _createHighlightRange(start, end) {\n\t\t\t\tif (this._isHighlightRange(start, end)) {\n\t\t\t\t\tif (start > end) {\n\t\t\t\t\t\treturn { 'start': end, 'size': start - end };\n\t\t\t\t\t}\n\t\t\t\t\treturn { 'start': start, 'size': end - start };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t_isHighlightRange: function _isHighlightRange(start, end) {\n\t\t\t\tif (0 <= start && start <= 100 && 0 <= end && end <= 100) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_resize: function _resize(ev) {\n\t\t\t\t/*jshint unused:false*/\n\t\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\t\t\t\tthis._layout();\n\t\t\t},\n\t\t\t_removeProperty: function _removeProperty(element, prop) {\n\t\t\t\tif (element.style.removeProperty) {\n\t\t\t\t\telement.style.removeProperty(prop);\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeAttribute(prop);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mousedown: function _mousedown(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar diff1 = Math.abs(this._state.percentage[0] - percentage);\n\t\t\t\t\tvar diff2 = Math.abs(this._state.percentage[1] - percentage);\n\t\t\t\t\tthis._state.dragged = diff1 < diff2 ? 0 : 1;\n\t\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t}\n\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tif (this.mousemove) {\n\t\t\t\t\tdocument.removeEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\t}\n\t\t\t\tif (this.mouseup) {\n\t\t\t\t\tdocument.removeEventListener(\"mouseup\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tthis.mousemove = this._mousemove.bind(this);\n\t\t\t\tthis.mouseup = this._mouseup.bind(this);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Bind touch events:\n\t\t\t\t\tdocument.addEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.addEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\t\t\t\t// Bind mouse events:\n\t\t\t\tdocument.addEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = true;\n\t\t\t\tvar newValue = this._calculateValue();\n\n\t\t\t\tthis._trigger('slideStart', newValue);\n\n\t\t\t\tthis.setValue(newValue, false, true);\n\n\t\t\t\tev.returnValue = false;\n\n\t\t\t\tif (this.options.focus) {\n\t\t\t\t\tthis._triggerFocusOnHandle(this._state.dragged);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t_touchstart: function _touchstart(ev) {\n\t\t\t\tthis._mousedown(ev);\n\t\t\t},\n\t\t\t_triggerFocusOnHandle: function _triggerFocusOnHandle(handleIdx) {\n\t\t\t\tif (handleIdx === 0) {\n\t\t\t\t\tthis.handle1.focus();\n\t\t\t\t}\n\t\t\t\tif (handleIdx === 1) {\n\t\t\t\t\tthis.handle2.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_keydown: function _keydown(handleIdx, ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar dir;\n\t\t\t\tswitch (ev.keyCode) {\n\t\t\t\t\tcase 37: // left\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t// down\n\t\t\t\t\t\tdir = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 39: // right\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\t// up\n\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dir) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// use natural arrow keys instead of from min to max\n\t\t\t\tif (this.options.natural_arrow_keys) {\n\t\t\t\t\tvar isHorizontal = this.options.orientation === 'horizontal';\n\t\t\t\t\tvar isVertical = this.options.orientation === 'vertical';\n\t\t\t\t\tvar isRTL = this.options.rtl;\n\t\t\t\t\tvar isReversed = this.options.reversed;\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tif (isRTL) {\n\t\t\t\t\t\t\tif (!isReversed) {\n\t\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isReversed) {\n\t\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isVertical) {\n\t\t\t\t\t\tif (!isReversed) {\n\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar val;\n\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\tvar index = void 0;\n\t\t\t\t\t// Find tick index that handle 1/2 is currently on\n\t\t\t\t\tindex = this.options.ticks.indexOf(this._state.value[handleIdx]);\n\t\t\t\t\tif (index === -1) {\n\t\t\t\t\t\t// Set default to first tick\n\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\twindow.console.warn('(lock_to_ticks) _keydown: index should not be -1');\n\t\t\t\t\t}\n\t\t\t\t\tindex += dir;\n\t\t\t\t\tindex = Math.max(0, Math.min(this.options.ticks.length - 1, index));\n\t\t\t\t\tval = this.options.ticks[index];\n\t\t\t\t} else {\n\t\t\t\t\tval = this._state.value[handleIdx] + dir * this.options.step;\n\t\t\t\t}\n\t\t\t\tvar percentage = this._toPercentage(val);\n\t\t\t\tthis._state.keyCtrl = handleIdx;\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\t\tvar val1 = !this._state.keyCtrl ? val : this._state.value[0];\n\t\t\t\t\tvar val2 = this._state.keyCtrl ? val : this._state.value[1];\n\t\t\t\t\t// Restrict values within limits\n\t\t\t\t\tval = [Math.max(this.options.min, Math.min(this.options.max, val1)), Math.max(this.options.min, Math.min(this.options.max, val2))];\n\t\t\t\t} else {\n\t\t\t\t\tval = Math.max(this.options.min, Math.min(this.options.max, val));\n\t\t\t\t}\n\n\t\t\t\tthis._trigger('slideStart', val);\n\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\tthis._trigger('slideStop', val);\n\n\t\t\t\tthis._pauseEvent(ev);\n\t\t\t\tdelete this._state.keyCtrl;\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_pauseEvent: function _pauseEvent(ev) {\n\t\t\t\tif (ev.stopPropagation) {\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t}\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t\tev.cancelBubble = true;\n\t\t\t\tev.returnValue = false;\n\t\t\t},\n\t\t\t_mousemove: function _mousemove(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tvar val = this._calculateValue(true);\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_touchmove: function _touchmove(ev) {\n\t\t\t\tif (ev.changedTouches === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent page from scrolling and only drag the slider\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_adjustPercentageForRangeSliders: function _adjustPercentageForRangeSliders(percentage) {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar precision = this._getNumDigitsAfterDecimalPlace(percentage);\n\t\t\t\t\tprecision = precision ? precision - 1 : 0;\n\t\t\t\t\tvar percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);\n\t\t\t\t\tif (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[0] = this._state.percentage[1];\n\t\t\t\t\t\tthis._state.dragged = 1;\n\t\t\t\t\t} else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[1] = this._state.percentage[0];\n\t\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t\t} else if (this._state.keyCtrl === 0 && this._toPercentage(this._state.value[1]) < percentage) {\n\t\t\t\t\t\tthis._state.percentage[0] = this._state.percentage[1];\n\t\t\t\t\t\tthis._state.keyCtrl = 1;\n\t\t\t\t\t\tthis.handle2.focus();\n\t\t\t\t\t} else if (this._state.keyCtrl === 1 && this._toPercentage(this._state.value[0]) > percentage) {\n\t\t\t\t\t\tthis._state.percentage[1] = this._state.percentage[0];\n\t\t\t\t\t\tthis._state.keyCtrl = 0;\n\t\t\t\t\t\tthis.handle1.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mouseup: function _mouseup(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Unbind touch event handlers:\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\t\t\t\t// Unbind mouse event handlers:\n\t\t\t\tdocument.removeEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\tdocument.removeEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = false;\n\t\t\t\tif (this._state.over === false) {\n\t\t\t\t\tthis._hideTooltip();\n\t\t\t\t}\n\t\t\t\tvar val = this._calculateValue(true);\n\n\t\t\t\tthis.setValue(val, false, true);\n\t\t\t\tthis._trigger('slideStop', val);\n\n\t\t\t\t// No longer need 'dragged' after mouse up\n\t\t\t\tthis._state.dragged = null;\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_setValues: function _setValues(index, val) {\n\t\t\t\tvar comp = 0 === index ? 0 : 100;\n\t\t\t\tif (this._state.percentage[index] !== comp) {\n\t\t\t\t\tval.data[index] = this._toValue(this._state.percentage[index]);\n\t\t\t\t\tval.data[index] = this._applyPrecision(val.data[index]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_calculateValue: function _calculateValue(snapToClosestTick) {\n\t\t\t\tvar val = {};\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tval.data = [this.options.min, this.options.max];\n\t\t\t\t\tthis._setValues(0, val);\n\t\t\t\t\tthis._setValues(1, val);\n\t\t\t\t\tif (snapToClosestTick) {\n\t\t\t\t\t\tval.data[0] = this._snapToClosestTick(val.data[0]);\n\t\t\t\t\t\tval.data[1] = this._snapToClosestTick(val.data[1]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tval.data = this._toValue(this._state.percentage[0]);\n\t\t\t\t\tval.data = parseFloat(val.data);\n\t\t\t\t\tval.data = this._applyPrecision(val.data);\n\t\t\t\t\tif (snapToClosestTick) {\n\t\t\t\t\t\tval.data = this._snapToClosestTick(val.data);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn val.data;\n\t\t\t},\n\t\t\t_snapToClosestTick: function _snapToClosestTick(val) {\n\t\t\t\tvar min = [val, Infinity];\n\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\tvar diff = Math.abs(this.options.ticks[i] - val);\n\t\t\t\t\tif (diff <= min[1]) {\n\t\t\t\t\t\tmin = [this.options.ticks[i], diff];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (min[1] <= this.options.ticks_snap_bounds) {\n\t\t\t\t\treturn min[0];\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t},\n\n\t\t\t_applyPrecision: function _applyPrecision(val) {\n\t\t\t\tvar precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);\n\t\t\t\treturn this._applyToFixedAndParseFloat(val, precision);\n\t\t\t},\n\t\t\t_getNumDigitsAfterDecimalPlace: function _getNumDigitsAfterDecimalPlace(num) {\n\t\t\t\tvar match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\t\t\t\tif (!match) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n\t\t\t},\n\t\t\t_applyToFixedAndParseFloat: function _applyToFixedAndParseFloat(num, toFixedInput) {\n\t\t\t\tvar truncatedNum = num.toFixed(toFixedInput);\n\t\t\t\treturn parseFloat(truncatedNum);\n\t\t\t},\n\t\t\t/*\n \tCredits to Mike Samuel for the following method!\n \tSource: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number\n */\n\t\t\t_getPercentage: function _getPercentage(ev) {\n\t\t\t\tif (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove' || ev.type === 'touchend')) {\n\t\t\t\t\tev = ev.changedTouches[0];\n\t\t\t\t}\n\n\t\t\t\tvar eventPosition = ev[this.mousePos];\n\t\t\t\tvar sliderOffset = this._state.offset[this.stylePos];\n\t\t\t\tvar distanceToSlide = eventPosition - sliderOffset;\n\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\tdistanceToSlide = -distanceToSlide;\n\t\t\t\t}\n\t\t\t\t// Calculate what percent of the length the slider handle has slid\n\t\t\t\tvar percentage = distanceToSlide / this._state.size * 100;\n\t\t\t\tpercentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];\n\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t}\n\n\t\t\t\t// Make sure the percent is within the bounds of the slider.\n\t\t\t\t// 0% corresponds to the 'min' value of the slide\n\t\t\t\t// 100% corresponds to the 'max' value of the slide\n\t\t\t\treturn Math.max(0, Math.min(100, percentage));\n\t\t\t},\n\t\t\t_validateInputValue: function _validateInputValue(val) {\n\t\t\t\tif (!isNaN(+val)) {\n\t\t\t\t\treturn +val;\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tthis._validateArray(val);\n\t\t\t\t\treturn val;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(ErrorMsgs.formatInvalidInputErrorMsg(val));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_validateArray: function _validateArray(val) {\n\t\t\t\tfor (var i = 0; i < val.length; i++) {\n\t\t\t\t\tvar input = val[i];\n\t\t\t\t\tif (typeof input !== 'number') {\n\t\t\t\t\t\tthrow new Error(ErrorMsgs.formatInvalidInputErrorMsg(input));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setDataVal: function _setDataVal(val) {\n\t\t\t\tthis.element.setAttribute('data-value', val);\n\t\t\t\tthis.element.setAttribute('value', val);\n\t\t\t\tthis.element.value = val;\n\t\t\t},\n\t\t\t_trigger: function _trigger(evt, val) {\n\t\t\t\tval = val || val === 0 ? val : undefined;\n\n\t\t\t\tvar callbackFnArray = this.eventToCallbackMap[evt];\n\t\t\t\tif (callbackFnArray && callbackFnArray.length) {\n\t\t\t\t\tfor (var i = 0; i < callbackFnArray.length; i++) {\n\t\t\t\t\t\tvar callbackFn = callbackFnArray[i];\n\t\t\t\t\t\tcallbackFn(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* If JQuery exists, trigger JQuery events */\n\t\t\t\tif ($) {\n\t\t\t\t\tthis._triggerJQueryEvent(evt, val);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_triggerJQueryEvent: function _triggerJQueryEvent(evt, val) {\n\t\t\t\tvar eventData = {\n\t\t\t\t\ttype: evt,\n\t\t\t\t\tvalue: val\n\t\t\t\t};\n\t\t\t\tthis.$element.trigger(eventData);\n\t\t\t\tthis.$sliderElem.trigger(eventData);\n\t\t\t},\n\t\t\t_unbindJQueryEventHandlers: function _unbindJQueryEventHandlers() {\n\t\t\t\tthis.$element.off();\n\t\t\t\tthis.$sliderElem.off();\n\t\t\t},\n\t\t\t_setText: function _setText(element, text) {\n\t\t\t\tif (typeof element.textContent !== \"undefined\") {\n\t\t\t\t\telement.textContent = text;\n\t\t\t\t} else if (typeof element.innerText !== \"undefined\") {\n\t\t\t\t\telement.innerText = text;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_removeClass: function _removeClass(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tnewClasses = newClasses.replace(regex, \" \");\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_addClass: function _addClass(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tvar ifClassExists = regex.test(newClasses);\n\n\t\t\t\t\tif (!ifClassExists) {\n\t\t\t\t\t\tnewClasses += \" \" + classTag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_offsetLeft: function _offsetLeft(obj) {\n\t\t\t\treturn obj.getBoundingClientRect().left;\n\t\t\t},\n\t\t\t_offsetRight: function _offsetRight(obj) {\n\t\t\t\treturn obj.getBoundingClientRect().right;\n\t\t\t},\n\t\t\t_offsetTop: function _offsetTop(obj) {\n\t\t\t\tvar offsetTop = obj.offsetTop;\n\t\t\t\twhile ((obj = obj.offsetParent) && !isNaN(obj.offsetTop)) {\n\t\t\t\t\toffsetTop += obj.offsetTop;\n\t\t\t\t\tif (obj.tagName !== 'BODY') {\n\t\t\t\t\t\toffsetTop -= obj.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn offsetTop;\n\t\t\t},\n\t\t\t_offset: function _offset(obj) {\n\t\t\t\treturn {\n\t\t\t\t\tleft: this._offsetLeft(obj),\n\t\t\t\t\tright: this._offsetRight(obj),\n\t\t\t\t\ttop: this._offsetTop(obj)\n\t\t\t\t};\n\t\t\t},\n\t\t\t_css: function _css(elementRef, styleName, value) {\n\t\t\t\tif ($) {\n\t\t\t\t\t$.style(elementRef, styleName, value);\n\t\t\t\t} else {\n\t\t\t\t\tvar style = styleName.replace(/^-ms-/, \"ms-\").replace(/-([\\da-z])/gi, function (all, letter) {\n\t\t\t\t\t\treturn letter.toUpperCase();\n\t\t\t\t\t});\n\t\t\t\t\telementRef.style[style] = value;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_toValue: function _toValue(percentage) {\n\t\t\t\treturn this.options.scale.toValue.apply(this, [percentage]);\n\t\t\t},\n\t\t\t_toPercentage: function _toPercentage(value) {\n\t\t\t\treturn this.options.scale.toPercentage.apply(this, [value]);\n\t\t\t},\n\t\t\t_setTooltipPosition: function _setTooltipPosition() {\n\t\t\t\tvar tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];\n\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\tvar tooltipPos;\n\t\t\t\t\tif (this.options.tooltip_position) {\n\t\t\t\t\t\ttooltipPos = this.options.tooltip_position;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\ttooltipPos = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttooltipPos = 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar oppositeSide = tooltipPos === 'left' ? 'right' : 'left';\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, 'bs-tooltip-' + tooltipPos);\n\t\t\t\t\t\ttooltip.style[oppositeSide] = '100%';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else if (this.options.tooltip_position === 'bottom') {\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, 'bs-tooltip-bottom');\n\t\t\t\t\t\ttooltip.style.top = 22 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else {\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, 'bs-tooltip-top');\n\t\t\t\t\t\ttooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_getClosestTickIndex: function _getClosestTickIndex(val) {\n\t\t\t\tvar difference = Math.abs(val - this.options.ticks[0]);\n\t\t\t\tvar index = 0;\n\t\t\t\tfor (var i = 0; i < this.options.ticks.length; ++i) {\n\t\t\t\t\tvar d = Math.abs(val - this.options.ticks[i]);\n\t\t\t\t\tif (d < difference) {\n\t\t\t\t\t\tdifference = d;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t},\n\t\t\t/**\n * Attempts to find the index in `ticks[]` the slider values are set at.\n * The indexes can be -1 to indicate the slider value is not set at a value in `ticks[]`.\n */\n\t\t\t_setTickIndex: function _setTickIndex() {\n\t\t\t\tif (this.ticksAreValid) {\n\t\t\t\t\tthis._state.tickIndex = [this.options.ticks.indexOf(this._state.value[0]), this.options.ticks.indexOf(this._state.value[1])];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/*********************************\n \t\tAttach to global namespace\n \t*********************************/\n\t\tif ($ && $.fn) {\n\t\t\tif (!$.fn.slider) {\n\t\t\t\t$.bridget(NAMESPACE_MAIN, Slider);\n\t\t\t\tautoRegisterNamespace = NAMESPACE_MAIN;\n\t\t\t} else {\n\t\t\t\tif (windowIsDefined) {\n\t\t\t\t\twindow.console.warn(\"bootstrap-slider.js - WARNING: $.fn.slider namespace is already bound. Use the $.fn.bootstrapSlider namespace instead.\");\n\t\t\t\t}\n\t\t\t\tautoRegisterNamespace = NAMESPACE_ALTERNATE;\n\t\t\t}\n\t\t\t$.bridget(NAMESPACE_ALTERNATE, Slider);\n\n\t\t\t// Auto-Register data-provide=\"slider\" Elements\n\t\t\t$(function () {\n\t\t\t\t$(\"input[data-provide=slider]\")[autoRegisterNamespace]();\n\t\t\t});\n\t\t}\n\t})($);\n\n\treturn Slider;\n});\n","module.exports = jQuery;"],"sourceRoot":""}