1/*! 2 * jQuery Cookie Plugin v1.4.1 3 * https://github.com/carhartl/jquery-cookie 4 * 5 * Copyright 2013 Klaus Hartl 6 * Released under the MIT license 7 */ 8(function (factory) { 9 if (typeof define === 'function' && define.amd) { 10 // AMD 11 define(['jquery'], factory); 12 } else if (typeof exports === 'object') { 13 // CommonJS 14 factory(require('jquery')); 15 } else { 16 // Browser globals 17 factory(jQuery); 18 } 19}(function ($) { 20 21 var pluses = /\+/g; 22 23 function encode(s) { 24 return config.raw ? s : encodeURIComponent(s); 25 } 26 27 function decode(s) { 28 return config.raw ? s : decodeURIComponent(s); 29 } 30 31 function stringifyCookieValue(value) { 32 return encode(config.json ? JSON.stringify(value) : String(value)); 33 } 34 35 function parseCookieValue(s) { 36 if (s.indexOf('"') === 0) { 37 // This is a quoted cookie as according to RFC2068, unescape... 38 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 39 } 40 41 try { 42 // Replace server-side written pluses with spaces. 43 // If we can't decode the cookie, ignore it, it's unusable. 44 // If we can't parse the cookie, ignore it, it's unusable. 45 s = decodeURIComponent(s.replace(pluses, ' ')); 46 return config.json ? JSON.parse(s) : s; 47 } catch(e) {} 48 } 49 50 function read(s, converter) { 51 var value = config.raw ? s : parseCookieValue(s); 52 return $.isFunction(converter) ? converter(value) : value; 53 } 54 55 var config = $.cookie = function (key, value, options) { 56 57 // Write 58 59 if (value !== undefined && !$.isFunction(value)) { 60 options = $.extend({}, config.defaults, options); 61 62 if (typeof options.expires === 'number') { 63 var days = options.expires, t = options.expires = new Date(); 64 t.setTime(+t + days * 864e+5); 65 } 66 67 return (document.cookie = [ 68 encode(key), '=', stringifyCookieValue(value), 69 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 70 options.path ? '; path=' + options.path : '', 71 options.domain ? '; domain=' + options.domain : '', 72 options.secure ? '; secure' : '' 73 ].join('')); 74 } 75 76 // Read 77 78 var result = key ? undefined : {}; 79 80 // To prevent the for loop in the first place assign an empty array 81 // in case there are no cookies at all. Also prevents odd result when 82 // calling $.cookie(). 83 var cookies = document.cookie ? document.cookie.split('; ') : []; 84 85 for (var i = 0, l = cookies.length; i < l; i++) { 86 var parts = cookies[i].split('='); 87 var name = decode(parts.shift()); 88 var cookie = parts.join('='); 89 90 if (key && key === name) { 91 // If second argument (value) is a function it's a converter... 92 result = read(cookie, value); 93 break; 94 } 95 96 // Prevent storing a cookie that we couldn't decode. 97 if (!key && (cookie = read(cookie)) !== undefined) { 98 result[name] = cookie; 99 } 100 } 101 102 return result; 103 }; 104 105 config.defaults = {}; 106 107 $.removeCookie = function (key, options) { 108 if ($.cookie(key) === undefined) { 109 return false; 110 } 111 112 // Must not alter options, thus extending a fresh object... 113 $.cookie(key, '', $.extend({}, options, { expires: -1 })); 114 return !$.cookie(key); 115 }; 116 117})); 118 119/** 120* simplePagination.js v1.6 121* A simple jQuery pagination plugin. 122* http://flaviusmatis.github.com/simplePagination.js/ 123* 124* Copyright 2012, Flavius Matis 125* Released under the MIT license. 126* http://flaviusmatis.github.com/license.html 127*/ 128 129(function($){ 130 131 var methods = { 132 init: function(options) { 133 var o = $.extend({ 134 items: 1, 135 itemsOnPage: 1, 136 pages: 0, 137 displayedPages: 5, 138 edges: 2, 139 currentPage: 0, 140 hrefTextPrefix: '#page-', 141 hrefTextSuffix: '', 142 prevText: 'Prev', 143 nextText: 'Next', 144 ellipseText: '…', 145 cssStyle: 'light-theme', 146 labelMap: [], 147 selectOnClick: true, 148 nextAtFront: false, 149 invertPageOrder: false, 150 useStartEdge : true, 151 useEndEdge : true, 152 onPageClick: function(pageNumber, event) { 153 // Callback triggered when a page is clicked 154 // Page number is given as an optional parameter 155 }, 156 onInit: function() { 157 // Callback triggered immediately after initialization 158 } 159 }, options || {}); 160 161 var self = this; 162 163 o.pages = o.pages ? o.pages : Math.ceil(o.items / o.itemsOnPage) ? Math.ceil(o.items / o.itemsOnPage) : 1; 164 if (o.currentPage) 165 o.currentPage = o.currentPage - 1; 166 else 167 o.currentPage = !o.invertPageOrder ? 0 : o.pages - 1; 168 o.halfDisplayed = o.displayedPages / 2; 169 170 this.each(function() { 171 self.addClass(o.cssStyle + ' simple-pagination').data('pagination', o); 172 methods._draw.call(self); 173 }); 174 175 o.onInit(); 176 177 return this; 178 }, 179 180 selectPage: function(page) { 181 methods._selectPage.call(this, page - 1); 182 return this; 183 }, 184 185 prevPage: function() { 186 var o = this.data('pagination'); 187 if (!o.invertPageOrder) { 188 if (o.currentPage > 0) { 189 methods._selectPage.call(this, o.currentPage - 1); 190 } 191 } else { 192 if (o.currentPage < o.pages - 1) { 193 methods._selectPage.call(this, o.currentPage + 1); 194 } 195 } 196 return this; 197 }, 198 199 nextPage: function() { 200 var o = this.data('pagination'); 201 if (!o.invertPageOrder) { 202 if (o.currentPage < o.pages - 1) { 203 methods._selectPage.call(this, o.currentPage + 1); 204 } 205 } else { 206 if (o.currentPage > 0) { 207 methods._selectPage.call(this, o.currentPage - 1); 208 } 209 } 210 return this; 211 }, 212 213 getPagesCount: function() { 214 return this.data('pagination').pages; 215 }, 216 217 getCurrentPage: function () { 218 return this.data('pagination').currentPage + 1; 219 }, 220 221 destroy: function(){ 222 this.empty(); 223 return this; 224 }, 225 226 drawPage: function (page) { 227 var o = this.data('pagination'); 228 o.currentPage = page - 1; 229 this.data('pagination', o); 230 methods._draw.call(this); 231 return this; 232 }, 233 234 redraw: function(){ 235 methods._draw.call(this); 236 return this; 237 }, 238 239 disable: function(){ 240 var o = this.data('pagination'); 241 o.disabled = true; 242 this.data('pagination', o); 243 methods._draw.call(this); 244 return this; 245 }, 246 247 enable: function(){ 248 var o = this.data('pagination'); 249 o.disabled = false;
vendor: 4,302 bytes, lines 250-382
250 this.data('pagination', o); 251 methods._draw.call(this); 252 return this; 253 }, 254 255 updateItems: function (newItems) { 256 var o = this.data('pagination'); 257 o.items = newItems; 258 o.pages = methods._getPages(o); 259 this.data('pagination', o); 260 methods._draw.call(this); 261 }, 262 263 updateItemsOnPage: function (itemsOnPage) { 264 var o = this.data('pagination'); 265 o.itemsOnPage = itemsOnPage; 266 o.pages = methods._getPages(o); 267 this.data('pagination', o); 268 methods._selectPage.call(this, 0); 269 return this; 270 }, 271 272 _draw: function() { 273 var o = this.data('pagination'), 274 interval = methods._getInterval(o), 275 i, 276 tagName; 277 278 methods.destroy.call(this); 279 280 tagName = (typeof this.prop === 'function') ? this.prop('tagName') : this.attr('tagName'); 281 282 var $panel = tagName === 'UL' ? this : $('<ul></ul>').appendTo(this); 283 284 // Generate Prev link 285 if (o.prevText) { 286 methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage - 1 : o.currentPage + 1, {text: o.prevText, classes: 'prev'}); 287 } 288 289 // Generate Next link (if option set for at front) 290 if (o.nextText && o.nextAtFront) { 291 methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'}); 292 } 293 294 // Generate start edges 295 if (!o.invertPageOrder) { 296 if (interval.start > 0 && o.edges > 0) { 297 if(o.useStartEdge) { 298 var end = Math.min(o.edges, interval.start); 299 for (i = 0; i < end; i++) { 300 methods._appendItem.call(this, i); 301 } 302 } 303 if (o.edges < interval.start && (interval.start - o.edges != 1)) { 304 $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 305 } else if (interval.start - o.edges == 1) { 306 methods._appendItem.call(this, o.edges); 307 } 308 } 309 } else { 310 if (interval.end < o.pages && o.edges > 0) { 311 if(o.useStartEdge) { 312 var begin = Math.max(o.pages - o.edges, interval.end); 313 for (i = o.pages - 1; i >= begin; i--) { 314 methods._appendItem.call(this, i); 315 } 316 } 317 318 if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) { 319 $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 320 } else if (o.pages - o.edges - interval.end == 1) { 321 methods._appendItem.call(this, interval.end); 322 } 323 } 324 } 325 326 // Generate interval links 327 if (!o.invertPageOrder) { 328 for (i = interval.start; i < interval.end; i++) { 329 methods._appendItem.call(this, i); 330 } 331 } else { 332 for (i = interval.end - 1; i >= interval.start; i--) { 333 methods._appendItem.call(this, i); 334 } 335 } 336 337 // Generate end edges 338 if (!o.invertPageOrder) { 339 if (interval.end < o.pages && o.edges > 0) { 340 if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) { 341 $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 342 } else if (o.pages - o.edges - interval.end == 1) { 343 methods._appendItem.call(this, interval.end); 344 } 345 if(o.useEndEdge) { 346 var begin = Math.max(o.pages - o.edges, interval.end); 347 for (i = begin; i < o.pages; i++) { 348 methods._appendItem.call(this, i); 349 } 350 } 351 } 352 } else { 353 if (interval.start > 0 && o.edges > 0) { 354 if (o.edges < interval.start && (interval.start - o.edges != 1)) { 355 $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 356 } else if (interval.start - o.edges == 1) { 357 methods._appendItem.call(this, o.edges); 358 } 359 360 if(o.useEndEdge) { 361 var end = Math.min(o.edges, interval.start); 362 for (i = end - 1; i >= 0; i--) { 363 methods._appendItem.call(this, i); 364 } 365 } 366 } 367 } 368 369 // Generate Next link (unless option is set for at front) 370 if (o.nextText && !o.nextAtFront) { 371 methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'}); 372 } 373 }, 374 375 _getPages: function(o) { 376 var pages = Math.ceil(o.items / o.itemsOnPage); 377 return pages || 1; 378 }, 379 380 _getInterval: function(o) { 381 return { 382 start: Math.ceil(o.currentPage > o.halfDisplayed ? Math.max(Math.min(o.currentPage - o.halfDisplayed, (o.pages - o.displayedPages)
382), 0) : 0), 383 end: Math.ceil(o.currentPage > o.halfDisplayed ? Math.min(o.currentPage + o.halfDisplayed, o.pages) : Math.min(o.displayedPages, o.pages)) 384 }; 385 }, 386 387 _appendItem: function(pageIndex, opts) { 388 var self = this, options, $link, o = self.data('pagination'), $linkWrapper = $('<li></li>'), $ul = self.find('ul'); 389 390 pageIndex = pageIndex < 0 ? 0 : (pageIndex < o.pages ? pageIndex : o.pages - 1); 391 392 options = { 393 text: pageIndex + 1, 394 classes: '' 395 }; 396 397 if (o.labelMap.length && o.labelMap[pageIndex]) { 398 options.text = o.labelMap[pageIndex]; 399 } 400 401 options = $.extend(options, opts || {}); 402 403 if (pageIndex == o.currentPage || o.disabled) { 404 if (o.disabled) { 405 $linkWrapper.addClass('disabled'); 406 } else { 407 $linkWrapper.addClass('active'); 408 } 409 $link = $('<span class="current">' + (options.text) + '</span>'); 410 } else { 411 $link = $('<a href="' + o.hrefTextPrefix + (pageIndex + 1) + o.hrefTextSuffix + '" class="page-link">' + (options.text) + '</a>'); 412 $link.click(function(event){ 413 return methods._selectPage.call(self, pageIndex, event); 414 }); 415 } 416 417 if (options.classes) { 418 $link.addClass(options.classes); 419 } 420 421 $linkWrapper.append($link); 422 423 if ($ul.length) { 424 $ul.append($linkWrapper); 425 } else { 426 self.append($linkWrapper); 427 } 428 }, 429 430 _selectPage: function(pageIndex, event) { 431 var o = this.data('pagination'); 432 o.currentPage = pageIndex; 433 if (o.selectOnClick) { 434 methods._draw.call(this); 435 } 436 return o.onPageClick(pageIndex + 1, event); 437 } 438 439 }; 440 441 $.fn.pagination = function(method) { 442 443 // Method calling logic 444 if (methods[method] && method.charAt(0) != '_') { 445 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 446 } else if (typeof method === 'object' || !method) { 447 return methods.init.apply(this, arguments); 448 } else { 449 $.error('Method ' + method + ' does not exist on jQuery.pagination'); 450 } 451 452 }; 453 454})(jQuery); 455 456/*! 457 * Bootstrap v4.0.0 (https://getbootstrap.com) 458 * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 459 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 460 */ 461(function (global, factory) { 462 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : 463 typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : 464 (factory((global.bootstrap = {}),global.jQuery,global.Popper)); 465}(this, (function (exports,$,Popper) { 'use strict'; 466 467$ = $ && $.hasOwnProperty('default') ? $['default'] : $; 468Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; 469 470function _defineProperties(target, props) { 471 for (var i = 0; i < props.length; i++) { 472 var descriptor = props[i]; 473 descriptor.enumerable = descriptor.enumerable || false; 474 descriptor.configurable = true; 475 if ("value" in descriptor) descriptor.writable = true; 476 Object.defineProperty(target, descriptor.key, descriptor); 477 } 478} 479 480function _createClass(Constructor, protoProps, staticProps) { 481 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 482 if (staticProps) _defineProperties(Constructor, staticProps); 483 return Constructor; 484} 485 486function _extends() { 487 _extends = Object.assign || function (target) { 488 for (var i = 1; i < arguments.length; i++) { 489 var source = arguments[i]; 490 491 for (var key in source) { 492 if (Object.prototype.hasOwnProperty.call(source, key)) { 493 target[key] = source[key]; 494 } 495 } 496 } 497 498 return target; 499 }; 500 501 return _extends.apply(this, arguments); 502} 503 504function _inheritsLoose(subClass, superClass) { 505 subClass.prototype = Object.create(superClass.prototype); 506 subClass.prototype.constructor = subClass; 507 subClass.__proto__ = superClass; 508} 509 510/** 511 * -------------------------------------------------------------------------- 512 * Bootstrap (v4.0.0): util.js 513 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 514 * -------------------------------------------------------------------------- 515 */ 516 517var Util = function ($$$1) { 518 /** 519 * ------------------------------------------------------------------------ 520 * Private TransitionEnd Helpers 521 * ------------------------------------------------------------------------ 522 */ 523 var transition = false;
524 var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 525 526 function toType(obj) { 527 return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); 528 } 529 530 function getSpecialTransitionEndEvent() { 531 return { 532 bindType: transition.end, 533 delegateType: transition.end, 534 handle: function handle(event) { 535 if ($$$1(event.target).is(this)) { 536 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 537 } 538 539 return undefined; // eslint-disable-line no-undefined 540 } 541 }; 542 } 543 544 function transitionEndTest() { 545 if (typeof window !== 'undefined' && window.QUnit) { 546 return false; 547 } 548 549 return { 550 end: 'transitionend' 551 }; 552 } 553 554 function transitionEndEmulator(duration) { 555 var _this = this; 556 557 var called = false; 558 $$$1(this).one(Util.TRANSITION_END, function () { 559 called = true; 560 }); 561 setTimeout(function () { 562 if (!called) { 563 Util.triggerTransitionEnd(_this); 564 } 565 }, duration); 566 return this; 567 } 568 569 function setTransitionEndSupport() { 570 transition = transitionEndTest(); 571 $$$1.fn.emulateTransitionEnd = transitionEndEmulator; 572 573 if (Util.supportsTransitionEnd()) { 574 $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 575 } 576 } 577 578 function escapeId(selector) { 579 // We escape IDs in case of special selectors (selector = '#myId:something') 580 // $.escapeSelector does not exist in jQuery < 3 581 selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1'); 582 return selector; 583 } 584 /** 585 * -------------------------------------------------------------------------- 586 * Public Util Api 587 * -------------------------------------------------------------------------- 588 */ 589 590 591 var Util = { 592 TRANSITION_END: 'bsTransitionEnd', 593 getUID: function getUID(prefix) { 594 do { 595 // eslint-disable-next-line no-bitwise 596 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 597 } while (document.getElementById(prefix)); 598 599 return prefix; 600 }, 601 getSelectorFromElement: function getSelectorFromElement(element) { 602 var selector = element.getAttribute('data-target'); 603 604 if (!selector || selector === '#') { 605 selector = element.getAttribute('href') || ''; 606 } // If it's an ID 607 608 609 if (selector.charAt(0) === '#') { 610 selector = escapeId(selector); 611 } 612 613 try { 614 var $selector = $$$1(document).find(selector); 615 return $selector.length > 0 ? selector : null; 616 } catch (err) { 617 return null; 618 } 619 }, 620 reflow: function reflow(element) { 621 return element.offsetHeight; 622 }, 623 triggerTransitionEnd: function triggerTransitionEnd(element) { 624 $$$1(element).trigger(transition.end); 625 }, 626 supportsTransitionEnd: function supportsTransitionEnd() { 627 return Boolean(transition); 628 }, 629 isElement: function isElement(obj) { 630 return (obj[0] || obj).nodeType; 631 }, 632 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 633 for (var property in configTypes) { 634 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 635 var expectedTypes = configTypes[property]; 636 var value = config[property]; 637 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 638 639 if (!new RegExp(expectedTypes).test(valueType)) { 640 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 641 } 642 } 643 } 644 } 645 }; 646 setTransitionEndSupport(); 647 return Util; 648}($); 649 650/** 651 * -------------------------------------------------------------------------- 652 * Bootstrap (v4.0.0): alert.js 653 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 654 * -------------------------------------------------------------------------- 655 */ 656 657var Alert = function ($$$1) { 658 /** 659 * ------------------------------------------------------------------------ 660 * Constants 661 * ------------------------------------------------------------------------ 662 */ 663 var NAME = 'alert'; 664 var VERSION = '4.0.0'; 665 var DATA_KEY = 'bs.alert'; 666 var EVENT_KEY = "." + DATA_KEY; 667 var DATA_API_KEY = '.data-api'; 668 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 669 var TRANSITION_DURATION = 150; 670 var Selector = { 671 DISMISS: '[data-dismiss="alert"]' 672 }; 673 var Event = { 674 CLOSE: "close" + EVENT_KEY, 675 CLOSED: "closed" + EVENT_KEY, 676 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 677 }; 678 var ClassName = { 679 ALERT: 'alert', 680 FADE: 'fade', 681 SHOW: 'show' 682 /** 683 * ------------------------------------------------------------------------ 684 * Class Definition 685 * ------------------------------------------------------------------------ 686 */ 687 688 }; 689 690 var Alert = 691 /*#__PURE__*/ 692 function () { 693 function Alert(element) { 694 this._element = element; 695 } // Getters 696 697 698 var _proto = Alert.prototype; 699 700 // Public 701 _proto.close = function close(element) { 702 element = element || this._element; 703 704 var rootElement = this._getRootElement(element); 705 706 var customEvent = this._triggerCloseEvent(rootElement); 707 708 if (customEvent.isDefaultPrevented()) { 709 return; 710 } 711 712 this._removeElement(rootElement); 713 }; 714 715 _proto.dispose = function dispose() { 716 $$$1.removeData(this._element, DATA_KEY); 717 this._element = null; 718 }; // Private 719 720 721 _proto._getRootElement = function _getRootElement(element) { 722 var selector = Util.getSelectorFromElement(element); 723 var parent = false;
724 725 if (selector) { 726 parent = $$$1(selector)[0]; 727 } 728 729 if (!parent) { 730 parent = $$$1(element).closest("." + ClassName.ALERT)[0]; 731 } 732 733 return parent; 734 }; 735 736 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 737 var closeEvent = $$$1.Event(Event.CLOSE); 738 $$$1(element).trigger(closeEvent); 739 return closeEvent; 740 }; 741 742 _proto._removeElement = function _removeElement(element) { 743 var _this = this; 744 745 $$$1(element).removeClass(ClassName.SHOW); 746 747 if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { 748 this._destroyElement(element); 749 750 return; 751 } 752 753 $$$1(element).one(Util.TRANSITION_END, function (event) { 754 return _this._destroyElement(element, event); 755 }).emulateTransitionEnd(TRANSITION_DURATION); 756 }; 757 758 _proto._destroyElement = function _destroyElement(element) { 759 $$$1(element).detach().trigger(Event.CLOSED).remove(); 760 }; // Static 761 762 763 Alert._jQueryInterface = function _jQueryInterface(config) { 764 return this.each(function () { 765 var $element = $$$1(this); 766 var data = $element.data(DATA_KEY); 767 768 if (!data) { 769 data = new Alert(this); 770 $element.data(DATA_KEY, data); 771 } 772 773 if (config === 'close') { 774 data[config](this); 775 } 776 }); 777 }; 778 779 Alert._handleDismiss = function _handleDismiss(alertInstance) { 780 return function (event) { 781 if (event) { 782 event.preventDefault(); 783 } 784 785 alertInstance.close(this); 786 }; 787 }; 788 789 _createClass(Alert, null, [{ 790 key: "VERSION", 791 get: function get() { 792 return VERSION; 793 } 794 }]); 795 return Alert; 796 }(); 797 /** 798 * ------------------------------------------------------------------------ 799 * Data Api implementation 800 * ------------------------------------------------------------------------ 801 */ 802 803 804 $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); 805 /** 806 * ------------------------------------------------------------------------ 807 * jQuery 808 * ------------------------------------------------------------------------ 809 */ 810 811 $$$1.fn[NAME] = Alert._jQueryInterface; 812 $$$1.fn[NAME].Constructor = Alert; 813 814 $$$1.fn[NAME].noConflict = function () { 815 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 816 return Alert._jQueryInterface; 817 }; 818 819 return Alert; 820}($); 821 822/** 823 * -------------------------------------------------------------------------- 824 * Bootstrap (v4.0.0): button.js 825 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 826 * -------------------------------------------------------------------------- 827 */ 828 829var Button = function ($$$1) { 830 /** 831 * ------------------------------------------------------------------------ 832 * Constants 833 * ------------------------------------------------------------------------ 834 */ 835 var NAME = 'button'; 836 var VERSION = '4.0.0'; 837 var DATA_KEY = 'bs.button'; 838 var EVENT_KEY = "." + DATA_KEY; 839 var DATA_API_KEY = '.data-api'; 840 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 841 var ClassName = { 842 ACTIVE: 'active', 843 BUTTON: 'btn', 844 FOCUS: 'focus' 845 }; 846 var Selector = { 847 DATA_TOGGLE_CARROT: '[data-toggle^="button"]', 848 DATA_TOGGLE: '[data-toggle="buttons"]', 849 INPUT: 'input', 850 ACTIVE: '.active', 851 BUTTON: '.btn' 852 }; 853 var Event = { 854 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 855 FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) 856 /** 857 * ------------------------------------------------------------------------ 858 * Class Definition 859 * ------------------------------------------------------------------------ 860 */ 861 862 }; 863 864 var Button = 865 /*#__PURE__*/ 866 function () { 867 function Button(element) { 868 this._element = element; 869 } // Getters 870 871 872 var _proto = Button.prototype; 873 874 // Public 875 _proto.toggle = function toggle() { 876 var triggerChangeEvent = true; 877 var addAriaPressed = true; 878 var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; 879 880 if (rootElement) { 881 var input = $$$1(this._element).find(Selector.INPUT)[0]; 882 883 if (input) { 884 if (input.type === 'radio') { 885 if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) { 886 triggerChangeEvent = false;
vendor: 4,915 bytes, lines 887-1056
887 } else { 888 var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0]; 889 890 if (activeElement) { 891 $$$1(activeElement).removeClass(ClassName.ACTIVE); 892 } 893 } 894 } 895 896 if (triggerChangeEvent) { 897 if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { 898 return; 899 } 900 901 input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE); 902 $$$1(input).trigger('change'); 903 } 904 905 input.focus(); 906 addAriaPressed = false; 907 } 908 } 909 910 if (addAriaPressed) { 911 this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE)); 912 } 913 914 if (triggerChangeEvent) { 915 $$$1(this._element).toggleClass(ClassName.ACTIVE); 916 } 917 }; 918 919 _proto.dispose = function dispose() { 920 $$$1.removeData(this._element, DATA_KEY); 921 this._element = null; 922 }; // Static 923 924 925 Button._jQueryInterface = function _jQueryInterface(config) { 926 return this.each(function () { 927 var data = $$$1(this).data(DATA_KEY); 928 929 if (!data) { 930 data = new Button(this); 931 $$$1(this).data(DATA_KEY, data); 932 } 933 934 if (config === 'toggle') { 935 data[config](); 936 } 937 }); 938 }; 939 940 _createClass(Button, null, [{ 941 key: "VERSION", 942 get: function get() { 943 return VERSION; 944 } 945 }]); 946 return Button; 947 }(); 948 /** 949 * ------------------------------------------------------------------------ 950 * Data Api implementation 951 * ------------------------------------------------------------------------ 952 */ 953 954 955 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 956 event.preventDefault(); 957 var button = event.target; 958 959 if (!$$$1(button).hasClass(ClassName.BUTTON)) { 960 button = $$$1(button).closest(Selector.BUTTON); 961 } 962 963 Button._jQueryInterface.call($$$1(button), 'toggle'); 964 }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 965 var button = $$$1(event.target).closest(Selector.BUTTON)[0]; 966 $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); 967 }); 968 /** 969 * ------------------------------------------------------------------------ 970 * jQuery 971 * ------------------------------------------------------------------------ 972 */ 973 974 $$$1.fn[NAME] = Button._jQueryInterface; 975 $$$1.fn[NAME].Constructor = Button; 976 977 $$$1.fn[NAME].noConflict = function () { 978 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 979 return Button._jQueryInterface; 980 }; 981 982 return Button; 983}($); 984 985/** 986 * -------------------------------------------------------------------------- 987 * Bootstrap (v4.0.0): carousel.js 988 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 989 * -------------------------------------------------------------------------- 990 */ 991 992var Carousel = function ($$$1) { 993 /** 994 * ------------------------------------------------------------------------ 995 * Constants 996 * ------------------------------------------------------------------------ 997 */ 998 var NAME = 'carousel'; 999 var VERSION = '4.0.0'; 1000 var DATA_KEY = 'bs.carousel'; 1001 var EVENT_KEY = "." + DATA_KEY; 1002 var DATA_API_KEY = '.data-api'; 1003 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 1004 var TRANSITION_DURATION = 600; 1005 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 1006 1007 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 1008 1009 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 1010 1011 var Default = { 1012 interval: 5000, 1013 keyboard: true, 1014 slide: false, 1015 pause: 'hover', 1016 wrap: true 1017 }; 1018 var DefaultType = { 1019 interval: '(number|boolean)', 1020 keyboard: 'boolean', 1021 slide: '(boolean|string)', 1022 pause: '(string|boolean)', 1023 wrap: 'boolean' 1024 }; 1025 var Direction = { 1026 NEXT: 'next', 1027 PREV: 'prev', 1028 LEFT: 'left', 1029 RIGHT: 'right' 1030 }; 1031 var Event = { 1032 SLIDE: "slide" + EVENT_KEY, 1033 SLID: "slid" + EVENT_KEY, 1034 KEYDOWN: "keydown" + EVENT_KEY, 1035 MOUSEENTER: "mouseenter" + EVENT_KEY, 1036 MOUSELEAVE: "mouseleave" + EVENT_KEY, 1037 TOUCHEND: "touchend" + EVENT_KEY, 1038 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, 1039 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 1040 }; 1041 var ClassName = { 1042 CAROUSEL: 'carousel', 1043 ACTIVE: 'active', 1044 SLIDE: 'slide', 1045 RIGHT: 'carousel-item-right', 1046 LEFT: 'carousel-item-left', 1047 NEXT: 'carousel-item-next', 1048 PREV: 'carousel-item-prev', 1049 ITEM: 'carousel-item' 1050 }; 1051 var Selector = { 1052 ACTIVE: '.active', 1053 ACTIVE_ITEM: '.active.carousel-item', 1054 ITEM: '.carousel-item', 1055 NEXT_PREV: '.carousel-item-next, .carousel-item-prev', 1056 INDICATORS: '.carousel-indicators',
1057 DATA_SLIDE: '[data-slide], [data-slide-to]', 1058 DATA_RIDE: '[data-ride="carousel"]' 1059 /** 1060 * ------------------------------------------------------------------------ 1061 * Class Definition 1062 * ------------------------------------------------------------------------ 1063 */ 1064 1065 }; 1066 1067 var Carousel = 1068 /*#__PURE__*/ 1069 function () { 1070 function Carousel(element, config) { 1071 this._items = null; 1072 this._interval = null; 1073 this._activeElement = null; 1074 this._isPaused = false; 1075 this._isSliding = false; 1076 this.touchTimeout = null; 1077 this._config = this._getConfig(config); 1078 this._element = $$$1(element)[0]; 1079 this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; 1080 1081 this._addEventListeners(); 1082 } // Getters 1083 1084 1085 var _proto = Carousel.prototype; 1086 1087 // Public 1088 _proto.next = function next() { 1089 if (!this._isSliding) { 1090 this._slide(Direction.NEXT); 1091 } 1092 }; 1093 1094 _proto.nextWhenVisible = function nextWhenVisible() { 1095 // Don't call next when the page isn't visible 1096 // or the carousel or its parent isn't visible 1097 if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { 1098 this.next(); 1099 } 1100 }; 1101 1102 _proto.prev = function prev() { 1103 if (!this._isSliding) { 1104 this._slide(Direction.PREV); 1105 } 1106 }; 1107 1108 _proto.pause = function pause(event) { 1109 if (!event) { 1110 this._isPaused = true; 1111 } 1112 1113 if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { 1114 Util.triggerTransitionEnd(this._element); 1115 this.cycle(true); 1116 } 1117 1118 clearInterval(this._interval); 1119 this._interval = null; 1120 }; 1121 1122 _proto.cycle = function cycle(event) { 1123 if (!event) { 1124 this._isPaused = false; 1125 } 1126 1127 if (this._interval) { 1128 clearInterval(this._interval); 1129 this._interval = null; 1130 } 1131 1132 if (this._config.interval && !this._isPaused) { 1133 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 1134 } 1135 }; 1136 1137 _proto.to = function to(index) { 1138 var _this = this; 1139 1140 this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; 1141 1142 var activeIndex = this._getItemIndex(this._activeElement); 1143 1144 if (index > this._items.length - 1 || index < 0) { 1145 return; 1146 } 1147 1148 if (this._isSliding) { 1149 $$$1(this._element).one(Event.SLID, function () { 1150 return _this.to(index); 1151 }); 1152 return; 1153 } 1154 1155 if (activeIndex === index) { 1156 this.pause(); 1157 this.cycle(); 1158 return; 1159 } 1160 1161 var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; 1162 1163 this._slide(direction, this._items[index]); 1164 }; 1165 1166 _proto.dispose = function dispose() { 1167 $$$1(this._element).off(EVENT_KEY); 1168 $$$1.removeData(this._element, DATA_KEY); 1169 this._items = null; 1170 this._config = null; 1171 this._element = null; 1172 this._interval = null; 1173 this._isPaused = null; 1174 this._isSliding = null; 1175 this._activeElement = null; 1176 this._indicatorsElement = null; 1177 }; // Private 1178 1179 1180 _proto._getConfig = function _getConfig(config) { 1181 config = _extends({}, Default, config); 1182 Util.typeCheckConfig(NAME, config, DefaultType); 1183 return config; 1184 }; 1185 1186 _proto._addEventListeners = function _addEventListeners() { 1187 var _this2 = this; 1188 1189 if (this._config.keyboard) { 1190 $$$1(this._element).on(Event.KEYDOWN, function (event) { 1191 return _this2._keydown(event); 1192 }); 1193 } 1194 1195 if (this._config.pause === 'hover') { 1196 $$$1(this._element).on(Event.MOUSEENTER, function (event) { 1197 return _this2.pause(event); 1198 }).on(Event.MOUSELEAVE, function (event) { 1199 return _this2.cycle(event); 1200 }); 1201 1202 if ('ontouchstart' in document.documentElement) { 1203 // If it's a touch-enabled device, mouseenter/leave are fired as
1204 // part of the mouse compatibility events on first tap - the carousel 1205 // would stop cycling until user tapped out of it; 1206 // here, we listen for touchend, explicitly pause the carousel 1207 // (as if it's the second time we tap on it, mouseenter compat event 1208 // is NOT fired) and after a timeout (to allow for mouse compatibility 1209 // events to fire) we explicitly restart cycling 1210 $$$1(this._element).on(Event.TOUCHEND, function () { 1211 _this2.pause(); 1212 1213 if (_this2.touchTimeout) { 1214 clearTimeout(_this2.touchTimeout); 1215 } 1216 1217 _this2.touchTimeout = setTimeout(function (event) { 1218 return _this2.cycle(event); 1219 }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); 1220 }); 1221 } 1222 } 1223 }; 1224 1225 _proto._keydown = function _keydown(event) { 1226 if (/input|textarea/i.test(event.target.tagName)) { 1227 return; 1228 } 1229 1230 switch (event.which) { 1231 case ARROW_LEFT_KEYCODE: 1232 event.preventDefault(); 1233 this.prev(); 1234 break; 1235 1236 case ARROW_RIGHT_KEYCODE: 1237 event.preventDefault(); 1238 this.next(); 1239 break; 1240 1241 default: 1242 } 1243 }; 1244 1245 _proto._getItemIndex = function _getItemIndex(element) { 1246 this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM)); 1247 return this._items.indexOf(element); 1248 }; 1249 1250 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 1251 var isNextDirection = direction === Direction.NEXT; 1252 var isPrevDirection = direction === Direction.PREV; 1253 1254 var activeIndex = this._getItemIndex(activeElement); 1255 1256 var lastItemIndex = this._items.length - 1; 1257 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 1258 1259 if (isGoingToWrap && !this._config.wrap) { 1260 return activeElement; 1261 } 1262 1263 var delta = direction === Direction.PREV ? -1 : 1; 1264 var itemIndex = (activeIndex + delta) % this._items.length; 1265 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 1266 }; 1267 1268 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 1269 var targetIndex = this._getItemIndex(relatedTarget); 1270 1271 var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]); 1272 1273 var slideEvent = $$$1.Event(Event.SLIDE, { 1274 relatedTarget: relatedTarget, 1275 direction: eventDirectionName, 1276 from: fromIndex, 1277 to: targetIndex 1278 }); 1279 $$$1(this._element).trigger(slideEvent); 1280 return slideEvent; 1281 }; 1282 1283 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 1284 if (this._indicatorsElement) { 1285 $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); 1286 1287 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 1288 1289 if (nextIndicator) { 1290 $$$1(nextIndicator).addClass(ClassName.ACTIVE); 1291 } 1292 } 1293 }; 1294 1295 _proto._slide = function _slide(direction, element) { 1296 var _this3 = this; 1297 1298 var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; 1299 1300 var activeElementIndex = this._getItemIndex(activeElement); 1301 1302 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 1303 1304 var nextElementIndex = this._getItemIndex(nextElement); 1305 1306 var isCycling = Boolean(this._interval); 1307 var directionalClassName; 1308 var orderClassName; 1309 var eventDirectionName; 1310 1311 if (direction === Direction.NEXT) { 1312 directionalClassName = ClassName.LEFT; 1313 orderClassName = ClassName.NEXT; 1314 eventDirectionName = Direction.LEFT; 1315 } else { 1316 directionalClassName = ClassName.RIGHT; 1317 orderClassName = ClassName.PREV; 1318 eventDirectionName = Direction.RIGHT; 1319 } 1320 1321 if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { 1322 this._isSliding = false;
1323 return; 1324 } 1325 1326 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 1327 1328 if (slideEvent.isDefaultPrevented()) { 1329 return; 1330 } 1331 1332 if (!activeElement || !nextElement) { 1333 // Some weirdness is happening, so we bail 1334 return; 1335 } 1336 1337 this._isSliding = true; 1338 1339 if (isCycling) { 1340 this.pause(); 1341 } 1342 1343 this._setActiveIndicatorElement(nextElement); 1344 1345 var slidEvent = $$$1.Event(Event.SLID, { 1346 relatedTarget: nextElement, 1347 direction: eventDirectionName, 1348 from: activeElementIndex, 1349 to: nextElementIndex 1350 }); 1351 1352 if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { 1353 $$$1(nextElement).addClass(orderClassName); 1354 Util.reflow(nextElement); 1355 $$$1(activeElement).addClass(directionalClassName); 1356 $$$1(nextElement).addClass(directionalClassName); 1357 $$$1(activeElement).one(Util.TRANSITION_END, function () { 1358 $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); 1359 $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); 1360 _this3._isSliding = false; 1361 setTimeout(function () { 1362 return $$$1(_this3._element).trigger(slidEvent); 1363 }, 0); 1364 }).emulateTransitionEnd(TRANSITION_DURATION); 1365 } else { 1366 $$$1(activeElement).removeClass(ClassName.ACTIVE); 1367 $$$1(nextElement).addClass(ClassName.ACTIVE); 1368 this._isSliding = false; 1369 $$$1(this._element).trigger(slidEvent); 1370 } 1371 1372 if (isCycling) { 1373 this.cycle(); 1374 } 1375 }; // Static 1376 1377 1378 Carousel._jQueryInterface = function _jQueryInterface(config) { 1379 return this.each(function () { 1380 var data = $$$1(this).data(DATA_KEY); 1381 1382 var _config = _extends({}, Default, $$$1(this).data()); 1383 1384 if (typeof config === 'object') { 1385 _config = _extends({}, _config, config); 1386 } 1387 1388 var action = typeof config === 'string' ? config : _config.slide; 1389 1390 if (!data) { 1391 data = new Carousel(this, _config); 1392 $$$1(this).data(DATA_KEY, data); 1393 } 1394 1395 if (typeof config === 'number') { 1396 data.to(config); 1397 } else if (typeof action === 'string') { 1398 if (typeof data[action] === 'undefined') { 1399 throw new TypeError("No method named \"" + action + "\""); 1400 } 1401 1402 data[action](); 1403 } else if (_config.interval) { 1404 data.pause(); 1405 data.cycle(); 1406 } 1407 }); 1408 }; 1409 1410 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 1411 var selector = Util.getSelectorFromElement(this); 1412 1413 if (!selector) { 1414 return; 1415 } 1416 1417 var target = $$$1(selector)[0]; 1418 1419 if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { 1420 return; 1421 } 1422 1423 var config = _extends({}, $$$1(target).data(), $$$1(this).data()); 1424 var slideIndex = this.getAttribute('data-slide-to'); 1425 1426 if (slideIndex) { 1427 config.interval = false; 1428 } 1429 1430 Carousel._jQueryInterface.call($$$1(target), config); 1431 1432 if (slideIndex) { 1433 $$$1(target).data(DATA_KEY).to(slideIndex); 1434 } 1435 1436 event.preventDefault(); 1437 }; 1438 1439 _createClass(Carousel, null, [{ 1440 key: "VERSION", 1441 get: function get() { 1442 return VERSION; 1443 } 1444 }, { 1445 key: "Default", 1446 get: function get() { 1447 return Default; 1448 } 1449 }]); 1450 return Carousel; 1451 }(); 1452 /** 1453 * ------------------------------------------------------------------------ 1454 * Data Api implementation 1455 * ------------------------------------------------------------------------ 1456 */ 1457 1458 1459 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); 1460 $$$1(window).on(Event.LOAD_DATA_API, function () { 1461 $$$1(Selector.DATA_RIDE).each(function () { 1462 var $carousel = $$$1(this); 1463 1464 Carousel._jQueryInterface.call($carousel, $carousel.data()); 1465 }); 1466 }); 1467 /** 1468 * ------------------------------------------------------------------------ 1469 * jQuery 1470 * ------------------------------------------------------------------------ 1471 */ 1472 1473 $$$1.fn[NAME] = Carousel._jQueryInterface; 1474 $$$1.fn[NAME].Constructor = Carousel; 1475 1476 $$$1.fn[NAME].noConflict = function () { 1477 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 1478 return Carousel._jQueryInterface; 1479 }; 1480 1481 return Carousel; 1482}($); 1483 1484/** 1485 * -------------------------------------------------------------------------- 1486 * Bootstrap (v4.0.0): collapse.js 1487 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 1488 * -------------------------------------------------------------------------- 1489 */ 1490 1491var Collapse = function ($$$1) { 1492 /** 1493 * ------------------------------------------------------------------------ 1494 * Constants 1495 * ------------------------------------------------------------------------ 1496 */ 1497 var NAME = 'collapse'; 1498 var VERSION = '4.0.0'; 1499 var DATA_KEY = 'bs.collapse'; 1500 var EVENT_KEY = "." + DATA_KEY; 1501 var DATA_API_KEY = '.data-api'; 1502 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 1503 var TRANSITION_DURATION = 600; 1504 var Default = { 1505 toggle: true, 1506 parent: '' 1507 }; 1508 var DefaultType = { 1509 toggle: 'boolean', 1510 parent: '(string|element)' 1511 }; 1512 var Event = { 1513 SHOW: "show" + EVENT_KEY, 1514 SHOWN: "shown" + EVENT_KEY, 1515 HIDE: "hide" + EVENT_KEY, 1516 HIDDEN: "hidden" + EVENT_KEY, 1517 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 1518 }; 1519 var ClassName = { 1520 SHOW: 'show', 1521 COLLAPSE: 'collapse', 1522 COLLAPSING: 'collapsing', 1523 COLLAPSED: 'collapsed' 1524 }; 1525 var Dimension = { 1526 WIDTH: 'width', 1527 HEIGHT: 'height' 1528 }; 1529 var Selector = { 1530 ACTIVES: '.show, .collapsing', 1531 DATA_TOGGLE: '[data-toggle="collapse"]' 1532 /** 1533 * ------------------------------------------------------------------------ 1534 * Class Definition 1535 * ------------------------------------------------------------------------ 1536 */ 1537 1538 }; 1539 1540 var Collapse = 1541 /*#__PURE__*/ 1542 function () { 1543 function Collapse(element, config) { 1544 this._isTransitioning = false;
1545 this._element = element; 1546 this._config = this._getConfig(config); 1547 this._triggerArray = $$$1.makeArray($$$1("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 1548 var tabToggles = $$$1(Selector.DATA_TOGGLE); 1549 1550 for (var i = 0; i < tabToggles.length; i++) { 1551 var elem = tabToggles[i]; 1552 var selector = Util.getSelectorFromElement(elem); 1553 1554 if (selector !== null && $$$1(selector).filter(element).length > 0) { 1555 this._selector = selector; 1556 1557 this._triggerArray.push(elem); 1558 } 1559 } 1560 1561 this._parent = this._config.parent ? this._getParent() : null; 1562 1563 if (!this._config.parent) { 1564 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 1565 } 1566 1567 if (this._config.toggle) { 1568 this.toggle(); 1569 } 1570 } // Getters 1571 1572 1573 var _proto = Collapse.prototype; 1574 1575 // Public 1576 _proto.toggle = function toggle() { 1577 if ($$$1(this._element).hasClass(ClassName.SHOW)) { 1578 this.hide(); 1579 } else { 1580 this.show(); 1581 } 1582 }; 1583 1584 _proto.show = function show() { 1585 var _this = this; 1586 1587 if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { 1588 return; 1589 } 1590 1591 var actives; 1592 var activesData; 1593 1594 if (this._parent) { 1595 actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]")); 1596 1597 if (actives.length === 0) { 1598 actives = null; 1599 } 1600 } 1601 1602 if (actives) { 1603 activesData = $$$1(actives).not(this._selector).data(DATA_KEY); 1604 1605 if (activesData && activesData._isTransitioning) { 1606 return; 1607 } 1608 } 1609 1610 var startEvent = $$$1.Event(Event.SHOW); 1611 $$$1(this._element).trigger(startEvent); 1612 1613 if (startEvent.isDefaultPrevented()) { 1614 return; 1615 } 1616 1617 if (actives) { 1618 Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); 1619 1620 if (!activesData) { 1621 $$$1(actives).data(DATA_KEY, null); 1622 } 1623 } 1624 1625 var dimension = this._getDimension(); 1626 1627 $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); 1628 this._element.style[dimension] = 0; 1629 1630 if (this._triggerArray.length > 0) { 1631 $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); 1632 } 1633 1634 this.setTransitioning(true); 1635 1636 var complete = function complete() { 1637 $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); 1638 _this._element.style[dimension] = ''; 1639 1640 _this.setTransitioning(false); 1641 1642 $$$1(_this._element).trigger(Event.SHOWN); 1643 }; 1644 1645 if (!Util.supportsTransitionEnd()) { 1646 complete(); 1647 return; 1648 } 1649 1650 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 1651 var scrollSize = "scroll" + capitalizedDimension; 1652 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); 1653 this._element.style[dimension] = this._element[scrollSize] + "px"; 1654 }; 1655 1656 _proto.hide = function hide() { 1657 var _this2 = this; 1658 1659 if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { 1660 return; 1661 } 1662 1663 var startEvent = $$$1.Event(Event.HIDE); 1664 $$$1(this._element).trigger(startEvent); 1665 1666 if (startEvent.isDefaultPrevented()) { 1667 return; 1668 } 1669 1670 var dimension = this._getDimension(); 1671 1672 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 1673 Util.reflow(this._element); 1674 $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); 1675 1676 if (this._triggerArray.length > 0) { 1677 for (var i = 0; i < this._triggerArray.length; i++) { 1678 var trigger = this._triggerArray[i]; 1679 var selector = Util.getSelectorFromElement(trigger); 1680 1681 if (selector !== null) { 1682 var $elem = $$$1(selector); 1683 1684 if (!$elem.hasClass(ClassName.SHOW)) { 1685 $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); 1686 } 1687 } 1688 } 1689 } 1690 1691 this.setTransitioning(true); 1692 1693 var complete = function complete() { 1694 _this2.setTransitioning(false); 1695 1696 $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); 1697 }; 1698 1699 this._element.style[dimension] = ''; 1700 1701 if (!Util.supportsTransitionEnd()) { 1702 complete(); 1703 return; 1704 } 1705 1706 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); 1707 }; 1708 1709 _proto.setTransitioning = function setTransitioning(isTransitioning) { 1710 this._isTransitioning = isTransitioning; 1711 }; 1712 1713 _proto.dispose = function dispose() { 1714 $$$1.removeData(this._element, DATA_KEY); 1715 this._config = null; 1716 this._parent = null; 1717 this._element = null; 1718 this._triggerArray = null; 1719 this._isTransitioning = null; 1720 }; // Private 1721 1722 1723 _proto._getConfig = function _getConfig(config) { 1724 config = _extends({}, Default, config); 1725 config.toggle = Boolean(config.toggle); // Coerce string values 1726 1727 Util.typeCheckConfig(NAME, config, DefaultType); 1728 return config; 1729 }; 1730 1731 _proto._getDimension = function _getDimension() { 1732 var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); 1733 return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; 1734 }; 1735 1736 _proto._getParent = function _getParent() { 1737 var _this3 = this; 1738 1739 var parent = null; 1740 1741 if (Util.isElement(this._config.parent)) { 1742 parent = this._config.parent; // It's a jQuery object 1743 1744 if (typeof this._config.parent.jquery !== 'undefined') { 1745 parent = this._config.parent[0]; 1746 } 1747 } else { 1748 parent = $$$1(this._config.parent)[0]; 1749 } 1750 1751 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 1752 $$$1(parent).find(selector).each(function (i, element) { 1753 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 1754 }); 1755 return parent; 1756 }; 1757 1758 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 1759 if (element) { 1760 var isOpen = $$$1(element).hasClass(ClassName.SHOW); 1761 1762 if (triggerArray.length > 0) { 1763 $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 1764 } 1765 } 1766 }; // Static 1767 1768 1769 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 1770 var selector = Util.getSelectorFromElement(element); 1771 return selector ? $$$1(selector)[0] : null; 1772 }; 1773 1774 Collapse._jQueryInterface = function _jQueryInterface(config) { 1775 return this.each(function () { 1776 var $this = $$$1(this); 1777 var data = $this.data(DATA_KEY); 1778 1779 var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); 1780 1781 if (!data && _config.toggle && /show|hide/.test(config)) { 1782 _config.toggle = false;
vendor: 4,949 bytes, lines 1783-1955
1783 } 1784 1785 if (!data) { 1786 data = new Collapse(this, _config); 1787 $this.data(DATA_KEY, data); 1788 } 1789 1790 if (typeof config === 'string') { 1791 if (typeof data[config] === 'undefined') { 1792 throw new TypeError("No method named \"" + config + "\""); 1793 } 1794 1795 data[config](); 1796 } 1797 }); 1798 }; 1799 1800 _createClass(Collapse, null, [{ 1801 key: "VERSION", 1802 get: function get() { 1803 return VERSION; 1804 } 1805 }, { 1806 key: "Default", 1807 get: function get() { 1808 return Default; 1809 } 1810 }]); 1811 return Collapse; 1812 }(); 1813 /** 1814 * ------------------------------------------------------------------------ 1815 * Data Api implementation 1816 * ------------------------------------------------------------------------ 1817 */ 1818 1819 1820 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 1821 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 1822 if (event.currentTarget.tagName === 'A') { 1823 event.preventDefault(); 1824 } 1825 1826 var $trigger = $$$1(this); 1827 var selector = Util.getSelectorFromElement(this); 1828 $$$1(selector).each(function () { 1829 var $target = $$$1(this); 1830 var data = $target.data(DATA_KEY); 1831 var config = data ? 'toggle' : $trigger.data(); 1832 1833 Collapse._jQueryInterface.call($target, config); 1834 }); 1835 }); 1836 /** 1837 * ------------------------------------------------------------------------ 1838 * jQuery 1839 * ------------------------------------------------------------------------ 1840 */ 1841 1842 $$$1.fn[NAME] = Collapse._jQueryInterface; 1843 $$$1.fn[NAME].Constructor = Collapse; 1844 1845 $$$1.fn[NAME].noConflict = function () { 1846 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 1847 return Collapse._jQueryInterface; 1848 }; 1849 1850 return Collapse; 1851}($); 1852 1853/** 1854 * -------------------------------------------------------------------------- 1855 * Bootstrap (v4.0.0): dropdown.js 1856 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 1857 * -------------------------------------------------------------------------- 1858 */ 1859 1860var Dropdown = function ($$$1) { 1861 /** 1862 * ------------------------------------------------------------------------ 1863 * Constants 1864 * ------------------------------------------------------------------------ 1865 */ 1866 var NAME = 'dropdown'; 1867 var VERSION = '4.0.0'; 1868 var DATA_KEY = 'bs.dropdown'; 1869 var EVENT_KEY = "." + DATA_KEY; 1870 var DATA_API_KEY = '.data-api'; 1871 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 1872 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 1873 1874 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 1875 1876 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 1877 1878 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 1879 1880 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 1881 1882 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 1883 1884 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); 1885 var Event = { 1886 HIDE: "hide" + EVENT_KEY, 1887 HIDDEN: "hidden" + EVENT_KEY, 1888 SHOW: "show" + EVENT_KEY, 1889 SHOWN: "shown" + EVENT_KEY, 1890 CLICK: "click" + EVENT_KEY, 1891 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 1892 KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, 1893 KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY 1894 }; 1895 var ClassName = { 1896 DISABLED: 'disabled', 1897 SHOW: 'show', 1898 DROPUP: 'dropup', 1899 DROPRIGHT: 'dropright', 1900 DROPLEFT: 'dropleft', 1901 MENURIGHT: 'dropdown-menu-right', 1902 MENULEFT: 'dropdown-menu-left', 1903 POSITION_STATIC: 'position-static' 1904 }; 1905 var Selector = { 1906 DATA_TOGGLE: '[data-toggle="dropdown"]', 1907 FORM_CHILD: '.dropdown form', 1908 MENU: '.dropdown-menu', 1909 NAVBAR_NAV: '.navbar-nav', 1910 VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' 1911 }; 1912 var AttachmentMap = { 1913 TOP: 'top-start', 1914 TOPEND: 'top-end', 1915 BOTTOM: 'bottom-start', 1916 BOTTOMEND: 'bottom-end', 1917 RIGHT: 'right-start', 1918 RIGHTEND: 'right-end', 1919 LEFT: 'left-start', 1920 LEFTEND: 'left-end' 1921 }; 1922 var Default = { 1923 offset: 0, 1924 flip: true, 1925 boundary: 'scrollParent' 1926 }; 1927 var DefaultType = { 1928 offset: '(number|string|function)', 1929 flip: 'boolean', 1930 boundary: '(string|element)' 1931 /** 1932 * ------------------------------------------------------------------------ 1933 * Class Definition 1934 * ------------------------------------------------------------------------ 1935 */ 1936 1937 }; 1938 1939 var Dropdown = 1940 /*#__PURE__*/ 1941 function () { 1942 function Dropdown(element, config) { 1943 this._element = element; 1944 this._popper = null; 1945 this._config = this._getConfig(config); 1946 this._menu = this._getMenuElement(); 1947 this._inNavbar = this._detectNavbar(); 1948 1949 this._addEventListeners(); 1950 } // Getters 1951 1952 1953 var _proto = Dropdown.prototype; 1954 1955 // Public
1956 _proto.toggle = function toggle() { 1957 if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { 1958 return; 1959 } 1960 1961 var parent = Dropdown._getParentFromElement(this._element); 1962 1963 var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); 1964 1965 Dropdown._clearMenus(); 1966 1967 if (isActive) { 1968 return; 1969 } 1970 1971 var relatedTarget = { 1972 relatedTarget: this._element 1973 }; 1974 var showEvent = $$$1.Event(Event.SHOW, relatedTarget); 1975 $$$1(parent).trigger(showEvent); 1976 1977 if (showEvent.isDefaultPrevented()) { 1978 return; 1979 } // Disable totally Popper.js for Dropdown in Navbar 1980 1981 1982 if (!this._inNavbar) { 1983 /** 1984 * Check for Popper dependency 1985 * Popper - https://popper.js.org 1986 */ 1987 if (typeof Popper === 'undefined') { 1988 throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); 1989 } 1990 1991 var element = this._element; // For dropup with alignment we use the parent as popper container 1992 1993 if ($$$1(parent).hasClass(ClassName.DROPUP)) { 1994 if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 1995 element = parent; 1996 } 1997 } // If boundary is not `scrollParent`, then set position to `static` 1998 // to allow the menu to "escape" the scroll parent's boundaries 1999 // https://github.com/twbs/bootstrap/issues/24251 2000 2001 2002 if (this._config.boundary !== 'scrollParent') { 2003 $$$1(parent).addClass(ClassName.POSITION_STATIC); 2004 } 2005 2006 this._popper = new Popper(element, this._menu, this._getPopperConfig()); 2007 } // If this is a touch-enabled device we add extra 2008 // empty mouseover listeners to the body's immediate children; 2009 // only needed because of broken event delegation on iOS 2010 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 2011 2012 2013 if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { 2014 $$$1('body').children().on('mouseover', null, $$$1.noop); 2015 } 2016 2017 this._element.focus(); 2018 2019 this._element.setAttribute('aria-expanded', true); 2020 2021 $$$1(this._menu).toggleClass(ClassName.SHOW); 2022 $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); 2023 }; 2024 2025 _proto.dispose = function dispose() { 2026 $$$1.removeData(this._element, DATA_KEY); 2027 $$$1(this._element).off(EVENT_KEY); 2028 this._element = null; 2029 this._menu = null; 2030 2031 if (this._popper !== null) { 2032 this._popper.destroy(); 2033 2034 this._popper = null; 2035 } 2036 }; 2037 2038 _proto.update = function update() { 2039 this._inNavbar = this._detectNavbar(); 2040 2041 if (this._popper !== null) { 2042 this._popper.scheduleUpdate(); 2043 } 2044 }; // Private 2045 2046 2047 _proto._addEventListeners = function _addEventListeners() { 2048 var _this = this; 2049 2050 $$$1(this._element).on(Event.CLICK, function (event) { 2051 event.preventDefault(); 2052 event.stopPropagation(); 2053 2054 _this.toggle(); 2055 }); 2056 }; 2057 2058 _proto._getConfig = function _getConfig(config) { 2059 config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); 2060 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 2061 return config; 2062 }; 2063 2064 _proto._getMenuElement = function _getMenuElement() { 2065 if (!this._menu) { 2066 var parent = Dropdown._getParentFromElement(this._element); 2067 2068 this._menu = $$$1(parent).find(Selector.MENU)[0]; 2069 } 2070 2071 return this._menu; 2072 }; 2073 2074 _proto._getPlacement = function _getPlacement() { 2075 var $parentDropdown = $$$1(this._element).parent(); 2076 var placement = AttachmentMap.BOTTOM; // Handle dropup 2077 2078 if ($parentDropdown.hasClass(ClassName.DROPUP)) { 2079 placement = AttachmentMap.TOP; 2080 2081 if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 2082 placement = AttachmentMap.TOPEND; 2083 } 2084 } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { 2085 placement = AttachmentMap.RIGHT; 2086 } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { 2087 placement = AttachmentMap.LEFT; 2088 } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 2089 placement = AttachmentMap.BOTTOMEND; 2090 } 2091 2092 return placement; 2093 }; 2094 2095 _proto._detectNavbar = function _detectNavbar() { 2096 return $$$1(this._element).closest('.navbar').length > 0; 2097 }; 2098 2099 _proto._getPopperConfig = function _getPopperConfig() { 2100 var _this2 = this; 2101 2102 var offsetConf = {}; 2103 2104 if (typeof this._config.offset === 'function') { 2105 offsetConf.fn = function (data) { 2106 data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); 2107 return data; 2108 }; 2109 } else { 2110 offsetConf.offset = this._config.offset; 2111 } 2112 2113 var popperConfig = { 2114 placement: this._getPlacement(), 2115 modifiers: { 2116 offset: offsetConf, 2117 flip: { 2118 enabled: this._config.flip 2119 }, 2120 preventOverflow: {
2121 boundariesElement: this._config.boundary 2122 } 2123 } 2124 }; 2125 return popperConfig; 2126 }; // Static 2127 2128 2129 Dropdown._jQueryInterface = function _jQueryInterface(config) { 2130 return this.each(function () { 2131 var data = $$$1(this).data(DATA_KEY); 2132 2133 var _config = typeof config === 'object' ? config : null; 2134 2135 if (!data) { 2136 data = new Dropdown(this, _config); 2137 $$$1(this).data(DATA_KEY, data); 2138 } 2139 2140 if (typeof config === 'string') { 2141 if (typeof data[config] === 'undefined') { 2142 throw new TypeError("No method named \"" + config + "\""); 2143 } 2144 2145 data[config](); 2146 } 2147 }); 2148 }; 2149 2150 Dropdown._clearMenus = function _clearMenus(event) { 2151 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 2152 return; 2153 } 2154 2155 var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE)); 2156 2157 for (var i = 0; i < toggles.length; i++) { 2158 var parent = Dropdown._getParentFromElement(toggles[i]); 2159 2160 var context = $$$1(toggles[i]).data(DATA_KEY); 2161 var relatedTarget = { 2162 relatedTarget: toggles[i] 2163 }; 2164 2165 if (!context) { 2166 continue; 2167 } 2168 2169 var dropdownMenu = context._menu; 2170 2171 if (!$$$1(parent).hasClass(ClassName.SHOW)) { 2172 continue; 2173 } 2174 2175 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { 2176 continue; 2177 } 2178 2179 var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); 2180 $$$1(parent).trigger(hideEvent); 2181 2182 if (hideEvent.isDefaultPrevented()) { 2183 continue; 2184 } // If this is a touch-enabled device we remove the extra 2185 // empty mouseover listeners we added for iOS support 2186 2187 2188 if ('ontouchstart' in document.documentElement) { 2189 $$$1('body').children().off('mouseover', null, $$$1.noop); 2190 } 2191 2192 toggles[i].setAttribute('aria-expanded', 'false'); 2193 $$$1(dropdownMenu).removeClass(ClassName.SHOW); 2194 $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); 2195 } 2196 }; 2197 2198 Dropdown._getParentFromElement = function _getParentFromElement(element) { 2199 var parent; 2200 var selector = Util.getSelectorFromElement(element); 2201 2202 if (selector) { 2203 parent = $$$1(selector)[0]; 2204 } 2205 2206 return parent || element.parentNode; 2207 }; // eslint-disable-next-line complexity 2208 2209 2210 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 2211 // If not input/textarea: 2212 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 2213 // If input/textarea: 2214 // - If space key => not a dropdown command 2215 // - If key is other than escape 2216 // - If key is not up or down => not a dropdown command 2217 // - If trigger inside the menu => not a dropdown command 2218 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 2219 return; 2220 } 2221 2222 event.preventDefault(); 2223 event.stopPropagation(); 2224 2225 if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { 2226 return; 2227 } 2228 2229 var parent = Dropdown._getParentFromElement(this); 2230 2231 var isActive = $$$1(parent).hasClass(ClassName.SHOW); 2232 2233 if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { 2234 if (event.which === ESCAPE_KEYCODE) { 2235 var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0]; 2236 $$$1(toggle).trigger('focus'); 2237 } 2238 2239 $$$1(this).trigger('click'); 2240 return; 2241 } 2242 2243 var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); 2244 2245 if (items.length === 0) { 2246 return; 2247 } 2248 2249 var index = items.indexOf(event.target); 2250 2251 if (event.which === ARROW_UP_KEYCODE && index > 0) { 2252 // Up 2253 index--; 2254 } 2255 2256 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 2257 // Down 2258 index++; 2259 } 2260 2261 if (index < 0) { 2262 index = 0; 2263 } 2264 2265 items[index].focus(); 2266 }; 2267 2268 _createClass(Dropdown, null, [{ 2269 key: "VERSION", 2270 get: function get() { 2271 return VERSION; 2272 } 2273 }, {
2274 key: "Default", 2275 get: function get() { 2276 return Default; 2277 } 2278 }, { 2279 key: "DefaultType", 2280 get: function get() { 2281 return DefaultType; 2282 } 2283 }]); 2284 return Dropdown; 2285 }(); 2286 /** 2287 * ------------------------------------------------------------------------ 2288 * Data Api implementation 2289 * ------------------------------------------------------------------------ 2290 */ 2291 2292 2293 $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 2294 event.preventDefault(); 2295 event.stopPropagation(); 2296 2297 Dropdown._jQueryInterface.call($$$1(this), 'toggle'); 2298 }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { 2299 e.stopPropagation(); 2300 }); 2301 /** 2302 * ------------------------------------------------------------------------ 2303 * jQuery 2304 * ------------------------------------------------------------------------ 2305 */ 2306 2307 $$$1.fn[NAME] = Dropdown._jQueryInterface; 2308 $$$1.fn[NAME].Constructor = Dropdown; 2309 2310 $$$1.fn[NAME].noConflict = function () { 2311 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 2312 return Dropdown._jQueryInterface; 2313 }; 2314 2315 return Dropdown; 2316}($, Popper); 2317 2318/** 2319 * -------------------------------------------------------------------------- 2320 * Bootstrap (v4.0.0): modal.js 2321 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2322 * -------------------------------------------------------------------------- 2323 */ 2324 2325var Modal = function ($$$1) { 2326 /** 2327 * ------------------------------------------------------------------------ 2328 * Constants 2329 * ------------------------------------------------------------------------ 2330 */ 2331 var NAME = 'modal'; 2332 var VERSION = '4.0.0'; 2333 var DATA_KEY = 'bs.modal'; 2334 var EVENT_KEY = "." + DATA_KEY; 2335 var DATA_API_KEY = '.data-api'; 2336 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 2337 var TRANSITION_DURATION = 300; 2338 var BACKDROP_TRANSITION_DURATION = 150; 2339 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 2340 2341 var Default = { 2342 backdrop: true, 2343 keyboard: true, 2344 focus: true, 2345 show: true 2346 }; 2347 var DefaultType = { 2348 backdrop: '(boolean|string)', 2349 keyboard: 'boolean', 2350 focus: 'boolean', 2351 show: 'boolean' 2352 }; 2353 var Event = { 2354 HIDE: "hide" + EVENT_KEY, 2355 HIDDEN: "hidden" + EVENT_KEY, 2356 SHOW: "show" + EVENT_KEY, 2357 SHOWN: "shown" + EVENT_KEY, 2358 FOCUSIN: "focusin" + EVENT_KEY, 2359 RESIZE: "resize" + EVENT_KEY, 2360 CLICK_DISMISS: "click.dismiss" + EVENT_KEY, 2361 KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, 2362 MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, 2363 MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, 2364 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 2365 }; 2366 var ClassName = { 2367 SCROLLBAR_MEASURER: 'modal-scrollbar-measure', 2368 BACKDROP: 'modal-backdrop', 2369 OPEN: 'modal-open', 2370 FADE: 'fade', 2371 SHOW: 'show' 2372 }; 2373 var Selector = { 2374 DIALOG: '.modal-dialog', 2375 DATA_TOGGLE: '[data-toggle="modal"]', 2376 DATA_DISMISS: '[data-dismiss="modal"]', 2377 FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', 2378 STICKY_CONTENT: '.sticky-top', 2379 NAVBAR_TOGGLER: '.navbar-toggler' 2380 /** 2381 * ------------------------------------------------------------------------ 2382 * Class Definition 2383 * ------------------------------------------------------------------------ 2384 */ 2385 2386 }; 2387 2388 var Modal = 2389 /*#__PURE__*/ 2390 function () { 2391 function Modal(element, config) { 2392 this._config = this._getConfig(config); 2393 this._element = element; 2394 this._dialog = $$$1(element).find(Selector.DIALOG)[0]; 2395 this._backdrop = null; 2396 this._isShown = false; 2397 this._isBodyOverflowing = false; 2398 this._ignoreBackdropClick = false; 2399 this._originalBodyPadding = 0; 2400 this._scrollbarWidth = 0; 2401 } // Getters 2402 2403 2404 var _proto = Modal.prototype; 2405 2406 // Public 2407 _proto.toggle = function toggle(relatedTarget) { 2408 return this._isShown ? this.hide() : this.show(relatedTarget); 2409 }; 2410 2411 _proto.show = function show(relatedTarget) { 2412 var _this = this; 2413 2414 if (this._isTransitioning || this._isShown) { 2415 return; 2416 } 2417 2418 if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { 2419 this._isTransitioning = true; 2420 } 2421 2422 var showEvent = $$$1.Event(Event.SHOW, { 2423 relatedTarget: relatedTarget 2424 }); 2425 $$$1(this._element).trigger(showEvent); 2426 2427 if (this._isShown || showEvent.isDefaultPrevented()) { 2428 return; 2429 } 2430 2431 this._isShown = true; 2432 2433 this._checkScrollbar(); 2434 2435 this._setScrollbar(); 2436 2437 this._adjustDialog(); 2438 2439 $$$1(document.body).addClass(ClassName.OPEN); 2440 2441 this._setEscapeEvent(); 2442 2443 this._setResizeEvent(); 2444 2445 $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { 2446 return _this.hide(event); 2447 }); 2448 $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { 2449 $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { 2450 if ($$$1(event.target).is(_this._element)) { 2451 _this._ignoreBackdropClick = true; 2452 } 2453 }); 2454 }); 2455 2456 this._showBackdrop(function () { 2457 return _this._showElement(relatedTarget); 2458 }); 2459 }; 2460 2461 _proto.hide = function hide(event) { 2462 var _this2 = this; 2463 2464 if (event) { 2465 event.preventDefault(); 2466 } 2467 2468 if (this._isTransitioning || !this._isShown) { 2469 return; 2470 } 2471 2472 var hideEvent = $$$1.Event(Event.HIDE); 2473 $$$1(this._element).trigger(hideEvent); 2474 2475 if (!this._isShown || hideEvent.isDefaultPrevented()) { 2476 return; 2477 } 2478 2479 this._isShown = false;
2480 var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); 2481 2482 if (transition) { 2483 this._isTransitioning = true; 2484 } 2485 2486 this._setEscapeEvent(); 2487 2488 this._setResizeEvent(); 2489 2490 $$$1(document).off(Event.FOCUSIN); 2491 $$$1(this._element).removeClass(ClassName.SHOW); 2492 $$$1(this._element).off(Event.CLICK_DISMISS); 2493 $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); 2494 2495 if (transition) { 2496 $$$1(this._element).one(Util.TRANSITION_END, function (event) { 2497 return _this2._hideModal(event); 2498 }).emulateTransitionEnd(TRANSITION_DURATION); 2499 } else { 2500 this._hideModal(); 2501 } 2502 }; 2503 2504 _proto.dispose = function dispose() { 2505 $$$1.removeData(this._element, DATA_KEY); 2506 $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); 2507 this._config = null; 2508 this._element = null; 2509 this._dialog = null; 2510 this._backdrop = null; 2511 this._isShown = null; 2512 this._isBodyOverflowing = null; 2513 this._ignoreBackdropClick = null; 2514 this._scrollbarWidth = null; 2515 }; 2516 2517 _proto.handleUpdate = function handleUpdate() { 2518 this._adjustDialog(); 2519 }; // Private 2520 2521 2522 _proto._getConfig = function _getConfig(config) { 2523 config = _extends({}, Default, config); 2524 Util.typeCheckConfig(NAME, config, DefaultType); 2525 return config; 2526 }; 2527 2528 _proto._showElement = function _showElement(relatedTarget) { 2529 var _this3 = this; 2530 2531 var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); 2532 2533 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 2534 // Don't move modal's DOM position 2535 document.body.appendChild(this._element); 2536 } 2537 2538 this._element.style.display = 'block'; 2539 2540 this._element.removeAttribute('aria-hidden'); 2541 2542 this._element.scrollTop = 0; 2543 2544 if (transition) { 2545 Util.reflow(this._element); 2546 } 2547 2548 $$$1(this._element).addClass(ClassName.SHOW); 2549 2550 if (this._config.focus) { 2551 this._enforceFocus(); 2552 } 2553 2554 var shownEvent = $$$1.Event(Event.SHOWN, { 2555 relatedTarget: relatedTarget 2556 }); 2557 2558 var transitionComplete = function transitionComplete() { 2559 if (_this3._config.focus) { 2560 _this3._element.focus(); 2561 } 2562 2563 _this3._isTransitioning = false; 2564 $$$1(_this3._element).trigger(shownEvent); 2565 }; 2566 2567 if (transition) { 2568 $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); 2569 } else { 2570 transitionComplete(); 2571 } 2572 }; 2573 2574 _proto._enforceFocus = function _enforceFocus() { 2575 var _this4 = this; 2576 2577 $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop 2578 .on(Event.FOCUSIN, function (event) { 2579 if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { 2580 _this4._element.focus(); 2581 } 2582 }); 2583 }; 2584 2585 _proto._setEscapeEvent = function _setEscapeEvent() { 2586 var _this5 = this; 2587 2588 if (this._isShown && this._config.keyboard) { 2589 $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { 2590 if (event.which === ESCAPE_KEYCODE) { 2591 event.preventDefault(); 2592 2593 _this5.hide(); 2594 } 2595 }); 2596 } else if (!this._isShown) { 2597 $$$1(this._element).off(Event.KEYDOWN_DISMISS); 2598 } 2599 }; 2600 2601 _proto._setResizeEvent = function _setResizeEvent() { 2602 var _this6 = this; 2603 2604 if (this._isShown) { 2605 $$$1(window).on(Event.RESIZE, function (event) { 2606 return _this6.handleUpdate(event); 2607 }); 2608 } else { 2609 $$$1(window).off(Event.RESIZE); 2610 } 2611 }; 2612 2613 _proto._hideModal = function _hideModal() { 2614 var _this7 = this; 2615 2616 this._element.style.display = 'none'; 2617 2618 this._element.setAttribute('aria-hidden', true); 2619 2620 this._isTransitioning = false; 2621 2622 this._showBackdrop(function () { 2623 $$$1(document.body).removeClass(ClassName.OPEN); 2624 2625 _this7._resetAdjustments(); 2626 2627 _this7._resetScrollbar(); 2628 2629 $$$1(_this7._element).trigger(Event.HIDDEN); 2630 }); 2631 }; 2632 2633 _proto._removeBackdrop = function _removeBackdrop() { 2634 if (this._backdrop) { 2635 $$$1(this._backdrop).remove(); 2636 this._backdrop = null; 2637 } 2638 }; 2639 2640 _proto._showBackdrop = function _showBackdrop(callback) { 2641 var _this8 = this; 2642 2643 var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; 2644 2645 if (this._isShown && this._config.backdrop) { 2646 var doAnimate = Util.supportsTransitionEnd() && animate; 2647 this._backdrop = document.createElement('div'); 2648 this._backdrop.className = ClassName.BACKDROP; 2649 2650 if (animate) { 2651 $$$1(this._backdrop).addClass(animate); 2652 } 2653 2654 $$$1(this._backdrop).appendTo(document.body); 2655 $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { 2656 if (_this8._ignoreBackdropClick) { 2657 _this8._ignoreBackdropClick = false;
2658 return; 2659 } 2660 2661 if (event.target !== event.currentTarget) { 2662 return; 2663 } 2664 2665 if (_this8._config.backdrop === 'static') { 2666 _this8._element.focus(); 2667 } else { 2668 _this8.hide(); 2669 } 2670 }); 2671 2672 if (doAnimate) { 2673 Util.reflow(this._backdrop); 2674 } 2675 2676 $$$1(this._backdrop).addClass(ClassName.SHOW); 2677 2678 if (!callback) { 2679 return; 2680 } 2681 2682 if (!doAnimate) { 2683 callback(); 2684 return; 2685 } 2686 2687 $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); 2688 } else if (!this._isShown && this._backdrop) { 2689 $$$1(this._backdrop).removeClass(ClassName.SHOW); 2690 2691 var callbackRemove = function callbackRemove() { 2692 _this8._removeBackdrop(); 2693 2694 if (callback) { 2695 callback(); 2696 } 2697 }; 2698 2699 if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { 2700 $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); 2701 } else { 2702 callbackRemove(); 2703 } 2704 } else if (callback) { 2705 callback(); 2706 } 2707 }; // ---------------------------------------------------------------------- 2708 // the following methods are used to handle overflowing modals 2709 // todo (fat): these should probably be refactored out of modal.js 2710 // ---------------------------------------------------------------------- 2711 2712 2713 _proto._adjustDialog = function _adjustDialog() { 2714 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 2715 2716 if (!this._isBodyOverflowing && isModalOverflowing) { 2717 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 2718 } 2719 2720 if (this._isBodyOverflowing && !isModalOverflowing) { 2721 this._element.style.paddingRight = this._scrollbarWidth + "px"; 2722 } 2723 }; 2724 2725 _proto._resetAdjustments = function _resetAdjustments() { 2726 this._element.style.paddingLeft = ''; 2727 this._element.style.paddingRight = ''; 2728 }; 2729 2730 _proto._checkScrollbar = function _checkScrollbar() { 2731 var rect = document.body.getBoundingClientRect(); 2732 this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; 2733 this._scrollbarWidth = this._getScrollbarWidth(); 2734 }; 2735 2736 _proto._setScrollbar = function _setScrollbar() { 2737 var _this9 = this; 2738 2739 if (this._isBodyOverflowing) { 2740 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 2741 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 2742 // Adjust fixed content padding 2743 $$$1(Selector.FIXED_CONTENT).each(function (index, element) { 2744 var actualPadding = $$$1(element)[0].style.paddingRight; 2745 var calculatedPadding = $$$1(element).css('padding-right'); 2746 $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); 2747 }); // Adjust sticky content margin 2748 2749 $$$1(Selector.STICKY_CONTENT).each(function (index, element) { 2750 var actualMargin = $$$1(element)[0].style.marginRight; 2751 var calculatedMargin = $$$1(element).css('margin-right'); 2752 $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); 2753 }); // Adjust navbar-toggler margin 2754 2755 $$$1(Selector.NAVBAR_TOGGLER).each(function (index, element) { 2756 var actualMargin = $$$1(element)[0].style.marginRight; 2757 var calculatedMargin = $$$1(element).css('margin-right'); 2758 $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + "px"); 2759 }); // Adjust body padding 2760 2761 var actualPadding = document.body.style.paddingRight; 2762 var calculatedPadding = $$$1('body').css('padding-right'); 2763 $$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 2764 } 2765 }; 2766 2767 _proto._resetScrollbar = function _resetScrollbar() { 2768 // Restore fixed content padding 2769 $$$1(Selector.FIXED_CONTENT).each(function (index, element) { 2770 var padding = $$$1(element).data('padding-right'); 2771 2772 if (typeof padding !== 'undefined') { 2773 $$$1(element).css('padding-right', padding).removeData('padding-right'); 2774 } 2775 }); // Restore sticky content and navbar-toggler margin 2776 2777 $$$1(Selector.STICKY_CONTENT + ", " + Selector.NAVBAR_TOGGLER).each(function (index, element) { 2778 var margin = $$$1(element).data('margin-right'); 2779 2780 if (typeof margin !== 'undefined') { 2781 $$$1(element).css('margin-right', margin).removeData('margin-right'); 2782 } 2783 }); // Restore body padding 2784 2785 var padding = $$$1('body').data('padding-right'); 2786 2787 if (typeof padding !== 'undefined') { 2788 $$$1('body').css('padding-right', padding).removeData('padding-right'); 2789 } 2790 }; 2791 2792 _proto._getScrollbarWidth = function _getScrollbarWidth() { 2793 // thx d.walsh 2794 var scrollDiv = document.createElement('div'); 2795 scrollDiv.className = ClassName.SCROLLBAR_MEASURER; 2796 document.body.appendChild(scrollDiv); 2797 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 2798 document.body.removeChild(scrollDiv); 2799 return scrollbarWidth; 2800 }; // Static 2801 2802 2803 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 2804 return this.each(function () { 2805 var data = $$$1(this).data(DATA_KEY); 2806 2807 var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); 2808 2809 if (!data) { 2810 data = new Modal(this, _config); 2811 $$$1(this).data(DATA_KEY, data); 2812 } 2813 2814 if (typeof config === 'string') { 2815 if (typeof data[config] === 'undefined') {
2816 throw new TypeError("No method named \"" + config + "\""); 2817 } 2818 2819 data[config](relatedTarget); 2820 } else if (_config.show) { 2821 data.show(relatedTarget); 2822 } 2823 }); 2824 }; 2825 2826 _createClass(Modal, null, [{ 2827 key: "VERSION", 2828 get: function get() { 2829 return VERSION; 2830 } 2831 }, { 2832 key: "Default", 2833 get: function get() { 2834 return Default; 2835 } 2836 }]); 2837 return Modal; 2838 }(); 2839 /** 2840 * ------------------------------------------------------------------------ 2841 * Data Api implementation 2842 * ------------------------------------------------------------------------ 2843 */ 2844 2845 2846 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 2847 var _this10 = this; 2848 2849 var target; 2850 var selector = Util.getSelectorFromElement(this); 2851 2852 if (selector) { 2853 target = $$$1(selector)[0]; 2854 } 2855 2856 var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); 2857 2858 if (this.tagName === 'A' || this.tagName === 'AREA') { 2859 event.preventDefault(); 2860 } 2861 2862 var $target = $$$1(target).one(Event.SHOW, function (showEvent) { 2863 if (showEvent.isDefaultPrevented()) { 2864 // Only register focus restorer if modal will actually get shown 2865 return; 2866 } 2867 2868 $target.one(Event.HIDDEN, function () { 2869 if ($$$1(_this10).is(':visible')) { 2870 _this10.focus(); 2871 } 2872 }); 2873 }); 2874 2875 Modal._jQueryInterface.call($$$1(target), config, this); 2876 }); 2877 /** 2878 * ------------------------------------------------------------------------ 2879 * jQuery 2880 * ------------------------------------------------------------------------ 2881 */ 2882 2883 $$$1.fn[NAME] = Modal._jQueryInterface; 2884 $$$1.fn[NAME].Constructor = Modal; 2885 2886 $$$1.fn[NAME].noConflict = function () { 2887 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 2888 return Modal._jQueryInterface; 2889 }; 2890 2891 return Modal; 2892}($); 2893 2894/** 2895 * -------------------------------------------------------------------------- 2896 * Bootstrap (v4.0.0): tooltip.js 2897 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2898 * -------------------------------------------------------------------------- 2899 */ 2900 2901var Tooltip = function ($$$1) { 2902 /** 2903 * ------------------------------------------------------------------------ 2904 * Constants 2905 * ------------------------------------------------------------------------ 2906 */ 2907 var NAME = 'tooltip'; 2908 var VERSION = '4.0.0'; 2909 var DATA_KEY = 'bs.tooltip'; 2910 var EVENT_KEY = "." + DATA_KEY; 2911 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 2912 var TRANSITION_DURATION = 150; 2913 var CLASS_PREFIX = 'bs-tooltip'; 2914 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 2915 var DefaultType = { 2916 animation: 'boolean', 2917 template: 'string', 2918 title: '(string|element|function)', 2919 trigger: 'string', 2920 delay: '(number|object)', 2921 html: 'boolean', 2922 selector: '(string|boolean)', 2923 placement: '(string|function)', 2924 offset: '(number|string)', 2925 container: '(string|element|boolean)', 2926 fallbackPlacement: '(string|array)', 2927 boundary: '(string|element)' 2928 }; 2929 var AttachmentMap = { 2930 AUTO: 'auto', 2931 TOP: 'top', 2932 RIGHT: 'right', 2933 BOTTOM: 'bottom', 2934 LEFT: 'left' 2935 }; 2936 var Default = { 2937 animation: true, 2938 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 2939 trigger: 'hover focus', 2940 title: '', 2941 delay: 0, 2942 html: false, 2943 selector: false, 2944 placement: 'top', 2945 offset: 0, 2946 container: false, 2947 fallbackPlacement: 'flip', 2948 boundary: 'scrollParent' 2949 }; 2950 var HoverState = { 2951 SHOW: 'show', 2952 OUT: 'out' 2953 }; 2954 var Event = { 2955 HIDE: "hide" + EVENT_KEY, 2956 HIDDEN: "hidden" + EVENT_KEY, 2957 SHOW: "show" + EVENT_KEY, 2958 SHOWN: "shown" + EVENT_KEY, 2959 INSERTED: "inserted" + EVENT_KEY, 2960 CLICK: "click" + EVENT_KEY, 2961 FOCUSIN: "focusin" + EVENT_KEY, 2962 FOCUSOUT: "focusout" + EVENT_KEY, 2963 MOUSEENTER: "mouseenter" + EVENT_KEY, 2964 MOUSELEAVE: "mouseleave" + EVENT_KEY 2965 }; 2966 var ClassName = { 2967 FADE: 'fade', 2968 SHOW: 'show' 2969 }; 2970 var Selector = { 2971 TOOLTIP: '.tooltip', 2972 TOOLTIP_INNER: '.tooltip-inner', 2973 ARROW: '.arrow' 2974 }; 2975 var Trigger = { 2976 HOVER: 'hover', 2977 FOCUS: 'focus', 2978 CLICK: 'click', 2979 MANUAL: 'manual' 2980 /** 2981 * ------------------------------------------------------------------------ 2982 * Class Definition 2983 * ------------------------------------------------------------------------ 2984 */ 2985 2986 }; 2987 2988 var Tooltip = 2989 /*#__PURE__*/ 2990 function () { 2991 function Tooltip(element, config) { 2992 /** 2993 * Check for Popper dependency 2994 * Popper - https://popper.js.org 2995 */ 2996 if (typeof Popper === 'undefined') { 2997 throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); 2998 } // private 2999 3000 3001 this._isEnabled = true; 3002 this._timeout = 0; 3003 this._hoverState = ''; 3004 this._activeTrigger = {}; 3005 this._popper = null; // Protected 3006 3007 this.element = element; 3008 this.config = this._getConfig(config); 3009 this.tip = null; 3010 3011 this._setListeners(); 3012 } // Getters 3013 3014 3015 var _proto = Tooltip.prototype; 3016 3017 // Public 3018 _proto.enable = function enable() { 3019 this._isEnabled = true; 3020 }; 3021 3022 _proto.disable = function disable() { 3023 this._isEnabled = false;
3024 }; 3025 3026 _proto.toggleEnabled = function toggleEnabled() { 3027 this._isEnabled = !this._isEnabled; 3028 }; 3029 3030 _proto.toggle = function toggle(event) { 3031 if (!this._isEnabled) { 3032 return; 3033 } 3034 3035 if (event) { 3036 var dataKey = this.constructor.DATA_KEY; 3037 var context = $$$1(event.currentTarget).data(dataKey); 3038 3039 if (!context) { 3040 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3041 $$$1(event.currentTarget).data(dataKey, context); 3042 } 3043 3044 context._activeTrigger.click = !context._activeTrigger.click; 3045 3046 if (context._isWithActiveTrigger()) { 3047 context._enter(null, context); 3048 } else { 3049 context._leave(null, context); 3050 } 3051 } else { 3052 if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { 3053 this._leave(null, this); 3054 3055 return; 3056 } 3057 3058 this._enter(null, this); 3059 } 3060 }; 3061 3062 _proto.dispose = function dispose() { 3063 clearTimeout(this._timeout); 3064 $$$1.removeData(this.element, this.constructor.DATA_KEY); 3065 $$$1(this.element).off(this.constructor.EVENT_KEY); 3066 $$$1(this.element).closest('.modal').off('hide.bs.modal'); 3067 3068 if (this.tip) { 3069 $$$1(this.tip).remove(); 3070 } 3071 3072 this._isEnabled = null; 3073 this._timeout = null; 3074 this._hoverState = null; 3075 this._activeTrigger = null; 3076 3077 if (this._popper !== null) { 3078 this._popper.destroy(); 3079 } 3080 3081 this._popper = null; 3082 this.element = null; 3083 this.config = null; 3084 this.tip = null; 3085 }; 3086 3087 _proto.show = function show() { 3088 var _this = this; 3089 3090 if ($$$1(this.element).css('display') === 'none') { 3091 throw new Error('Please use show on visible elements'); 3092 } 3093 3094 var showEvent = $$$1.Event(this.constructor.Event.SHOW); 3095 3096 if (this.isWithContent() && this._isEnabled) { 3097 $$$1(this.element).trigger(showEvent); 3098 var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); 3099 3100 if (showEvent.isDefaultPrevented() || !isInTheDom) { 3101 return; 3102 } 3103 3104 var tip = this.getTipElement(); 3105 var tipId = Util.getUID(this.constructor.NAME);
3106 tip.setAttribute('id', tipId); 3107 this.element.setAttribute('aria-describedby', tipId); 3108 this.setContent(); 3109 3110 if (this.config.animation) { 3111 $$$1(tip).addClass(ClassName.FADE); 3112 } 3113 3114 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 3115 3116 var attachment = this._getAttachment(placement); 3117 3118 this.addAttachmentClass(attachment); 3119 var container = this.config.container === false ? document.body : $$$1(this.config.container); 3120 $$$1(tip).data(this.constructor.DATA_KEY, this); 3121 3122 if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { 3123 $$$1(tip).appendTo(container); 3124 } 3125 3126 $$$1(this.element).trigger(this.constructor.Event.INSERTED); 3127 this._popper = new Popper(this.element, tip, { 3128 placement: attachment, 3129 modifiers: { 3130 offset: { 3131 offset: this.config.offset 3132 }, 3133 flip: { 3134 behavior: this.config.fallbackPlacement 3135 }, 3136 arrow: { 3137 element: Selector.ARROW 3138 }, 3139 preventOverflow: { 3140 boundariesElement: this.config.boundary 3141 } 3142 }, 3143 onCreate: function onCreate(data) { 3144 if (data.originalPlacement !== data.placement) { 3145 _this._handlePopperPlacementChange(data); 3146 } 3147 }, 3148 onUpdate: function onUpdate(data) { 3149 _this._handlePopperPlacementChange(data); 3150 } 3151 }); 3152 $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra 3153 // empty mouseover listeners to the body's immediate children; 3154 // only needed because of broken event delegation on iOS 3155 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3156 3157 if ('ontouchstart' in document.documentElement) { 3158 $$$1('body').children().on('mouseover', null, $$$1.noop); 3159 } 3160 3161 var complete = function complete() { 3162 if (_this.config.animation) { 3163 _this._fixTransition(); 3164 } 3165 3166 var prevHoverState = _this._hoverState; 3167 _this._hoverState = null; 3168 $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); 3169 3170 if (prevHoverState === HoverState.OUT) { 3171 _this._leave(null, _this); 3172 } 3173 }; 3174 3175 if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { 3176 $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); 3177 } else { 3178 complete(); 3179 } 3180 } 3181 }; 3182 3183 _proto.hide = function hide(callback) { 3184 var _this2 = this; 3185 3186 var tip = this.getTipElement(); 3187 var hideEvent = $$$1.Event(this.constructor.Event.HIDE); 3188 3189 var complete = function complete() { 3190 if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { 3191 tip.parentNode.removeChild(tip); 3192 } 3193 3194 _this2._cleanTipClass(); 3195 3196 _this2.element.removeAttribute('aria-describedby'); 3197 3198 $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); 3199 3200 if (_this2._popper !== null) { 3201 _this2._popper.destroy(); 3202 } 3203 3204 if (callback) { 3205 callback(); 3206 } 3207 }; 3208 3209 $$$1(this.element).trigger(hideEvent); 3210 3211 if (hideEvent.isDefaultPrevented()) { 3212 return; 3213 } 3214 3215 $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra 3216 // empty mouseover listeners we added for iOS support 3217 3218 if ('ontouchstart' in document.documentElement) { 3219 $$$1('body').children().off('mouseover', null, $$$1.noop); 3220 } 3221 3222 this._activeTrigger[Trigger.CLICK] = false; 3223 this._activeTrigger[Trigger.FOCUS] = false; 3224 this._activeTrigger[Trigger.HOVER] = false; 3225 3226 if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { 3227 $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); 3228 } else { 3229 complete(); 3230 } 3231 3232 this._hoverState = ''; 3233 }; 3234
3235 _proto.update = function update() { 3236 if (this._popper !== null) { 3237 this._popper.scheduleUpdate(); 3238 } 3239 }; // Protected 3240 3241 3242 _proto.isWithContent = function isWithContent() { 3243 return Boolean(this.getTitle()); 3244 }; 3245 3246 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 3247 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 3248 }; 3249 3250 _proto.getTipElement = function getTipElement() { 3251 this.tip = this.tip || $$$1(this.config.template)[0]; 3252 return this.tip; 3253 }; 3254 3255 _proto.setContent = function setContent() { 3256 var $tip = $$$1(this.getTipElement()); 3257 this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle()); 3258 $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); 3259 }; 3260 3261 _proto.setElementContent = function setElementContent($element, content) { 3262 var html = this.config.html; 3263 3264 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 3265 // Content is a DOM node or a jQuery 3266 if (html) { 3267 if (!$$$1(content).parent().is($element)) { 3268 $element.empty().append(content); 3269 } 3270 } else { 3271 $element.text($$$1(content).text()); 3272 } 3273 } else { 3274 $element[html ? 'html' : 'text'](content); 3275 } 3276 }; 3277 3278 _proto.getTitle = function getTitle() { 3279 var title = this.element.getAttribute('data-original-title'); 3280 3281 if (!title) { 3282 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 3283 } 3284 3285 return title; 3286 }; // Private 3287 3288 3289 _proto._getAttachment = function _getAttachment(placement) { 3290 return AttachmentMap[placement.toUpperCase()]; 3291 }; 3292 3293 _proto._setListeners = function _setListeners() { 3294 var _this3 = this; 3295 3296 var triggers = this.config.trigger.split(' '); 3297 triggers.forEach(function (trigger) { 3298 if (trigger === 'click') { 3299 $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { 3300 return _this3.toggle(event); 3301 }); 3302 } else if (trigger !== Trigger.MANUAL) { 3303 var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; 3304 var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; 3305 $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { 3306 return _this3._enter(event); 3307 }).on(eventOut, _this3.config.selector, function (event) { 3308 return _this3._leave(event); 3309 }); 3310 } 3311 3312 $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { 3313 return _this3.hide(); 3314 }); 3315 }); 3316 3317 if (this.config.selector) { 3318 this.config = _extends({}, this.config, { 3319 trigger: 'manual', 3320 selector: '' 3321 }); 3322 } else { 3323 this._fixTitle(); 3324 } 3325 }; 3326 3327 _proto._fixTitle = function _fixTitle() { 3328 var titleType = typeof this.element.getAttribute('data-original-title'); 3329 3330 if (this.element.getAttribute('title') || titleType !== 'string') { 3331 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 3332 this.element.setAttribute('title', ''); 3333 } 3334 }; 3335 3336 _proto._enter = function _enter(event, context) { 3337 var dataKey = this.constructor.DATA_KEY; 3338 context = context || $$$1(event.currentTarget).data(dataKey); 3339 3340 if (!context) { 3341 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3342 $$$1(event.currentTarget).data(dataKey, context); 3343 } 3344 3345 if (event) { 3346 context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; 3347 } 3348 3349 if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { 3350 context._hoverState = HoverState.SHOW; 3351 return; 3352 } 3353 3354 clearTimeout(context._timeout); 3355 context._hoverState = HoverState.SHOW; 3356 3357 if (!context.config.delay || !context.config.delay.show) { 3358 context.show(); 3359 return; 3360 } 3361 3362 context._timeout = setTimeout(function () { 3363 if (context._hoverState === HoverState.SHOW) { 3364 context.show(); 3365 } 3366 }, context.config.delay.show); 3367 }; 3368 3369 _proto._leave = function _leave(event, context) { 3370 var dataKey = this.constructor.DATA_KEY; 3371 context = context || $$$1(event.currentTarget).data(dataKey); 3372 3373 if (!context) { 3374 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 3375 $$$1(event.currentTarget).data(dataKey, context); 3376 } 3377 3378 if (event) { 3379 context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
vendor: 4,942 bytes, lines 3380-3576
3380 } 3381 3382 if (context._isWithActiveTrigger()) { 3383 return; 3384 } 3385 3386 clearTimeout(context._timeout); 3387 context._hoverState = HoverState.OUT; 3388 3389 if (!context.config.delay || !context.config.delay.hide) { 3390 context.hide(); 3391 return; 3392 } 3393 3394 context._timeout = setTimeout(function () { 3395 if (context._hoverState === HoverState.OUT) { 3396 context.hide(); 3397 } 3398 }, context.config.delay.hide); 3399 }; 3400 3401 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 3402 for (var trigger in this._activeTrigger) { 3403 if (this._activeTrigger[trigger]) { 3404 return true; 3405 } 3406 } 3407 3408 return false; 3409 }; 3410 3411 _proto._getConfig = function _getConfig(config) { 3412 config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); 3413 3414 if (typeof config.delay === 'number') { 3415 config.delay = { 3416 show: config.delay, 3417 hide: config.delay 3418 }; 3419 } 3420 3421 if (typeof config.title === 'number') { 3422 config.title = config.title.toString(); 3423 } 3424 3425 if (typeof config.content === 'number') { 3426 config.content = config.content.toString(); 3427 } 3428 3429 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 3430 return config; 3431 }; 3432 3433 _proto._getDelegateConfig = function _getDelegateConfig() { 3434 var config = {}; 3435 3436 if (this.config) { 3437 for (var key in this.config) { 3438 if (this.constructor.Default[key] !== this.config[key]) { 3439 config[key] = this.config[key]; 3440 } 3441 } 3442 } 3443 3444 return config; 3445 }; 3446 3447 _proto._cleanTipClass = function _cleanTipClass() { 3448 var $tip = $$$1(this.getTipElement()); 3449 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 3450 3451 if (tabClass !== null && tabClass.length > 0) { 3452 $tip.removeClass(tabClass.join('')); 3453 } 3454 }; 3455 3456 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) { 3457 this._cleanTipClass(); 3458 3459 this.addAttachmentClass(this._getAttachment(data.placement)); 3460 }; 3461 3462 _proto._fixTransition = function _fixTransition() { 3463 var tip = this.getTipElement(); 3464 var initConfigAnimation = this.config.animation; 3465 3466 if (tip.getAttribute('x-placement') !== null) { 3467 return; 3468 } 3469 3470 $$$1(tip).removeClass(ClassName.FADE); 3471 this.config.animation = false; 3472 this.hide(); 3473 this.show(); 3474 this.config.animation = initConfigAnimation; 3475 }; // Static 3476 3477 3478 Tooltip._jQueryInterface = function _jQueryInterface(config) { 3479 return this.each(function () { 3480 var data = $$$1(this).data(DATA_KEY); 3481 3482 var _config = typeof config === 'object' && config; 3483 3484 if (!data && /dispose|hide/.test(config)) { 3485 return; 3486 } 3487 3488 if (!data) { 3489 data = new Tooltip(this, _config); 3490 $$$1(this).data(DATA_KEY, data); 3491 } 3492 3493 if (typeof config === 'string') { 3494 if (typeof data[config] === 'undefined') { 3495 throw new TypeError("No method named \"" + config + "\""); 3496 } 3497 3498 data[config](); 3499 } 3500 }); 3501 }; 3502 3503 _createClass(Tooltip, null, [{ 3504 key: "VERSION", 3505 get: function get() { 3506 return VERSION; 3507 } 3508 }, { 3509 key: "Default", 3510 get: function get() { 3511 return Default; 3512 } 3513 }, { 3514 key: "NAME", 3515 get: function get() { 3516 return NAME; 3517 } 3518 }, { 3519 key: "DATA_KEY", 3520 get: function get() { 3521 return DATA_KEY; 3522 } 3523 }, { 3524 key: "Event", 3525 get: function get() { 3526 return Event; 3527 } 3528 }, { 3529 key: "EVENT_KEY", 3530 get: function get() { 3531 return EVENT_KEY; 3532 } 3533 }, { 3534 key: "DefaultType", 3535 get: function get() { 3536 return DefaultType; 3537 } 3538 }]); 3539 return Tooltip; 3540 }(); 3541 /** 3542 * ------------------------------------------------------------------------ 3543 * jQuery 3544 * ------------------------------------------------------------------------ 3545 */ 3546 3547 3548 $$$1.fn[NAME] = Tooltip._jQueryInterface; 3549 $$$1.fn[NAME].Constructor = Tooltip; 3550 3551 $$$1.fn[NAME].noConflict = function () { 3552 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 3553 return Tooltip._jQueryInterface; 3554 }; 3555 3556 return Tooltip; 3557}($, Popper); 3558 3559/** 3560 * -------------------------------------------------------------------------- 3561 * Bootstrap (v4.0.0): popover.js 3562 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3563 * -------------------------------------------------------------------------- 3564 */ 3565 3566var Popover = function ($$$1) { 3567 /** 3568 * ------------------------------------------------------------------------ 3569 * Constants 3570 * ------------------------------------------------------------------------ 3571 */ 3572 var NAME = 'popover'; 3573 var VERSION = '4.0.0'; 3574 var DATA_KEY = 'bs.popover'; 3575 var EVENT_KEY = "." + DATA_KEY; 3576 var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
3577 var CLASS_PREFIX = 'bs-popover'; 3578 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 3579 var Default = _extends({}, Tooltip.Default, { 3580 placement: 'right', 3581 trigger: 'click', 3582 content: '', 3583 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 3584 }); 3585 var DefaultType = _extends({}, Tooltip.DefaultType, { 3586 content: '(string|element|function)' 3587 }); 3588 var ClassName = { 3589 FADE: 'fade', 3590 SHOW: 'show' 3591 }; 3592 var Selector = { 3593 TITLE: '.popover-header', 3594 CONTENT: '.popover-body' 3595 }; 3596 var Event = { 3597 HIDE: "hide" + EVENT_KEY, 3598 HIDDEN: "hidden" + EVENT_KEY, 3599 SHOW: "show" + EVENT_KEY, 3600 SHOWN: "shown" + EVENT_KEY, 3601 INSERTED: "inserted" + EVENT_KEY, 3602 CLICK: "click" + EVENT_KEY, 3603 FOCUSIN: "focusin" + EVENT_KEY, 3604 FOCUSOUT: "focusout" + EVENT_KEY, 3605 MOUSEENTER: "mouseenter" + EVENT_KEY, 3606 MOUSELEAVE: "mouseleave" + EVENT_KEY 3607 /** 3608 * ------------------------------------------------------------------------ 3609 * Class Definition 3610 * ------------------------------------------------------------------------ 3611 */ 3612 3613 }; 3614 3615 var Popover = 3616 /*#__PURE__*/ 3617 function (_Tooltip) { 3618 _inheritsLoose(Popover, _Tooltip); 3619 3620 function Popover() { 3621 return _Tooltip.apply(this, arguments) || this; 3622 } 3623 3624 var _proto = Popover.prototype; 3625 3626 // Overrides 3627 _proto.isWithContent = function isWithContent() { 3628 return this.getTitle() || this._getContent(); 3629 }; 3630 3631 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 3632 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 3633 }; 3634 3635 _proto.getTipElement = function getTipElement() { 3636 this.tip = this.tip || $$$1(this.config.template)[0]; 3637 return this.tip; 3638 }; 3639 3640 _proto.setContent = function setContent() { 3641 var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events 3642 3643 this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); 3644 3645 var content = this._getContent(); 3646 3647 if (typeof content === 'function') { 3648 content = content.call(this.element); 3649 } 3650 3651 this.setElementContent($tip.find(Selector.CONTENT), content); 3652 $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); 3653 }; // Private 3654 3655 3656 _proto._getContent = function _getContent() { 3657 return this.element.getAttribute('data-content') || this.config.content; 3658 }; 3659 3660 _proto._cleanTipClass = function _cleanTipClass() { 3661 var $tip = $$$1(this.getTipElement()); 3662 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 3663 3664 if (tabClass !== null && tabClass.length > 0) { 3665 $tip.removeClass(tabClass.join('')); 3666 } 3667 }; // Static 3668 3669 3670 Popover._jQueryInterface = function _jQueryInterface(config) { 3671 return this.each(function () { 3672 var data = $$$1(this).data(DATA_KEY); 3673 3674 var _config = typeof config === 'object' ? config : null; 3675 3676 if (!data && /destroy|hide/.test(config)) { 3677 return; 3678 } 3679 3680 if (!data) { 3681 data = new Popover(this, _config); 3682 $$$1(this).data(DATA_KEY, data); 3683 } 3684 3685 if (typeof config === 'string') { 3686 if (typeof data[config] === 'undefined') { 3687 throw new TypeError("No method named \"" + config + "\""); 3688 } 3689 3690 data[config](); 3691 } 3692 }); 3693 }; 3694 3695 _createClass(Popover, null, [{ 3696 key: "VERSION", 3697 // Getters 3698 get: function get() { 3699 return VERSION; 3700 } 3701 }, { 3702 key: "Default", 3703 get: function get() { 3704 return Default; 3705 } 3706 }, { 3707 key: "NAME", 3708 get: function get() { 3709 return NAME; 3710 } 3711 }, { 3712 key: "DATA_KEY", 3713 get: function get() { 3714 return DATA_KEY; 3715 } 3716 }, { 3717 key: "Event", 3718 get: function get() { 3719 return Event; 3720 } 3721 }, { 3722 key: "EVENT_KEY", 3723 get: function get() { 3724 return EVENT_KEY; 3725 } 3726 }, { 3727 key: "DefaultType", 3728 get: function get() { 3729 return DefaultType; 3730 } 3731 }]); 3732 return Popover; 3733 }(Tooltip); 3734 /** 3735 * ------------------------------------------------------------------------ 3736 * jQuery 3737 * ------------------------------------------------------------------------ 3738 */ 3739 3740 3741 $$$1.fn[NAME] = Popover._jQueryInterface; 3742 $$$1.fn[NAME].Constructor = Popover; 3743 3744 $$$1.fn[NAME].noConflict = function () { 3745 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 3746 return Popover._jQueryInterface; 3747 }; 3748 3749 return Popover; 3750}($); 3751 3752/** 3753 * -------------------------------------------------------------------------- 3754 * Bootstrap (v4.0.0): scrollspy.js 3755 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3756 * -------------------------------------------------------------------------- 3757 */ 3758 3759var ScrollSpy = function ($$$1) { 3760 /** 3761 * ------------------------------------------------------------------------ 3762 * Constants 3763 * ------------------------------------------------------------------------ 3764 */ 3765 var NAME = 'scrollspy'; 3766 var VERSION = '4.0.0'; 3767 var DATA_KEY = 'bs.scrollspy'; 3768 var EVENT_KEY = "." + DATA_KEY; 3769 var DATA_API_KEY = '.data-api'; 3770 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 3771 var Default = { 3772 offset: 10, 3773 method: 'auto', 3774 target: '' 3775 }; 3776 var DefaultType = { 3777 offset: 'number', 3778 method: 'string', 3779 target: '(string|element)' 3780 }; 3781 var Event = { 3782 ACTIVATE: "activate" + EVENT_KEY, 3783 SCROLL: "scroll" + EVENT_KEY, 3784 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY 3785 }; 3786 var ClassName = {
3787 DROPDOWN_ITEM: 'dropdown-item', 3788 DROPDOWN_MENU: 'dropdown-menu', 3789 ACTIVE: 'active' 3790 }; 3791 var Selector = { 3792 DATA_SPY: '[data-spy="scroll"]', 3793 ACTIVE: '.active', 3794 NAV_LIST_GROUP: '.nav, .list-group', 3795 NAV_LINKS: '.nav-link', 3796 NAV_ITEMS: '.nav-item', 3797 LIST_ITEMS: '.list-group-item', 3798 DROPDOWN: '.dropdown', 3799 DROPDOWN_ITEMS: '.dropdown-item', 3800 DROPDOWN_TOGGLE: '.dropdown-toggle' 3801 }; 3802 var OffsetMethod = { 3803 OFFSET: 'offset', 3804 POSITION: 'position' 3805 /** 3806 * ------------------------------------------------------------------------ 3807 * Class Definition 3808 * ------------------------------------------------------------------------ 3809 */ 3810 3811 }; 3812 3813 var ScrollSpy = 3814 /*#__PURE__*/ 3815 function () { 3816 function ScrollSpy(element, config) { 3817 var _this = this; 3818 3819 this._element = element; 3820 this._scrollElement = element.tagName === 'BODY' ? window : element; 3821 this._config = this._getConfig(config); 3822 this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); 3823 this._offsets = []; 3824 this._targets = []; 3825 this._activeTarget = null; 3826 this._scrollHeight = 0; 3827 $$$1(this._scrollElement).on(Event.SCROLL, function (event) { 3828 return _this._process(event); 3829 }); 3830 this.refresh(); 3831 3832 this._process(); 3833 } // Getters 3834 3835 3836 var _proto = ScrollSpy.prototype; 3837 3838 // Public 3839 _proto.refresh = function refresh() { 3840 var _this2 = this; 3841 3842 var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; 3843 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 3844 var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; 3845 this._offsets = []; 3846 this._targets = []; 3847 this._scrollHeight = this._getScrollHeight(); 3848 var targets = $$$1.makeArray($$$1(this._selector)); 3849 targets.map(function (element) { 3850 var target; 3851 var targetSelector = Util.getSelectorFromElement(element); 3852 3853 if (targetSelector) { 3854 target = $$$1(targetSelector)[0]; 3855 } 3856 3857 if (target) { 3858 var targetBCR = target.getBoundingClientRect(); 3859 3860 if (targetBCR.width || targetBCR.height) { 3861 // TODO (fat): remove sketch reliance on jQuery position/offset 3862 return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; 3863 } 3864 } 3865 3866 return null; 3867 }).filter(function (item) { 3868 return item; 3869 }).sort(function (a, b) { 3870 return a[0] - b[0]; 3871 }
3871).forEach(function (item) { 3872 _this2._offsets.push(item[0]); 3873 3874 _this2._targets.push(item[1]); 3875 }); 3876 }; 3877 3878 _proto.dispose = function dispose() { 3879 $$$1.removeData(this._element, DATA_KEY); 3880 $$$1(this._scrollElement).off(EVENT_KEY); 3881 this._element = null; 3882 this._scrollElement = null; 3883 this._config = null; 3884 this._selector = null; 3885 this._offsets = null; 3886 this._targets = null; 3887 this._activeTarget = null; 3888 this._scrollHeight = null; 3889 }; // Private 3890 3891 3892 _proto._getConfig = function _getConfig(config) { 3893 config = _extends({}, Default, config); 3894 3895 if (typeof config.target !== 'string') { 3896 var id = $$$1(config.target).attr('id'); 3897 3898 if (!id) { 3899 id = Util.getUID(NAME); 3900 $$$1(config.target).attr('id', id); 3901 } 3902 3903 config.target = "#" + id; 3904 } 3905 3906 Util.typeCheckConfig(NAME, config, DefaultType); 3907 return config; 3908 }; 3909 3910 _proto._getScrollTop = function _getScrollTop() { 3911 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 3912 }; 3913 3914 _proto._getScrollHeight = function _getScrollHeight() { 3915 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 3916 }; 3917 3918 _proto._getOffsetHeight = function _getOffsetHeight() { 3919 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 3920 }; 3921 3922 _proto._process = function _process() { 3923 var scrollTop = this._getScrollTop() + this._config.offset; 3924 3925 var scrollHeight = this._getScrollHeight(); 3926 3927 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 3928 3929 if (this._scrollHeight !== scrollHeight) { 3930 this.refresh(); 3931 } 3932 3933 if (scrollTop >= maxScroll) { 3934 var target = this._targets[this._targets.length - 1]; 3935 3936 if (this._activeTarget !== target) { 3937 this._activate(target); 3938 } 3939 3940 return; 3941 } 3942 3943 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 3944 this._activeTarget = null; 3945 3946 this._clear(); 3947 3948 return; 3949 } 3950 3951 for (var i = this._offsets.length; i--;) { 3952 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 3953 3954 if (isActiveTarget) { 3955 this._activate(this._targets[i]); 3956 } 3957 } 3958 }; 3959 3960 _proto._activate = function _activate(target) { 3961 this._activeTarget = target; 3962 3963 this._clear(); 3964 3965 var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style 3966 3967 3968 queries = queries.map(function (selector) { 3969 return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); 3970 }); 3971 var $link = $$$1(queries.join(',')); 3972 3973 if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { 3974 $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); 3975 $link.addClass(ClassName.ACTIVE); 3976 } else { 3977 // Set triggered link as active 3978 $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active 3979 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 3980 3981 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item 3982 3983 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); 3984 } 3985 3986 $$$1(this._scrollElement).trigger(Event.ACTIVATE, { 3987 relatedTarget: target 3988 }); 3989 }; 3990 3991 _proto._clear = function _clear() { 3992 $$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); 3993 }; // Static 3994 3995 3996 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 3997 return this.each(function () { 3998 var data = $$$1(this).data(DATA_KEY); 3999 4000 var _config = typeof config === 'object' && config; 4001 4002 if (!data) { 4003 data = new ScrollSpy(this, _config); 4004 $$$1(this).data(DATA_KEY, data); 4005 } 4006 4007 if (typeof config === 'string') { 4008 if (typeof data[config] === 'undefined') {
4009 throw new TypeError("No method named \"" + config + "\""); 4010 } 4011 4012 data[config](); 4013 } 4014 }); 4015 }; 4016 4017 _createClass(ScrollSpy, null, [{ 4018 key: "VERSION", 4019 get: function get() { 4020 return VERSION; 4021 } 4022 }, { 4023 key: "Default", 4024 get: function get() { 4025 return Default; 4026 } 4027 }]); 4028 return ScrollSpy; 4029 }(); 4030 /** 4031 * ------------------------------------------------------------------------ 4032 * Data Api implementation 4033 * ------------------------------------------------------------------------ 4034 */ 4035 4036 4037 $$$1(window).on(Event.LOAD_DATA_API, function () { 4038 var scrollSpys = $$$1.makeArray($$$1(Selector.DATA_SPY)); 4039 4040 for (var i = scrollSpys.length; i--;) { 4041 var $spy = $$$1(scrollSpys[i]); 4042 4043 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 4044 } 4045 }); 4046 /** 4047 * ------------------------------------------------------------------------ 4048 * jQuery 4049 * ------------------------------------------------------------------------ 4050 */ 4051 4052 $$$1.fn[NAME] = ScrollSpy._jQueryInterface; 4053 $$$1.fn[NAME].Constructor = ScrollSpy; 4054 4055 $$$1.fn[NAME].noConflict = function () { 4056 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 4057 return ScrollSpy._jQueryInterface; 4058 }; 4059 4060 return ScrollSpy; 4061}($); 4062 4063/** 4064 * -------------------------------------------------------------------------- 4065 * Bootstrap (v4.0.0): tab.js 4066 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4067 * -------------------------------------------------------------------------- 4068 */ 4069 4070var Tab = function ($$$1) { 4071 /** 4072 * ------------------------------------------------------------------------ 4073 * Constants 4074 * ------------------------------------------------------------------------ 4075 */ 4076 var NAME = 'tab'; 4077 var VERSION = '4.0.0'; 4078 var DATA_KEY = 'bs.tab'; 4079 var EVENT_KEY = "." + DATA_KEY; 4080 var DATA_API_KEY = '.data-api'; 4081 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 4082 var TRANSITION_DURATION = 150; 4083 var Event = { 4084 HIDE: "hide" + EVENT_KEY, 4085 HIDDEN: "hidden" + EVENT_KEY, 4086 SHOW: "show" + EVENT_KEY, 4087 SHOWN: "shown" + EVENT_KEY, 4088 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 4089 }; 4090 var ClassName = { 4091 DROPDOWN_MENU: 'dropdown-menu', 4092 ACTIVE: 'active', 4093 DISABLED: 'disabled', 4094 FADE: 'fade', 4095 SHOW: 'show' 4096 }; 4097 var Selector = { 4098 DROPDOWN: '.dropdown', 4099 NAV_LIST_GROUP: '.nav, .list-group', 4100 ACTIVE: '.active', 4101 ACTIVE_UL: '> li > .active', 4102 DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', 4103 DROPDOWN_TOGGLE: '.dropdown-toggle', 4104 DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' 4105 /** 4106 * ------------------------------------------------------------------------ 4107 * Class Definition 4108 * ------------------------------------------------------------------------ 4109 */ 4110 4111 }; 4112 4113 var Tab = 4114 /*#__PURE__*/ 4115 function () { 4116 function Tab(element) { 4117 this._element = element; 4118 } // Getters 4119 4120 4121 var _proto = Tab.prototype; 4122 4123 // Public 4124 _proto.show = function show() { 4125 var _this = this; 4126 4127 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) { 4128 return; 4129 } 4130 4131 var target; 4132 var previous; 4133 var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0]; 4134 var selector = Util.getSelectorFromElement(this._element); 4135 4136 if (listElement) { 4137 var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE; 4138 previous = $$$1.makeArray($$$1(listElement).find(itemSelector)); 4139 previous = previous[previous.length - 1]; 4140 } 4141 4142 var hideEvent = $$$1.Event(Event.HIDE, { 4143 relatedTarget: this._element 4144 }); 4145 var showEvent = $$$1.Event(Event.SHOW, { 4146 relatedTarget: previous 4147 }); 4148 4149 if (previous) { 4150 $$$1(previous).trigger(hideEvent); 4151 } 4152 4153 $$$1(this._element).trigger(showEvent); 4154 4155 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 4156 return; 4157 } 4158 4159 if (selector) { 4160 target = $$$1(selector)[0]; 4161 } 4162 4163 this._activate(this._element, listElement); 4164 4165 var complete = function complete() { 4166 var hiddenEvent = $$$1.Event(Event.HIDDEN, { 4167 relatedTarget: _this._element 4168 }); 4169 var shownEvent = $$$1.Event(Event.SHOWN, { 4170 relatedTarget: previous 4171 }); 4172 $$$1(previous).trigger(hiddenEvent); 4173 $$$1(_this._element).trigger(shownEvent); 4174 }; 4175 4176 if (target) { 4177 this._activate(target, target.parentNode, complete); 4178 } else { 4179 complete(); 4180 } 4181 }; 4182 4183 _proto.dispose = function dispose() { 4184 $$$1.removeData(this._element, DATA_KEY); 4185 this._element = null; 4186 }; // Private 4187 4188 4189 _proto._activate = function _activate(element, container, callback) { 4190 var _this2 = this; 4191 4192 var activeElements; 4193 4194 if (container && container.nodeName === 'UL') { 4195 activeElements = $$$1(container).find(Selector.ACTIVE_UL); 4196 } else { 4197 activeElements = $$$1(container).children(Selector.ACTIVE); 4198 } 4199 4200 var active = activeElements[0]; 4201 var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); 4202 4203 var complete = function complete() { 4204 return _this2._transitionComplete(element, active, callback); 4205 }; 4206 4207 if (active && isTransitioning) { 4208 $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); 4209 } else { 4210 complete(); 4211 } 4212 }; 4213 4214 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 4215 if (active) { 4216 $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
4217 var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; 4218 4219 if (dropdownChild) { 4220 $$$1(dropdownChild).removeClass(ClassName.ACTIVE); 4221 } 4222 4223 if (active.getAttribute('role') === 'tab') { 4224 active.setAttribute('aria-selected', false); 4225 } 4226 } 4227 4228 $$$1(element).addClass(ClassName.ACTIVE); 4229 4230 if (element.getAttribute('role') === 'tab') { 4231 element.setAttribute('aria-selected', true); 4232 } 4233 4234 Util.reflow(element); 4235 $$$1(element).addClass(ClassName.SHOW); 4236 4237 if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { 4238 var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; 4239 4240 if (dropdownElement) { 4241 $$$1(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); 4242 } 4243 4244 element.setAttribute('aria-expanded', true); 4245 } 4246 4247 if (callback) { 4248 callback(); 4249 } 4250 }; // Static 4251 4252 4253 Tab._jQueryInterface = function _jQueryInterface(config) { 4254 return this.each(function () { 4255 var $this = $$$1(this); 4256 var data = $this.data(DATA_KEY); 4257 4258 if (!data) { 4259 data = new Tab(this); 4260 $this.data(DATA_KEY, data); 4261 } 4262 4263 if (typeof config === 'string') { 4264 if (typeof data[config] === 'undefined') { 4265 throw new TypeError("No method named \"" + config + "\""); 4266 } 4267 4268 data[config](); 4269 } 4270 }); 4271 }; 4272 4273 _createClass(Tab, null, [{ 4274 key: "VERSION", 4275 get: function get() { 4276 return VERSION; 4277 } 4278 }]); 4279 return Tab; 4280 }(); 4281 /** 4282 * ------------------------------------------------------------------------ 4283 * Data Api implementation 4284 * ------------------------------------------------------------------------ 4285 */ 4286 4287 4288 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 4289 event.preventDefault(); 4290 4291 Tab._jQueryInterface.call($$$1(this), 'show'); 4292 }); 4293 /** 4294 * ------------------------------------------------------------------------ 4295 * jQuery 4296 * ------------------------------------------------------------------------ 4297 */ 4298 4299 $$$1.fn[NAME] = Tab._jQueryInterface; 4300 $$$1.fn[NAME].Constructor = Tab; 4301 4302 $$$1.fn[NAME].noConflict = function () { 4303 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 4304 return Tab._jQueryInterface; 4305 }; 4306 4307 return Tab; 4308}($); 4309 4310/** 4311 * -------------------------------------------------------------------------- 4312 * Bootstrap (v4.0.0-alpha.6): index.js 4313 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4314 * -------------------------------------------------------------------------- 4315 */ 4316 4317(function ($$$1) { 4318 if (typeof $$$1 === 'undefined') { 4319 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 4320 } 4321 4322 var version = $$$1.fn.jquery.split(' ')[0].split('.'); 4323 var minMajor = 1; 4324 var ltMajor = 2; 4325 var minMinor = 9; 4326 var minPatch = 1; 4327 var maxMajor = 4; 4328 4329 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 4330 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 4331 } 4332})($); 4333 4334exports.Util = Util; 4335exports.Alert = Alert; 4336exports.Button = Button; 4337exports.Carousel = Carousel; 4338exports.Collapse = Collapse; 4339exports.Dropdown = Dropdown; 4340exports.Modal = Modal; 4341exports.Popover = Popover; 4342exports.Scrollspy = ScrollSpy; 4343exports.Tab = Tab; 4344exports.Tooltip = Tooltip; 4345 4346Object.defineProperty(exports, '__esModule', { value: true }); 4347 4348}))); 4349//# sourceMappingURL=bootstrap.js.map 4350/*! jQuery UI - v1.12.1 - 2019-07-03 4351* http://jqueryui.com 4352* Includes: keycode.js, widgets/datepicker.js 4353* Copyright jQuery Foundation and other contributors; Licensed MIT */ 4354 4355(function( factory ) { 4356 if ( typeof define === "function" && define.amd ) { 4357 4358 // AMD. Register as an anonymous module. 4359 define([ "jquery" ], factory ); 4360 } else { 4361 4362 // Browser globals 4363 factory( jQuery ); 4364 } 4365}(function( $ ) { 4366 4367$.ui = $.ui || {}; 4368 4369var version = $.ui.version = "1.12.1"; 4370 4371 4372/*!
4373 * jQuery UI Keycode 1.12.1 4374 * http://jqueryui.com 4375 * 4376 * Copyright jQuery Foundation and other contributors 4377 * Released under the MIT license. 4378 * http://jquery.org/license 4379 */ 4380 4381//>>label: Keycode 4382//>>group: Core 4383//>>description: Provide keycodes as keynames 4384//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ 4385 4386 4387var keycode = $.ui.keyCode = { 4388 BACKSPACE: 8, 4389 COMMA: 188, 4390 DELETE: 46, 4391 DOWN: 40, 4392 END: 35, 4393 ENTER: 13, 4394 ESCAPE: 27, 4395 HOME: 36, 4396 LEFT: 37, 4397 PAGE_DOWN: 34, 4398 PAGE_UP: 33, 4399 PERIOD: 190, 4400 RIGHT: 39, 4401 SPACE: 32, 4402 TAB: 9, 4403 UP: 38 4404}
vendor: 80,540 bytes, lines 4404-6514
4404; 4405 4406 4407// jscs:disable maximumLineLength 4408/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */ 4409/*! 4410 * jQuery UI Datepicker 1.12.1 4411 * http://jqueryui.com 4412 * 4413 * Copyright jQuery Foundation and other contributors 4414 * Released under the MIT license. 4415 * http://jquery.org/license 4416 */ 4417 4418//>>label: Datepicker 4419//>>group: Widgets 4420//>>description: Displays a calendar from an input or inline for selecting dates. 4421//>>docs: http://api.jqueryui.com/datepicker/ 4422//>>demos: http://jqueryui.com/datepicker/ 4423//>>css.structure: ../../themes/base/core.css 4424//>>css.structure: ../../themes/base/datepicker.css 4425//>>css.theme: ../../themes/base/theme.css 4426 4427 4428 4429$.extend( $.ui, { datepicker: { version: "1.12.1" } } ); 4430 4431var datepicker_instActive; 4432 4433function datepicker_getZindex( elem ) { 4434 var position, value; 4435 while ( elem.length && elem[ 0 ] !== document ) { 4436 4437 // Ignore z-index if position is set to a value where z-index is ignored by the browser 4438 // This makes behavior of this function consistent across browsers 4439 // WebKit always returns auto if the element is positioned 4440 position = elem.css( "position" ); 4441 if ( position === "absolute" || position === "relative" || position === "fixed" ) { 4442 4443 // IE returns 0 when zIndex is not specified 4444 // other browsers return a string 4445 // we ignore the case of nested elements with an explicit value of 0 4446 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> 4447 value = parseInt( elem.css( "zIndex" ), 10 ); 4448 if ( !isNaN( value ) && value !== 0 ) { 4449 return value; 4450 } 4451 } 4452 elem = elem.parent(); 4453 } 4454 4455 return 0; 4456} 4457/* Date picker manager. 4458 Use the singleton instance of this class, $.datepicker, to interact with the date picker. 4459 Settings for (groups of) date pickers are maintained in an instance object, 4460 allowing multiple different settings on the same page. */ 4461 4462function Datepicker() { 4463 this._curInst = null; // The current instance in use 4464 this._keyEvent = false; // If the last event was a key event 4465 this._disabledInputs = []; // List of date picker inputs that have been disabled 4466 this._datepickerShowing = false; // True if the popup picker is showing , false if not 4467 this._inDialog = false; // True if showing within a "dialog", false if not 4468 this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division 4469 this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class 4470 this._appendClass = "ui-datepicker-append"; // The name of the append marker class 4471 this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class 4472 this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class 4473 this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class 4474 this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class 4475 this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class 4476 this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class 4477 this.regional = []; // Available regional settings, indexed by language code 4478 this.regional[ "" ] = { // Default regional settings 4479 closeText: "Done", // Display text for close link 4480 prevText: "Prev", // Display text for previous month link 4481 nextText: "Next", // Display text for next month link 4482 currentText: "Today", // Display text for current month link 4483 monthNames: [ "January","February","March","April","May","June", 4484 "July","August","September","October","November","December" ], // Names of months for drop-down and formatting 4485 monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting 4486 dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting 4487 dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting 4488 dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday 4489 weekHeader: "Wk", // Column header for week of the year 4490 dateFormat: "mm/dd/yy", // See format options on parseDate 4491 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... 4492 isRTL: false, // True if right-to-left language, false if left-to-right 4493 showMonthAfterYear: false, // True if the year select precedes month, false for month then year 4494 yearSuffix: "" // Additional text to append to the year in the month headers 4495 }; 4496 this._defaults = { // Global defaults for all the date picker instances 4497 showOn: "focus", // "focus" for popup on focus, 4498 // "button" for trigger button, or "both" for either 4499 showAnim: "fadeIn", // Name of jQuery animation for popup 4500 showOptions: {}, // Options for enhanced animations 4501 defaultDate: null, // Used when field is blank: actual date, 4502 // +/-number for offset from today, null for today 4503 appendText: "", // Display text following the input box, e.g. showing the format 4504 buttonText: "...", // Text for trigger button 4505 buttonImage: "", // URL for trigger button image 4506 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button 4507 hideIfNoPrevNext: false, // True to hide next/previous month links 4508 // if not applicable, false to just disable them 4509 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links 4510 gotoCurrent: false, // True if today link goes back to current selection instead 4511 changeMonth: false, // True if month can be selected directly, false if only prev/next 4512 changeYear: false, // True if year can be selected directly, false if only prev/next 4513 yearRange: "c-10:c+10", // Range of years to display in drop-down, 4514 // either relative to today's year (-nn:+nn), relative to currently displayed year 4515 // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) 4516 showOtherMonths: false, // True to show dates in other months, false to leave blank 4517 selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable 4518 showWeek: false, // True to show week of the year, false to not show it 4519 calculateWeek: this.iso8601Week, // How to calculate the week of the year, 4520 // takes a Date and returns the number of the week for it 4521 shortYearCutoff: "+10", // Short year values < this are in the current century, 4522 // > this are in the previous century, 4523 // string value starting with "+" for current year + value 4524 minDate: null, // The earliest selectable date, or null for no limit 4525 maxDate: null, // The latest selectable date, or null for no limit 4526 duration: "fast", // Duration of display/closure 4527 beforeShowDay: null, // Function that takes a date and returns an array with 4528 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", 4529 // [2] = cell title (optional), e.g. $.datepicker.noWeekends 4530 beforeShow: null, // Function that takes an input field and 4531 // returns a set of custom settings for the date picker 4532 onSelect: null, // Define a callback function when a date is selected 4533 onChangeMonthYear: null, // Define a callback function when the month or year is changed 4534 onClose: null, // Define a callback function when the datepicker is closed 4535 numberOfMonths: 1, // Number of months to show at a time 4536 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) 4537 stepMonths: 1, // Number of months to step back/forward 4538 stepBigMonths: 12, // Number of months to step back/forward for the big links 4539 altField: "", // Selector for an alternate field to store selected dates into 4540 altFormat: "", // The date format to use for the alternate field 4541 constrainInput: true, // The input is constrained by the current date format 4542 showButtonPanel: false, // True to show button panel, false to not show it 4543 autoSize: false, // True to size the input for the date format, false to leave as is 4544 disabled: false // The initial disabled state 4545 }; 4546 $.extend( this._defaults, this.regional[ "" ] ); 4547 this.regional.en = $.extend( true, {}, this.regional[ "" ] ); 4548 this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); 4549 this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ); 4550} 4551 4552$.extend( Datepicker.prototype, { 4553 /* Class name added to elements to indicate already configured with a date picker. */ 4554 markerClassName: "hasDatepicker", 4555 4556 //Keep track of the maximum number of rows displayed (see #7043) 4557 maxRows: 4, 4558 4559 // TODO rename to "widget" when switching to widget factory 4560 _widgetDatepicker: function() { 4561 return this.dpDiv; 4562 }, 4563 4564 /* Override the default settings for all instances of the date picker. 4565 * @param settings object - the new settings to use as defaults (anonymous object) 4566 * @return the manager object 4567 */ 4568 setDefaults: function( settings ) { 4569 datepicker_extendRemove( this._defaults, settings || {} ); 4570 return this; 4571 }, 4572 4573 /* Attach the date picker to a jQuery selection. 4574 * @param target element - the target input field or division or span 4575 * @param settings object - the new settings to use for this date picker instance (anonymous) 4576 */ 4577 _attachDatepicker: function( target, settings ) { 4578 var nodeName, inline, inst; 4579 nodeName = target.nodeName.toLowerCase(); 4580 inline = ( nodeName === "div" || nodeName === "span" ); 4581 if ( !target.id ) { 4582 this.uuid += 1; 4583 target.id = "dp" + this.uuid; 4584 } 4585 inst = this._newInst( $( target ), inline ); 4586 inst.settings = $.extend( {}, settings || {} ); 4587 if ( nodeName === "input" ) { 4588 this._connectDatepicker( target, inst ); 4589 } else if ( inline ) { 4590 this._inlineDatepicker( target, inst ); 4591 } 4592 }, 4593 4594 /* Create a new instance object. */ 4595 _newInst: function( target, inline ) { 4596 var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars 4597 return { id: id, input: target, // associated target 4598 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection 4599 drawMonth: 0, drawYear: 0, // month being drawn 4600 inline: inline, // is datepicker inline or not 4601 dpDiv: ( !inline ? this.dpDiv : // presentation div 4602 datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) }; 4603 }, 4604 4605 /* Attach the date picker to an input field. */ 4606 _connectDatepicker: function( target, inst ) { 4607 var input = $( target ); 4608 inst.append = $( [] ); 4609 inst.trigger = $( [] ); 4610 if ( input.hasClass( this.markerClassName ) ) { 4611 return; 4612 } 4613 this._attachments( input, inst ); 4614 input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ). 4615 on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp ); 4616 this._autoSize( inst ); 4617 $.data( target, "datepicker", inst ); 4618 4619 //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) 4620 if ( inst.settings.disabled ) { 4621 this._disableDatepicker( target ); 4622 } 4623 }, 4624 4625 /* Make attachments based on settings. */ 4626 _attachments: function( input, inst ) { 4627 var showOn, buttonText, buttonImage, 4628 appendText = this._get( inst, "appendText" ), 4629 isRTL = this._get( inst, "isRTL" ); 4630 4631 if ( inst.append ) { 4632 inst.append.remove(); 4633 } 4634 if ( appendText ) { 4635 inst.append = $( "<span class='" + this._appendClass + "'>" + appendText + "</span>" ); 4636 input[ isRTL ? "before" : "after" ]( inst.append ); 4637 } 4638 4639 input.off( "focus", this._showDatepicker ); 4640 4641 if ( inst.trigger ) { 4642 inst.trigger.remove(); 4643 } 4644 4645 showOn = this._get( inst, "showOn" ); 4646 if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field 4647 input.on( "focus", this._showDatepicker ); 4648 } 4649 if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked 4650 buttonText = this._get( inst, "buttonText" ); 4651 buttonImage = this._get( inst, "buttonImage" ); 4652 inst.trigger = $( this._get( inst, "buttonImageOnly" ) ? 4653 $( "<img/>" ).addClass( this._triggerClass ). 4654 attr( { src: buttonImage, alt: buttonText, title: buttonText } ) : 4655 $( "<button type='button'></button>" ).addClass( this._triggerClass ). 4656 html( !buttonImage ? buttonText : $( "<img/>" ).attr( 4657 { src:buttonImage, alt:buttonText, title:buttonText } ) ) ); 4658 input[ isRTL ? "before" : "after" ]( inst.trigger ); 4659 inst.trigger.on( "click", function() { 4660 if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) { 4661 $.datepicker._hideDatepicker(); 4662 } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) { 4663 $.datepicker._hideDatepicker(); 4664 $.datepicker._showDatepicker( input[ 0 ] ); 4665 } else { 4666 $.datepicker._showDatepicker( input[ 0 ] ); 4667 } 4668 return false; 4669 } ); 4670 } 4671 }, 4672 4673 /* Apply the maximum length for the date format. */ 4674 _autoSize: function( inst ) { 4675 if ( this._get( inst, "autoSize" ) && !inst.inline ) { 4676 var findMax, max, maxI, i, 4677 date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits 4678 dateFormat = this._get( inst, "dateFormat" ); 4679 4680 if ( dateFormat.match( /[DM]/ ) ) { 4681 findMax = function( names ) { 4682 max = 0; 4683 maxI = 0; 4684 for ( i = 0; i < names.length; i++ ) { 4685 if ( names[ i ].length > max ) { 4686 max = names[ i ].length; 4687 maxI = i; 4688 } 4689 } 4690 return maxI; 4691 }; 4692 date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ? 4693 "monthNames" : "monthNamesShort" ) ) ) ); 4694 date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ? 4695 "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() ); 4696 } 4697 inst.input.attr( "size", this._formatDate( inst, date ).length ); 4698 } 4699 }, 4700 4701 /* Attach an inline date picker to a div. */ 4702 _inlineDatepicker: function( target, inst ) { 4703 var divSpan = $( target ); 4704 if ( divSpan.hasClass( this.markerClassName ) ) { 4705 return; 4706 } 4707 divSpan.addClass( this.markerClassName ).append( inst.dpDiv ); 4708 $.data( target, "datepicker", inst ); 4709 this._setDate( inst, this._getDefaultDate( inst ), true ); 4710 this._updateDatepicker( inst ); 4711 this._updateAlternate( inst ); 4712 4713 //If disabled option is true, disable the datepicker before showing it (see ticket #5665) 4714 if ( inst.settings.disabled ) { 4715 this._disableDatepicker( target ); 4716 } 4717 4718 // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements 4719 // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height 4720 inst.dpDiv.css( "display", "block" ); 4721 }, 4722 4723 /* Pop-up the date picker in a "dialog" box. 4724 * @param input element - ignored 4725 * @param date string or Date - the initial date to display 4726 * @param onSelect function - the function to call when a date is selected 4727 * @param settings object - update the dialog date picker instance's settings (anonymous object) 4728 * @param pos int[2] - coordinates for the dialog's position within the screen or 4729 * event - with x/y coordinates or 4730 * leave empty for default (screen centre) 4731 * @return the manager object 4732 */ 4733 _dialogDatepicker: function( input, date, onSelect, settings, pos ) { 4734 var id, browserWidth, browserHeight, scrollX, scrollY, 4735 inst = this._dialogInst; // internal instance 4736 4737 if ( !inst ) { 4738 this.uuid += 1; 4739 id = "dp" + this.uuid; 4740 this._dialogInput = $( "<input type='text' id='" + id + 4741 "' style='position: absolute; top: -100px; width: 0px;'/>" ); 4742 this._dialogInput.on( "keydown", this._doKeyDown ); 4743 $( "body" ).append( this._dialogInput ); 4744 inst = this._dialogInst = this._newInst( this._dialogInput, false ); 4745 inst.settings = {}; 4746 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 4747 } 4748 datepicker_extendRemove( inst.settings, settings || {} ); 4749 date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date ); 4750 this._dialogInput.val( date ); 4751 4752 this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null ); 4753 if ( !this._pos ) { 4754 browserWidth = document.documentElement.clientWidth; 4755 browserHeight = document.documentElement.clientHeight; 4756 scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; 4757 scrollY = document.documentElement.scrollTop || document.body.scrollTop; 4758 this._pos = // should use actual width/height below 4759 [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ]; 4760 } 4761 4762 // Move input on screen for focus, but hidden behind dialog 4763 this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" ); 4764 inst.settings.onSelect = onSelect; 4765 this._inDialog = true; 4766 this.dpDiv.addClass( this._dialogClass ); 4767 this._showDatepicker( this._dialogInput[ 0 ] ); 4768 if ( $.blockUI ) { 4769 $.blockUI( this.dpDiv ); 4770 } 4771 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 4772 return this; 4773 }, 4774 4775 /* Detach a datepicker from its control. 4776 * @param target element - the target input field or division or span 4777 */ 4778 _destroyDatepicker: function( target ) { 4779 var nodeName, 4780 $target = $( target ), 4781 inst = $.data( target, "datepicker" ); 4782 4783 if ( !$target.hasClass( this.markerClassName ) ) { 4784 return; 4785 } 4786 4787 nodeName = target.nodeName.toLowerCase(); 4788 $.removeData( target, "datepicker" ); 4789 if ( nodeName === "input" ) { 4790 inst.append.remove(); 4791 inst.trigger.remove(); 4792 $target.removeClass( this.markerClassName ). 4793 off( "focus", this._showDatepicker ). 4794 off( "keydown", this._doKeyDown ). 4795 off( "keypress", this._doKeyPress ). 4796 off( "keyup", this._doKeyUp ); 4797 } else if ( nodeName === "div" || nodeName === "span" ) { 4798 $target.removeClass( this.markerClassName ).empty(); 4799 } 4800 4801 if ( datepicker_instActive === inst ) { 4802 datepicker_instActive = null; 4803 } 4804 }, 4805 4806 /* Enable the date picker to a jQuery selection. 4807 * @param target element - the target input field or division or span 4808 */ 4809 _enableDatepicker: function( target ) { 4810 var nodeName, inline, 4811 $target = $( target ), 4812 inst = $.data( target, "datepicker" ); 4813 4814 if ( !$target.hasClass( this.markerClassName ) ) { 4815 return; 4816 } 4817 4818 nodeName = target.nodeName.toLowerCase(); 4819 if ( nodeName === "input" ) { 4820 target.disabled = false; 4821 inst.trigger.filter( "button" ). 4822 each( function() { this.disabled = false; } ).end(). 4823 filter( "img" ).css( { opacity: "1.0", cursor: "" } ); 4824 } else if ( nodeName === "div" || nodeName === "span" ) { 4825 inline = $target.children( "." + this._inlineClass ); 4826 inline.children().removeClass( "ui-state-disabled" ); 4827 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 4828 prop( "disabled", false ); 4829 } 4830 this._disabledInputs = $.map( this._disabledInputs, 4831 function( value ) { return ( value === target ? null : value ); } ); // delete entry 4832 }, 4833 4834 /* Disable the date picker to a jQuery selection. 4835 * @param target element - the target input field or division or span 4836 */ 4837 _disableDatepicker: function( target ) { 4838 var nodeName, inline, 4839 $target = $( target ), 4840 inst = $.data( target, "datepicker" ); 4841 4842 if ( !$target.hasClass( this.markerClassName ) ) { 4843 return; 4844 } 4845 4846 nodeName = target.nodeName.toLowerCase(); 4847 if ( nodeName === "input" ) { 4848 target.disabled = true; 4849 inst.trigger.filter( "button" ). 4850 each( function() { this.disabled = true; } ).end(). 4851 filter( "img" ).css( { opacity: "0.5", cursor: "default" } ); 4852 } else if ( nodeName === "div" || nodeName === "span" ) { 4853 inline = $target.children( "." + this._inlineClass ); 4854 inline.children().addClass( "ui-state-disabled" ); 4855 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 4856 prop( "disabled", true ); 4857 } 4858 this._disabledInputs = $.map( this._disabledInputs, 4859 function( value ) { return ( value === target ? null : value ); } ); // delete entry 4860 this._disabledInputs[ this._disabledInputs.length ] = target; 4861 }, 4862 4863 /* Is the first field in a jQuery collection disabled as a datepicker? 4864 * @param target element - the target input field or division or span 4865 * @return boolean - true if disabled, false if enabled 4866 */ 4867 _isDisabledDatepicker: function( target ) { 4868 if ( !target ) { 4869 return false; 4870 } 4871 for ( var i = 0; i < this._disabledInputs.length; i++ ) { 4872 if ( this._disabledInputs[ i ] === target ) { 4873 return true; 4874 } 4875 } 4876 return false; 4877 }, 4878 4879 /* Retrieve the instance data for the target control. 4880 * @param target element - the target input field or division or span 4881 * @return object - the associated instance data 4882 * @throws error if a jQuery problem getting data 4883 */ 4884 _getInst: function( target ) { 4885 try { 4886 return $.data( target, "datepicker" ); 4887 } 4888 catch ( err ) { 4889 throw "Missing instance data for this datepicker"; 4890 } 4891 }, 4892 4893 /* Update or retrieve the settings for a date picker attached to an input field or division. 4894 * @param target element - the target input field or division or span 4895 * @param name object - the new settings to update or 4896 * string - the name of the setting to change or retrieve, 4897 * when retrieving also "all" for all instance settings or 4898 * "defaults" for all global defaults 4899 * @param value any - the new value for the setting 4900 * (omit if above is an object or to retrieve a value) 4901 */ 4902 _optionDatepicker: function( target, name, value ) { 4903 var settings, date, minDate, maxDate, 4904 inst = this._getInst( target ); 4905 4906 if ( arguments.length === 2 && typeof name === "string" ) { 4907 return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) : 4908 ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) : 4909 this._get( inst, name ) ) : null ) ); 4910 } 4911 4912 settings = name || {}; 4913 if ( typeof name === "string" ) { 4914 settings = {}; 4915 settings[ name ] = value; 4916 } 4917 4918 if ( inst ) { 4919 if ( this._curInst === inst ) { 4920 this._hideDatepicker(); 4921 } 4922 4923 date = this._getDateDatepicker( target, true ); 4924 minDate = this._getMinMaxDate( inst, "min" ); 4925 maxDate = this._getMinMaxDate( inst, "max" ); 4926 datepicker_extendRemove( inst.settings, settings ); 4927 4928 // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided 4929 if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) { 4930 inst.settings.minDate = this._formatDate( inst, minDate ); 4931 } 4932 if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) { 4933 inst.settings.maxDate = this._formatDate( inst, maxDate ); 4934 } 4935 if ( "disabled" in settings ) { 4936 if ( settings.disabled ) { 4937 this._disableDatepicker( target ); 4938 } else { 4939 this._enableDatepicker( target ); 4940 } 4941 } 4942 this._attachments( $( target ), inst ); 4943 this._autoSize( inst ); 4944 this._setDate( inst, date ); 4945 this._updateAlternate( inst ); 4946 this._updateDatepicker( inst ); 4947 } 4948 }, 4949 4950 // Change method deprecated 4951 _changeDatepicker: function( target, name, value ) { 4952 this._optionDatepicker( target, name, value ); 4953 }, 4954 4955 /* Redraw the date picker attached to an input field or division. 4956 * @param target element - the target input field or division or span 4957 */ 4958 _refreshDatepicker: function( target ) { 4959 var inst = this._getInst( target ); 4960 if ( inst ) { 4961 this._updateDatepicker( inst ); 4962 } 4963 }, 4964 4965 /* Set the dates for a jQuery selection. 4966 * @param target element - the target input field or division or span 4967 * @param date Date - the new date 4968 */ 4969 _setDateDatepicker: function( target, date ) { 4970 var inst = this._getInst( target ); 4971 if ( inst ) { 4972 this._setDate( inst, date ); 4973 this._updateDatepicker( inst ); 4974 this._updateAlternate( inst ); 4975 } 4976 }, 4977 4978 /* Get the date(s) for the first entry in a jQuery selection. 4979 * @param target element - the target input field or division or span 4980 * @param noDefault boolean - true if no default date is to be used 4981 * @return Date - the current date 4982 */ 4983 _getDateDatepicker: function( target, noDefault ) { 4984 var inst = this._getInst( target ); 4985 if ( inst && !inst.inline ) { 4986 this._setDateFromField( inst, noDefault ); 4987 } 4988 return ( inst ? this._getDate( inst ) : null ); 4989 }, 4990 4991 /* Handle keystrokes. */ 4992 _doKeyDown: function( event ) { 4993 var onSelect, dateStr, sel, 4994 inst = $.datepicker._getInst( event.target ), 4995 handled = true, 4996 isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" ); 4997 4998 inst._keyEvent = true; 4999 if ( $.datepicker._datepickerShowing ) { 5000 switch ( event.keyCode ) { 5001 case 9: $.datepicker._hideDatepicker(); 5002 handled = false; 5003 break; // hide on tab out 5004 case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." + 5005 $.datepicker._currentClass + ")", inst.dpDiv ); 5006 if ( sel[ 0 ] ) { 5007 $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] ); 5008 } 5009 5010 onSelect = $.datepicker._get( inst, "onSelect" ); 5011 if ( onSelect ) { 5012 dateStr = $.datepicker._formatDate( inst ); 5013 5014 // Trigger custom callback 5015 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); 5016 } else { 5017 $.datepicker._hideDatepicker(); 5018 } 5019 5020 return false; // don't submit the form 5021 case 27: $.datepicker._hideDatepicker(); 5022 break; // hide on escape 5023 case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 5024 -$.datepicker._get( inst, "stepBigMonths" ) : 5025 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 5026 break; // previous month/year on page up/+ ctrl 5027 case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 5028 +$.datepicker._get( inst, "stepBigMonths" ) : 5029 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 5030 break; // next month/year on page down/+ ctrl 5031 case 35: if ( event.ctrlKey || event.metaKey ) { 5032 $.datepicker._clearDate( event.target ); 5033 } 5034 handled = event.ctrlKey || event.metaKey; 5035 break; // clear on ctrl or command +end 5036 case 36: if ( event.ctrlKey || event.metaKey ) { 5037 $.datepicker._gotoToday( event.target ); 5038 } 5039 handled = event.ctrlKey || event.metaKey; 5040 break; // current on ctrl or command +home 5041 case 37: if ( event.ctrlKey || event.metaKey ) { 5042 $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" ); 5043 } 5044 handled = event.ctrlKey || event.metaKey; 5045 5046 // -1 day on ctrl or command +left 5047 if ( event.originalEvent.altKey ) { 5048 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 5049 -$.datepicker._get( inst, "stepBigMonths" ) : 5050 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 5051 } 5052 5053 // next month/year on alt +left on Mac 5054 break; 5055 case 38: if ( event.ctrlKey || event.metaKey ) { 5056 $.datepicker._adjustDate( event.target, -7, "D" ); 5057 } 5058 handled = event.ctrlKey || event.metaKey; 5059 break; // -1 week on ctrl or command +up 5060 case 39: if ( event.ctrlKey || event.metaKey ) { 5061 $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" ); 5062 } 5063 handled = event.ctrlKey || event.metaKey; 5064 5065 // +1 day on ctrl or command +right 5066 if ( event.originalEvent.altKey ) { 5067 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 5068 +$.datepicker._get( inst, "stepBigMonths" ) : 5069 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 5070 } 5071 5072 // next month/year on alt +right 5073 break; 5074 case 40: if ( event.ctrlKey || event.metaKey ) { 5075 $.datepicker._adjustDate( event.target, +7, "D" ); 5076 } 5077 handled = event.ctrlKey || event.metaKey; 5078 break; // +1 week on ctrl or command +down 5079 default: handled = false; 5080 } 5081 } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home 5082 $.datepicker._showDatepicker( this ); 5083 } else { 5084 handled = false; 5085 } 5086 5087 if ( handled ) { 5088 event.preventDefault(); 5089 event.stopPropagation(); 5090 } 5091 }, 5092 5093 /* Filter entered characters - based on date format. */ 5094 _doKeyPress: function( event ) { 5095 var chars, chr, 5096 inst = $.datepicker._getInst( event.target ); 5097 5098 if ( $.datepicker._get( inst, "constrainInput" ) ) { 5099 chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) ); 5100 chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode ); 5101 return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 ); 5102 } 5103 }, 5104 5105 /* Synchronise manual entry and field/alternate field. */ 5106 _doKeyUp: function( event ) { 5107 var date, 5108 inst = $.datepicker._getInst( event.target ); 5109 5110 if ( inst.input.val() !== inst.lastVal ) { 5111 try { 5112 date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 5113 ( inst.input ? inst.input.val() : null ), 5114 $.datepicker._getFormatConfig( inst ) ); 5115 5116 if ( date ) { // only if valid 5117 $.datepicker._setDateFromField( inst ); 5118 $.datepicker._updateAlternate( inst ); 5119 $.datepicker._updateDatepicker( inst ); 5120 } 5121 } 5122 catch ( err ) { 5123 } 5124 } 5125 return true; 5126 }, 5127 5128 /* Pop-up the date picker for a given input field. 5129 * If false returned from beforeShow event handler do not show. 5130 * @param input element - the input field attached to the date picker or 5131 * event - if triggered by focus 5132 */ 5133 _showDatepicker: function( input ) { 5134 input = input.target || input; 5135 if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger 5136 input = $( "input", input.parentNode )[ 0 ]; 5137 } 5138 5139 if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here 5140 return; 5141 } 5142 5143 var inst, beforeShow, beforeShowSettings, isFixed, 5144 offset, showAnim, duration; 5145 5146 inst = $.datepicker._getInst( input ); 5147 if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) { 5148 $.datepicker._curInst.dpDiv.stop( true, true ); 5149 if ( inst && $.datepicker._datepickerShowing ) { 5150 $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] ); 5151 } 5152 } 5153 5154 beforeShow = $.datepicker._get( inst, "beforeShow" ); 5155 beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {}; 5156 if ( beforeShowSettings === false ) { 5157 return; 5158 } 5159 datepicker_extendRemove( inst.settings, beforeShowSettings ); 5160 5161 inst.lastVal = null; 5162 $.datepicker._lastInput = input; 5163 $.datepicker._setDateFromField( inst ); 5164 5165 if ( $.datepicker._inDialog ) { // hide cursor 5166 input.value = ""; 5167 } 5168 if ( !$.datepicker._pos ) { // position below input 5169 $.datepicker._pos = $.datepicker._findPos( input ); 5170 $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height 5171 } 5172 5173 isFixed = false; 5174 $( input ).parents().each( function() { 5175 isFixed |= $( this ).css( "position" ) === "fixed"; 5176 return !isFixed; 5177 } ); 5178 5179 offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] }; 5180 $.datepicker._pos = null; 5181 5182 //to avoid flashes on Firefox 5183 inst.dpDiv.empty(); 5184 5185 // determine sizing offscreen 5186 inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } ); 5187 $.datepicker._updateDatepicker( inst ); 5188 5189 // fix width for dynamic number of date pickers 5190 // and adjust position before showing 5191 offset = $.datepicker._checkOffset( inst, offset, isFixed ); 5192 inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ? 5193 "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none", 5194 left: offset.left + "px", top: offset.top + "px" } ); 5195 5196 if ( !inst.inline ) { 5197 showAnim = $.datepicker._get( inst, "showAnim" ); 5198 duration = $.datepicker._get( inst, "duration" ); 5199 inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); 5200 $.datepicker._datepickerShowing = true; 5201 5202 if ( $.effects && $.effects.effect[ showAnim ] ) { 5203 inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration ); 5204 } else { 5205 inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null ); 5206 } 5207 5208 if ( $.datepicker._shouldFocusInput( inst ) ) { 5209 inst.input.trigger( "focus" ); 5210 } 5211 5212 $.datepicker._curInst = inst; 5213 } 5214 }, 5215 5216 /* Generate the date picker content. */ 5217 _updateDatepicker: function( inst ) { 5218 this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) 5219 datepicker_instActive = inst; // for delegate hover events 5220 inst.dpDiv.empty().append( this._generateHTML( inst ) ); 5221 this._attachHandlers( inst ); 5222 5223 var origyearshtml, 5224 numMonths = this._getNumberOfMonths( inst ), 5225 cols = numMonths[ 1 ], 5226 width = 17, 5227 activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ); 5228 5229 if ( activeCell.length > 0 ) { 5230 datepicker_handleMouseover.apply( activeCell.get( 0 ) ); 5231 } 5232 5233 inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" ); 5234 if ( cols > 1 ) { 5235 inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" ); 5236 } 5237 inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) + 5238 "Class" ]( "ui-datepicker-multi" ); 5239 inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) + 5240 "Class" ]( "ui-datepicker-rtl" ); 5241 5242 if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { 5243 inst.input.trigger( "focus" ); 5244 } 5245 5246 // Deffered render of the years select (to avoid flashes on Firefox) 5247 if ( inst.yearshtml ) { 5248 origyearshtml = inst.yearshtml; 5249 setTimeout( function() { 5250 5251 //assure that inst.yearshtml didn't change. 5252 if ( origyearshtml === inst.yearshtml && inst.yearshtml ) { 5253 inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml ); 5254 } 5255 origyearshtml = inst.yearshtml = null; 5256 }, 0 ); 5257 } 5258 }, 5259 5260 // #6694 - don't focus the input if it's already focused 5261 // this breaks the change event in IE 5262 // Support: IE and jQuery <1.9 5263 _shouldFocusInput: function( inst ) { 5264 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); 5265 }, 5266 5267 /* Check positioning to remain on screen. */ 5268 _checkOffset: function( inst, offset, isFixed ) { 5269 var dpWidth = inst.dpDiv.outerWidth(), 5270 dpHeight = inst.dpDiv.outerHeight(), 5271 inputWidth = inst.input ? inst.input.outerWidth() : 0, 5272 inputHeight = inst.input ? inst.input.outerHeight() : 0, 5273 viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ), 5274 viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() ); 5275 5276 offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 ); 5277 offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0; 5278 offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0; 5279 5280 // Now check if datepicker is showing outside window viewport - move to a better place if so. 5281 offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ? 5282 Math.abs( offset.left + dpWidth - viewWidth ) : 0 ); 5283 offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ? 5284 Math.abs( dpHeight + inputHeight ) : 0 ); 5285 5286 return offset; 5287 }, 5288 5289 /* Find an object's position on the screen. */ 5290 _findPos: function( obj ) { 5291 var position, 5292 inst = this._getInst( obj ), 5293 isRTL = this._get( inst, "isRTL" ); 5294 5295 while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) { 5296 obj = obj[ isRTL ? "previousSibling" : "nextSibling" ]; 5297 } 5298 5299 position = $( obj ).offset(); 5300 return [ position.left, position.top ]; 5301 }, 5302 5303 /* Hide the date picker from view. 5304 * @param input element - the input field attached to the date picker 5305 */ 5306 _hideDatepicker: function( input ) { 5307 var showAnim, duration, postProcess, onClose, 5308 inst = this._curInst; 5309 5310 if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) { 5311 return; 5312 } 5313 5314 if ( this._datepickerShowing ) { 5315 showAnim = this._get( inst, "showAnim" ); 5316 duration = this._get( inst, "duration" ); 5317 postProcess = function() { 5318 $.datepicker._tidyDialog( inst ); 5319 }; 5320 5321 // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed 5322 if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { 5323 inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess ); 5324 } else { 5325 inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" : 5326 ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess ); 5327 } 5328 5329 if ( !showAnim ) { 5330 postProcess(); 5331 } 5332 this._datepickerShowing = false; 5333 5334 onClose = this._get( inst, "onClose" ); 5335 if ( onClose ) { 5336 onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] ); 5337 } 5338 5339 this._lastInput = null; 5340 if ( this._inDialog ) { 5341 this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } ); 5342 if ( $.blockUI ) { 5343 $.unblockUI(); 5344 $( "body" ).append( this.dpDiv ); 5345 } 5346 } 5347 this._inDialog = false; 5348 } 5349 }, 5350 5351 /* Tidy up after a dialog display. */ 5352 _tidyDialog: function( inst ) { 5353 inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" ); 5354 }, 5355 5356 /* Close date picker if clicked elsewhere. */ 5357 _checkExternalClick: function( event ) { 5358 if ( !$.datepicker._curInst ) { 5359 return; 5360 } 5361 5362 var $target = $( event.target ), 5363 inst = $.datepicker._getInst( $target[ 0 ] ); 5364 5365 if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId && 5366 $target.parents( "#" + $.datepicker._mainDivId ).length === 0 && 5367 !$target.hasClass( $.datepicker.markerClassName ) && 5368 !$target.closest( "." + $.datepicker._triggerClass ).length && 5369 $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) || 5370 ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) { 5371 $.datepicker._hideDatepicker(); 5372 } 5373 }, 5374 5375 /* Adjust one of the date sub-fields. */ 5376 _adjustDate: function( id, offset, period ) { 5377 var target = $( id ), 5378 inst = this._getInst( target[ 0 ] ); 5379 5380 if ( this._isDisabledDatepicker( target[ 0 ] ) ) { 5381 return; 5382 } 5383 this._adjustInstDate( inst, offset + 5384 ( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning 5385 period ); 5386 this._updateDatepicker( inst ); 5387 }, 5388 5389 /* Action for current link. */ 5390 _gotoToday: function( id ) { 5391 var date, 5392 target = $( id ), 5393 inst = this._getInst( target[ 0 ] ); 5394 5395 if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) { 5396 inst.selectedDay = inst.currentDay; 5397 inst.drawMonth = inst.selectedMonth = inst.currentMonth; 5398 inst.drawYear = inst.selectedYear = inst.currentYear; 5399 } else { 5400 date = new Date(); 5401 inst.selectedDay = date.getDate(); 5402 inst.drawMonth = inst.selectedMonth = date.getMonth(); 5403 inst.drawYear = inst.selectedYear = date.getFullYear(); 5404 } 5405 this._notifyChange( inst ); 5406 this._adjustDate( target ); 5407 }, 5408 5409 /* Action for selecting a new month/year. */ 5410 _selectMonthYear: function( id, select, period ) { 5411 var target = $( id ), 5412 inst = this._getInst( target[ 0 ] ); 5413 5414 inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] = 5415 inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] = 5416 parseInt( select.options[ select.selectedIndex ].value, 10 ); 5417 5418 this._notifyChange( inst ); 5419 this._adjustDate( target ); 5420 }, 5421 5422 /* Action for selecting a day. */ 5423 _selectDay: function( id, month, year, td ) { 5424 var inst, 5425 target = $( id ); 5426 5427 if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) { 5428 return; 5429 } 5430 5431 inst = this._getInst( target[ 0 ] ); 5432 inst.selectedDay = inst.currentDay = $( "a", td ).html(); 5433 inst.selectedMonth = inst.currentMonth = month; 5434 inst.selectedYear = inst.currentYear = year; 5435 this._selectDate( id, this._formatDate( inst, 5436 inst.currentDay, inst.currentMonth, inst.currentYear ) ); 5437 }, 5438 5439 /* Erase the input field and hide the date picker. */ 5440 _clearDate: function( id ) { 5441 var target = $( id ); 5442 this._selectDate( target, "" ); 5443 }, 5444 5445 /* Update the input field with the selected date. */ 5446 _selectDate: function( id, dateStr ) { 5447 var onSelect, 5448 target = $( id ), 5449 inst = this._getInst( target[ 0 ] ); 5450 5451 dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) ); 5452 if ( inst.input ) { 5453 inst.input.val( dateStr ); 5454 } 5455 this._updateAlternate( inst ); 5456 5457 onSelect = this._get( inst, "onSelect" ); 5458 if ( onSelect ) { 5459 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback 5460 } else if ( inst.input ) { 5461 inst.input.trigger( "change" ); // fire the change event 5462 } 5463 5464 if ( inst.inline ) { 5465 this._updateDatepicker( inst ); 5466 } else { 5467 this._hideDatepicker(); 5468 this._lastInput = inst.input[ 0 ]; 5469 if ( typeof( inst.input[ 0 ] ) !== "object" ) { 5470 inst.input.trigger( "focus" ); // restore focus 5471 } 5472 this._lastInput = null; 5473 } 5474 }, 5475 5476 /* Update any alternate field to synchronise with the main field. */ 5477 _updateAlternate: function( inst ) { 5478 var altFormat, date, dateStr, 5479 altField = this._get( inst, "altField" ); 5480 5481 if ( altField ) { // update alternate field too 5482 altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" ); 5483 date = this._getDate( inst ); 5484 dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) ); 5485 $( altField ).val( dateStr ); 5486 } 5487 }, 5488 5489 /* Set as beforeShowDay function to prevent selection of weekends. 5490 * @param date Date - the date to customise 5491 * @return [boolean, string] - is this date selectable?, what is its CSS class? 5492 */ 5493 noWeekends: function( date ) { 5494 var day = date.getDay(); 5495 return [ ( day > 0 && day < 6 ), "" ]; 5496 }, 5497 5498 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. 5499 * @param date Date - the date to get the week for 5500 * @return number - the number of the week within the year that contains this date 5501 */ 5502 iso8601Week: function( date ) { 5503 var time, 5504 checkDate = new Date( date.getTime() ); 5505 5506 // Find Thursday of this week starting on Monday 5507 checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) ); 5508 5509 time = checkDate.getTime(); 5510 checkDate.setMonth( 0 ); // Compare with Jan 1 5511 checkDate.setDate( 1 ); 5512 return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1; 5513 }, 5514 5515 /* Parse a string value into a date object. 5516 * See formatDate below for the possible formats. 5517 * 5518 * @param format string - the expected format of the date 5519 * @param value string - the date in the above format 5520 * @param settings Object - attributes include: 5521 * shortYearCutoff number - the cutoff year for determining the century (optional) 5522 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 5523 * dayNames string[7] - names of the days from Sunday (optional) 5524 * monthNamesShort string[12] - abbreviated names of the months (optional) 5525 * monthNames string[12] - names of the months (optional) 5526 * @return Date - the extracted date value or null if value is blank 5527 */ 5528 parseDate: function( format, value, settings ) { 5529 if ( format == null || value == null ) { 5530 throw "Invalid arguments"; 5531 } 5532 5533 value = ( typeof value === "object" ? value.toString() : value + "" ); 5534 if ( value === "" ) { 5535 return null; 5536 } 5537 5538 var iFormat, dim, extra, 5539 iValue = 0, 5540 shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff, 5541 shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : 5542 new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ), 5543 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 5544 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 5545 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 5546 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 5547 year = -1, 5548 month = -1, 5549 day = -1, 5550 doy = -1, 5551 literal = false, 5552 date, 5553 5554 // Check whether a format character is doubled 5555 lookAhead = function( match ) { 5556 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 5557 if ( matches ) { 5558 iFormat++; 5559 } 5560 return matches; 5561 }, 5562 5563 // Extract a number from the string value 5564 getNumber = function( match ) { 5565 var isDoubled = lookAhead( match ), 5566 size = ( match === "@" ? 14 : ( match === "!" ? 20 : 5567 ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ), 5568 minSize = ( match === "y" ? size : 1 ), 5569 digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ), 5570 num = value.substring( iValue ).match( digits ); 5571 if ( !num ) { 5572 throw "Missing number at position " + iValue; 5573 } 5574 iValue += num[ 0 ].length; 5575 return parseInt( num[ 0 ], 10 ); 5576 }, 5577 5578 // Extract a name from the string value and convert to an index 5579 getName = function( match, shortNames, longNames ) { 5580 var index = -1, 5581 names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) { 5582 return [ [ k, v ] ]; 5583 } ).sort( function( a, b ) { 5584 return -( a[ 1 ].length - b[ 1 ].length ); 5585 } ); 5586 5587 $.each( names, function( i, pair ) { 5588 var name = pair[ 1 ]; 5589 if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) { 5590 index = pair[ 0 ]; 5591 iValue += name.length; 5592 return false; 5593 } 5594 } ); 5595 if ( index !== -1 ) { 5596 return index + 1; 5597 } else { 5598 throw "Unknown name at position " + iValue; 5599 } 5600 }, 5601 5602 // Confirm that a literal character matches the string value 5603 checkLiteral = function() { 5604 if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) { 5605 throw "Unexpected literal at position " + iValue; 5606 } 5607 iValue++; 5608 }; 5609 5610 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 5611 if ( literal ) { 5612 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 5613 literal = false; 5614 } else { 5615 checkLiteral(); 5616 } 5617 } else { 5618 switch ( format.charAt( iFormat ) ) { 5619 case "d": 5620 day = getNumber( "d" ); 5621 break; 5622 case "D": 5623 getName( "D", dayNamesShort, dayNames ); 5624 break; 5625 case "o": 5626 doy = getNumber( "o" ); 5627 break; 5628 case "m": 5629 month = getNumber( "m" ); 5630 break; 5631 case "M": 5632 month = getName( "M", monthNamesShort, monthNames ); 5633 break; 5634 case "y": 5635 year = getNumber( "y" ); 5636 break; 5637 case "@": 5638 date = new Date( getNumber( "@" ) ); 5639 year = date.getFullYear(); 5640 month = date.getMonth() + 1; 5641 day = date.getDate(); 5642 break; 5643 case "!": 5644 date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 ); 5645 year = date.getFullYear(); 5646 month = date.getMonth() + 1; 5647 day = date.getDate(); 5648 break; 5649 case "'": 5650 if ( lookAhead( "'" ) ) { 5651 checkLiteral(); 5652 } else { 5653 literal = true; 5654 } 5655 break; 5656 default: 5657 checkLiteral(); 5658 } 5659 } 5660 } 5661 5662 if ( iValue < value.length ) { 5663 extra = value.substr( iValue ); 5664 if ( !/^\s+/.test( extra ) ) { 5665 throw "Extra/unparsed characters found in date: " + extra; 5666 } 5667 } 5668 5669 if ( year === -1 ) { 5670 year = new Date().getFullYear(); 5671 } else if ( year < 100 ) { 5672 year += new Date().getFullYear() - new Date().getFullYear() % 100 + 5673 ( year <= shortYearCutoff ? 0 : -100 ); 5674 } 5675 5676 if ( doy > -1 ) { 5677 month = 1; 5678 day = doy; 5679 do { 5680 dim = this._getDaysInMonth( year, month - 1 ); 5681 if ( day <= dim ) { 5682 break; 5683 } 5684 month++; 5685 day -= dim; 5686 } while ( true ); 5687 } 5688 5689 date = this._daylightSavingAdjust( new Date( year, month - 1, day ) ); 5690 if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) { 5691 throw "Invalid date"; // E.g. 31/02/00 5692 } 5693 return date; 5694 }, 5695 5696 /* Standard date formats. */ 5697 ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) 5698 COOKIE: "D, dd M yy", 5699 ISO_8601: "yy-mm-dd", 5700 RFC_822: "D, d M y", 5701 RFC_850: "DD, dd-M-y", 5702 RFC_1036: "D, d M y", 5703 RFC_1123: "D, d M yy", 5704 RFC_2822: "D, d M yy", 5705 RSS: "D, d M y", // RFC 822 5706 TICKS: "!", 5707 TIMESTAMP: "@", 5708 W3C: "yy-mm-dd", // ISO 8601 5709 5710 _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) + 5711 Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ), 5712 5713 /* Format a date object into a string value. 5714 * The format can be combinations of the following: 5715 * d - day of month (no leading zero) 5716 * dd - day of month (two digit) 5717 * o - day of year (no leading zeros) 5718 * oo - day of year (three digit) 5719 * D - day name short 5720 * DD - day name long 5721 * m - month of year (no leading zero) 5722 * mm - month of year (two digit) 5723 * M - month name short 5724 * MM - month name long 5725 * y - year (two digit) 5726 * yy - year (four digit) 5727 * @ - Unix timestamp (ms since 01/01/1970) 5728 * ! - Windows ticks (100ns since 01/01/0001) 5729 * "..." - literal text 5730 * '' - single quote 5731 * 5732 * @param format string - the desired format of the date 5733 * @param date Date - the date value to format 5734 * @param settings Object - attributes include: 5735 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 5736 * dayNames string[7] - names of the days from Sunday (optional) 5737 * monthNamesShort string[12] - abbreviated names of the months (optional) 5738 * monthNames string[12] - names of the months (optional) 5739 * @return string - the date in the above format 5740 */ 5741 formatDate: function( format, date, settings ) { 5742 if ( !date ) { 5743 return ""; 5744 } 5745 5746 var iFormat, 5747 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 5748 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 5749 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 5750 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 5751 5752 // Check whether a format character is doubled 5753 lookAhead = function( match ) { 5754 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 5755 if ( matches ) { 5756 iFormat++; 5757 } 5758 return matches; 5759 }, 5760 5761 // Format a number, with leading zero if necessary 5762 formatNumber = function( match, value, len ) { 5763 var num = "" + value; 5764 if ( lookAhead( match ) ) { 5765 while ( num.length < len ) { 5766 num = "0" + num; 5767 } 5768 } 5769 return num; 5770 }, 5771 5772 // Format a name, short or long as requested 5773 formatName = function( match, value, shortNames, longNames ) { 5774 return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] ); 5775 }, 5776 output = "", 5777 literal = false; 5778 5779 if ( date ) { 5780 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 5781 if ( literal ) { 5782 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 5783 literal = false; 5784 } else { 5785 output += format.charAt( iFormat ); 5786 } 5787 } else { 5788 switch ( format.charAt( iFormat ) ) { 5789 case "d": 5790 output += formatNumber( "d", date.getDate(), 2 ); 5791 break; 5792 case "D": 5793 output += formatName( "D", date.getDay(), dayNamesShort, dayNames ); 5794 break; 5795 case "o": 5796 output += formatNumber( "o", 5797 Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 ); 5798 break; 5799 case "m": 5800 output += formatNumber( "m", date.getMonth() + 1, 2 ); 5801 break; 5802 case "M": 5803 output += formatName( "M", date.getMonth(), monthNamesShort, monthNames ); 5804 break; 5805 case "y": 5806 output += ( lookAhead( "y" ) ? date.getFullYear() : 5807 ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 ); 5808 break; 5809 case "@": 5810 output += date.getTime(); 5811 break; 5812 case "!": 5813 output += date.getTime() * 10000 + this._ticksTo1970; 5814 break; 5815 case "'": 5816 if ( lookAhead( "'" ) ) { 5817 output += "'"; 5818 } else { 5819 literal = true; 5820 } 5821 break; 5822 default: 5823 output += format.charAt( iFormat ); 5824 } 5825 } 5826 } 5827 } 5828 return output; 5829 }, 5830 5831 /* Extract all possible characters from the date format. */ 5832 _possibleChars: function( format ) { 5833 var iFormat, 5834 chars = "", 5835 literal = false, 5836 5837 // Check whether a format character is doubled 5838 lookAhead = function( match ) { 5839 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 5840 if ( matches ) { 5841 iFormat++; 5842 } 5843 return matches; 5844 }; 5845 5846 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 5847 if ( literal ) { 5848 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 5849 literal = false; 5850 } else { 5851 chars += format.charAt( iFormat ); 5852 } 5853 } else { 5854 switch ( format.charAt( iFormat ) ) { 5855 case "d": case "m": case "y": case "@": 5856 chars += "0123456789"; 5857 break; 5858 case "D": case "M": 5859 return null; // Accept anything 5860 case "'": 5861 if ( lookAhead( "'" ) ) { 5862 chars += "'"; 5863 } else { 5864 literal = true; 5865 } 5866 break; 5867 default: 5868 chars += format.charAt( iFormat ); 5869 } 5870 } 5871 } 5872 return chars; 5873 }, 5874 5875 /* Get a setting value, defaulting if necessary. */ 5876 _get: function( inst, name ) { 5877 return inst.settings[ name ] !== undefined ? 5878 inst.settings[ name ] : this._defaults[ name ]; 5879 }, 5880 5881 /* Parse existing date and initialise date picker. */ 5882 _setDateFromField: function( inst, noDefault ) { 5883 if ( inst.input.val() === inst.lastVal ) { 5884 return; 5885 } 5886 5887 var dateFormat = this._get( inst, "dateFormat" ), 5888 dates = inst.lastVal = inst.input ? inst.input.val() : null, 5889 defaultDate = this._getDefaultDate( inst ), 5890 date = defaultDate, 5891 settings = this._getFormatConfig( inst ); 5892 5893 try { 5894 date = this.parseDate( dateFormat, dates, settings ) || defaultDate; 5895 } catch ( event ) { 5896 dates = ( noDefault ? "" : dates ); 5897 } 5898 inst.selectedDay = date.getDate(); 5899 inst.drawMonth = inst.selectedMonth = date.getMonth(); 5900 inst.drawYear = inst.selectedYear = date.getFullYear(); 5901 inst.currentDay = ( dates ? date.getDate() : 0 ); 5902 inst.currentMonth = ( dates ? date.getMonth() : 0 ); 5903 inst.currentYear = ( dates ? date.getFullYear() : 0 ); 5904 this._adjustInstDate( inst ); 5905 }, 5906 5907 /* Retrieve the default date shown on opening. */ 5908 _getDefaultDate: function( inst ) { 5909 return this._restrictMinMax( inst, 5910 this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) ); 5911 }, 5912 5913 /* A date may be specified as an exact value or a relative one. */ 5914 _determineDate: function( inst, date, defaultDate ) { 5915 var offsetNumeric = function( offset ) { 5916 var date = new Date(); 5917 date.setDate( date.getDate() + offset ); 5918 return date; 5919 }, 5920 offsetString = function( offset ) { 5921 try { 5922 return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 5923 offset, $.datepicker._getFormatConfig( inst ) ); 5924 } 5925 catch ( e ) { 5926 5927 // Ignore 5928 } 5929 5930 var date = ( offset.toLowerCase().match( /^c/ ) ? 5931 $.datepicker._getDate( inst ) : null ) || new Date(), 5932 year = date.getFullYear(), 5933 month = date.getMonth(), 5934 day = date.getDate(), 5935 pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, 5936 matches = pattern.exec( offset ); 5937 5938 while ( matches ) { 5939 switch ( matches[ 2 ] || "d" ) { 5940 case "d" : case "D" : 5941 day += parseInt( matches[ 1 ], 10 ); break; 5942 case "w" : case "W" : 5943 day += parseInt( matches[ 1 ], 10 ) * 7; break; 5944 case "m" : case "M" : 5945 month += parseInt( matches[ 1 ], 10 ); 5946 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 5947 break; 5948 case "y": case "Y" : 5949 year += parseInt( matches[ 1 ], 10 ); 5950 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 5951 break; 5952 } 5953 matches = pattern.exec( offset ); 5954 } 5955 return new Date( year, month, day ); 5956 }, 5957 newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) : 5958 ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) ); 5959 5960 newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate ); 5961 if ( newDate ) { 5962 newDate.setHours( 0 ); 5963 newDate.setMinutes( 0 ); 5964 newDate.setSeconds( 0 ); 5965 newDate.setMilliseconds( 0 ); 5966 } 5967 return this._daylightSavingAdjust( newDate ); 5968 }, 5969 5970 /* Handle switch to/from daylight saving. 5971 * Hours may be non-zero on daylight saving cut-over: 5972 * > 12 when midnight changeover, but then cannot generate 5973 * midnight datetime, so jump to 1AM, otherwise reset. 5974 * @param date (Date) the date to check 5975 * @return (Date) the corrected date 5976 */ 5977 _daylightSavingAdjust: function( date ) { 5978 if ( !date ) { 5979 return null; 5980 } 5981 date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 ); 5982 return date; 5983 }, 5984 5985 /* Set the date(s) directly. */ 5986 _setDate: function( inst, date, noChange ) { 5987 var clear = !date, 5988 origMonth = inst.selectedMonth, 5989 origYear = inst.selectedYear, 5990 newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) ); 5991 5992 inst.selectedDay = inst.currentDay = newDate.getDate(); 5993 inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); 5994 inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); 5995 if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) { 5996 this._notifyChange( inst ); 5997 } 5998 this._adjustInstDate( inst ); 5999 if ( inst.input ) { 6000 inst.input.val( clear ? "" : this._formatDate( inst ) ); 6001 } 6002 }, 6003 6004 /* Retrieve the date(s) directly. */ 6005 _getDate: function( inst ) { 6006 var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null : 6007 this._daylightSavingAdjust( new Date( 6008 inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 6009 return startDate; 6010 }, 6011 6012 /* Attach the onxxx handlers. These are declared statically so 6013 * they work with static code transformers like Caja. 6014 */ 6015 _attachHandlers: function( inst ) { 6016 var stepMonths = this._get( inst, "stepMonths" ), 6017 id = "#" + inst.id.replace( /\\\\/g, "\\" ); 6018 inst.dpDiv.find( "[data-handler]" ).map( function() { 6019 var handler = { 6020 prev: function() { 6021 $.datepicker._adjustDate( id, -stepMonths, "M" ); 6022 }, 6023 next: function() { 6024 $.datepicker._adjustDate( id, +stepMonths, "M" ); 6025 }, 6026 hide: function() { 6027 $.datepicker._hideDatepicker(); 6028 }, 6029 today: function() { 6030 $.datepicker._gotoToday( id ); 6031 }, 6032 selectDay: function() { 6033 $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this ); 6034 return false; 6035 }, 6036 selectMonth: function() { 6037 $.datepicker._selectMonthYear( id, this, "M" ); 6038 return false; 6039 }, 6040 selectYear: function() { 6041 $.datepicker._selectMonthYear( id, this, "Y" ); 6042 return false; 6043 } 6044 }; 6045 $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] ); 6046 } ); 6047 }, 6048 6049 /* Generate the HTML for the current state of the date picker. */ 6050 _generateHTML: function( inst ) { 6051 var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, 6052 controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, 6053 monthNames, monthNamesShort, beforeShowDay, showOtherMonths, 6054 selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, 6055 cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, 6056 printDate, dRow, tbody, daySettings, otherMonth, unselectable, 6057 tempDate = new Date(), 6058 today = this._daylightSavingAdjust( 6059 new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time 6060 isRTL = this._get( inst, "isRTL" ), 6061 showButtonPanel = this._get( inst, "showButtonPanel" ), 6062 hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ), 6063 navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ), 6064 numMonths = this._getNumberOfMonths( inst ), 6065 showCurrentAtPos = this._get( inst, "showCurrentAtPos" ), 6066 stepMonths = this._get( inst, "stepMonths" ), 6067 isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ), 6068 currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) : 6069 new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ), 6070 minDate = this._getMinMaxDate( inst, "min" ), 6071 maxDate = this._getMinMaxDate( inst, "max" ), 6072 drawMonth = inst.drawMonth - showCurrentAtPos, 6073 drawYear = inst.drawYear; 6074 6075 if ( drawMonth < 0 ) { 6076 drawMonth += 12; 6077 drawYear--; 6078 } 6079 if ( maxDate ) { 6080 maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(), 6081 maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) ); 6082 maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw ); 6083 while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) { 6084 drawMonth--; 6085 if ( drawMonth < 0 ) { 6086 drawMonth = 11; 6087 drawYear--; 6088 } 6089 } 6090 } 6091 inst.drawMonth = drawMonth; 6092 inst.drawYear = drawYear; 6093 6094 prevText = this._get( inst, "prevText" ); 6095 prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText, 6096 this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ), 6097 this._getFormatConfig( inst ) ) ); 6098 6099 prev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ? 6100 "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" + 6101 " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" : 6102 ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) ); 6103 6104 nextText = this._get( inst, "nextText" ); 6105 nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText, 6106 this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ), 6107 this._getFormatConfig( inst ) ) ); 6108 6109 next = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ? 6110 "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" + 6111 " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" : 6112 ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) ); 6113 6114 currentText = this._get( inst, "currentText" ); 6115 gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today ); 6116 currentText = ( !navigationAsDateFormat ? currentText : 6117 this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) ); 6118 6119 controls = ( !inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + 6120 this._get( inst, "closeText" ) + "</button>" : "" ); 6121 6122 buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) + 6123 ( this._isInRange( inst, gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" + 6124 ">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : ""; 6125 6126 firstDay = parseInt( this._get( inst, "firstDay" ), 10 ); 6127 firstDay = ( isNaN( firstDay ) ? 0 : firstDay ); 6128 6129 showWeek = this._get( inst, "showWeek" ); 6130 dayNames = this._get( inst, "dayNames" ); 6131 dayNamesMin = this._get( inst, "dayNamesMin" ); 6132 monthNames = this._get( inst, "monthNames" ); 6133 monthNamesShort = this._get( inst, "monthNamesShort" ); 6134 beforeShowDay = this._get( inst, "beforeShowDay" ); 6135 showOtherMonths = this._get( inst, "showOtherMonths" ); 6136 selectOtherMonths = this._get( inst, "selectOtherMonths" ); 6137 defaultDate = this._getDefaultDate( inst ); 6138 html = ""; 6139 6140 for ( row = 0; row < numMonths[ 0 ]; row++ ) { 6141 group = ""; 6142 this.maxRows = 4; 6143 for ( col = 0; col < numMonths[ 1 ]; col++ ) { 6144 selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) ); 6145 cornerClass = " ui-corner-all"; 6146 calender = ""; 6147 if ( isMultiMonth ) { 6148 calender += "<div class='ui-datepicker-group"; 6149 if ( numMonths[ 1 ] > 1 ) { 6150 switch ( col ) { 6151 case 0: calender += " ui-datepicker-group-first"; 6152 cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break; 6153 case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last"; 6154 cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break; 6155 default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; 6156 } 6157 } 6158 calender += "'>"; 6159 } 6160 calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + 6161 ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) + 6162 ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) + 6163 this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate, 6164 row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers 6165 "</div><table class='ui-datepicker-calendar'><thead>" + 6166 "<tr>"; 6167 thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" ); 6168 for ( dow = 0; dow < 7; dow++ ) { // days of the week 6169 day = ( dow + firstDay ) % 7; 6170 thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" + 6171 "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>"; 6172 } 6173 calender += thead + "</tr></thead><tbody>"; 6174 daysInMonth = this._getDaysInMonth( drawYear, drawMonth ); 6175 if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) { 6176 inst.selectedDay = Math.min( inst.selectedDay, daysInMonth ); 6177 } 6178 leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7; 6179 curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate 6180 numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043) 6181 this.maxRows = numRows; 6182 printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) ); 6183 for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows 6184 calender += "<tr>"; 6185 tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" + 6186 this._get( inst, "calculateWeek" )( printDate ) + "</td>" ); 6187 for ( dow = 0; dow < 7; dow++ ) { // create date picker days 6188 daySettings = ( beforeShowDay ? 6189 beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] ); 6190 otherMonth = ( printDate.getMonth() !== drawMonth ); 6191 unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] || 6192 ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate ); 6193 tbody += "<td class='" + 6194 ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends 6195 ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months 6196 ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key 6197 ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ? 6198 6199 // or defaultDate is current printedDate and defaultDate is selectedDate 6200 " " + this._dayOverClass : "" ) + // highlight selected day 6201 ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days 6202 ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates 6203 ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day 6204 ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different) 6205 ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "'" ) + "'" : "" ) + // cell title 6206 ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions 6207 ( otherMonth && !showOtherMonths ? " " : // display for other months 6208 ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + 6209 ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) + 6210 ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day 6211 ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months 6212 "' href='#'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date 6213 printDate.setDate( printDate.getDate() + 1 ); 6214 printDate = this._daylightSavingAdjust( printDate ); 6215 } 6216 calender += tbody + "</tr>"; 6217 } 6218 drawMonth++; 6219 if ( drawMonth > 11 ) { 6220 drawMonth = 0; 6221 drawYear++; 6222 } 6223 calender += "</tbody></table>" + ( isMultiMonth ? "</div>" + 6224 ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" ); 6225 group += calender; 6226 } 6227 html += group; 6228 } 6229 html += buttonPanel; 6230 inst._keyEvent = false; 6231 return html; 6232 }, 6233 6234 /* Generate the month and year header. */ 6235 _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate, 6236 secondary, monthNames, monthNamesShort ) { 6237 6238 var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, 6239 changeMonth = this._get( inst, "changeMonth" ), 6240 changeYear = this._get( inst, "changeYear" ), 6241 showMonthAfterYear = this._get( inst, "showMonthAfterYear" ), 6242 html = "<div class='ui-datepicker-title'>", 6243 monthHtml = ""; 6244 6245 // Month selection 6246 if ( secondary || !changeMonth ) { 6247 monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>"; 6248 } else { 6249 inMinYear = ( minDate && minDate.getFullYear() === drawYear ); 6250 inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear ); 6251 monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>"; 6252 for ( month = 0; month < 12; month++ ) { 6253 if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) { 6254 monthHtml += "<option value='" + month + "'" + 6255 ( month === drawMonth ? " selected='selected'" : "" ) + 6256 ">" + monthNamesShort[ month ] + "</option>"; 6257 } 6258 } 6259 monthHtml += "</select>"; 6260 } 6261 6262 if ( !showMonthAfterYear ) { 6263 html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? " " : "" ); 6264 } 6265 6266 // Year selection 6267 if ( !inst.yearshtml ) { 6268 inst.yearshtml = ""; 6269 if ( secondary || !changeYear ) { 6270 html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; 6271 } else { 6272 6273 // determine range of years to display 6274 years = this._get( inst, "yearRange" ).split( ":" ); 6275 thisYear = new Date().getFullYear(); 6276 determineYear = function( value ) { 6277 var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) : 6278 ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) : 6279 parseInt( value, 10 ) ) ); 6280 return ( isNaN( year ) ? thisYear : year ); 6281 }; 6282 year = determineYear( years[ 0 ] ); 6283 endYear = Math.max( year, determineYear( years[ 1 ] || "" ) ); 6284 year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year ); 6285 endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear ); 6286 inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; 6287 for ( ; year <= endYear; year++ ) { 6288 inst.yearshtml += "<option value='" + year + "'" + 6289 ( year === drawYear ? " selected='selected'" : "" ) + 6290 ">" + year + "</option>"; 6291 } 6292 inst.yearshtml += "</select>"; 6293 6294 html += inst.yearshtml; 6295 inst.yearshtml = null; 6296 } 6297 } 6298 6299 html += this._get( inst, "yearSuffix" ); 6300 if ( showMonthAfterYear ) { 6301 html += ( secondary || !( changeMonth && changeYear ) ? " " : "" ) + monthHtml; 6302 } 6303 html += "</div>"; // Close datepicker_header 6304 return html; 6305 }, 6306 6307 /* Adjust one of the date sub-fields. */ 6308 _adjustInstDate: function( inst, offset, period ) { 6309 var year = inst.selectedYear + ( period === "Y" ? offset : 0 ), 6310 month = inst.selectedMonth + ( period === "M" ? offset : 0 ), 6311 day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ), 6312 date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) ); 6313 6314 inst.selectedDay = date.getDate(); 6315 inst.drawMonth = inst.selectedMonth = date.getMonth(); 6316 inst.drawYear = inst.selectedYear = date.getFullYear(); 6317 if ( period === "M" || period === "Y" ) { 6318 this._notifyChange( inst ); 6319 } 6320 }, 6321 6322 /* Ensure a date is within any min/max bounds. */ 6323 _restrictMinMax: function( inst, date ) { 6324 var minDate = this._getMinMaxDate( inst, "min" ), 6325 maxDate = this._getMinMaxDate( inst, "max" ), 6326 newDate = ( minDate && date < minDate ? minDate : date ); 6327 return ( maxDate && newDate > maxDate ? maxDate : newDate ); 6328 }, 6329 6330 /* Notify change of month/year. */ 6331 _notifyChange: function( inst ) { 6332 var onChange = this._get( inst, "onChangeMonthYear" ); 6333 if ( onChange ) { 6334 onChange.apply( ( inst.input ? inst.input[ 0 ] : null ), 6335 [ inst.selectedYear, inst.selectedMonth + 1, inst ] ); 6336 } 6337 }, 6338 6339 /* Determine the number of months to show. */ 6340 _getNumberOfMonths: function( inst ) { 6341 var numMonths = this._get( inst, "numberOfMonths" ); 6342 return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) ); 6343 }, 6344 6345 /* Determine the current maximum date - ensure no time components are set. */ 6346 _getMinMaxDate: function( inst, minMax ) { 6347 return this._determineDate( inst, this._get( inst, minMax + "Date" ), null ); 6348 }, 6349 6350 /* Find the number of days in a given month. */ 6351 _getDaysInMonth: function( year, month ) { 6352 return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate(); 6353 }, 6354 6355 /* Find the day of the week of the first of a month. */ 6356 _getFirstDayOfMonth: function( year, month ) { 6357 return new Date( year, month, 1 ).getDay(); 6358 }, 6359 6360 /* Determines if we should allow a "next/prev" month display change. */ 6361 _canAdjustMonth: function( inst, offset, curYear, curMonth ) { 6362 var numMonths = this._getNumberOfMonths( inst ), 6363 date = this._daylightSavingAdjust( new Date( curYear, 6364 curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) ); 6365 6366 if ( offset < 0 ) { 6367 date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) ); 6368 } 6369 return this._isInRange( inst, date ); 6370 }, 6371 6372 /* Is the given date in the accepted range? */ 6373 _isInRange: function( inst, date ) { 6374 var yearSplit, currentYear, 6375 minDate = this._getMinMaxDate( inst, "min" ), 6376 maxDate = this._getMinMaxDate( inst, "max" ), 6377 minYear = null, 6378 maxYear = null, 6379 years = this._get( inst, "yearRange" ); 6380 if ( years ) { 6381 yearSplit = years.split( ":" ); 6382 currentYear = new Date().getFullYear(); 6383 minYear = parseInt( yearSplit[ 0 ], 10 ); 6384 maxYear = parseInt( yearSplit[ 1 ], 10 ); 6385 if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) { 6386 minYear += currentYear; 6387 } 6388 if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) { 6389 maxYear += currentYear; 6390 } 6391 } 6392 6393 return ( ( !minDate || date.getTime() >= minDate.getTime() ) && 6394 ( !maxDate || date.getTime() <= maxDate.getTime() ) && 6395 ( !minYear || date.getFullYear() >= minYear ) && 6396 ( !maxYear || date.getFullYear() <= maxYear ) ); 6397 }, 6398 6399 /* Provide the configuration settings for formatting/parsing. */ 6400 _getFormatConfig: function( inst ) { 6401 var shortYearCutoff = this._get( inst, "shortYearCutoff" ); 6402 shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff : 6403 new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) ); 6404 return { shortYearCutoff: shortYearCutoff, 6405 dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ), 6406 monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) }; 6407 }, 6408 6409 /* Format the given date for display. */ 6410 _formatDate: function( inst, day, month, year ) { 6411 if ( !day ) { 6412 inst.currentDay = inst.selectedDay; 6413 inst.currentMonth = inst.selectedMonth; 6414 inst.currentYear = inst.selectedYear; 6415 } 6416 var date = ( day ? ( typeof day === "object" ? day : 6417 this._daylightSavingAdjust( new Date( year, month, day ) ) ) : 6418 this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 6419 return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) ); 6420 } 6421} ); 6422 6423/* 6424 * Bind hover events for datepicker elements. 6425 * Done via delegate so the binding only occurs once in the lifetime of the parent div. 6426 * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. 6427 */ 6428function datepicker_bindHover( dpDiv ) { 6429 var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; 6430 return dpDiv.on( "mouseout", selector, function() { 6431 $( this ).removeClass( "ui-state-hover" ); 6432 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 6433 $( this ).removeClass( "ui-datepicker-prev-hover" ); 6434 } 6435 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 6436 $( this ).removeClass( "ui-datepicker-next-hover" ); 6437 } 6438 } ) 6439 .on( "mouseover", selector, datepicker_handleMouseover ); 6440} 6441 6442function datepicker_handleMouseover() { 6443 if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) { 6444 $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" ); 6445 $( this ).addClass( "ui-state-hover" ); 6446 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 6447 $( this ).addClass( "ui-datepicker-prev-hover" ); 6448 } 6449 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 6450 $( this ).addClass( "ui-datepicker-next-hover" ); 6451 } 6452 } 6453} 6454 6455/* jQuery extend now ignores nulls! */ 6456function datepicker_extendRemove( target, props ) { 6457 $.extend( target, props ); 6458 for ( var name in props ) { 6459 if ( props[ name ] == null ) { 6460 target[ name ] = props[ name ]; 6461 } 6462 } 6463 return target; 6464} 6465 6466/* Invoke the datepicker functionality. 6467 @param options string - a command, optionally followed by additional parameters or 6468 Object - settings for attaching new datepicker functionality 6469 @return jQuery object */ 6470$.fn.datepicker = function( options ) { 6471 6472 /* Verify an empty collection wasn't passed - Fixes #6976 */ 6473 if ( !this.length ) { 6474 return this; 6475 } 6476 6477 /* Initialise the date picker. */ 6478 if ( !$.datepicker.initialized ) { 6479 $( document ).on( "mousedown", $.datepicker._checkExternalClick ); 6480 $.datepicker.initialized = true; 6481 } 6482 6483 /* Append datepicker main container to body if not exist. */ 6484 if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) { 6485 $( "body" ).append( $.datepicker.dpDiv ); 6486 } 6487 6488 var otherArgs = Array.prototype.slice.call( arguments, 1 ); 6489 if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) { 6490 return $.datepicker[ "_" + options + "Datepicker" ]. 6491 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 6492 } 6493 if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) { 6494 return $.datepicker[ "_" + options + "Datepicker" ]. 6495 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 6496 } 6497 return this.each( function() { 6498 typeof options === "string" ? 6499 $.datepicker[ "_" + options + "Datepicker" ]. 6500 apply( $.datepicker, [ this ].concat( otherArgs ) ) : 6501 $.datepicker._attachDatepicker( this, options ); 6502 } ); 6503}; 6504 6505$.datepicker = new Datepicker(); // singleton instance 6506$.datepicker.initialized = false; 6507$.datepicker.uuid = new Date().getTime(); 6508$.datepicker.version = "1.12.1"; 6509 6510var widgetsDatepicker = $.datepicker; 6511 6512 6513 6514
6515})); 6516function toggleDropdown (e) { 6517 const _d = $(e.target).closest('.cmp-leftnav .dropdown'), 6518 _m = $('.dropdown-menu', _d); 6519 setTimeout(function(){ 6520 var shouldOpen; 6521 if(e.currentTarget.classList.contains('active-link')){ 6522 shouldOpen = e.type !== 'click'; 6523 }else{ 6524 shouldOpen = e.type !== 'click' && _d.is(':hover'); 6525 } 6526 _m.toggleClass('show', shouldOpen); 6527 _d.toggleClass('show', shouldOpen); 6528 $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen); 6529 }, e.type === 'mouseleave' ? 300 : 0); 6530} 6531 6532 6533 6534 6535$('.cmp-leftnav .navbar-toggler').on('click', function(){ 6536 $('.cmp-leftnav .nav-item .dropdown.active-link').toggleClass('show'); 6537 $(this).parent().find('.dropdown.active-link').find('.dropdown-menu').toggleClass('show'); 6538 6539 if ($(this).hasClass('collapsed')){ 6540 $('html,body').addClass('menuoverflow'); 6541 } 6542 else 6543 { 6544 $('html,body').removeClass('menuoverflow'); 6545 } 6546}); 6547 6548var calMenu = function(){ 6549 if(!window.matchMedia('(min-width: 992px)').matches){ 6550 var headerHeight = $('.header-variation-leftnav').outerHeight(true); 6551 var headerWrapper = $('.header-variation-leftnav .header-utilitynav-wrapper').outerHeight(true); 6552 var headerCenter = headerWrapper/2 +17; 6553 var togglePosition = headerHeight - headerCenter; 6554 var toggleButton = $('.cmp-leftnav .navbar-toggler'); 6555 var leftnavMenu = $('.cmp-leftnav .navbar-collapse'); 6556 if ($('.header-variation-leftnav').hasClass('sticky')){ 6557 toggleButton.css('top',togglePosition-5+'px'); 6558 leftnavMenu.css('top',headerHeight-5+'px'); 6559 } 6560 6561 else{ 6562 toggleButton.css('top',togglePosition+'px'); 6563 leftnavMenu.css('top',headerHeight+'px'); 6564 } 6565 6566 } 6567} 6568 6569$(document).ready(function() { 6570 calMenu(); 6571 if(window.matchMedia('(min-width: 992px)').matches){ 6572 $('.cmp-leftnav .nav-item .dropdown.active-link').find('.dropdown-menu').toggleClass('show'); 6573 $('body').on('mouseenter mouseleave','.cmp-leftnav .dropdown',toggleDropdown); 6574 $('body').on('click', '.cmp-leftnav .dropdown-menu a', toggleDropdown); 6575 } 6576}); 6577$(window).on('scroll resize touchmove', function () { 6578 setTimeout(function(){ 6579 calMenu(); 6580 },300); 6581 6582}); 6583 6584/*! 6585 * @fileOverview TouchSwipe - jQuery Plugin 6586 * @version 1.6.18 6587 * 6588 * @author Matt Bryson http://www.github.com/mattbryson 6589 * @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin 6590 * @see http://labs.rampinteractive.co.uk/touchSwipe/ 6591 * @see http://plugins.jquery.com/project/touchSwipe 6592 * @license 6593 * Copyright (c) 2010-2015 Matt Bryson 6594 * Dual licensed under the MIT or GPL Version 2 licenses. 6595 * 6596 */ 6597 6598/* 6599 * 6600 * Changelog 6601 * $Date: 2010-12-12 (Wed, 12 Dec 2010) $ 6602 * $version: 1.0.0 6603 * $version: 1.0.1 - removed multibyte comments 6604 * 6605 * $Date: 2011-21-02 (Mon, 21 Feb 2011) $ 6606 * $version: 1.1.0 - added allowPageScroll property to allow swiping and scrolling of page 6607 * - changed handler signatures so one handler can be used for multiple events 6608 * $Date: 2011-23-02 (Wed, 23 Feb 2011) $ 6609 * $version: 1.2.0 - added click handler. This is fired if the user simply clicks and does not swipe. The event object and click target are passed to handler. 6610 * - If you use the http://code.google.com/p/jquery-ui-for-ipad-and-iphone/ plugin, you can also assign jQuery mouse events to children of a touchSwipe object. 6611 * $version: 1.2.1 - removed console log! 6612 * 6613 * $version: 1.2.2 - Fixed bug where scope was not preserved in callback methods. 6614 * 6615 * $Date: 2011-28-04 (Thurs, 28 April 2011) $ 6616 * $version: 1.2.4 - Changed licence terms to be MIT or GPL inline with jQuery. Added check for support of touch events to stop non compatible browsers erroring. 6617 * 6618 * $Date: 2011-27-09 (Tues, 27 September 2011) $
6619 * $version: 1.2.5 - Added support for testing swipes with mouse on desktop browser (thanks to https://github.com/joelhy) 6620 * 6621 * $Date: 2012-14-05 (Mon, 14 May 2012) $ 6622 * $version: 1.2.6 - Added timeThreshold between start and end touch, so user can ignore slow swipes (thanks to Mark Chase). Default is null, all swipes are detected 6623 * 6624 * $Date: 2012-05-06 (Tues, 05 June 2012) $ 6625 * $version: 1.2.7 - Changed time threshold to have null default for backwards compatibility. Added duration param passed back in events, and refactored how time is handled. 6626 * 6627 * $Date: 2012-05-06 (Tues, 05 June 2012) $ 6628 * $version: 1.2.8 - Added the possibility to return a value like null or false in the trigger callback. In that way we can control when the touch start/move should take effect or not (simply by returning in some cases return null; or return false;) This effects the ontouchstart/ontouchmove event. 6629 * 6630 * $Date: 2012-06-06 (Wed, 06 June 2012) $ 6631 * $version: 1.3.0 - Refactored whole plugin to allow for methods to be executed, as well as exposed defaults for user override. Added 'enable', 'disable', and 'destroy' methods 6632 * 6633 * $Date: 2012-05-06 (Fri, 05 June 2012) $ 6634 * $version: 1.3.1 - Bug fixes - bind() with false as last argument is no longer supported in jQuery 1.6, also, if you just click, the duration is now returned correctly. 6635 * 6636 * $Date: 2012-29-07 (Sun, 29 July 2012) $ 6637 * $version: 1.3.2 - Added fallbackToMouseEvents option to NOT capture mouse events on non touch devices. 6638 * - Added "all" fingers value to the fingers property, so any combination of fingers triggers the swipe, allowing event handlers to check the finger count 6639 * 6640 * $Date: 2012-09-08 (Thurs, 9 Aug 2012) $ 6641 * $version: 1.3.3 - Code tidy prep for minefied version 6642 * 6643 * $Date: 2012-04-10 (wed, 4 Oct 2012) $ 6644 * $version: 1.4.0 - Added pinch support, pinchIn and pinchOut 6645 * 6646 * $Date: 2012-11-10 (Thurs, 11 Oct 2012) $ 6647 * $version: 1.5.0 - Added excludedElements, a jquery selector that specifies child elements that do NOT trigger swipes. By default, this is .noSwipe 6648 * 6649 * $Date: 2012-22-10 (Mon, 22 Oct 2012) $ 6650 * $version: 1.5.1 - Fixed bug with jQuery 1.8 and trailing comma in excludedElements 6651 * - Fixed bug with IE and eventPreventDefault() 6652 * $Date: 2013-01-12 (Fri, 12 Jan 2013) $ 6653 * $version: 1.6.0 - Fixed bugs with pinching, mainly when both pinch and swipe enabled, as well as adding time threshold for multifinger gestures, so releasing one finger beofre the other doesnt trigger as single finger gesture. 6654 * - made the demo site all static local HTML pages so they can be run locally by a developer 6655 * - added jsDoc comments and added documentation for the plugin 6656 * - code tidy 6657 * - added triggerOnTouchLeave property that will end the event when the user swipes off the element. 6658 * $Date: 2013-03-23 (Sat, 23 Mar 2013) $
6659 * $version: 1.6.1 - Added support for ie8 touch events 6660 * $version: 1.6.2 - Added support for events binding with on / off / bind in jQ for all callback names. 6661 * - Deprecated the 'click' handler in favour of tap. 6662 * - added cancelThreshold property 6663 * - added option method to update init options at runtime 6664 * $version 1.6.3 - added doubletap, longtap events and longTapThreshold, doubleTapThreshold property 6665 * 6666 * $Date: 2013-04-04 (Thurs, 04 April 2013) $ 6667 * $version 1.6.4 - Fixed bug with cancelThreshold introduced in 1.6.3, where swipe status no longer fired start event, and stopped once swiping back. 6668 * 6669 * $Date: 2013-08-24 (Sat, 24 Aug 2013) $ 6670 * $version 1.6.5 - Merged a few pull requests fixing various bugs, added AMD support. 6671 * 6672 * $Date: 2014-06-04 (Wed, 04 June 2014) $ 6673 * $version 1.6.6 - Merge of pull requests. 6674 * - IE10 touch support 6675 * - Only prevent default event handling on valid swipe 6676 * - Separate license/changelog comment 6677 * - Detect if the swipe is valid at the end of the touch event. 6678 * - Pass fingerdata to event handlers. 6679 * - Add 'hold' gesture 6680 * - Be more tolerant about the tap distance 6681 * - Typos and minor fixes 6682 * 6683 * $Date: 2015-22-01 (Thurs, 22 Jan 2015) $ 6684 * $version 1.6.7 - Added patch from https://github.com/mattbryson/TouchSwipe-Jquery-Plugin/issues/206 to fix memory leak 6685 * 6686 * $Date: 2015-2-2 (Mon, 2 Feb 2015) $ 6687 * $version 1.6.8 - Added preventDefaultEvents option to proxy events regardless. 6688 * - Fixed issue with swipe and pinch not triggering at the same time 6689 * 6690 * $Date: 2015-9-6 (Tues, 9 June 2015) $ 6691 * $version 1.6.9 - Added PR from jdalton/hybrid to fix pointer events 6692 * - Added scrolling demo 6693 * - Added version property to plugin 6694 * 6695 * $Date: 2015-1-10 (Wed, 1 October 2015) $ 6696 * $version 1.6.10 - Added PR from beatspace to fix tap events 6697 * $version 1.6.11 - Added PRs from indri-indri ( Doc tidyup), kkirsche ( Bower tidy up ), UziTech (preventDefaultEvents fixes ) 6698 * - Allowed setting multiple options via .swipe("options", options_hash) and more simply .swipe(options_hash) or exisitng instances 6699 * $version 1.6.12 - Fixed bug with multi finger releases above 2 not triggering events 6700 * 6701 * $Date: 2015-12-18 (Fri, 18 December 2015) $ 6702 * $version 1.6.13 - Added PRs 6703 * - Fixed #267 allowPageScroll not working correctly 6704 * $version 1.6.14 - Fixed #220 / #248 doubletap not firing with swipes, #223 commonJS compatible 6705 * $version 1.6.15 - More bug fixes 6706 * 6707 * $Date: 2016-04-29 (Fri, 29 April 2016) $ 6708 * $version 1.6.16 - Swipes with 0 distance now allow default events to trigger. So tapping any form elements or A tags will allow default interaction, but swiping will trigger a swipe. 6709 Removed the a, input, select etc from the excluded Children list as the 0 distance tap solves that issue. 6710* $Date: 2016-05-19 (Fri, 29 April 2016) $ 6711* $version 1.6.17 - Fixed context issue when calling instance methods via $("selector").swipe("method"); 6712* $version 1.6.18 - now honors fallbackToMouseEvents=false for MS Pointer events when a Mouse is used. 6713 */ 6714 6715/** 6716 * See (http://jquery.com/). 6717 * @name $ 6718 * @class 6719 * See the jQuery Library (http://jquery.com/) for full details. This just 6720 * documents the function and classes that are added to jQuery by this plug-in. 6721 */ 6722 6723/** 6724 * See (http://jquery.com/) 6725 * @name fn 6726 * @class 6727 * See the jQuery Library (http://jquery.com/) for full details. This just 6728 * documents the function and classes that are added to jQuery by this plug-in. 6729 * @memberOf $ 6730 */ 6731 6732 6733(function(factory) { 6734 if (typeof define === 'function' && define.amd && define.amd.jQuery) { 6735 // AMD. Register as anonymous module. 6736 define(['jquery'], factory); 6737 } else if (typeof module !== 'undefined' && module.exports) { 6738 // CommonJS Module 6739 factory(require("jquery")); 6740 } else { 6741 // Browser globals. 6742 factory(jQuery); 6743 } 6744}(function($) { 6745 "use strict"; 6746 6747 //Constants 6748 var VERSION = "1.6.18", 6749 LEFT = "left", 6750 RIGHT = "right", 6751 UP = "up", 6752 DOWN = "down", 6753 IN = "in", 6754 OUT = "out", 6755 6756 NONE = "none", 6757 AUTO = "auto", 6758 6759 SWIPE = "swipe", 6760 PINCH = "pinch", 6761 TAP = "tap", 6762 DOUBLE_TAP = "doubletap", 6763 LONG_TAP = "longtap", 6764 HOLD = "hold", 6765 6766 HORIZONTAL = "horizontal", 6767 VERTICAL = "vertical", 6768 6769 ALL_FINGERS = "all", 6770 6771 DOUBLE_TAP_THRESHOLD = 10, 6772 6773 PHASE_START = "start", 6774 PHASE_MOVE = "move", 6775 PHASE_END = "end", 6776 PHASE_CANCEL = "cancel", 6777 6778 SUPPORTS_TOUCH = 'ontouchstart' in window, 6779 6780 SUPPORTS_POINTER_IE10 = window.navigator.msPointerEnabled && !window.PointerEvent && !SUPPORTS_TOUCH, 6781 6782 SUPPORTS_POINTER = (window.PointerEvent || window.navigator.msPointerEnabled) && !SUPPORTS_TOUCH, 6783 6784 PLUGIN_NS = 'TouchSwipe'; 6785 6786 6787 6788 /** 6789 * The default configuration, and available options to configure touch swipe with. 6790 * You can set the default values by updating any of the properties prior to instantiation. 6791 * @name $.fn.swipe.defaults 6792 * @namespace 6793 * @property {int} [fingers=1] The number of fingers to detect in a swipe. Any swipes that do not meet this requirement will NOT trigger swipe handlers. 6794 * @property {int} [threshold=75] The number of pixels that the user must move their finger by before it is considered a swipe. 6795 * @property {int} [cancelThreshold=null] The number of pixels that the user must move their finger back from the original swipe direction to cancel the gesture. 6796 * @property {int} [pinchThreshold=20] The number of pixels that the user must pinch their finger by before it is considered a pinch. 6797 * @property {int} [maxTimeThreshold=null] Time, in milliseconds, between touchStart and touchEnd must NOT exceed in order to be considered a swipe. 6798 * @property {int} [fingerReleaseThreshold=250] Time in milliseconds between releasing multiple fingers. If 2 fingers are down, and are released one after the other, if they are within this threshold, it counts as a simultaneous release. 6799 * @property {int} [longTapThreshold=500] Time in milliseconds between tap and release for a long tap 6800 * @property {int} [doubleTapThreshold=200] Time in milliseconds between 2 taps to count as a double tap 6801 * @property {function} [swipe=null] A handler to catch all swipes. See {@link $.fn.swipe#event:swipe} 6802 * @property {function} [swipeLeft=null] A handler that is triggered for "left" swipes. See {@link $.fn.swipe#event:swipeLeft} 6803 * @property {function} [swipeRight=null] A handler that is triggered for "right" swipes. See {@link $.fn.swipe#event:swipeRight} 6804 * @property {function} [swipeUp=null] A handler that is triggered for "up" swipes. See {@link $.fn.swipe#event:swipeUp} 6805 * @property {function} [swipeDown=null] A handler that is triggered for "down" swipes. See {@link $.fn.swipe#event:swipeDown} 6806 * @property {function} [swipeStatus=null] A handler triggered for every phase of the swipe. See {@link $.fn.swipe#event:swipeStatus} 6807 * @property {function} [pinchIn=null] A handler triggered for pinch in events. See {@link $.fn.swipe#event:pinchIn} 6808 * @property {function} [pinchOut=null] A handler triggered for pinch out events. See {@link $.fn.swipe#event:pinchOut} 6809 * @property {function} [pinchStatus=null] A handler triggered for every phase of a pinch. See {@link $.fn.swipe#event:pinchStatus} 6810 * @property {function} [tap=null] A handler triggered when a user just taps on the item, rather than swipes it. If they do not move, tap is triggered, if they do move, it is not. 6811 * @property {function} [doubleTap=null] A handler triggered when a user double taps on the item. The delay between taps can be set with the doubleTapThreshold property. See {@link $.fn.swipe.defaults#doubleTapThreshold} 6812 * @property {function} [longTap=null] A handler triggered when a user long taps on the item. The delay between start and end can be set with the longTapThreshold property. See {@link $.fn.swipe.defaults#longTapThreshold} 6813 * @property (function) [hold=null] A handler triggered when a user reaches longTapThreshold on the item. See {@link $.fn.swipe.defaults#longTapThreshold} 6814 * @property {boolean} [triggerOnTouchEnd=true] If true, the swipe events are triggered when the touch end event is received (user releases finger). If false, it will be triggered on reaching the threshold, and then cancel the touch event automatically. 6815 * @property {boolean} [triggerOnTouchLeave=false] If true, then when the user leaves the swipe object, the swipe will end and trigger appropriate handlers. 6816 * @property {string|undefined} [allowPageScroll='auto'] How the browser handles page scrolls when the user is swiping on a touchSwipe object. See {@link $.fn.swipe.pageScroll}. <br/><br/> 6817 <code>"auto"</code> : all undefined swipes will cause the page to scroll in that direction. <br/> 6818 <code>"none"</code> : the page will not scroll when user swipes. <br/> 6819 <code>"horizontal"</code> : will force page to scroll on horizontal swipes. <br/> 6820 <code>"vertical"</code> : will force page to scroll on vertical swipes. <br/> 6821 * @property {boolean} [fallbackToMouseEvents=true] If true mouse events are used when run on a non touch device, false will stop swipes being triggered by mouse events on non touch devices. 6822 * @property {string} [excludedElements=".noSwipe"] A jquery selector that specifies child elements that do NOT trigger swipes. By default this excludes elements with the class .noSwipe . 6823 * @property {boolean} [preventDefaultEvents=true] by default default events are cancelled, so the page doesn't move. You can disable this so both native events fire as well as your handlers.
vendor: 64,132 bytes, lines 6823-8690
6823 6824 */ 6825 var defaults = { 6826 fingers: 1, 6827 threshold: 75, 6828 cancelThreshold: null, 6829 pinchThreshold: 20, 6830 maxTimeThreshold: null, 6831 fingerReleaseThreshold: 250, 6832 longTapThreshold: 500, 6833 doubleTapThreshold: 200, 6834 swipe: null, 6835 swipeLeft: null, 6836 swipeRight: null, 6837 swipeUp: null, 6838 swipeDown: null, 6839 swipeStatus: null, 6840 pinchIn: null, 6841 pinchOut: null, 6842 pinchStatus: null, 6843 click: null, //Deprecated since 1.6.2 6844 tap: null, 6845 doubleTap: null, 6846 longTap: null, 6847 hold: null, 6848 triggerOnTouchEnd: true, 6849 triggerOnTouchLeave: false, 6850 allowPageScroll: "auto", 6851 fallbackToMouseEvents: true, 6852 excludedElements: ".noSwipe", 6853 preventDefaultEvents: true 6854 }; 6855 6856 6857 6858 /** 6859 * Applies TouchSwipe behaviour to one or more jQuery objects. 6860 * The TouchSwipe plugin can be instantiated via this method, or methods within 6861 * TouchSwipe can be executed via this method as per jQuery plugin architecture. 6862 * An existing plugin can have its options changed simply by re calling .swipe(options) 6863 * @see TouchSwipe 6864 * @class 6865 * @param {Mixed} method If the current DOMNode is a TouchSwipe object, and <code>method</code> is a TouchSwipe method, then 6866 * the <code>method</code> is executed, and any following arguments are passed to the TouchSwipe method. 6867 * If <code>method</code> is an object, then the TouchSwipe class is instantiated on the current DOMNode, passing the 6868 * configuration properties defined in the object. See TouchSwipe 6869 * 6870 */ 6871 $.fn.swipe = function(method) { 6872 var $this = $(this), 6873 plugin = $this.data(PLUGIN_NS); 6874 6875 //Check if we are already instantiated and trying to execute a method 6876 if (plugin && typeof method === 'string') { 6877 if (plugin[method]) { 6878 return plugin[method].apply(plugin, Array.prototype.slice.call(arguments, 1)); 6879 } else { 6880 $.error('Method ' + method + ' does not exist on jQuery.swipe'); 6881 } 6882 } 6883 6884 //Else update existing plugin with new options hash 6885 else if (plugin && typeof method === 'object') { 6886 plugin['option'].apply(plugin, arguments); 6887 } 6888 6889 //Else not instantiated and trying to pass init object (or nothing) 6890 else if (!plugin && (typeof method === 'object' || !method)) { 6891 return init.apply(this, arguments); 6892 } 6893 6894 return $this; 6895 }; 6896 6897 /** 6898 * The version of the plugin 6899 * @readonly 6900 */ 6901 $.fn.swipe.version = VERSION; 6902 6903 6904 6905 //Expose our defaults so a user could override the plugin defaults 6906 $.fn.swipe.defaults = defaults; 6907 6908 /** 6909 * The phases that a touch event goes through. The <code>phase</code> is passed to the event handlers. 6910 * These properties are read only, attempting to change them will not alter the values passed to the event handlers. 6911 * @namespace 6912 * @readonly 6913 * @property {string} PHASE_START Constant indicating the start phase of the touch event. Value is <code>"start"</code>. 6914 * @property {string} PHASE_MOVE Constant indicating the move phase of the touch event. Value is <code>"move"</code>. 6915 * @property {string} PHASE_END Constant indicating the end phase of the touch event. Value is <code>"end"</code>. 6916 * @property {string} PHASE_CANCEL Constant indicating the cancel phase of the touch event. Value is <code>"cancel"</code>. 6917 */ 6918 $.fn.swipe.phases = { 6919 PHASE_START: PHASE_START, 6920 PHASE_MOVE: PHASE_MOVE, 6921 PHASE_END: PHASE_END, 6922 PHASE_CANCEL: PHASE_CANCEL 6923 }; 6924 6925 /** 6926 * The direction constants that are passed to the event handlers. 6927 * These properties are read only, attempting to change them will not alter the values passed to the event handlers. 6928 * @namespace 6929 * @readonly 6930 * @property {string} LEFT Constant indicating the left direction. Value is <code>"left"</code>. 6931 * @property {string} RIGHT Constant indicating the right direction. Value is <code>"right"</code>. 6932 * @property {string} UP Constant indicating the up direction. Value is <code>"up"</code>. 6933 * @property {string} DOWN Constant indicating the down direction. Value is <code>"cancel"</code>. 6934 * @property {string} IN Constant indicating the in direction. Value is <code>"in"</code>. 6935 * @property {string} OUT Constant indicating the out direction. Value is <code>"out"</code>. 6936 */ 6937 $.fn.swipe.directions = { 6938 LEFT: LEFT, 6939 RIGHT: RIGHT, 6940 UP: UP, 6941 DOWN: DOWN, 6942 IN: IN, 6943 OUT: OUT 6944 }; 6945 6946 /** 6947 * The page scroll constants that can be used to set the value of <code>allowPageScroll</code> option 6948 * These properties are read only 6949 * @namespace 6950 * @readonly 6951 * @see $.fn.swipe.defaults#allowPageScroll 6952 * @property {string} NONE Constant indicating no page scrolling is allowed. Value is <code>"none"</code>. 6953 * @property {string} HORIZONTAL Constant indicating horizontal page scrolling is allowed. Value is <code>"horizontal"</code>. 6954 * @property {string} VERTICAL Constant indicating vertical page scrolling is allowed. Value is <code>"vertical"</code>. 6955 * @property {string} AUTO Constant indicating either horizontal or vertical will be allowed, depending on the swipe handlers registered. Value is <code>"auto"</code>. 6956 */ 6957 $.fn.swipe.pageScroll = { 6958 NONE: NONE, 6959 HORIZONTAL: HORIZONTAL, 6960 VERTICAL: VERTICAL, 6961 AUTO: AUTO 6962 }; 6963 6964 /** 6965 * Constants representing the number of fingers used in a swipe. These are used to set both the value of <code>fingers</code> in the 6966 * options object, as well as the value of the <code>fingers</code> event property. 6967 * These properties are read only, attempting to change them will not alter the values passed to the event handlers. 6968 * @namespace 6969 * @readonly 6970 * @see $.fn.swipe.defaults#fingers 6971 * @property {string} ONE Constant indicating 1 finger is to be detected / was detected. Value is <code>1</code>. 6972 * @property {string} TWO Constant indicating 2 fingers are to be detected / were detected. Value is <code>2</code>. 6973 * @property {string} THREE Constant indicating 3 finger are to be detected / were detected. Value is <code>3</code>. 6974 * @property {string} FOUR Constant indicating 4 finger are to be detected / were detected. Not all devices support this. Value is <code>4</code>. 6975 * @property {string} FIVE Constant indicating 5 finger are to be detected / were detected. Not all devices support this. Value is <code>5</code>. 6976 * @property {string} ALL Constant indicating any combination of finger are to be detected. Value is <code>"all"</code>. 6977 */ 6978 $.fn.swipe.fingers = { 6979 ONE: 1, 6980 TWO: 2, 6981 THREE: 3, 6982 FOUR: 4, 6983 FIVE: 5, 6984 ALL: ALL_FINGERS 6985 }; 6986 6987 /** 6988 * Initialise the plugin for each DOM element matched 6989 * This creates a new instance of the main TouchSwipe class for each DOM element, and then 6990 * saves a reference to that instance in the elements data property. 6991 * @internal 6992 */ 6993 function init(options) { 6994 //Prep and extend the options 6995 if (options && (options.allowPageScroll === undefined && (options.swipe !== undefined || options.swipeStatus !== undefined))) { 6996 options.allowPageScroll = NONE; 6997 } 6998 6999 //Check for deprecated options 7000 //Ensure that any old click handlers are assigned to the new tap, unless we have a tap 7001 if (options.click !== undefined && options.tap === undefined) { 7002 options.tap = options.click; 7003 } 7004 7005 if (!options) { 7006 options = {}; 7007 } 7008 7009 //pass empty object so we dont modify the defaults 7010 options = $.extend({}, $.fn.swipe.defaults, options); 7011 7012 //For each element instantiate the plugin 7013 return this.each(function() { 7014 var $this = $(this); 7015 7016 //Check we havent already initialised the plugin 7017 var plugin = $this.data(PLUGIN_NS); 7018 7019 if (!plugin) { 7020 plugin = new TouchSwipe(this, options); 7021 $this.data(PLUGIN_NS, plugin); 7022 } 7023 }); 7024 } 7025 7026 /** 7027 * Main TouchSwipe Plugin Class. 7028 * Do not use this to construct your TouchSwipe object, use the jQuery plugin method $.fn.swipe(); {@link $.fn.swipe} 7029 * @private 7030 * @name TouchSwipe 7031 * @param {DOMNode} element The HTML DOM object to apply to plugin to 7032 * @param {Object} options The options to configure the plugin with. @link {$.fn.swipe.defaults} 7033 * @see $.fh.swipe.defaults 7034 * @see $.fh.swipe 7035 * @class 7036 */ 7037 function TouchSwipe(element, options) { 7038 7039 //take a local/instacne level copy of the options - should make it this.options really... 7040 var options = $.extend({}, options); 7041 7042 var useTouchEvents = (SUPPORTS_TOUCH || SUPPORTS_POINTER || !options.fallbackToMouseEvents), 7043 START_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerDown' : 'pointerdown') : 'touchstart') : 'mousedown', 7044 MOVE_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerMove' : 'pointermove') : 'touchmove') : 'mousemove', 7045 END_EV = useTouchEvents ? (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerUp' : 'pointerup') : 'touchend') : 'mouseup', 7046 LEAVE_EV = useTouchEvents ? (SUPPORTS_POINTER ? 'mouseleave' : null) : 'mouseleave', //we manually detect leave on touch devices, so null event here 7047 CANCEL_EV = (SUPPORTS_POINTER ? (SUPPORTS_POINTER_IE10 ? 'MSPointerCancel' : 'pointercancel') : 'touchcancel'); 7048 7049 7050 7051 //touch properties 7052 var distance = 0, 7053 direction = null, 7054 currentDirection = null, 7055 duration = 0, 7056 startTouchesDistance = 0, 7057 endTouchesDistance = 0, 7058 pinchZoom = 1, 7059 pinchDistance = 0, 7060 pinchDirection = 0, 7061 maximumsMap = null; 7062 7063 7064 7065 //jQuery wrapped element for this instance 7066 var $element = $(element); 7067 7068 //Current phase of th touch cycle 7069 var phase = "start"; 7070 7071 // the current number of fingers being used. 7072 var fingerCount = 0; 7073 7074 //track mouse points / delta 7075 var fingerData = {}; 7076 7077 //track times 7078 var startTime = 0, 7079 endTime = 0, 7080 previousTouchEndTime = 0, 7081 fingerCountAtRelease = 0, 7082 doubleTapStartTime = 0; 7083 7084 //Timeouts 7085 var singleTapTimeout = null, 7086 holdTimeout = null; 7087 7088 // Add gestures to all swipable areas if supported 7089 try { 7090 $element.on(START_EV, touchStart); 7091 $element.on(CANCEL_EV, touchCancel); 7092 } catch (e) { 7093 $.error('events not supported ' + START_EV + ',' + CANCEL_EV + ' on jQuery.swipe'); 7094 } 7095 7096 // 7097 //Public methods 7098 // 7099 7100 /** 7101 * re-enables the swipe plugin with the previous configuration 7102 * @function 7103 * @name $.fn.swipe#enable 7104 * @return {DOMNode} The Dom element that was registered with TouchSwipe 7105 * @example $("#element").swipe("enable"); 7106 */ 7107 this.enable = function() { 7108 //Incase we are already enabled, clean up... 7109 this.disable(); 7110 $element.on(START_EV, touchStart); 7111 $element.on(CANCEL_EV, touchCancel); 7112 return $element; 7113 }; 7114 7115 /** 7116 * disables the swipe plugin 7117 * @function 7118 * @name $.fn.swipe#disable 7119 * @return {DOMNode} The Dom element that is now registered with TouchSwipe 7120 * @example $("#element").swipe("disable"); 7121 */ 7122 this.disable = function() { 7123 removeListeners(); 7124 return $element; 7125 }; 7126 7127 /** 7128 * Destroy the swipe plugin completely. To use any swipe methods, you must re initialise the plugin. 7129 * @function 7130 * @name $.fn.swipe#destroy 7131 * @example $("#element").swipe("destroy"); 7132 */ 7133 this.destroy = function() { 7134 removeListeners(); 7135 $element.data(PLUGIN_NS, null); 7136 $element = null; 7137 }; 7138 7139 7140 /** 7141 * Allows run time updating of the swipe configuration options. 7142 * @function 7143 * @name $.fn.swipe#option 7144 * @param {String} property The option property to get or set, or a has of multiple options to set 7145 * @param {Object} [value] The value to set the property to 7146 * @return {Object} If only a property name is passed, then that property value is returned. If nothing is passed the current options hash is returned. 7147 * @example $("#element").swipe("option", "threshold"); // return the threshold 7148 * @example $("#element").swipe("option", "threshold", 100); // set the threshold after init 7149 * @example $("#element").swipe("option", {threshold:100, fingers:3} ); // set multiple properties after init 7150 * @example $("#element").swipe({threshold:100, fingers:3} ); // set multiple properties after init - the "option" method is optional! 7151 * @example $("#element").swipe("option"); // Return the current options hash 7152 * @see $.fn.swipe.defaults 7153 * 7154 */ 7155 this.option = function(property, value) { 7156 7157 if (typeof property === 'object') { 7158 options = $.extend(options, property); 7159 } else if (options[property] !== undefined) { 7160 if (value === undefined) { 7161 return options[property]; 7162 } else { 7163 options[property] = value; 7164 } 7165 } else if (!property) { 7166 return options; 7167 } else { 7168 $.error('Option ' + property + ' does not exist on jQuery.swipe.options'); 7169 } 7170 7171 return null; 7172 } 7173 7174 7175 7176 // 7177 // Private methods 7178 // 7179 7180 // 7181 // EVENTS 7182 // 7183 /** 7184 * Event handler for a touch start event. 7185 * Stops the default click event from triggering and stores where we touched 7186 * @inner 7187 * @param {object} jqEvent The normalised jQuery event object. 7188 */ 7189 function touchStart(jqEvent) { 7190 7191 //If we already in a touch event (a finger already in use) then ignore subsequent ones.. 7192 if (getTouchInProgress()) { 7193 return; 7194 } 7195 7196 //Check if this element matches any in the excluded elements selectors, or its parent is excluded, if so, DON'T swipe 7197 if ($(jqEvent.target).closest(options.excludedElements, $element).length > 0) { 7198 return; 7199 } 7200 7201 //As we use Jquery bind for events, we need to target the original event object 7202 //If these events are being programmatically triggered, we don't have an original event object, so use the Jq one. 7203 var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; 7204 7205 7206 //If we have a pointer event, whoes type is 'mouse' and we have said NO mouse events, then dont do anything. 7207 if(event.pointerType && event.pointerType=="mouse" && options.fallbackToMouseEvents==false) { 7208 return; 7209 }; 7210 7211 var ret, 7212 touches = event.touches, 7213 evt = touches ? touches[0] : event; 7214 7215 phase = PHASE_START; 7216 7217 //If we support touches, get the finger count 7218 if (touches) { 7219 // get the total number of fingers touching the screen 7220 fingerCount = touches.length; 7221 } 7222 //Else this is the desktop, so stop the browser from dragging content 7223 else if (options.preventDefaultEvents !== false) { 7224 jqEvent.preventDefault(); //call this on jq event so we are cross browser 7225 } 7226 7227 //clear vars.. 7228 distance = 0; 7229 direction = null; 7230 currentDirection=null; 7231 pinchDirection = null; 7232 duration = 0; 7233 startTouchesDistance = 0; 7234 endTouchesDistance = 0; 7235 pinchZoom = 1; 7236 pinchDistance = 0; 7237 maximumsMap = createMaximumsData(); 7238 cancelMultiFingerRelease(); 7239 7240 //Create the default finger data 7241 createFingerData(0, evt); 7242 7243 // check the number of fingers is what we are looking for, or we are capturing pinches 7244 if (!touches || (fingerCount === options.fingers || options.fingers === ALL_FINGERS) || hasPinches()) { 7245 // get the coordinates of the touch 7246 startTime = getTimeStamp(); 7247 7248 if (fingerCount == 2) { 7249 //Keep track of the initial pinch distance, so we can calculate the diff later 7250 //Store second finger data as start 7251 createFingerData(1, touches[1]); 7252 startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start); 7253 } 7254 7255 if (options.swipeStatus || options.pinchStatus) { 7256 ret = triggerHandler(event, phase); 7257 } 7258 } else { 7259 //A touch with more or less than the fingers we are looking for, so cancel 7260 ret = false; 7261 } 7262 7263 //If we have a return value from the users handler, then return and cancel 7264 if (ret === false) { 7265 phase = PHASE_CANCEL; 7266 triggerHandler(event, phase); 7267 return ret; 7268 } else { 7269 if (options.hold) { 7270 holdTimeout = setTimeout($.proxy(function() { 7271 //Trigger the event 7272 $element.trigger('hold', [event.target]); 7273 //Fire the callback 7274 if (options.hold) { 7275 ret = options.hold.call($element, event, event.target); 7276 } 7277 }, this), options.longTapThreshold); 7278 } 7279 7280 setTouchInProgress(true); 7281 } 7282 7283 return null; 7284 }; 7285 7286 7287 7288 /** 7289 * Event handler for a touch move event. 7290 * If we change fingers during move, then cancel the event 7291 * @inner 7292 * @param {object} jqEvent The normalised jQuery event object. 7293 */ 7294 function touchMove(jqEvent) { 7295 7296 //As we use Jquery bind for events, we need to target the original event object 7297 //If these events are being programmatically triggered, we don't have an original event object, so use the Jq one. 7298 var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; 7299 7300 //If we are ending, cancelling, or within the threshold of 2 fingers being released, don't track anything.. 7301 if (phase === PHASE_END || phase === PHASE_CANCEL || inMultiFingerRelease()) 7302 return; 7303 7304 var ret, 7305 touches = event.touches, 7306 evt = touches ? touches[0] : event; 7307 7308 7309 //Update the finger data 7310 var currentFinger = updateFingerData(evt); 7311 endTime = getTimeStamp(); 7312 7313 if (touches) { 7314 fingerCount = touches.length; 7315 } 7316 7317 if (options.hold) { 7318 clearTimeout(holdTimeout); 7319 } 7320 7321 phase = PHASE_MOVE; 7322 7323 //If we have 2 fingers get Touches distance as well 7324 if (fingerCount == 2) { 7325 7326 //Keep track of the initial pinch distance, so we can calculate the diff later 7327 //We do this here as well as the start event, in case they start with 1 finger, and the press 2 fingers 7328 if (startTouchesDistance == 0) { 7329 //Create second finger if this is the first time... 7330 createFingerData(1, touches[1]); 7331 7332 startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start); 7333 } else { 7334 //Else just update the second finger 7335 updateFingerData(touches[1]); 7336 7337 endTouchesDistance = calculateTouchesDistance(fingerData[0].end, fingerData[1].end); 7338 pinchDirection = calculatePinchDirection(fingerData[0].end, fingerData[1].end); 7339 } 7340 7341 pinchZoom = calculatePinchZoom(startTouchesDistance, endTouchesDistance); 7342 pinchDistance = Math.abs(startTouchesDistance - endTouchesDistance); 7343 } 7344 7345 if ((fingerCount === options.fingers || options.fingers === ALL_FINGERS) || !touches || hasPinches()) { 7346 7347 //The overall direction of the swipe. From start to now. 7348 direction = calculateDirection(currentFinger.start, currentFinger.end); 7349 7350 //The immediate direction of the swipe, direction between the last movement and this one. 7351 currentDirection = calculateDirection(currentFinger.last, currentFinger.end); 7352 7353 //Check if we need to prevent default event (page scroll / pinch zoom) or not 7354 validateDefaultEvent(jqEvent, currentDirection); 7355 7356 //Distance and duration are all off the main finger 7357 distance = calculateDistance(currentFinger.start, currentFinger.end); 7358 duration = calculateDuration(); 7359 7360 //Cache the maximum distance we made in this direction 7361 setMaxDistance(direction, distance); 7362 7363 //Trigger status handler 7364 ret = triggerHandler(event, phase); 7365 7366 7367 //If we trigger end events when threshold are met, or trigger events when touch leaves element 7368 if (!options.triggerOnTouchEnd || options.triggerOnTouchLeave) { 7369 7370 var inBounds = true; 7371 7372 //If checking if we leave the element, run the bounds check (we can use touchleave as its not supported on webkit) 7373 if (options.triggerOnTouchLeave) { 7374 var bounds = getbounds(this); 7375 inBounds = isInBounds(currentFinger.end, bounds); 7376 } 7377 7378 //Trigger end handles as we swipe if thresholds met or if we have left the element if the user has asked to check these.. 7379 if (!options.triggerOnTouchEnd && inBounds) { 7380 phase = getNextPhase(PHASE_MOVE); 7381 } 7382 //We end if out of bounds here, so set current phase to END, and check if its modified 7383 else if (options.triggerOnTouchLeave && !inBounds) { 7384 phase = getNextPhase(PHASE_END); 7385 } 7386 7387 if (phase == PHASE_CANCEL || phase == PHASE_END) { 7388 triggerHandler(event, phase); 7389 } 7390 } 7391 } else { 7392 phase = PHASE_CANCEL; 7393 triggerHandler(event, phase); 7394 } 7395 7396 if (ret === false) { 7397 phase = PHASE_CANCEL; 7398 triggerHandler(event, phase); 7399 } 7400 } 7401 7402 7403 7404 7405 /** 7406 * Event handler for a touch end event. 7407 * Calculate the direction and trigger events 7408 * @inner 7409 * @param {object} jqEvent The normalised jQuery event object. 7410 */ 7411 function touchEnd(jqEvent) { 7412 //As we use Jquery bind for events, we need to target the original event object 7413 //If these events are being programmatically triggered, we don't have an original event object, so use the Jq one. 7414 var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent, 7415 touches = event.touches; 7416 7417 //If we are still in a touch with the device wait a fraction and see if the other finger comes up 7418 //if it does within the threshold, then we treat it as a multi release, not a single release and end the touch / swipe 7419 if (touches) { 7420 if (touches.length && !inMultiFingerRelease()) { 7421 startMultiFingerRelease(event); 7422 return true; 7423 } else if (touches.length && inMultiFingerRelease()) { 7424 return true; 7425 } 7426 } 7427 7428 //If a previous finger has been released, check how long ago, if within the threshold, then assume it was a multifinger release. 7429 //This is used to allow 2 fingers to release fractionally after each other, whilst maintaining the event as containing 2 fingers, not 1 7430 if (inMultiFingerRelease()) { 7431 fingerCount = fingerCountAtRelease; 7432 } 7433 7434 //Set end of swipe 7435 endTime = getTimeStamp(); 7436 7437 //Get duration incase move was never fired 7438 duration = calculateDuration(); 7439 7440 //If we trigger handlers at end of swipe OR, we trigger during, but they didnt trigger and we are still in the move phase 7441 if (didSwipeBackToCancel() || !validateSwipeDistance()) { 7442 phase = PHASE_CANCEL; 7443 triggerHandler(event, phase); 7444 } else if (options.triggerOnTouchEnd || (options.triggerOnTouchEnd === false && phase === PHASE_MOVE)) { 7445 //call this on jq event so we are cross browser 7446 if (options.preventDefaultEvents !== false && jqEvent.cancelable !== false) { 7447 jqEvent.preventDefault(); 7448 } 7449 phase = PHASE_END; 7450 triggerHandler(event, phase); 7451 } 7452 //Special cases - A tap should always fire on touch end regardless, 7453 //So here we manually trigger the tap end handler by itself 7454 //We dont run trigger handler as it will re-trigger events that may have fired already 7455 else if (!options.triggerOnTouchEnd && hasTap()) { 7456 //Trigger the pinch events... 7457 phase = PHASE_END; 7458 triggerHandlerForGesture(event, phase, TAP); 7459 } else if (phase === PHASE_MOVE) { 7460 phase = PHASE_CANCEL; 7461 triggerHandler(event, phase); 7462 } 7463 7464 setTouchInProgress(false); 7465 7466 return null; 7467 } 7468 7469 7470 7471 /** 7472 * Event handler for a touch cancel event. 7473 * Clears current vars 7474 * @inner 7475 */ 7476 function touchCancel() { 7477 // reset the variables back to default values 7478 fingerCount = 0; 7479 endTime = 0; 7480 startTime = 0; 7481 startTouchesDistance = 0; 7482 endTouchesDistance = 0; 7483 pinchZoom = 1; 7484 7485 //If we were in progress of tracking a possible multi touch end, then re set it. 7486 cancelMultiFingerRelease(); 7487 7488 setTouchInProgress(false); 7489 } 7490 7491 7492 /** 7493 * Event handler for a touch leave event. 7494 * This is only triggered on desktops, in touch we work this out manually 7495 * as the touchleave event is not supported in webkit 7496 * @inner 7497 */ 7498 function touchLeave(jqEvent) { 7499 //If these events are being programmatically triggered, we don't have an original event object, so use the Jq one. 7500 var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; 7501 7502 //If we have the trigger on leave property set.... 7503 if (options.triggerOnTouchLeave) { 7504 phase = getNextPhase(PHASE_END); 7505 triggerHandler(event, phase); 7506 } 7507 } 7508 7509 /** 7510 * Removes all listeners that were associated with the plugin 7511 * @inner 7512 */ 7513 function removeListeners() { 7514 $element.off(START_EV, touchStart); 7515 $element.off(CANCEL_EV, touchCancel); 7516 $element.off(MOVE_EV, touchMove); 7517 $element.off(END_EV, touchEnd); 7518 7519 //we only have leave events on desktop, we manually calculate leave on touch as its not supported in webkit 7520 if (LEAVE_EV) { 7521 $element.off(LEAVE_EV, touchLeave); 7522 } 7523 7524 setTouchInProgress(false); 7525 } 7526 7527 7528 /** 7529 * Checks if the time and distance thresholds have been met, and if so then the appropriate handlers are fired. 7530 */ 7531 function getNextPhase(currentPhase) { 7532 7533 var nextPhase = currentPhase; 7534 7535 // Ensure we have valid swipe (under time and over distance and check if we are out of bound...) 7536 var validTime = validateSwipeTime(); 7537 var validDistance = validateSwipeDistance(); 7538 var didCancel = didSwipeBackToCancel(); 7539 7540 //If we have exceeded our time, then cancel 7541 if (!validTime || didCancel) { 7542 nextPhase = PHASE_CANCEL; 7543 } 7544 //Else if we are moving, and have reached distance then end 7545 else if (validDistance && currentPhase == PHASE_MOVE && (!options.triggerOnTouchEnd || options.triggerOnTouchLeave)) { 7546 nextPhase = PHASE_END; 7547 } 7548 //Else if we have ended by leaving and didn't reach distance, then cancel 7549 else if (!validDistance && currentPhase == PHASE_END && options.triggerOnTouchLeave) { 7550 nextPhase = PHASE_CANCEL; 7551 } 7552 7553 return nextPhase; 7554 } 7555 7556 7557 /** 7558 * Trigger the relevant event handler 7559 * The handlers are passed the original event, the element that was swiped, and in the case of the catch all handler, the direction that was swiped, "left", "right", "up", or "down" 7560 * @param {object} event the original event object 7561 * @param {string} phase the phase of the swipe (start, end cancel etc) {@link $.fn.swipe.phases} 7562 * @inner 7563 */ 7564 function triggerHandler(event, phase) { 7565 7566 7567 7568 var ret, 7569 touches = event.touches; 7570 7571 // SWIPE GESTURES 7572 if (didSwipe() || hasSwipes()) { 7573 ret = triggerHandlerForGesture(event, phase, SWIPE); 7574 } 7575 7576 // PINCH GESTURES (if the above didn't cancel) 7577 if ((didPinch() || hasPinches()) && ret !== false) { 7578 ret = triggerHandlerForGesture(event, phase, PINCH); 7579 } 7580 7581 // CLICK / TAP (if the above didn't cancel) 7582 if (didDoubleTap() && ret !== false) { 7583 //Trigger the tap events... 7584 ret = triggerHandlerForGesture(event, phase, DOUBLE_TAP); 7585 } 7586 7587 // CLICK / TAP (if the above didn't cancel) 7588 else if (didLongTap() && ret !== false) { 7589 //Trigger the tap events... 7590 ret = triggerHandlerForGesture(event, phase, LONG_TAP); 7591 } 7592 7593 // CLICK / TAP (if the above didn't cancel) 7594 else if (didTap() && ret !== false) { 7595 //Trigger the tap event.. 7596 ret = triggerHandlerForGesture(event, phase, TAP); 7597 } 7598 7599 7600 7601 // If we are cancelling the gesture, then manually trigger the reset handler 7602 if (phase === PHASE_CANCEL) { 7603 7604 touchCancel(event); 7605 } 7606 7607 7608 7609 7610 // If we are ending the gesture, then manually trigger the reset handler IF all fingers are off 7611 if (phase === PHASE_END) { 7612 //If we support touch, then check that all fingers are off before we cancel 7613 if (touches) { 7614 if (!touches.length) { 7615 touchCancel(event); 7616 } 7617 } else { 7618 touchCancel(event); 7619 } 7620 } 7621 7622 return ret; 7623 } 7624 7625 7626 7627 /** 7628 * Trigger the relevant event handler 7629 * The handlers are passed the original event, the element that was swiped, and in the case of the catch all handler, the direction that was swiped, "left", "right", "up", or "down" 7630 * @param {object} event the original event object 7631 * @param {string} phase the phase of the swipe (start, end cancel etc) {@link $.fn.swipe.phases} 7632 * @param {string} gesture the gesture to trigger a handler for : PINCH or SWIPE {@link $.fn.swipe.gestures} 7633 * @return Boolean False, to indicate that the event should stop propagation, or void. 7634 * @inner 7635 */ 7636 function triggerHandlerForGesture(event, phase, gesture) { 7637 7638 var ret; 7639 7640 //SWIPES.... 7641 if (gesture == SWIPE) { 7642 //Trigger status every time.. 7643 $element.trigger('swipeStatus', [phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection]); 7644 7645 if (options.swipeStatus) { 7646 ret = options.swipeStatus.call($element, event, phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection); 7647 //If the status cancels, then dont run the subsequent event handlers.. 7648 if (ret === false) return false; 7649 } 7650 7651 if (phase == PHASE_END && validateSwipe()) { 7652 7653 //Cancel any taps that were in progress... 7654 clearTimeout(singleTapTimeout); 7655 clearTimeout(holdTimeout); 7656 7657 $element.trigger('swipe', [direction, distance, duration, fingerCount, fingerData, currentDirection]); 7658 7659 if (options.swipe) { 7660 ret = options.swipe.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection); 7661 //If the status cancels, then dont run the subsequent event handlers.. 7662 if (ret === false) return false; 7663 } 7664 7665 //trigger direction specific event handlers 7666 switch (direction) { 7667 case LEFT: 7668 $element.trigger('swipeLeft', [direction, distance, duration, fingerCount, fingerData, currentDirection]); 7669 7670 if (options.swipeLeft) { 7671 ret = options.swipeLeft.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection); 7672 } 7673 break; 7674 7675 case RIGHT: 7676 $element.trigger('swipeRight', [direction, distance, duration, fingerCount, fingerData, currentDirection]); 7677 7678 if (options.swipeRight) { 7679 ret = options.swipeRight.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection); 7680 } 7681 break; 7682 7683 case UP: 7684 $element.trigger('swipeUp', [direction, distance, duration, fingerCount, fingerData, currentDirection]); 7685 7686 if (options.swipeUp) { 7687 ret = options.swipeUp.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection); 7688 } 7689 break; 7690 7691 case DOWN: 7692 $element.trigger('swipeDown', [direction, distance, duration, fingerCount, fingerData, currentDirection]); 7693 7694 if (options.swipeDown) { 7695 ret = options.swipeDown.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection); 7696 } 7697 break; 7698 } 7699 } 7700 } 7701 7702 7703 //PINCHES.... 7704 if (gesture == PINCH) { 7705 $element.trigger('pinchStatus', [phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]); 7706 7707 if (options.pinchStatus) { 7708 ret = options.pinchStatus.call($element, event, phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData); 7709 //If the status cancels, then dont run the subsequent event handlers.. 7710 if (ret === false) return false; 7711 } 7712 7713 if (phase == PHASE_END && validatePinch()) { 7714 7715 switch (pinchDirection) { 7716 case IN: 7717 $element.trigger('pinchIn', [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]); 7718 7719 if (options.pinchIn) { 7720 ret = options.pinchIn.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData); 7721 } 7722 break; 7723 7724 case OUT: 7725 $element.trigger('pinchOut', [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]); 7726 7727 if (options.pinchOut) { 7728 ret = options.pinchOut.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData); 7729 } 7730 break; 7731 } 7732 } 7733 } 7734 7735 if (gesture == TAP) { 7736 if (phase === PHASE_CANCEL || phase === PHASE_END) { 7737 7738 clearTimeout(singleTapTimeout); 7739 clearTimeout(holdTimeout); 7740 7741 //If we are also looking for doubelTaps, wait incase this is one... 7742 if (hasDoubleTap() && !inDoubleTap()) { 7743 doubleTapStartTime = getTimeStamp(); 7744 7745 //Now wait for the double tap timeout, and trigger this single tap 7746 //if its not cancelled by a double tap 7747 singleTapTimeout = setTimeout($.proxy(function() { 7748 doubleTapStartTime = null; 7749 $element.trigger('tap', [event.target]); 7750 7751 if (options.tap) { 7752 ret = options.tap.call($element, event, event.target); 7753 } 7754 }, this), options.doubleTapThreshold); 7755 7756 } else { 7757 doubleTapStartTime = null; 7758 $element.trigger('tap', [event.target]); 7759 if (options.tap) { 7760 ret = options.tap.call($element, event, event.target); 7761 } 7762 } 7763 } 7764 } else if (gesture == DOUBLE_TAP) { 7765 if (phase === PHASE_CANCEL || phase === PHASE_END) { 7766 clearTimeout(singleTapTimeout); 7767 clearTimeout(holdTimeout); 7768 doubleTapStartTime = null; 7769 $element.trigger('doubletap', [event.target]); 7770 7771 if (options.doubleTap) { 7772 ret = options.doubleTap.call($element, event, event.target); 7773 } 7774 } 7775 } else if (gesture == LONG_TAP) { 7776 if (phase === PHASE_CANCEL || phase === PHASE_END) { 7777 clearTimeout(singleTapTimeout); 7778 doubleTapStartTime = null; 7779 7780 $element.trigger('longtap', [event.target]); 7781 if (options.longTap) { 7782 ret = options.longTap.call($element, event, event.target); 7783 } 7784 } 7785 } 7786 7787 return ret; 7788 } 7789 7790 7791 // 7792 // GESTURE VALIDATION 7793 // 7794 7795 /** 7796 * Checks the user has swipe far enough 7797 * @return Boolean if <code>threshold</code> has been set, return true if the threshold was met, else false. 7798 * If no threshold was set, then we return true. 7799 * @inner 7800 */ 7801 function validateSwipeDistance() { 7802 var valid = true; 7803 //If we made it past the min swipe distance.. 7804 if (options.threshold !== null) { 7805 valid = distance >= options.threshold; 7806 } 7807 7808 return valid; 7809 } 7810 7811 /** 7812 * Checks the user has swiped back to cancel. 7813 * @return Boolean if <code>cancelThreshold</code> has been set, return true if the cancelThreshold was met, else false. 7814 * If no cancelThreshold was set, then we return true. 7815 * @inner 7816 */ 7817 function didSwipeBackToCancel() { 7818 var cancelled = false; 7819 if (options.cancelThreshold !== null && direction !== null) { 7820 cancelled = (getMaxDistance(direction) - distance) >= options.cancelThreshold; 7821 } 7822 7823 return cancelled; 7824 } 7825 7826 /** 7827 * Checks the user has pinched far enough 7828 * @return Boolean if <code>pinchThreshold</code> has been set, return true if the threshold was met, else false. 7829 * If no threshold was set, then we return true. 7830 * @inner 7831 */ 7832 function validatePinchDistance() { 7833 if (options.pinchThreshold !== null) { 7834 return pinchDistance >= options.pinchThreshold; 7835 } 7836 return true; 7837 } 7838 7839 /** 7840 * Checks that the time taken to swipe meets the minimum / maximum requirements 7841 * @return Boolean 7842 * @inner 7843 */ 7844 function validateSwipeTime() { 7845 var result; 7846 //If no time set, then return true 7847 if (options.maxTimeThreshold) { 7848 if (duration >= options.maxTimeThreshold) { 7849 result = false; 7850 } else { 7851 result = true; 7852 } 7853 } else { 7854 result = true; 7855 } 7856 7857 return result; 7858 } 7859 7860 7861 /** 7862 * Checks direction of the swipe and the value allowPageScroll to see if we should allow or prevent the default behaviour from occurring. 7863 * This will essentially allow page scrolling or not when the user is swiping on a touchSwipe object. 7864 * @param {object} jqEvent The normalised jQuery representation of the event object. 7865 * @param {string} direction The direction of the event. See {@link $.fn.swipe.directions} 7866 * @see $.fn.swipe.directions 7867 * @inner 7868 */ 7869 function validateDefaultEvent(jqEvent, direction) { 7870 7871 //If the option is set, allways allow the event to bubble up (let user handle weirdness) 7872 if (options.preventDefaultEvents === false) { 7873 return; 7874 } 7875 7876 if (options.allowPageScroll === NONE) { 7877 jqEvent.preventDefault(); 7878 } else { 7879 var auto = options.allowPageScroll === AUTO; 7880 7881 switch (direction) { 7882 case LEFT: 7883 if ((options.swipeLeft && auto) || (!auto && options.allowPageScroll != HORIZONTAL)) { 7884 jqEvent.preventDefault(); 7885 } 7886 break; 7887 7888 case RIGHT: 7889 if ((options.swipeRight && auto) || (!auto && options.allowPageScroll != HORIZONTAL)) { 7890 jqEvent.preventDefault(); 7891 } 7892 break; 7893 7894 case UP: 7895 if ((options.swipeUp && auto) || (!auto && options.allowPageScroll != VERTICAL)) { 7896 jqEvent.preventDefault(); 7897 } 7898 break; 7899 7900 case DOWN: 7901 if ((options.swipeDown && auto) || (!auto && options.allowPageScroll != VERTICAL)) { 7902 jqEvent.preventDefault(); 7903 } 7904 break; 7905 7906 case NONE: 7907 7908 break; 7909 } 7910 } 7911 } 7912 7913 7914 // PINCHES 7915 /** 7916 * Returns true of the current pinch meets the thresholds 7917 * @return Boolean 7918 * @inner 7919 */ 7920 function validatePinch() { 7921 var hasCorrectFingerCount = validateFingers(); 7922 var hasEndPoint = validateEndPoint(); 7923 var hasCorrectDistance = validatePinchDistance(); 7924 return hasCorrectFingerCount && hasEndPoint && hasCorrectDistance; 7925 7926 } 7927 7928 /** 7929 * Returns true if any Pinch events have been registered 7930 * @return Boolean 7931 * @inner 7932 */ 7933 function hasPinches() { 7934 //Enure we dont return 0 or null for false values 7935 return !!(options.pinchStatus || options.pinchIn || options.pinchOut); 7936 } 7937 7938 /** 7939 * Returns true if we are detecting pinches, and have one 7940 * @return Boolean 7941 * @inner 7942 */ 7943 function didPinch() { 7944 //Enure we dont return 0 or null for false values 7945 return !!(validatePinch() && hasPinches()); 7946 } 7947 7948 7949 7950 7951 // SWIPES 7952 /** 7953 * Returns true if the current swipe meets the thresholds 7954 * @return Boolean 7955 * @inner 7956 */ 7957 function validateSwipe() { 7958 //Check validity of swipe 7959 var hasValidTime = validateSwipeTime(); 7960 var hasValidDistance = validateSwipeDistance(); 7961 var hasCorrectFingerCount = validateFingers(); 7962 var hasEndPoint = validateEndPoint(); 7963 var didCancel = didSwipeBackToCancel(); 7964 7965 // if the user swiped more than the minimum length, perform the appropriate action 7966 // hasValidDistance is null when no distance is set 7967 var valid = !didCancel && hasEndPoint && hasCorrectFingerCount && hasValidDistance && hasValidTime; 7968 7969 return valid; 7970 } 7971 7972 /** 7973 * Returns true if any Swipe events have been registered 7974 * @return Boolean 7975 * @inner 7976 */ 7977 function hasSwipes() { 7978 //Enure we dont return 0 or null for false values 7979 return !!(options.swipe || options.swipeStatus || options.swipeLeft || options.swipeRight || options.swipeUp || options.swipeDown); 7980 } 7981 7982 7983 /** 7984 * Returns true if we are detecting swipes and have one 7985 * @return Boolean 7986 * @inner 7987 */ 7988 function didSwipe() { 7989 //Enure we dont return 0 or null for false values 7990 return !!(validateSwipe() && hasSwipes()); 7991 } 7992 7993 /** 7994 * Returns true if we have matched the number of fingers we are looking for 7995 * @return Boolean 7996 * @inner 7997 */ 7998 function validateFingers() { 7999 //The number of fingers we want were matched, or on desktop we ignore 8000 return ((fingerCount === options.fingers || options.fingers === ALL_FINGERS) || !SUPPORTS_TOUCH); 8001 } 8002 8003 /** 8004 * Returns true if we have an end point for the swipe 8005 * @return Boolean 8006 * @inner 8007 */ 8008 function validateEndPoint() { 8009 //We have an end value for the finger 8010 return fingerData[0].end.x !== 0; 8011 } 8012 8013 // TAP / CLICK 8014 /** 8015 * Returns true if a click / tap events have been registered 8016 * @return Boolean 8017 * @inner 8018 */ 8019 function hasTap() { 8020 //Enure we dont return 0 or null for false values 8021 return !!(options.tap); 8022 } 8023 8024 /** 8025 * Returns true if a double tap events have been registered 8026 * @return Boolean 8027 * @inner 8028 */ 8029 function hasDoubleTap() { 8030 //Enure we dont return 0 or null for false values 8031 return !!(options.doubleTap); 8032 } 8033 8034 /** 8035 * Returns true if any long tap events have been registered 8036 * @return Boolean 8037 * @inner 8038 */ 8039 function hasLongTap() { 8040 //Enure we dont return 0 or null for false values 8041 return !!(options.longTap); 8042 } 8043 8044 /** 8045 * Returns true if we could be in the process of a double tap (one tap has occurred, we are listening for double taps, and the threshold hasn't past. 8046 * @return Boolean 8047 * @inner 8048 */ 8049 function validateDoubleTap() { 8050 if (doubleTapStartTime == null) { 8051 return false; 8052 } 8053 var now = getTimeStamp(); 8054 return (hasDoubleTap() && ((now - doubleTapStartTime) <= options.doubleTapThreshold)); 8055 } 8056 8057 /** 8058 * Returns true if we could be in the process of a double tap (one tap has occurred, we are listening for double taps, and the threshold hasn't past. 8059 * @return Boolean 8060 * @inner 8061 */ 8062 function inDoubleTap() { 8063 return validateDoubleTap(); 8064 } 8065 8066 8067 /** 8068 * Returns true if we have a valid tap 8069 * @return Boolean 8070 * @inner 8071 */ 8072 function validateTap() { 8073 return ((fingerCount === 1 || !SUPPORTS_TOUCH) && (isNaN(distance) || distance < options.threshold)); 8074 } 8075 8076 /** 8077 * Returns true if we have a valid long tap 8078 * @return Boolean 8079 * @inner 8080 */ 8081 function validateLongTap() { 8082 //slight threshold on moving finger 8083 return ((duration > options.longTapThreshold) && (distance < DOUBLE_TAP_THRESHOLD)); 8084 } 8085 8086 /** 8087 * Returns true if we are detecting taps and have one 8088 * @return Boolean 8089 * @inner 8090 */ 8091 function didTap() { 8092 //Enure we dont return 0 or null for false values 8093 return !!(validateTap() && hasTap()); 8094 } 8095 8096 8097 /** 8098 * Returns true if we are detecting double taps and have one 8099 * @return Boolean 8100 * @inner 8101 */ 8102 function didDoubleTap() { 8103 //Enure we dont return 0 or null for false values 8104 return !!(validateDoubleTap() && hasDoubleTap()); 8105 } 8106 8107 /** 8108 * Returns true if we are detecting long taps and have one 8109 * @return Boolean 8110 * @inner 8111 */ 8112 function didLongTap() { 8113 //Enure we dont return 0 or null for false values 8114 return !!(validateLongTap() && hasLongTap()); 8115 } 8116 8117 8118 8119 8120 // MULTI FINGER TOUCH 8121 /** 8122 * Starts tracking the time between 2 finger releases, and keeps track of how many fingers we initially had up 8123 * @inner 8124 */ 8125 function startMultiFingerRelease(event) { 8126 previousTouchEndTime = getTimeStamp(); 8127 fingerCountAtRelease = event.touches.length + 1; 8128 } 8129 8130 /** 8131 * Cancels the tracking of time between 2 finger releases, and resets counters 8132 * @inner 8133 */ 8134 function cancelMultiFingerRelease() { 8135 previousTouchEndTime = 0; 8136 fingerCountAtRelease = 0; 8137 } 8138 8139 /** 8140 * Checks if we are in the threshold between 2 fingers being released 8141 * @return Boolean 8142 * @inner 8143 */ 8144 function inMultiFingerRelease() { 8145 8146 var withinThreshold = false; 8147 8148 if (previousTouchEndTime) { 8149 var diff = getTimeStamp() - previousTouchEndTime 8150 if (diff <= options.fingerReleaseThreshold) { 8151 withinThreshold = true; 8152 } 8153 } 8154 8155 return withinThreshold; 8156 } 8157 8158 8159 /** 8160 * gets a data flag to indicate that a touch is in progress 8161 * @return Boolean 8162 * @inner 8163 */ 8164 function getTouchInProgress() { 8165 //strict equality to ensure only true and false are returned 8166 return !!($element.data(PLUGIN_NS + '_intouch') === true); 8167 } 8168 8169 /** 8170 * Sets a data flag to indicate that a touch is in progress 8171 * @param {boolean} val The value to set the property to 8172 * @inner 8173 */ 8174 function setTouchInProgress(val) { 8175 8176 //If destroy is called in an event handler, we have no el, and we have already cleaned up, so return. 8177 if(!$element) { return; } 8178 8179 //Add or remove event listeners depending on touch status 8180 if (val === true) { 8181 $element.on(MOVE_EV, touchMove); 8182 $element.on(END_EV, touchEnd); 8183 8184 //we only have leave events on desktop, we manually calcuate leave on touch as its not supported in webkit 8185 if (LEAVE_EV) { 8186 $element.on(LEAVE_EV, touchLeave); 8187 } 8188 } else { 8189 8190 $element.off(MOVE_EV, touchMove, false); 8191 $element.off(END_EV, touchEnd, false); 8192 8193 //we only have leave events on desktop, we manually calcuate leave on touch as its not supported in webkit 8194 if (LEAVE_EV) { 8195 $element.off(LEAVE_EV, touchLeave, false); 8196 } 8197 } 8198 8199 8200 //strict equality to ensure only true and false can update the value 8201 $element.data(PLUGIN_NS + '_intouch', val === true); 8202 } 8203 8204 8205 /** 8206 * Creates the finger data for the touch/finger in the event object. 8207 * @param {int} id The id to store the finger data under (usually the order the fingers were pressed) 8208 * @param {object} evt The event object containing finger data 8209 * @return finger data object 8210 * @inner 8211 */ 8212 function createFingerData(id, evt) { 8213 var f = { 8214 start: { 8215 x: 0, 8216 y: 0 8217 }, 8218 last: { 8219 x: 0, 8220 y: 0 8221 }, 8222 end: { 8223 x: 0, 8224 y: 0 8225 } 8226 }; 8227 f.start.x = f.last.x = f.end.x = evt.pageX || evt.clientX; 8228 f.start.y = f.last.y = f.end.y = evt.pageY || evt.clientY; 8229 fingerData[id] = f; 8230 return f; 8231 } 8232 8233 /** 8234 * Updates the finger data for a particular event object 8235 * @param {object} evt The event object containing the touch/finger data to upadte 8236 * @return a finger data object. 8237 * @inner 8238 */ 8239 function updateFingerData(evt) { 8240 var id = evt.identifier !== undefined ? evt.identifier : 0; 8241 var f = getFingerData(id); 8242 8243 if (f === null) { 8244 f = createFingerData(id, evt); 8245 } 8246 8247 f.last.x = f.end.x; 8248 f.last.y = f.end.y; 8249 8250 f.end.x = evt.pageX || evt.clientX; 8251 f.end.y = evt.pageY || evt.clientY; 8252 8253 return f; 8254 } 8255 8256 /** 8257 * Returns a finger data object by its event ID. 8258 * Each touch event has an identifier property, which is used 8259 * to track repeat touches 8260 * @param {int} id The unique id of the finger in the sequence of touch events. 8261 * @return a finger data object. 8262 * @inner 8263 */ 8264 function getFingerData(id) { 8265 return fingerData[id] || null; 8266 } 8267 8268 8269 /** 8270 * Sets the maximum distance swiped in the given direction. 8271 * If the new value is lower than the current value, the max value is not changed. 8272 * @param {string} direction The direction of the swipe 8273 * @param {int} distance The distance of the swipe 8274 * @inner 8275 */ 8276 function setMaxDistance(direction, distance) { 8277 if(direction==NONE) return; 8278 distance = Math.max(distance, getMaxDistance(direction)); 8279 maximumsMap[direction].distance = distance; 8280 } 8281 8282 /** 8283 * gets the maximum distance swiped in the given direction. 8284 * @param {string} direction The direction of the swipe 8285 * @return int The distance of the swipe 8286 * @inner 8287 */ 8288 function getMaxDistance(direction) { 8289 if (maximumsMap[direction]) return maximumsMap[direction].distance; 8290 return undefined; 8291 } 8292 8293 /** 8294 * Creats a map of directions to maximum swiped values. 8295 * @return Object A dictionary of maximum values, indexed by direction. 8296 * @inner 8297 */ 8298 function createMaximumsData() { 8299 var maxData = {}; 8300 maxData[LEFT] = createMaximumVO(LEFT); 8301 maxData[RIGHT] = createMaximumVO(RIGHT); 8302 maxData[UP] = createMaximumVO(UP); 8303 maxData[DOWN] = createMaximumVO(DOWN); 8304 8305 return maxData; 8306 } 8307 8308 /** 8309 * Creates a map maximum swiped values for a given swipe direction 8310 * @param {string} The direction that these values will be associated with 8311 * @return Object Maximum values 8312 * @inner 8313 */ 8314 function createMaximumVO(dir) { 8315 return { 8316 direction: dir, 8317 distance: 0 8318 } 8319 } 8320 8321 8322 // 8323 // MATHS / UTILS 8324 // 8325 8326 /** 8327 * Calculate the duration of the swipe 8328 * @return int 8329 * @inner 8330 */ 8331 function calculateDuration() { 8332 return endTime - startTime; 8333 } 8334 8335 /** 8336 * Calculate the distance between 2 touches (pinch) 8337 * @param {point} startPoint A point object containing x and y co-ordinates 8338 * @param {point} endPoint A point object containing x and y co-ordinates 8339 * @return int; 8340 * @inner 8341 */ 8342 function calculateTouchesDistance(startPoint, endPoint) { 8343 var diffX = Math.abs(startPoint.x - endPoint.x); 8344 var diffY = Math.abs(startPoint.y - endPoint.y); 8345 8346 return Math.round(Math.sqrt(diffX * diffX + diffY * diffY)); 8347 } 8348 8349 /** 8350 * Calculate the zoom factor between the start and end distances 8351 * @param {int} startDistance Distance (between 2 fingers) the user started pinching at 8352 * @param {int} endDistance Distance (between 2 fingers) the user ended pinching at 8353 * @return float The zoom value from 0 to 1. 8354 * @inner 8355 */ 8356 function calculatePinchZoom(startDistance, endDistance) { 8357 var percent = (endDistance / startDistance) * 1; 8358 return percent.toFixed(2); 8359 } 8360 8361 8362 /** 8363 * Returns the pinch direction, either IN or OUT for the given points 8364 * @return string Either {@link $.fn.swipe.directions.IN} or {@link $.fn.swipe.directions.OUT} 8365 * @see $.fn.swipe.directions 8366 * @inner 8367 */ 8368 function calculatePinchDirection() { 8369 if (pinchZoom < 1) { 8370 return OUT; 8371 } else { 8372 return IN; 8373 } 8374 } 8375 8376 8377 /** 8378 * Calculate the length / distance of the swipe 8379 * @param {point} startPoint A point object containing x and y co-ordinates 8380 * @param {point} endPoint A point object containing x and y co-ordinates 8381 * @return int 8382 * @inner 8383 */ 8384 function calculateDistance(startPoint, endPoint) { 8385 return Math.round(Math.sqrt(Math.pow(endPoint.x - startPoint.x, 2) + Math.pow(endPoint.y - startPoint.y, 2))); 8386 } 8387 8388 /** 8389 * Calculate the angle of the swipe 8390 * @param {point} startPoint A point object containing x and y co-ordinates 8391 * @param {point} endPoint A point object containing x and y co-ordinates 8392 * @return int 8393 * @inner 8394 */ 8395 function calculateAngle(startPoint, endPoint) { 8396 var x = startPoint.x - endPoint.x; 8397 var y = endPoint.y - startPoint.y; 8398 var r = Math.atan2(y, x); //radians 8399 var angle = Math.round(r * 180 / Math.PI); //degrees 8400 8401 //ensure value is positive 8402 if (angle < 0) { 8403 angle = 360 - Math.abs(angle); 8404 } 8405 8406 return angle; 8407 } 8408 8409 /** 8410 * Calculate the direction of the swipe 8411 * This will also call calculateAngle to get the latest angle of swipe 8412 * @param {point} startPoint A point object containing x and y co-ordinates 8413 * @param {point} endPoint A point object containing x and y co-ordinates 8414 * @return string Either {@link $.fn.swipe.directions.LEFT} / {@link $.fn.swipe.directions.RIGHT} / {@link $.fn.swipe.directions.DOWN} / {@link $.fn.swipe.directions.UP} 8415 * @see $.fn.swipe.directions 8416 * @inner 8417 */ 8418 function calculateDirection(startPoint, endPoint) { 8419 8420 if( comparePoints(startPoint, endPoint) ) { 8421 return NONE; 8422 } 8423 8424 var angle = calculateAngle(startPoint, endPoint); 8425 8426 if ((angle <= 45) && (angle >= 0)) { 8427 return LEFT; 8428 } else if ((angle <= 360) && (angle >= 315)) { 8429 return LEFT; 8430 } else if ((angle >= 135) && (angle <= 225)) { 8431 return RIGHT; 8432 } else if ((angle > 45) && (angle < 135)) { 8433 return DOWN; 8434 } else { 8435 return UP; 8436 } 8437 } 8438 8439 8440 /** 8441 * Returns a MS time stamp of the current time 8442 * @return int 8443 * @inner 8444 */ 8445 function getTimeStamp() { 8446 var now = new Date(); 8447 return now.getTime(); 8448 } 8449 8450 8451 8452 /** 8453 * Returns a bounds object with left, right, top and bottom properties for the element specified. 8454 * @param {DomNode} The DOM node to get the bounds for. 8455 */ 8456 function getbounds(el) { 8457 el = $(el); 8458 var offset = el.offset(); 8459 8460 var bounds = { 8461 left: offset.left, 8462 right: offset.left + el.outerWidth(), 8463 top: offset.top, 8464 bottom: offset.top + el.outerHeight() 8465 } 8466 8467 return bounds; 8468 } 8469 8470 8471 /** 8472 * Checks if the point object is in the bounds object. 8473 * @param {object} point A point object. 8474 * @param {int} point.x The x value of the point. 8475 * @param {int} point.y The x value of the point. 8476 * @param {object} bounds The bounds object to test 8477 * @param {int} bounds.left The leftmost value 8478 * @param {int} bounds.right The righttmost value 8479 * @param {int} bounds.top The topmost value 8480 * @param {int} bounds.bottom The bottommost value 8481 */ 8482 function isInBounds(point, bounds) { 8483 return (point.x > bounds.left && point.x < bounds.right && point.y > bounds.top && point.y < bounds.bottom); 8484 }; 8485 8486 /** 8487 * Checks if the two points are equal 8488 * @param {object} point A point object. 8489 * @param {object} point B point object. 8490 * @return true of the points match 8491 */ 8492 function comparePoints(pointA, pointB) { 8493 return (pointA.x == pointB.x && pointA.y == pointB.y); 8494 } 8495 8496 8497 } 8498 8499 8500 8501 8502 /** 8503 * A catch all handler that is triggered for all swipe directions. 8504 * @name $.fn.swipe#swipe 8505 * @event 8506 * @default null 8507 * @param {EventObject} event The original event object 8508 * @param {int} direction The direction the user swiped in. See {@link $.fn.swipe.directions} 8509 * @param {int} distance The distance the user swiped 8510 * @param {int} duration The duration of the swipe in milliseconds 8511 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8512 * @param {object} fingerData The coordinates of fingers in event 8513 * @param {string} currentDirection The current direction the user is swiping. 8514 */ 8515 8516 8517 8518 8519 /** 8520 * A handler that is triggered for "left" swipes. 8521 * @name $.fn.swipe#swipeLeft 8522 * @event 8523 * @default null 8524 * @param {EventObject} event The original event object 8525 * @param {int} direction The direction the user swiped in. See {@link $.fn.swipe.directions} 8526 * @param {int} distance The distance the user swiped 8527 * @param {int} duration The duration of the swipe in milliseconds 8528 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8529 * @param {object} fingerData The coordinates of fingers in event 8530 * @param {string} currentDirection The current direction the user is swiping. 8531 */ 8532 8533 /** 8534 * A handler that is triggered for "right" swipes. 8535 * @name $.fn.swipe#swipeRight 8536 * @event 8537 * @default null 8538 * @param {EventObject} event The original event object 8539 * @param {int} direction The direction the user swiped in. See {@link $.fn.swipe.directions} 8540 * @param {int} distance The distance the user swiped 8541 * @param {int} duration The duration of the swipe in milliseconds 8542 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8543 * @param {object} fingerData The coordinates of fingers in event 8544 * @param {string} currentDirection The current direction the user is swiping. 8545 */ 8546 8547 /** 8548 * A handler that is triggered for "up" swipes. 8549 * @name $.fn.swipe#swipeUp 8550 * @event 8551 * @default null 8552 * @param {EventObject} event The original event object 8553 * @param {int} direction The direction the user swiped in. See {@link $.fn.swipe.directions} 8554 * @param {int} distance The distance the user swiped 8555 * @param {int} duration The duration of the swipe in milliseconds 8556 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8557 * @param {object} fingerData The coordinates of fingers in event 8558 * @param {string} currentDirection The current direction the user is swiping. 8559 */ 8560 8561 /** 8562 * A handler that is triggered for "down" swipes. 8563 * @name $.fn.swipe#swipeDown 8564 * @event 8565 * @default null 8566 * @param {EventObject} event The original event object 8567 * @param {int} direction The direction the user swiped in. See {@link $.fn.swipe.directions} 8568 * @param {int} distance The distance the user swiped 8569 * @param {int} duration The duration of the swipe in milliseconds 8570 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8571 * @param {object} fingerData The coordinates of fingers in event 8572 * @param {string} currentDirection The current direction the user is swiping. 8573 */ 8574 8575 /** 8576 * A handler triggered for every phase of the swipe. This handler is constantly fired for the duration of the pinch. 8577 * This is triggered regardless of swipe thresholds. 8578 * @name $.fn.swipe#swipeStatus 8579 * @event 8580 * @default null 8581 * @param {EventObject} event The original event object 8582 * @param {string} phase The phase of the swipe event. See {@link $.fn.swipe.phases} 8583 * @param {string} direction The direction the user swiped in. This is null if the user has yet to move. See {@link $.fn.swipe.directions} 8584 * @param {int} distance The distance the user swiped. This is 0 if the user has yet to move. 8585 * @param {int} duration The duration of the swipe in milliseconds 8586 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8587 * @param {object} fingerData The coordinates of fingers in event 8588 * @param {string} currentDirection The current direction the user is swiping. 8589 */ 8590 8591 /** 8592 * A handler triggered for pinch in events. 8593 * @name $.fn.swipe#pinchIn 8594 * @event 8595 * @default null 8596 * @param {EventObject} event The original event object 8597 * @param {int} direction The direction the user pinched in. See {@link $.fn.swipe.directions} 8598 * @param {int} distance The distance the user pinched 8599 * @param {int} duration The duration of the swipe in milliseconds 8600 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8601 * @param {int} zoom The zoom/scale level the user pinched too, 0-1. 8602 * @param {object} fingerData The coordinates of fingers in event 8603 */ 8604 8605 /** 8606 * A handler triggered for pinch out events. 8607 * @name $.fn.swipe#pinchOut 8608 * @event 8609 * @default null 8610 * @param {EventObject} event The original event object 8611 * @param {int} direction The direction the user pinched in. See {@link $.fn.swipe.directions} 8612 * @param {int} distance The distance the user pinched 8613 * @param {int} duration The duration of the swipe in milliseconds 8614 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8615 * @param {int} zoom The zoom/scale level the user pinched too, 0-1. 8616 * @param {object} fingerData The coordinates of fingers in event 8617 */ 8618 8619 /** 8620 * A handler triggered for all pinch events. This handler is constantly fired for the duration of the pinch. This is triggered regardless of thresholds. 8621 * @name $.fn.swipe#pinchStatus 8622 * @event 8623 * @default null 8624 * @param {EventObject} event The original event object 8625 * @param {int} direction The direction the user pinched in. See {@link $.fn.swipe.directions} 8626 * @param {int} distance The distance the user pinched 8627 * @param {int} duration The duration of the swipe in milliseconds 8628 * @param {int} fingerCount The number of fingers used. See {@link $.fn.swipe.fingers} 8629 * @param {int} zoom The zoom/scale level the user pinched too, 0-1. 8630 * @param {object} fingerData The coordinates of fingers in event 8631 */ 8632 8633 /** 8634 * A click handler triggered when a user simply clicks, rather than swipes on an element. 8635 * This is deprecated since version 1.6.2, any assignment to click will be assigned to the tap handler. 8636 * You cannot use <code>on</code> to bind to this event as the default jQ <code>click</code> event will be triggered. 8637 * Use the <code>tap</code> event instead. 8638 * @name $.fn.swipe#click 8639 * @event 8640 * @deprecated since version 1.6.2, please use {@link $.fn.swipe#tap} instead 8641 * @default null 8642 * @param {EventObject} event The original event object 8643 * @param {DomObject} target The element clicked on. 8644 */ 8645 8646 /** 8647 * A click / tap handler triggered when a user simply clicks or taps, rather than swipes on an element. 8648 * @name $.fn.swipe#tap 8649 * @event 8650 * @default null 8651 * @param {EventObject} event The original event object 8652 * @param {DomObject} target The element clicked on. 8653 */ 8654 8655 /** 8656 * A double tap handler triggered when a user double clicks or taps on an element. 8657 * You can set the time delay for a double tap with the {@link $.fn.swipe.defaults#doubleTapThreshold} property. 8658 * Note: If you set both <code>doubleTap</code> and <code>tap</code> handlers, the <code>tap</code> event will be delayed by the <code>doubleTapThreshold</code> 8659 * as the script needs to check if its a double tap. 8660 * @name $.fn.swipe#doubleTap 8661 * @see $.fn.swipe.defaults#doubleTapThreshold 8662 * @event 8663 * @default null 8664 * @param {EventObject} event The original event object 8665 * @param {DomObject} target The element clicked on. 8666 */ 8667 8668 /** 8669 * A long tap handler triggered once a tap has been release if the tap was longer than the longTapThreshold. 8670 * You can set the time delay for a long tap with the {@link $.fn.swipe.defaults#longTapThreshold} property. 8671 * @name $.fn.swipe#longTap 8672 * @see $.fn.swipe.defaults#longTapThreshold 8673 * @event 8674 * @default null 8675 * @param {EventObject} event The original event object 8676 * @param {DomObject} target The element clicked on. 8677 */ 8678 8679 /** 8680 * A hold tap handler triggered as soon as the longTapThreshold is reached 8681 * You can set the time delay for a long tap with the {@link $.fn.swipe.defaults#longTapThreshold} property. 8682 * @name $.fn.swipe#hold 8683 * @see $.fn.swipe.defaults#longTapThreshold 8684 * @event 8685 * @default null 8686 * @param {EventObject} event The original event object 8687 * @param {DomObject} target The element clicked on. 8688 */ 8689 8690}));
8691$(document).ready(function() { 8692 var $cardTiles, 8693 $window = $(window), 8694 $cardTileWrapper = $('.cmp-tile-wrapper'); 8695 8696 LOREM.articleList = function(elem){ 8697 var $elem = $(elem); 8698 var self = this; 8699 var $currentListOfArticles = $elem.closest('.cmp-tile-wrapper'); 8700 var noOfTilesPerRow = $currentListOfArticles.data('tiles-per-row'); 8701 self.mobile = window.matchMedia('(max-width: 767px)').matches; 8702 self.desktop = window.matchMedia('(min-width: 992px)').matches; 8703 self.tablet = window.matchMedia('(min-width: 768px) and (max-width: 991px)').matches; 8704 self.totalItemCount = $elem.find('.cmp-card-tile').length; 8705 self.loadOnScroll = $elem.find('.cmp-tile-list-wrap').data('loadOnScroll'); 8706 this.calcMaxHeight = function(){ 8707 if($elem.length) { 8708 $cardTiles = $elem.find('.cmp-card-tile'); 8709 if(self.desktop) { 8710 LOREM.options.bindListMaxHeight($cardTiles, noOfTilesPerRow || 3); 8711 } else if(self.tablet) { 8712 LOREM.options.bindListMaxHeight($cardTiles, noOfTilesPerRow || 2); 8713 } else { 8714 $cardTiles.css('height',''); 8715 } 8716 } 8717 }; 8718 this.makeArticlesVisible = function(initCount, lastCount, timer){ 8719 self.timer = timer || 200; 8720 self.initCount = initCount || 0;
8721 self.lastCount = lastCount || self.maxItems; 8722 8723 if ( self.initCount < self.lastCount ) { 8724 // this setTimeout is for lazy load of each tile 8725 setTimeout(function() { 8726 $elem.find('.cmp-tile-list').eq(initCount).addClass('make-tile-visible'); 8727 self.initCount += 1; 8728 self.shownItems = self.initCount; 8729 if(self.shownItems === self.totalItemCount) { 8730 $elem.find('.cmp-tile-btn-wrapper').hide(); 8731 } else { 8732 self.makeArticlesVisible(self.initCount, self.lastCount); 8733 self.calcMaxHeight(); 8734 } 8735 }, timer); 8736 } 8737 }; 8738 this.showArticleList = function() { 8739 // function for initial visible items of the article list 8740 var $self, 8741 $loadMoreLink = $elem.find('.article-list-loadmore'); 8742 $elem.find('.cmp-tile-list-wrap').each(function() { 8743 $self = $(this); 8744 self.maxItems = $self.data('maxItems') || $self.find('.cmp-card-tile').length; 8745 self.loadMore = $self.data('loadMore') || $self.find('.cmp-card-tile').length; 8746 for(var i=0; i<self.maxItems; i++) { 8747 $self.find('.cmp-tile-list').eq(i).addClass('showTile'); 8748 } 8749 }); 8750 self.makeArticlesVisible(0, self.maxItems, 200); 8751 if(!self.loadOnScroll) { 8752 $loadMoreLink.on('click', self.onClickLoadMore); 8753 } else { 8754 self.onScrollLoadItems($self); 8755 } 8756 }; 8757 this.onClickLoadMore = function(e) { 8758 // function for displaying load more items after button click 8759 e.preventDefault(); 8760 var $self = $(this); 8761 self.lastIndexItem = self.shownItems + self.loadMore; 8762 for(var i=self.shownItems; i<self.lastIndexItem; i++) { 8763 if ( i <= self.totalItemCount ) { 8764 $self.closest('.cmp-tile-wrapper').find('.cmp-tile-list').eq(i).addClass('showTile'); 8765 } 8766 } 8767 self.makeArticlesVisible(self.shownItems, self.lastIndexItem, 200); 8768 self.calcMaxHeight(); 8769 }; 8770 this.canLoad = true; 8771 this.loadTile = function(i, countLen, $selfCmpTileListWrap) { 8772 // function for load items on scroll 8773 if ( i < countLen && self.canLoad ) { 8774 self.canLoad = false; 8775 $selfCmpTileListWrap.find('.cmp-tile-list').eq(i + 1).addClass('showTile').attr('data-loaded', true); 8776 self.loadTimeout = setTimeout(function(){ 8777 $selfCmpTileListWrap.find('.cmp-tile-list').eq(i + 1).addClass('make-tile-visible'); 8778 self.calcMaxHeight(); 8779 i += 1; 8780 if ( i <= countLen ) { 8781 self.canLoad = true; 8782 } 8783 self.loadTile(i, countLen, $selfCmpTileListWrap); 8784 }, self.timer || 200); 8785 } 8786 }; 8787 this.onScrollLoadItems = function($elem) { 8788 // function for displaying load more tiles on scroll 8789 var $selfCmpTileListWrap = $elem.closest('.cmp-tile-wrapper'), 8790 countLen; 8791 self.itemsOnScrollDesktop = parseInt($selfCmpTileListWrap.find('.load-items-on-scroll-desktop').val()) || 3; 8792 self.itemsOnScrollTablet = parseInt($selfCmpTileListWrap.find('.load-items-on-scroll-tablet').val()) || 2; 8793 self.itemsOnScrollMobile = parseInt($selfCmpTileListWrap.find('.load-items-on-scroll-mobile').val()) || 1; 8794 $window.on('resize scroll', function() { 8795 var $last = $selfCmpTileListWrap.find('.cmp-tile-list.showTile').last(); 8796 self.scrollIndex = $last.index(); 8797 if(LOREM.options.isInViewport($last) && self.scrollIndex+1 !== $selfCmpTileListWrap.find('.cmp-tile-list').length) { 8798 if(self.desktop) { 8799 countLen = self.scrollIndex + self.itemsOnScrollDesktop; 8800 } else if(self.tablet) { 8801 countLen = self.scrollIndex + self.itemsOnScrollTablet; 8802 } 8803 else { 8804 countLen = self.scrollIndex + self.itemsOnScrollMobile; 8805 } 8806 if(self.scrollIndex < $selfCmpTileListWrap.find('.cmp-tile-list').length) { 8807 self.loadTile(self.scrollIndex, countLen, $selfCmpTileListWrap); 8808 } 8809 } 8810 }); 8811 }; 8812 this.calcWidthPerRow = function($elem){ 8813 if (!LOREM.devices.isMobile()) { 8814 if(noOfTilesPerRow!==undefined){ 8815 var dynamicTileWidth = $cardTileWrapper.width() / noOfTilesPerRow; 8816 $currentListOfArticles.find('.cmp-tile-list').css('width',dynamicTileWidth+'px'); 8817 } 8818 }else{ 8819 $currentListOfArticles.find('.cmp-tile-list').css('width','100%'); 8820 } 8821 }; 8822 $(window).on('resize', function(){ 8823 self.calcMaxHeight(); 8824 self.mobile = window.matchMedia('(max-width: 767px)').matches; 8825 self.desktop = window.matchMedia('(min-width: 992px)').matches; 8826 self.tablet = window.matchMedia('(min-width: 768px) and (max-width: 991px)').matches; 8827 self.calcWidthPerRow($(this)); 8828 }); 8829 this.calcMaxHeight(); 8830 this.showArticleList(); 8831 }; 8832 8833 if($cardTileWrapper.length) { 8834 var $this; 8835 $cardTileWrapper.each(function(){ 8836 $this = $(this); 8837 new LOREM.articleList($this).calcWidthPerRow($this); 8838 if ( !$this.attr('data-processed') ) { 8839 $this.attr('data-processed', 'true'); 8840 new LOREM.articleList($this); 8841 } 8842 }); 8843 } 8844 LOREM.options._shuffleTiles($('[data-tiles-shuffle]')); 8845 if($('.cmp-card-tile.cursorclick').length>0){ 8846 LOREM.options._entireTileClickable($('.cmp-card-tile.cursorclick'),'.cmp-article-list-fullview-link'); 8847 } 8848}); 8849 8850function MouseWheelHandler(e, element) { 8851 var delta = 0; 8852 if (typeof e === 'number') { 8853 delta = e; 8854 } else { 8855 if (e.deltaX !== 0) { 8856 delta = e.deltaX; 8857 } else { 8858 delta = e.deltaY; 8859 } 8860 e.preventDefault(); 8861 } 8862 8863 element.scrollLeft -= (delta); 8864 8865} 8866 8867window.onload = function() { 8868 $('.cmp-carousel-container').each(function() { 8869 if($('.article-tile-items div.cmp-card-tile').length < 5){ 8870 $('.control-container').hide(); 8871 } 8872 var articleTileWidth = $('.article-tile-items').find('[data-sli
8872deTiles]').outerWidth(true); 8873 var carouselId= $(this).attr('id'), 8874 carousel = {}; 8875 carousel.e =document.getElementById(carouselId); 8876 var articleItem = $('#'+carouselId).find('.article-tile-items').attr('id'); 8877 carousel.items = document.getElementById(articleItem); 8878 var articleItemLeft = $('#'+carouselId).find('.left-scroll').attr('id'); 8879 carousel.leftScroll = document.getElementById(articleItemLeft); 8880 var articleItemRight = $('#'+carouselId).find('.right-scroll').attr('id'); 8881 carousel.rightScroll = document.getElementById(articleItemRight); 8882 8883 if(carousel.items){ 8884 carousel.items.addEventListener("mousewheel", handleMouse, false); 8885 carousel.items.addEventListener("scroll", scrollEvent); 8886 carousel.leftScroll.addEventListener("click", leftScrollClick); 8887 carousel.rightScroll.addEventListener("click", rightScrollClick); 8888 setMaxHeight(); 8889 setLeftScrollOpacity(); 8890 setRightScrollOpacity(); 8891 if ($(window).width() < 992) { 8892 mobileSwipe(); 8893 if($('.article-tile-items div.cmp-card-tile').length < 5){ 8894 $('.control-container').show(); 8895 } 8896 } 8897 } 8898 8899 function handleMouse(e) { 8900 MouseWheelHandler(e, carousel.items); 8901 } 8902 8903 function leftScrollClick() { 8904 MouseWheelHandler(articleTileWidth, carousel.items); 8905 } 8906 8907 function rightScrollClick() { 8908 MouseWheelHandler(-articleTileWidth, carousel.items); 8909 } 8910 8911 function scrollEvent(e) { 8912 setLeftScrollOpacity(); 8913 setRightScrollOpacity(); 8914 } 8915 8916 function setLeftScrollOpacity() { 8917 if (isScrolledAllLeft()) { 8918 carousel.leftScroll.style.opacity = 0; 8919 } else { 8920 carousel.leftScroll.style.opacity = 1; 8921 } 8922 } 8923 8924 function isScrolledAllLeft() { 8925 if (carousel.items.scrollLeft === 0) { 8926 return true; 8927 } else { 8928 return false; 8929 } 8930 } 8931 8932 function isScrolledAllRight() { 8933 if (carousel.items.scrollWidth > carousel.items.offsetWidth) { 8934 if (carousel.items.scrollLeft + carousel.items.offsetWidth === carousel.items.scrollWidth) { 8935 return true; 8936 } 8937 } 8938 return false; 8939 } 8940 8941 function setRightScrollOpacity() { 8942 if (isScrolledAllRight()){ 8943 carousel.rightScroll.style.opacity = 0; 8944 } else { 8945 carousel.rightScroll.style.opacity = 1; 8946 } 8947 } 8948 function setMaxHeight(){ 8949 var maxHeight = -1; 8950 var articleContainer = $('.article-tile-item-container'); 8951 articleContainer.each(function() { 8952 maxHeight = maxHeight > $(this).height() ? maxHeight : $(this).height(); 8953 $(this).height(maxHeight); 8954 }); 8955 } 8956 function mobileSwipe(){ 8957 $('#'+carouselId).swipe({ 8958 swipe:function(event, direction) { 8959 if (direction == "left") { 8960 rightScrollClick(); 8961 } 8962 if (direction == "right") { 8963 leftScrollClick(); 8964 } 8965 8966 }, 8967 threshold:0 8968 }); 8969} 8970 }); 8971} 8972 8973 8974 8975var LOREM = window.LOREM = LOREM || {}; 8976var modalVideoPageUrl; 8977LOREM.MediaGalleryModal = { 8978 _handleplaceholders:function(){ 8979 if($('.place-holder').length >0){ 8980 var targetElem = $('.media-gallery-tile.hoveredtile'); 8981 var titleText = targetElem.find('.card-title').html(); 8982 var descText = targetElem.find('.card-text').html(); 8983 $('.placeholder').each(function(){ 8984 if($(this).hasClass("media-gallery-article-title")){ 8985 $('.media-gallery-article-title').append(titleText); 8986 } 8987 else if($(this).hasClass("media-gallery-article-description")){ 8988 $('.media-gallery-article-description').append(descText); 8989 } 8990 else if($(this).hasClass("media-gallery-article-video")){ 8991 LOREM.MediaGalleryModal._videoFetch($(this)); 8992 } 8993 }); 8994 if(personolizedElem === true){ 8995 $('.place-holder').addClass('media-gallery-modal'); 8996 LOREM.dataPersonolization._init(); 8997 } 8998 } 8999 }, 9000 _videoFetch:function($this){ 9001 var targetElem = $('.media-gallery-tile.hoveredtile'); 9002 var ajaxUrlFetch = targetElem.find('.card-video-url').attr('href'); 9003 if(ajaxUrlFetch != undefined){ 9004 $this.addClass('modal-video-exists'); 9005 $.ajax({ 9006 url: ajaxUrlFetch, 9007 type: 'GET', 9008 contentType: 'text/plain', 9009 dataType: 'html', 9010 success: function(data) { 9011 $('.place-holder').find('.media-gallery-article-video').append(data); 9012 if(personolizedElem === true){ 9013 LOREM.personolizationVideoHandler._initOnLoad(); 9014 LOREM.personolizationHandler._init(); 9015 } 9016 } 9017 }); 9018 $('#genericLightbox').on('hide.bs.modal', function () { 9019 if($('.media-gallery-tile').hasClass('hoveredtile')){ 9020 $('.media-gallery-tile').removeClass('hoveredtile'); 9021 } 9022 if($('.placeholder .cmp-video').length >0){ 9023 jwplayer().stop(); 9024 } 9025 }); 9026 } 9027 }, 9028 _videoClose:function(){ 9029 if($('.placeholder .cmp-video').length >0){ 9030 jwplayer().stop(); 9031 } 9032 } 9033} 9034$(document).ready(function() { 9035 var deepLinkParameter = window.location.href.split('#')[1]; 9036 var dataArticleIdentifier = $('.media-gallery-tile[data-article-identifier]'); 9037 if($('.media-gallery-tile').length>0){ 9038 LOREM.options._entireTileClickable($('.media-gallery-tile'),'.media-gallery-modallink',dataArticleIdentifier); 9039 } 9040 if (deepLinkParameter !== undefined) { 9041 if (dataArticleIdentifier.length > 0) { 9042 dataArticleIdentifier.each(function() { 9043 if ($(this).data('article-identifier') === deepLinkParameter) { 9044 $(this).addClass('hoveredtile'); 9045 } 9046 }); 9047 if($('.media-gallery-tile.hoveredtile').length >0){ 9048 setTimeout(function() { 9049 $('.media-gallery-tile.hoveredtile').click(); 9050 LOREM.UTILS._showLoader(); 9051 },1000); 9052 } 9053 } 9054 } 9055}); 9056 9057$(document).ready(function(){ 9058 LOREM.utilityNav={ 9059 checkUtilityNavSticky:function(){ 9060 var stickyUtilityVal = $('.cmp-utilitynav-wrapper').data('sticky-utilitynav'); 9061 if(stickyUtilityVal){ 9062 LOREM.utilityNav.isUtilityNavSticky(); 9063 } 9064 }, 9065 isUtilityNavSticky:function() { 9066 var $header = $('.header-mainnav-wrapper'); 9067 var $mobileHeader = $('.header-utilitynav-wrapper'); 9068 var $utilitynavDiv = $('.cmp-utilitynav-wrapper'); 9069 var $countryDropdown = $('.country-dropdown'); 9070 var notificationScrollVal = 0; 9071 //if ($('.cmp-notification').length > 0) { 9072 // if (!LOREM.notificationBanner._checkNotificationContainerSticky()) { 9073 // notificationScrollVal = LOREM.notificationBanner._isnotificationContainerTop(); 9074 // } 9075 //} 9076 if (window.pageYOffset > notificationScrollVal ) { 9077 var topPaddingVal = 0; 9078 var topPaddingNotificationVal = 0; 9079 $utilitynavDiv.addClass('sticky'); 9080 if($('.header-variation-leftnav').length > 0){ 9081 $('.header-variation-leftnav').addClass('sticky'); 9082 } 9083 $countryDropdown.addClass('country-sticky'); 9084 topPaddingVal = $utilitynavDiv.outerHeight(); 9085 //if (LOREM.notificationBanner._checkNotificationContainerSticky()) { 9086 // $utilitynavDiv.css({ 9087 // 'top': LOREM.notificationBanner._isnotificationContainerTop() 9088 // }); 9089 //} 9090 if (!LOREM.devices.isDesktop()) { 9091 $mobileHeader.css({ 9092 'padding-top': topPaddingVal + topPaddingNotificationVal 9093 }); 9094 }else{ 9095 $header.css({ 9096 'padding-top': topPaddingVal + topPaddingNotificationVal 9097 }); 9098 } 9099 9100 } else { 9101 $utilitynavDiv.removeClass('sticky'); 9102 if($('.header-variation-leftnav').length > 0){ 9103 $('.header-variation-leftnav').removeClass('sticky'); 9104 } 9105 $countryDropdown.removeClass('country-sticky'); 9106 $header.css({ 9107 'padding-top': 0 9108 }); 9109 $mobileHeader.css({ 9110 'padding-top': 0 9111 }); 9112 } 9113 } 9114 } 9115 $(window).on('load scroll resize', function () { 9116 LOREM.utilityNav.checkUtilityNavSticky(); 9117 }); 9118 $(document.body).on('touchmove', function(){ 9119 LOREM.utilityNav.checkUtilityNavSticky(); 9120 }); 9121}); 9122$(document).ready(function() { 9123 var $searchForm = $('.search-section').find('.searchInputForm'), 9124 minLengthMsg = $('.search-section').find('input[name="minLengthMsg"]').val(); 9125 if(minLengthMsg == "" || minLengthMsg == undefined){ 9126 minLengthMsg= "please enter at least 3 characters"; 9127 } 9128 LOREM.search = { 9129 _autoload: [ 9130 'bindEvents' 9131 ], 9132 bindEvents: function() { 9133 $(document).on('click', '.search-icon, .search-section-closebtn', LOREM.search._closeSearchBar); 9134 $searchForm.on('submit', LOREM.search._searchInputField); 9135 },
9136 /* function is for closing the search bar when it is opened on click */ 9137 _closeSearchBar: function(e) { 9138 e.preventDefault(); 9139 var $self = $(this), 9140 $searchSection; 9141 if($self.hasClass('search-icon')){ 9142 $searchSection = $self.closest('.cmp-search').find('.search-section'); 9143 $searchSection.toggleClass('hide-search'); 9144 $searchSection.find(".search-section-input").focus(); 9145 }else{ 9146 $self.closest('.search-section').toggleClass('hide-search'); 9147 } 9148 9149 }, 9150 /* function to redirect page for searching input field */ 9151 _searchInputField: function() { 9152 var searchRegex = $('.search-section').find('input[name="searchRegex"]').val(), 9153 searchInput = $(this).find('.search-section-input').val(), 9154 searchErrorElem=$(this).find('.search-section-error'); 9155 if(searchRegex == "" || searchRegex == undefined){ 9156 searchRegex = /^[0-9a-zA-Z, ]+[0-9a-zA-Z]{1}$/; 9157 if(searchInput.length <= 2) { 9158 searchErrorElem.html(minLengthMsg); 9159 searchErrorElem.removeClass('hidden'); 9160 return false; 9161 } 9162 }else{ 9163 var pattern = new RegExp(searchRegex); 9164 if(!pattern.test(searchInput)){ 9165 searchErrorElem.html(minLengthMsg); 9166 searchErrorElem.removeClass('hidden'); 9167 return false; 9168 } 9169 9170 } 9171 } 9172 }; 9173}); 9174$(document).ready(function () { 9175 var $navbar = $('#header-mainnav-wrapper'), 9176 $headerEl = $('header.header'), 9177 $mobileHeader = $('.header-utilitynav-wrapper'), 9178 $miniLogo = $navbar.find('.mini-logo'), 9179 $body = $('body'), 9180 onLoadTargetElem, 9181 checkScrollFlag = false, 9182 options = { 9183 height: 0 9184 }, 9185 canMobileSticky, 9186 isMobile, 9187 navHeight, 9188 winHeight, 9189 difHeight; 9190 if(window.location.href.split('#')[1]) { 9191 onLoadTargetElem = '#' + window.location.href.split('#')[1].split('?')[0]; 9192 } 9193 if (screen.width <= 991) { 9194 navHeight = $('.cmp-main-nav-container').height(); 9195 winHeight = $(window).height(); 9196 if (navHeight > winHeight){ 9197 difHeight = navHeight - winHeight; 9198 $('.cmp-main-nav-container').css('top','calc(-100% - ' + difHeight + 'px)'); 9199 } 9200 } 9201 9202 LOREM.mainnav = { 9203 9204 _autoload: ['init', 'checkMainNavSticky'], 9205 init: function () { 9206 canMobileSticky = $headerEl.hasClass('sticky-mobile-header'); 9207 9208 /*event handler for hamburger icon to show the hamburger menu in mobile/tablet*/ 9209 $(document).on('click', '.cmp-main-nav-btn', function () { 9210 $('.cmp-main-nav-container').css('top','0').addClass('mobile-collapsible'); 9211 setTimeout(function () { 9212 $('.navbar-close').show(); 9213 }, 350); 9214 if ($('.cmp-notification').length > 0) { 9215 $('.cmp-notification').addClass('mobileIndex'); 9216 } 9217 }); 9218 9219 /*event handler for close button to hide the hamburger menu in mobile/tablet*/ 9220 $(document).on('click', '.navbar-close', function () { 9221 if (screen.width <= 991) { 9222 if (navHeight > winHeight){ 9223 difHeight = navHeight - winHeight; 9224 $(this).closest('.cmp-main-nav-container').css('top','calc(-100% - ' + difHeight + 'px)'); 9225 } 9226 else{ 9227 $(this).closest('.cmp-main-nav-container').removeClass('mobile-collapsible').css('top','-100%'); 9228 } 9229 } 9230 if ($('.cmp-notification').length > 0) { 9231 $('.cmp-notification').removeClass('mobileIndex'); 9232 } 9233 }); 9234 9235 /*event handler for mobile dropdown to show inner dropdown on click of arrow icon*/ 9236 $(document).on('click', 'ul.nav li.nav-item.dropdown.dropdown .dropdown-toggle-icon', function (e) { 9237 var $arrow = $(this); 9238 if($(this).closest('li').hasClass('dropdown-item-with-menu')){ 9239 var $parentDropdown = $arrow.closest('.dropdown'), 9240 $childDropdown = $arrow.siblings('.dropdown-menu'), 9241 $remainingDropdowns = $parentDropdown.siblings('.dropdown'); 9242 $remainingDropdowns.removeClass('show-inner-dropdown'); 9243 $remainingDropdowns.find('.dropdown-menu').removeClass('show'); 9244 if ($childDropdown.hasClass('show')) { 9245 $(e.target).removeClass("expand"); 9246 $childDropdown.removeClass('show'); 9247 } else { 9248 $childDropdown.addClass('show'); 9249 $(e.target).addClass("expand"); 9250 } 9251 9252 }else{ 9253 var $parentDropdown = $arrow.closest('.dropdown'), 9254 $childDropdown = $arrow.siblings('.dropdown-menu'), 9255 $remainingDropdowns = $parentDropdown.siblings('.dropdown'); 9256 $remainingDropdowns.removeClass('show-inner-dropdown'); 9257 $remainingDropdowns.find('.dropdown-menu').removeClass('show'); 9258 if ($parentDropdown.hasClass('show-inner-dropdown')) { 9259 $parentDropdown.removeClass('show-inner-dropdown'); 9260 $childDropdown.removeClass('show'); 9261 $(e.target).removeClass("expand"); 9262 } else { 9263 $parentDropdown.addClass('show-inner-dropdown'); 9264 $childDropdown.addClass('show'); 9265 $(e.target).addClass("expand"); 9266 } 9267 } 9268 9269 }); 9270 9271 9272 9273 $( window ).resize(function() { 9274 if ($(window).width() < 992) { 9275 $( "li.nav-item.dropdown.active-link" ).addClass('show-inner-dropdown'); 9276 $( "ul.dropdown-menu.active-child-link " ).addClass('show'); 9277 $( "li.dropdown-item.active-child-innerlink " ).addClass('highlight-item'); 9278 }else{ 9279 $( "li.nav-item.dropdown.active-link" ).removeClass('show-inner-dropdown'); 9280 $( "ul.dropdown-menu.active-child-link " ).removeClass('show'); 9281 $( "li.dropdown-item.active-child-innerlink " ).removeClass('highlight-item'); 9282 } 9283 }); 9284 9285 9286 }, 9287 checkMainNavSticky: function () { 9288 //console.log($headerEl); 9289 mobileSticky = canMobileSticky && window.matchMedia('(max-width: 991px)').matches; 9290 9291 if(mobileSticky) { 9292 if ($('.cmp-notification').length > 0) { 9293 if ($('.cmp-notification').hasClass('sticky')){ 9294 options['height'] = 0; 9295 LOREM.mainnav._makeMainNavSticky(options); 9296 } 9297 else { 9298 options['height'] = LOREM.notificationBanner._isnotificationContainerTop(); 9299 LOREM.mainnav._makeMainNavSticky(options); 9300 } 9301 } 9302 else if($mobileHeader.hasClass('sticky')) { 9303 options['height'] = $('header').outerHeight(); 9304 LOREM.mainnav._makeMainNavSticky(options); 9305 } else { 9306 options['height'] = $mobileHeader.offset().top; 9307 LOREM.mainnav._makeMainNavSticky(options); 9308 } 9309 } else { 9310 if ($('.cmp-notification').length > 0) { 9311 if ($('.cmp-notification').hasClass('sticky')){ 9312 options['height'] = $('header.header').outerHeight() - $navbar.outerHeight(); 9313 LOREM.mainnav._makeMainNavSticky(options); 9314 } 9315 else { 9316 options['height'] = $('header.header').outerHeight() + LOREM.notificationBanner._isnotificationContainerTop() - $navbar.outerHeight(); 9317 LOREM.mainnav._makeMainNavSticky(options); 9318 } 9319 } 9320 else if ($navbar.hasClass('sticky')) { 9321 options['height'] = $('header').outerHeight(); 9322 LOREM.mainnav._makeMainNavSticky(options); 9323 } else if ($('.cmp-main-nav-container').hasClass('sticky-nav')) { 9324 options['height'] = $navbar.offset().top; 9325 LOREM.mainnav._makeMainNavSticky(options); 9326 } 9327 } 9328 9329 if(onLoadTargetElem && $(onLoadTargetElem).length && !checkScrollFlag) { 9330 LOREM.options._calcTargetPosition(onLoadTargetElem); 9331 checkScrollFlag = true; 9332 } 9333 9334 9335 }, 9336 /*to make main nav sticky*/ 9337 _makeMainNavSticky: function (opt) { 9338 mobileSticky = canMobileSticky && window.matchMedia('(max-width: 991px)').matches; 9339 if (window.pageYOffset >= opt.height && window.pageYOffset > 0) { 9340 var topPaddingVal = 0; 9341 if(mobileSticky) { 9342 $mobileHeader.addClass('sticky'); 9343 $navbar.removeClass('sticky'); 9344 $miniLogo.removeClass('show-mini-logo'); 9345 topPaddingVal = $mobileHeader.outerHeight(); 9346 /*to make mobile nav sticky after notification banner exist*/ 9347 if ($('.cmp-notification').length > 0) { 9348 topPaddingVal = 0; 9349 if (LOREM.notificationBanner._checkNotificationContainerSticky()) { 9350 $mobileHeader.css({ 9351 'top': LOREM.notificationBanner._isnotificationContainerTop() 9352 }); 9353 } 9354 } 9355 } else { 9356 if ($('.cmp-main-nav-container').hasClass('sticky-nav')) { 9357 $navbar.addClass('sticky'); 9358 } 9359 $navbar.addClass('sticky'); 9360 $miniLogo.addClass('show-mini-logo'); 9361 $mobileHeader.removeClass('sticky'); 9362 topPaddingVal = $navbar.outerHeight(); 9363 /*to make main nav sticky after notification banner if sticky and exist*/ 9364 if ($('.cmp-notification').length > 0) { 9365 topPaddingVal = 0; 9366 if (LOREM.notificationBanner._checkNotificationContainerSticky()) { 9367 $navbar.css({ 9368 'top': LOREM.notificationBanner._isnotificationContainerTop() 9369 }); 9370 } 9371 } 9372 } 9373 9374 $body.css({ 9375 'padding-top': topPaddingVal 9376 }); 9377 } else { 9378 $mobileHeader.removeClass('sticky'); 9379 $navbar.removeClass('sticky'); 9380 $miniLogo.removeClass('show-mini-logo'); 9381 9382 $body.css({ 9383 'padding-top': 0 9384 }); 9385 } 9386 } 9387 } 9388 9389 $(window).on('scroll resize', function () { 9390 LOREM.mainnav.checkMainNavSticky(); 9391 }); 9392 9393 $(".dropdown-menu").each(function(index){ 9394 if(!$(this).find("li").length){ 9395 $(this).hide(); 9396 $(this).closest('li').find('.dropdown-toggle-icon').hide(); 9397 } 9398}); 9399 9400}); 9401$(document).ready(function() { 9402 var $referenceList, 9403 $window = $(window); 9404 LOREM.referenceList = { 9405 _autoload: [ 9406 'calcMaxHeight' 9407 ], 9408 calcMaxHeight: function() { 9409 /* calculate max heights of each CTA component */ 9410 $referenceList = $('.reference .cta-btn-wrapper'); 9411 if($referenceList.length) { 9412 if($window.width() > 991) { 9413 LOREM.options.bindListMaxHeight($referenceList, 2); 9414 } 9415 else { 9416 $referenceList.css('height','auto'); 9417 } 9418 } 9419 } 9420 } 9421}); 9422$(window).resize(function() { 9423 /* calculate max heights of each CTA component on resize */ 9424 LOREM.referenceList.calcMaxHeight(); 9425}); 9426$(document).on('click', '.make-ctanavclickable', function(){ 9427 window.location.href = $(this).data('ctanavurl'); 9428}) 9429let heroFullPlaylist; 9430let playListCounter = 0; 9431let heroImagePath; 9432let playOption; 9433LOREM.backgroundVideoHandler = { 9434 _init: function($videoEl) { 9435 var currentItem = $videoEl.find('.cardcontainer-video').attr('id'); 9436 LOREM.backgroundVideoHandler._getJsonPlayList($videoEl); 9437 if (heroFullPlaylist.length > 0) { 9438 LOREM.backgroundVideoHandler._setupBackgrounPlayer('0', currentItem, $videoEl, playOption, heroImagePath, heroFullPlaylist); 9439 } 9440 }, 9441 _allVideoInstance: function(playListCounter, currentVideoItem, heroFullPlaylist) { 9442 jwplayer(currentVideoItem).setup({ 9443 playlist: heroFullPlaylist.slice(playListCounter, playListCounter + 1), 9444 controls: false, 9445 mute: true, 9446 autostart: true, 9447 stretching: 'stretching',
9448 }); 9449 }, 9450 _onCompleteVideo: function(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, heroFullPlaylist) { 9451 jwplayer(currentVideoItem).on('complete', function() { 9452 jwplayer(currentVideoItem).remove(); 9453 playListCounter++; 9454 if (playOption == 'repeatall') { 9455 if (heroFullPlaylist.length == playListCounter) playListCounter = 0; 9456 if ((heroFullPlaylist.length >= playListCounter) || ($videoEl.data('repeat') == false && heroFullPlaylist.length > playListCounter)) { 9457 LOREM.backgroundVideoHandler._setupBackgrounPlayer(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, heroFullPlaylist); 9458 } 9459 } else if (playOption == 'repeatfianlvideo') { 9460 if (heroFullPlaylist.length == playListCounter) playListCounter = heroFullPlaylist.length - 1; 9461 LOREM.backgroundVideoHandler._setupBackgrounPlayer(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, heroFullPlaylist); 9462 } else if (playOption == 'showvideothumbnail') { 9463 if (heroFullPlaylist.length == playListCounter) { 9464 document.getElementById(currentVideoItem).innerHTML = "<img src='" + heroImagePath + "' style='width: 100%'/>"; 9465 } else { 9466 LOREM.backgroundVideoHandler._setupBackgrounPlayer(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, heroFullPlaylist); 9467 } 9468 } 9469 }); 9470 }, 9471 _getJsonPlayList: function($videoEl) { 9472 var videosPlayList = $videoEl.data('video-playlist'), 9473 desktopVideoOptions = $videoEl.data('video-desktopoptions'), 9474 desktopVideoThumbnailPath = $videoEl.data('video-thumbnailpath'), 9475 mobileVideoOptions = $videoEl.data('video-mobileooptions'), 9476 mobileVideoThumbnailPath = $videoEl.data('video-mobilethumbnailpath'); 9477 if (videosPlayList) { 9478 if (LOREM.devices.isMobile()) { 9479 heroFullPlaylist = videosPlayList.mobilevideolist; 9480 heroImagePath = mobileVideoThumbnailPath; 9481 playOption = mobileVideoOptions; 9482 } else { 9483 heroFullPlaylist = videosPlayList.desktopvideolist; 9484 heroImagePath = desktopVideoThumbnailPath; 9485 playOption = desktopVideoOptions; 9486 } 9487 } 9488 }, 9489 _setupBackgrounPlayer: function(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, videosPlayList ) { 9490 LOREM.backgroundVideoHandler._allVideoInstance(playListCounter, currentVideoItem, videosPlayList); 9491 LOREM.backgroundVideoHandler._onCompleteVideo(playListCounter, currentVideoItem, $videoEl, playOption, heroImagePath, videosPlayList ); 9492 } 9493} 9494 9495$(document).ready(function() { 9496 if ($('.video-background').length) { 9497 $('.video-background').each(function() { 9498 LOREM.backgroundVideoHandler._init($(this)); 9499 if ($(this).find('.hero-content').html().trim() === "") { 9500 $(this).find('.hero-content').remove(); 9501 } 9502 }); 9503 } 9504}); 9505$(".unmute-video").click( function (){ 9506 var video = $(this).parent().find('video'); 9507 if( $(video).prop('muted') ) { 9508 $(video).prop('muted', false); 9509 } else { 9510 $(video).prop('muted', true); 9511 } 9512 }); 9513$(document).ready(function(){ 9514 var $body = $("body"), 9515 $cmpISI = $('.cmp-isi'), 9516 $isiOverlay = $('.isi-overlay'), 9517 cookieName = 'isi-state', 9518 suppressCookie= $('input[name=suppressRememberStatus]').val(), 9519 defaultView = $('input[name=defaultTrayStatus]').val(), 9520 enableExpandButton= $('input[name=enableExpandButton]').val(), 9521 enableCollapseButton = $('input[name=enableCollapseButton]').val() 9522 if(suppressCookie ==='true') { 9523 $.removeCookie(cookieName, { path: '/' }); 9524 } 9525 if($.cookie(cookieName) === 'true' ) { 9526 collapsedView(); 9527 } else { 9528 if(defaultView === 'collapsed'){ 9529 collapsedView(); 9530 } else if(defaultView === 'expanded') { 9531 expandedView(); 9532 } else { 9533 previewView(); 9534 } 9535 } 9536 9537 function collapsedView() { 9538 $cmpISI.find('.isi-container').hide(); 9539 $cmpISI.find('.preview-container').show(); 9540 $cmpISI.find('.expand-container').hide(); 9541 $cmpISI.removeClass('is-collapsed is-expanded').addClass('is-preview'); 9542 $isiOverlay.hide(); 9543 $body.removeClass('no-scroll'); 9544 $body.parent().removeClass('no-scroll'); 9545 if($.cookie(cookieName) !== 'true' && suppressCookie !=='true') { 9546 $.cookie(cookieName,'true',{ path: '/' }); 9547 } 9548 }; 9549 9550 function expandedView() { 9551 $cmpISI.find('.isi-container').hide(); 9552 $cmpISI.find('.expand-container').show(); 9553 $cmpISI.removeClass('is-collapsed is-preview').addClass('is-expanded'); 9554 $isiOverlay.show(); 9555 $body.addClass('no-scroll'); 9556 $body.parent().addClass('no-scroll'); 9557 $.removeCookie(cookieName, { path: '/' }); 9558 if (($cmpISI).find('.isi-footer-wrapper').length == 0) { 9559 $body.find('.isi-footer-wrapper').clone().appendTo(".cmp-isi.is-expanded .expand-container"); 9560 } 9561 }; 9562 9563 function previewView() { 9564 if(enableExpandButton=='true'&& enableCollapseButton=='true'){ 9565 previewCheckbox(); 9566 } 9567 else if(enableExpandButton=='true'&& enableCollapseButton=='false'){ 9568 previewCheckbox(); 9569 } 9570 else{ 9571 $cmpISI.find('.isi-container').show(); 9572 $cmpISI.find('.preview-container').hide(); 9573 $cmpISI.find('.expand-container').hide(); 9574 $cmpISI.removeClass('is-preview is-expanded').addClass('is-collapsed'); 9575 $isiOverlay.hide(); 9576 $body.removeClass('no-scroll'); 9577 $body.parent().removeClass('no-scroll'); 9578 $.removeCookie(cookieName, { path: '/' }); 9579 } 9580 }; 9581 9582 function previewCheckbox(){ 9583 var $this = $('.isi-overlay'), 9584 $isiContainer = $this.siblings('.cmp-isi'), 9585 $isiChildren = $isiContainer.find('.collapse-container'); 9586 $cmpISI.find('.isi-container').show(); 9587 $cmpISI.find('.preview-container').hide(); 9588 $cmpISI.find('.expand-container').hide(); 9589 $cmpISI.removeClass('is-preview is-expanded').addClass('is-collapsed'); 9590 $isiOverlay.hide(); 9591 if($isiChildren.find('.more-text-container').length>0 && $isiChildren.find('.hide-text-container').length>0){ 9592 $isiChildren.find('.more-text-container').addClass('overridealignright'); 9593 $isiChildren.find('.hide-text-container').addClass('overridealignright'); 9594 } 9595 } 9596 $(document).on('click','.hide-text-container .up-arrow, .hide-text-container .down-arrow',function(e){ 9597 e.stopPropagation(); 9598 var $this = $(this), 9599 $parentContainer = $this.closest('.cmp-isi'); 9600 $parentContainer.find('.isi-container').hide(); 9601 if($this.hasClass('preview-container')){ 9602 expandedView(); 9603 }else{ 9604 collapsedView(); 9605 } 9606 }); 9607 $(document).on('click','.more-text-container .up-arrow',function(e){ 9608 var $this = $(this), 9609 $parentContainer = $this.closest('.cmp-isi'); 9610 $parentContainer.find('.isi-container').hide(); 9611 $parentContainer.find('.expand-container').show(); 9612 $parentContainer.removeClass('is-collapsed is-preview').addClass('is-expanded'); 9613 $isiOverlay.show(); 9614 if (($parentContainer).find('.isi-footer-wrapper').length == 0) { 9615 $body.find('.isi-footer-wrapper').clone().appendTo(".cmp-isi.is-expanded .expand-container"); 9616 } 9617 $body.addClass('no-scroll'); 9618 $body.parent().addClass('no-scroll'); 9619 }); 9620 $(document).on('click','.isi-overlay',function(){ 9621 var $this = $(this), 9622 $isiContainer = $this.siblings('.cmp-isi'); 9623 $this.hide(); 9624 $isiContainer.find('.isi-container').hide(); 9625 $isiContainer.find('.preview-container').show(); 9626 $isiContainer.removeClass('is-collapsed is-expanded').addClass('is-preview'); 9627 $body.removeClass('no-scroll'); 9628 $body.parent().removeClass('no-scroll'); 9629 if($.cookie(cookieName) !== 'true') { 9630 $.cookie(cookieName,'true',{ path: '/' }); 9631 } 9632 }); 9633 $(window).on('resize', function() { 9634 if($('.cmp-isi.sticky-element .isi-container.collapse-container').css('display') !== 'none'){ 9635 resizeISI(); 9636 } 9637 }); 9638 9639 function resizeISI() { 9640 if($(window).width() < 1263) { 9641 $('.cmp-isi.sticky-element .isi-container.collapse-container').addClass('resize-isi'); 9642 } else { 9643 $('.cmp-isi.sticky-element .isi-container.collapse-container').removeClass('resize-isi'); 9644 } 9645 } 9646}); 9647$(document).ready(function() { 9648 var $cardTilesWrapper = $('.cmp-article-tile.cursorclick'); 9649 if($cardTilesWrapper.length) { 9650 LOREM.options._entireTileClickable($cardTilesWrapper,'.cmp-article-tile-fullview-link'); 9651 } 9652}); 9653$(document).ready(function() { 9654 LOREM.ctaTile = { 9655 _autoload: [ 9656 'makeTileClickable' 9657 ], 9658 makeTileClickable: function() { 9659 var $ctatileWraper = $('.cmp-cta-tile'); 9660 if($ctatileWraper.length) { 9661 LOREM.options._entireTileClickable($ctatileWraper,'.cmp-cta-tile-fullview-link'); 9662 } 9663 } 9664 }; 9665}); 9666$(document).ready(function(){ 9667 var $footerIsiElement = $('.cmp-footer-isi-content-element'), 9668 $isiTray = $('.cmp-isi'), 9669 $window =$(window), 9670 $backToTopWrapper = $('.cmp-backToTop-wrapper'), 9671 $backToTopLink = $backToTopWrapper.find('.backToTop-link'), 9672 $header = $('.header'), 9673 backToTopScrollHeight = $header.outerHeight(); 9674 LOREM.footer = { 9675 _autoload: ['isiTrayVisibleFunc', 'backToTopFunc'], 9676 isiTrayVisibleFunc: function() { 9677 backToTopScrollHeight = $header.outerHeight() - $header.find('.header-mainnav-wrapper.sticky').outerHeight() || $header.outerHeight(); 9678 var isiPaddingTop = parseInt($('.isi-content').css('padding-top')) + 100; 9679 if($footerIsiElement.length > 0 && $isiTray.length > 0){ 9680 $window.scrollTop() >= ($footerIsiElement.offset().top + isiPaddingTop) - $window.height() ? $isiTray.hide() : $isiTray.show(); 9681 } 9682 if($window.scrollTop() > backToTopScrollHeight) { 9683 $backToTopWrapper.fadeIn(); 9684 } else { 9685 $backToTopWrapper.fadeOut(); 9686 } 9687 }, 9688 backToTopFunc: function() { 9689 if($window.scrollTop() > backToTopScrollHeight) { 9690 $backToTopWrapper.fadeIn(); 9691 } else { 9692 $backToTopWrapper.fadeOut(); 9693 } 9694 $backToTopLink.on('click', function(e) { 9695 e.preventDefault(); 9696 var $header = $('header'); 9697 LOREM.options.scrollToFocusElem($header); 9698 }); 9699 } 9700 }; 9701 $window.on('resize scroll', function() { 9702 LOREM.footer.isiTrayVisibleFunc(); 9703 }); 9704}); 9705$(document).ready(function () { 9706 $(document).on('click', '.tab-link', function(e){ 9707 appendQueryParameter(e,$(this)); 9708 }); 9709 if (!LOREM.devices.isDesktop()) { 9710 getAccordion(); 9711 showRelatedAccordion(); 9712 } else { 9713 showRelatedTab(); 9714 }
9715 $(document).on('click', '.custom-tab-item a', function(e) { 9716 e.preventDefault(); 9717 var $tabContentDiv = $(this).closest('.cmp-tabs').find('.custom-tab-content .custom-tab-pane'); 9718 if ($(this).hasClass('active')) { 9719 $(this).removeClass('active'); 9720 $tabContentDiv.removeClass('active'); 9721 } else { 9722 $(this).parent().siblings().find('a').removeClass('active'); 9723 $tabContentDiv.removeClass('active'); 9724 $(this).addClass('active'); 9725 $($(this).attr('href')).addClass('active'); 9726 } 9727 appendQueryParameter(e,$(this)); 9728 }); 9729 $(".accordion-mobile .accordion-link").click(function (e) { 9730 e.preventDefault(); 9731 var accordionContainer = $(this).parent().parent().find('.accordion-collapse'); 9732 $(this).toggleClass('collapse-view'); 9733 if (accordionContainer.hasClass('collapse')) { 9734 accordionContainer.removeClass('collapse'); 9735 } else { 9736 accordionContainer.addClass('collapse'); 9737 } 9738 $(this).parent().parent().siblings().find('.accordion-collapse').addClass('collapse'); 9739 $('.accordion-link').not($(this)).removeClass('collapse-view'); 9740 appendQueryParameter(e,$(this)); 9741 9742 }); 9743}); 9744/* adds the new reference key based on user selected tab */ 9745function appendQueryParameter(e,$this) { 9746 var referenceKey = $this.data('referencekey'), 9747 newUrl = LOREM.options.getFormattedUrl('tabKey', referenceKey); 9748 if (history.pushState) { 9749 window.history.pushState({path:newUrl},'',newUrl); 9750 } 9751 e.stopImmediatePropagation(); 9752 return; 9753} 9754/*shows a realted accordion in open state based on reference key present in current URL.*/ 9755function showRelatedAccordion() { 9756 var currentUrl = window.location.href, 9757 referenceKey = '', 9758 $accordionLinks = $('.accordion-link'); 9759 if (currentUrl.indexOf('tabKey') >= 0) { 9760 referenceKey = currentUrl.split('tabKey=')[1]; 9761 referenceKey = referenceKey.indexOf('&') >= 0 ? referenceKey.split('&')[0] : referenceKey; 9762 } 9763 if (referenceKey !== '') { 9764 $accordionLinks.each(function () { 9765 var $this = $(this); 9766 if ($this.data('referencekey') && ($this.data('referencekey') === referenceKey)) { 9767 $(this).parent().parent().find('.accordion-collapse').removeClass('collapse'); 9768 $(this).parent().parent().siblings().find('.accordion-collapse').addClass('collapse'); 9769 $('html, body').stop().animate({ 9770 scrollTop: $(this).parent().parent().offset().top - LOREM.options._calStickyHeaderHeight() 9771 }, 1000); 9772 } 9773 }) 9774 } 9775} 9776/*shows a realted tab in open state based on reference key present in 9777 current URL.if no key present shows the tabs component in default state*/ 9778function showRelatedTab(){ 9779 var currentUrl = window.location.href, 9780 referenceKey = '', 9781 $navLinks = $('.cmp-tabs').find('ul.tabs-list li a') ; 9782 if(currentUrl.indexOf('tabKey') >= 0){ 9783 referenceKey = currentUrl.split('tabKey=')[1]; 9784 referenceKey = referenceKey.indexOf('&') >= 0 ? referenceKey.split('&')[0] : referenceKey; 9785 } 9786 if(referenceKey !== ''){ 9787 $navLinks.each(function(){ 9788 var $this = $(this); 9789 if($this.data('referencekey') && ($this.data('referencekey') === referenceKey)) { 9790 $this.parent().siblings().find('a').removeClass('active'); 9791 $this.closest('.cmp-tabs').find('.tab-content-wrapper .tab-content-div').removeClass('active'); 9792 $this.addClass('active show'); 9793 $('html, body').stop().animate({ 9794 scrollTop: $this.offset().top - LOREM.options._calStickyHeaderHeight() 9795 }, 1000); 9796 var self_href = $this.attr('href') || ''; 9797 if(self_href) { 9798 $(self_href).addClass('active show'); 9799 } 9800 } 9801 }) 9802 } 9803} 9804/*to convert from tab view to accordion view for mobile*/ 9805function getAccordion() { 9806 var tabElem = $(".cmp-tabs"); 9807 tabElem.each(function () { 9808 var tabList = $(this).find('ul.tabs-list li').toArray(); 9809 var tabContElem = $(this).find('.tab-content-wrapper .tab-content-div ').toArray(); 9810 var concatElem = ''; 9811 $.each(tabList, function (n, val) { 9812 concatElem += '<div class="accordion-panel">'; 9813 concatElem += '<h4 class="accordion-title"><a class="accordion-link" data-toggle="collapse" aria-expanded="false" data-referencekey="' + $(val).find('a').attr('data-referencekey') + '" href="' + $(val).find('a').attr('href') + '" >' + val.innerText + '</a></h4>'; 9814 concatElem += '<div class="accordion-collapse collapse">'; 9815 concatElem += '<div class="accordion-body">' + tabContElem[n].innerHTML + '</div>'; 9816 concatElem += '</div>'; 9817 concatElem += '</div>'; 9818 }); 9819 if (typeof GigyaSiteConfigJson !== 'undefined' && GigyaSiteConfigJson.SiteId === '517') { 9820 var data = $(this).parent().find('.accordion-mobile'); 9821 data[0].innerHTML += concatElem; 9822 } else { 9823 $(this).parent().find('.accordion-mobile').html(concatElem); 9824 } 9825 $(this).css('display', 'none'); 9826 $(this).find(".tab-content").css('display', 'none'); 9827 }); 9828} 9829$(document).ready(function(){ 9830 LOREM.Modal = { 9831 exitModalJson :{}, 9832 init : function(){ 9833 9834 LOREM.Modal.bindEvents(); 9835 $(".exit-modal").length > 0 ? LOREM.Modal.getExitModalData() : ''; 9836 $('#entryModal').length > 0 ? LOREM.Modal.initialiseCookieSetupForModal($('#entryModal')): ''; 9837 $('#preferenceModal').length > 0 ? LOREM.Modal.initialiseCookieSetupForModal($('#preferenceModal')): ''; 9838 }, 9839 bindEvents : function(){ 9840 $(document).on('click','.generic-modal-button',LOREM.Modal.setCookieIfRequired); 9841 }, 9842 bindExitEvents :function(){ 9843 $(document).on('click',"a:not([href^='#']):not('.contact-support-link'):not('.modal-button'):not('[data-lightbox-trigger]'):not('.open-modal')",LOREM.Modal.createExitModal); 9844 $(document).on('click','.destination-button',LOREM.Modal.updateTargetUrl); 9845 }, 9846 getExitModalData : function(){ 9847 $.ajax({ 9848 url: $("#exitModalTargetPath").val() , 9849 /*data:{currentPagePath : $("#resourcePath").val()},*/ 9850 success:function(resp){ 9851 LOREM.Modal.exitModalJson = resp; 9852 LOREM.Modal.bindExitEvents(); 9853 }, 9854 error:function(){ 9855 9856 } 9857 }) 9858 }, 9859 /*intialises cookies for modal popups*/ 9860 initialiseCookieSetupForModal :function($modal){
9861 var modalPath = $modal.find('.modal-details').data('modalpath'); 9862 if(modalPath !== '' && modalPath !== undefined){ 9863 if($.cookie('cq-authoring-mode') == 'TOUCH'){ 9864 LOREM.Modal.showModal($modal,modalPath + '/jcr:content/root.html?wcmmode=disabled'); 9865 }else{ 9866 LOREM.Modal.showModal($modal,modalPath + '/jcr:content/root.html'); 9867 } 9868 } 9869 }, 9870 /*sets cookie based on page properties*/ 9871 setCookieIfRequired : function(evt){ 9872 evt.stopPropagation(); 9873 var $button = $(this), 9874 $modal = $button.closest('.cmp-modal'), 9875 isRedirect = $button.data('redirect'), 9876 redirectionUrl = $button.data('url'); 9877 /*should check only for entry modal button*/ 9878 if($modal.hasClass('entry-modal')){ 9879 var $modalDetails =$modal.find('.modal-details'), 9880 createcookie = $button.data('createcookie'), 9881 cookieName = $modalDetails.data('cookiename'), 9882 modalPath = $modalDetails.data('modalpath'); 9883 if(createcookie && cookieName && modalPath){ 9884 /*if the data attribute setcookie(setcookie for first time users) value is true we are storing 9885 cookie to future date 9886 setting expiry date of 3 months(setting perminant cookie not for session) 9887 */ 9888 if($modalDetails.data('setcookie')){ 9889 $.cookie(cookieName,'true',{ path: '/',expires: 90 }); 9890 }else{ 9891 /*if the data attribute setcookie value is false we are storing 9892 cookie for session.once we close the browser we lost the session 9893 and eventually cookie wont exist after reopening the browser. 9894 not setting any expirt date to achieve functionality 9895 */ 9896 $.cookie(cookieName,'true',{ path: '/' }); 9897 } 9898 } 9899 } 9900 if(isRedirect){//should check for entry/exit modal button 9901 var urlObj =LOREM.Modal.checkUrlType(redirectionUrl); 9902 LOREM.Modal.navigateToPath(urlObj,$button.data('target')); 9903 } 9904 9905 }, 9906 /*sets cookie for required modal*/ 9907 showModal : function($modal,modalPath){ 9908 if($modal.hasClass('preference-modals-mode')){ 9909 isCookieExist = false; 9910 var currentPage = document.getElementById("currentpage").value; 9911 if(typeof videoPagePaths == 'undefined'){ 9912 videoPagePaths=[]; 9913 } 9914 if(!$.cookie('m_prefs') && videoPagePaths.includes(currentPage)) 9915 LOREM.Modal.updateModalContent($modal,modalPath,'',''); 9916 } 9917 var isCookieExist = LOREM.Modal.validateCookie($modal); 9918 if(!isCookieExist && $modal.hasClass('entry-modal')){ 9919 LOREM.Modal.updateModalContent($modal,modalPath,'',''); 9920 } 9921 }, 9922 /*checks whether cookie exist or not in user's browser*/ 9923 validateCookie : function($modal){ 9924 var cookieName = $modal.find('.modal-details').data('cookiename'); 9925 return ($.cookie(cookieName)) ? true : false; 9926 }, 9927 /*gets the content via ajax and update the model popup and shows mpdal popup to user*/ 9928 updateModalContent : function($modal,modalPath,targetUrl,targetType){ 9929 if(modalPath){ 9930 $.ajax({ 9931 url: modalPath, 9932 success: function (resp) { 9933 $modal.find('.modal-content').html($(resp)); 9934 $modal.modal('show'); 9935 if ($(".preference-modals-mode").hasClass("show")) { 9936 var $dropdown = $("#preference-therapeuticarea"); 9937 var dynamicDefaultText = $(".preference-text").data("text"); 9938 9939 $dropdown.empty(); // Clear existing options 9940 $dropdown.append( 9941 $("<option></option>").attr("value", "").text(dynamicDefaultText) 9942 ); 9943 9944 $.each(preferencesJsonData, function (key, value) { 9945 $dropdown.append($("<option></option>").attr("value", key).text(key)); 9946 }); 9947 $("body").addClass("preference-modal-show"); 9948 } 9949 if($modal.hasClass('exit-modal')){ 9950 $modal.attr('data-targeturl',targetUrl); 9951 $modal.attr('data-targettype',targetType) 9952 } 9953 }, 9954 error:function(){ 9955 9956 } 9957 }); 9958 } 9959 }, 9960 /*returns an object which contains proper url and type of url*/ 9961 checkUrlType : function(redirectionUrl){ 9962 //add http:// if it does n't exist 9963 redirectionUrl = redirectionUrl.substr(0,3)==='www' ? "http://" + redirectionUrl : redirectionUrl; 9964 return {isExternal:redirectionUrl.indexOf('http://') > -1 || redirectionUrl.indexOf('https://') > -1 || redirectionUrl.substr(0,4)==='tel:' || redirectionUrl.substr(0,7)==='mailto:' || redirectionUrl.substr(0,5)=== 'maps:' || redirectionUrl.substr(0,4)==='geo:' || redirectionUrl.substr(0,13)=== 'comgooglemaps', 9965 newUrl : redirectionUrl}; 9966 }, 9967 /*navigate to the path based on type of url*/ 9968 navigateToPath : function(urlObj,targetType){ 9969 var url ; 9970 if(targetType === '_blank'){ 9971 url = urlObj.isExternal ? urlObj.newUrl : window.location.origin + urlObj.newUrl; 9972 window.open(url,"_blank"); 9973 }else{ 9974 url = urlObj.isExternal ? urlObj.newUrl : window.location.origin + urlObj.newUrl; 9975 window.location = url; 9976 9977 } 9978 }, 9979 /*sets properties for the targeturl based on exit modal json data*/ 9980 determineLinkProperties : function(targetUrl){ 9981 var linkProperties = { 9982 "isWhitelisted":false, 9983 "isBlackListed":false, 9984 "isModalLink" :false, 9985 "urlPath" :"" 9986 }, 9987 urlObj = LOREM.Modal.exitModalJson, 9988 blackListObj = {}; 9989 if(urlObj !== undefined){ 9990 if(urlObj.whitelist !== undefined){ 9991 linkProperties.isWhitelisted = LOREM.Modal.isWhitelisted(urlObj.whitelist,targetUrl); 9992 } 9993 if(!linkProperties.isWhitelisted){ 9994 if(urlObj.blacklist !== undefined){ 9995 blackListObj = LOREM.Modal.isBlackListed(urlObj.blacklist,targetUrl); 9996 linkProperties.isBlackListed = blackListObj.isBlacklisted; 9997 if(linkProperties.isBlackListed){ 9998 if(blackListObj.blacklistedUrlPath !== "" && blackListObj.blacklistedUrlPath !== undefined){ 9999 linkProperties.urlPath = blackListObj.blacklistedUrlPath; 10000 linkProperties.isModalLink = true; 10001 } 10002 10003 }else{ 10004 if(urlObj.defaultModalPath !== "" && urlObj.defaultModalPath !== undefined){ 10005 linkProperties.urlPath = urlObj.defaultModalPath; 10006 linkProperties.isModalLink = true; 10007 } 10008 10009 } 10010 }else{ 10011 if(urlObj.defaultModalPath !== "" && urlObj.defaultModalPath !== undefined){ 10012 linkProperties.urlPath = urlObj.defaultModalPath; 10013 linkProperties.isModalLink = true; 10014 } 10015 } 10016 } 10017 if(urlObj.whitelist === undefined && urlObj.blacklist === undefined){ 10018 if(urlObj.defaultModalPath !== "" && urlObj.defaultModalPath !== undefined){ 10019 linkProperties.urlPath = urlObj.defaultModalPath; 10020 linkProperties.isModalLink = true; 10021 } 10022 } 10023 10024 } 10025 return linkProperties; 10026 }, 10027 /*returns true or false whether target url matches any one of the whitelisted urls*/ 10028 isWhitelisted :function(whitelist,targetUrl){ 10029 var whitelistLength = whitelist.length, 10030 isWhitelisted = false;
10031 for(var i=0 ;i < whitelistLength;i++){ 10032 var whitelistedExpression = whitelist[i].rule; 10033 isWhitelisted = LOREM.Modal.validatetargetUrl(whitelistedExpression,targetUrl); 10034 if(isWhitelisted){ 10035 break; 10036 } 10037 } 10038 return isWhitelisted; 10039 }, 10040 /*returns true or false whether target url matches any one of the blacklisted urls*/ 10041 isBlackListed :function(blacklist,targetUrl){ 10042 var blacklistLength = blacklist.length, 10043 isBlacklisted = false, 10044 blacklistedUrlPath =''; 10045 for(var i=0 ;i < blacklistLength;i++){ 10046 var blacklistedExpression = blacklist[i].rule; 10047 isBlacklisted = LOREM.Modal.validatetargetUrl(blacklistedExpression,targetUrl); 10048 if(isBlacklisted){ 10049 blacklistedUrlPath = blacklist[i].modalPath; 10050 break; 10051 } 10052 } 10053 return {"isBlacklisted":isBlacklisted,'blacklistedUrlPath' : blacklistedUrlPath}; 10054 }, 10055 /*validates whether target url and given regex are matches or not*/ 10056 validatetargetUrl: function(exp,targetUrl){ 10057 var mapObj = { 10058 "\/":"\\/", 10059 "\?":"\\?", 10060 "\&":"\\&" 10061 }; 10062 exp = exp.replace(/\/|\?|\&/gi, function(matched){ 10063 return mapObj[matched]; 10064 }); 10065 var regex = new RegExp(exp); 10066 return regex.test(targetUrl); 10067 }, 10068 /*get exit modal content and show popup*/ 10069 createExitModal : function(evt){ 10070 evt.preventDefault(); 10071 var $this = $(this), 10072 targetUrl = $this.attr('href'), 10073 urlObj =LOREM.Modal.checkUrlType(targetUrl), 10074 linkProperties; 10075 /*if internal---navigate to path directly*/ 10076 if(!urlObj.isExternal){ 10077 LOREM.Modal.navigateToPath(urlObj,$this.attr('target')); 10078 }else{ 10079 /*if external validate targetURL against to whitelist and blacklisted urls*/ 10080 linkProperties = LOREM.Modal.determineLinkProperties(targetUrl); 10081 if(linkProperties.isModalLink){ 10082 /*if target url is blacklisted,show corresponding modal popup */ 10083 var modalPath = linkProperties.urlPath; 10084 if(modalPath !== undefined && modalPath !== ''){ 10085 if($.cookie('cq-authoring-mode') == 'TOUCH'){ 10086 LOREM.Modal.updateModalContent($('#exitModal'),modalPath + '/jcr:content/root.html?wcmmode=disabled',targetUrl,$this.attr('target')); 10087 }else{ 10088 LOREM.Modal.updateModalContent($('#exitModal'),modalPath + '/jcr:content/root.html',targetUrl,$this.attr('target')); 10089 } 10090 } 10091 }else{ 10092 /*if target url is not any one of blacklists navigate to the corresponding page directly */ 10093 LOREM.Modal.navigateToPath(urlObj,$this.attr('target')); 10094 } 10095 } 10096 }, 10097 updateTargetUrl : function(evt){ 10098 evt.preventDefault(); 10099 var $this = $(this), 10100 $modal = $this.closest('.cmp-modal'), 10101 targetUrl = $modal.attr('data-targeturl'), 10102 targetType = $modal.attr('data-targettype'); 10103 if($modal.hasClass('exit-modal')){ 10104 var urlObj =LOREM.Modal.checkUrlType(targetUrl); 10105 LOREM.Modal.navigateToPath(urlObj,targetType); 10106 } 10107 } 10108 } 10109 if((($(".modal-button").length > 0 ) || ($(".modals").length > 0)) && window.iswcmModeEditMode === "false"){ 10110 LOREM.Modal.init(); 10111 $(document).on('click', '.cmp-button-link', function(event){ 10112 if(!$('.entry-modal').hasClass('show')){ 10113 if(typeof $(this).data('redirect') == 'undefined'){ 10114 event.preventDefault(); 10115 //LOREM.Modal.init(); 10116 10117 }} 10118 10119 10120 }) 10121 10122 } 10123}); 10124$(document).ready(function () { 10125 var $searchForm = $('#search-results-form'), 10126 $searchWrapper = $('.search-wrapper'), 10127 $searchResultsWrapper = $('#search-results-wrapper'), 10128 $searchCountWrapper = $searchWrapper.find('.search-count-wrapper'), 10129 $noResultsFound = $searchWrapper.find('.no-results-found'), 10130 $searchInputIcon = $searchForm.find('.search-input-icon'), 10131 $searchInput = $searchForm.find('.search-input-text'), 10132 $radioButtons = $('.radio-button input[type="radio"]'), 10133 // $searchResultNextLink = '<li><a href="#" id="nextPage" class="directionLink nextPageLink"></a></li>', 10134 //$searchResultPrevLink = '<li><a href="#" id="prevPage" class="directionLink prevPageLink hidden"></a></li>', 10135 $pagination, 10136 searchoffset, 10137 resultsPerPage, 10138 activePage, 10139 searchTerm, 10140 minLengthMsg = $('.cmp-search-results').find('input[name="minLengthMsg"]').val(); 10141 if(minLengthMsg == "" || minLengthMsg == undefined){ 10142 minLengthMsg= "please enter at least 3 characters"; 10143 } 10144 LOREM.searchresults = { 10145currentSearchType: '', // Initialize the currentSearchType variable 10146 _autoload: [ 10147 '_getSearchTermOnLoad', 10148 'bindEvents' 10149 ], 10150 bindEvents: function() { 10151 $searchForm.on('submit', LOREM.searchresults._submitSearchForm); 10152 $searchForm.find('button[type="button"]').on('click', LOREM.searchresults._clickSearchSubmit); 10153 $radioButtons.on('change', LOREM.searchresults._updateSearchType); 10154 //$searchResultsWrapper.on('click', '.pagination .pageLink', LOREM.searchresults._paginateResults); 10155 //$searchResultsWrapper.on('click', '.pagination #nextPage', LOREM.searchresults._paginateNextResults); 10156 //$searchResultsWrapper.on('click', '.pagination #prevPage', LOREM.searchresults._paginatePrevResults); 10157 $searchInputIcon.on('click', LOREM.searchresults._clearInputField); 10158 }, 10159 /* get search term on page load, reading from url */ 10160 _getSearchTermOnLoad: function () { 10161 // Check the "Site pages" radio button by default 10162 $('#dam-content').prop('checked', true); 10163 10164 // Get the search term and search type from the URL 10165 var searchTerm = LOREM.options.getQueryParam('q') || ''; 10166 var searchType = LOREM.options.getQueryParam('r') || ''; 10167 10168 // If the search term is not empty, perform the search and update the UI 10169 if (searchTerm !== '') { 10170 searchTerm = decodeURIComponent(searchTerm); 10171 searchTerm = searchTerm.indexOf('+') ? searchTerm.split('+').join(' ') : searchTerm; 10172 $searchInput.val(searchTerm); 10173 10174 // If the search type is 'content', check the "Site pages" radio button 10175 if (searchType === 'content') { 10176 $('#dam-content').prop('checked', true); 10177 } 10178 // If the search type is 'assets', check the "Site documents" radio button 10179 else if (searchType === 'assets') { 10180 $('#dam-asset').prop('checked', true); 10181 } 10182 10183 // Fetch search results based on the search term and search type 10184 LOREM.searchresults._fetchSearchResults(searchTerm, '', searchType); 10185 } 10186}, 10187 /* prevent the form to submit when the search keyword is empty */ 10188 _submitSearchForm: function() { 10189 searchTerm = $searchInput.val(); 10190 // Retrieve the regex from the dialog field 10191 var searchRegex = $('#regexInput').val(); 10192 searchErrorElem = $(this).find('.search-results-error'); 10193 // If no regex is provided or it's empty, fall back to default behavior 10194 if (searchRegex === "" || searchRegex === undefined) { 10195 searchRegex = /^[0-9a-zA-Z, ]+[0-9a-zA-Z]{1}$/; 10196 if (searchTerm === '' || searchTerm.length <= 2) { 10197 searchErrorElem.html(minLengthMsg); 10198 searchErrorElem.removeClass('hidden'); 10199 return false; 10200 } 10201 } else { 10202 // If regex is provided, use it for validation 10203 var pattern = new RegExp(searchRegex); 10204 if (!pattern.test(searchTerm)) { 10205 searchErrorElem.html(minLengthMsg); 10206 searchErrorElem.removeClass('hidden'); 10207 return false; 10208 } 10209 } 10210}, 10211 /* submit the form when the button is clicked */ 10212 _clickSearchSubmit: function() { 10213 searchTerm = $searchInput.val(); 10214 // Check the "Site pages" radio button 10215 $('#dam-content').prop('checked', true); 10216 // Fetch search results 10217 searchTerm !== '' ? LOREM.searchresults._fetchSearchResults(searchTerm, '')
10217: null; 10218 // Append 'r=content' to the URL 10219 var searchParams = new URLSearchParams(window.location.search); 10220 searchParams.set('r', 'content'); 10221 var newUrl = window.location.pathname + '?' + searchParams.toString(); 10222 window.history.pushState({path: newUrl}, '', newUrl); 10223}, 10224 10225 10226 /* append search results taking the search term and makes an ajax request */ 10227 _fetchSearchResults: function (str, offset, searchType) { 10228 LOREM.UTILS._showLoader(); 10229 var getData, 10230 dataObj, 10231 currentPagePath = $('#currentPagePath').val(); 10232 searchoffset = offset === '' ? parseInt($('#searchOffsetValue').val()) : offset; 10233 resultsPerPage = parseInt($('#resultsPerPage').val()) || 5; // default results are 5 per page if the author doesn't configure the records per page 10234 dataObj = { 10235 searchWord: str, 10236 page: currentPagePath, 10237 searchType: searchType // Added searchType to the dataObj 10238 }; 10239 $.ajax({ 10240 url: '/bin/dxp/search.json', 10241 type: 'GET', 10242 data: dataObj, 10243 success: function(resp) { 10244 LOREM.UTILS._hideLoader(); 10245 var res = resp; 10246 if(typeof res === 'string') { 10247 res = JSON.parse(res); 10248 } 10249 getData = res; 10250 $searchResultsWrapper.find('.search-item').remove(); 10251 if(getData.totalRecords) { 10252 $noResultsFound.addClass('hidden'); 10253 $searchCountWrapper.removeClass('hidden'); 10254 LOREM.searchresults._appendPagination(getData); 10255 } else { 10256 $noResultsFound.removeClass('hidden'); 10257 $('.paginationjs').hide(); 10258 $searchCountWrapper.addClass('hidden'); 10259 } 10260 }, 10261 error: function(err) { 10262 LOREM.UTILS._hideLoader(); 10263 } 10264 }); 10265 }, 10266 _appendPagination: function(data) { 10267 $searchWrapper.find('.total-count').text(data.totalRecords); 10268 $('.cmp-search-results').pagination2({ // you call the plugin 10269 //console.log('inside pagination'); 10270 dataSource: data, // pass all the data 10271 locator:'results', 10272 pageSize: resultsPerPage, // put how many items per page you want 10273 hideWhenLessThanOnePage: true , 10274 callback: function(data,pagination) { 10275 // console.log('inside function'); 10276 var resultData = data; 10277 $searchResultsWrapper.empty(); 10278 for(var i=0; i<resultData.length; i++) { 10279 var $searchItem = $('<div class="search-item" />'), 10280 $searchTitle = $('<a class="search-item-heading" />'), 10281 $searchDesc = $('<p class="search-item-decription" />'); 10282 $searchTitle.attr('href', resultData[i].path).text(resultData[i].title); 10283 $searchDesc.html(resultData[i].description); 10284 $searchItem.append($searchTitle).append($searchDesc); 10285 $searchResultsWrapper.append($searchItem); 10286 } 10287 } 10288 }); 10289 }, 10290 /* function used to remove the text in the input */ 10291 _clearInputField: function() { 10292 $searchInput.val(''); 10293 }, 10294 _updateSearchType: function () { 10295 var searchType; 10296 if ($('#dam-content').is(':checked')) { 10297 searchType = 'content'; 10298 } else if ($('#dam-asset').is(':checked')) { 10299 searchType = 'assets'; 10300 } 10301 // Check if the search type is actually changed before triggering the AJAX request 10302 if (searchType !== LOREM.searchresults.currentSearchType) { 10303 LOREM.searchresults.currentSearchType = searchType; // Update the current search type 10304 // Update the query parameter in the URL 10305 var searchParams = new URLSearchParams(window.location.search); 10306 searchParams.set('r', searchType); 10307 var newUrl = window.location.pathname + '?' + searchParams.toString(); 10308 window.history.pushState({path: newUrl}, '', newUrl); 10309 LOREM.searchresults._fetchSearchResults($searchInput.val(), '', searchType); 10310 } 10311 } 10312 }; 10313 LOREM.searchresults.bindEvents(); 10314 LOREM.searchresults._getSearchTermOnLoad(); 10315}); 10316/* 10317 * pagination.js 2.1.5 10318 * A jQuery plugin to provide simple yet fully customisable pagination 10319 * https://github.com/superRaytin/paginationjs 10320 10321 * Homepage: http://pagination.js.org 10322 * 10323 * Copyright 2014-2100, superRaytin 10324 * Released under the MIT license. 10325*/ 10326!function(a,b){function c(a){throw new Error("Pagination: "+a)}function d(a){a.dataSource||c('"dataSource" is required.'),"string"==typeof a.dataSource?void 0===a.totalNumberLocator?void 0===a.totalNumber?c('"totalNumber" is required.'):b.isNumeric(a.totalNumber)||c('"totalNumber" is incorrect. (Number)'):b.
10326isFunction(a.totalNumberLocator)||c('"totalNumberLocator" should be a Function.'):i.isObject(a.dataSource)&&(void 0===a.locator?c('"dataSource" is an Object, please specify "locator".'):"string"==typeof a.locator||b.isFunction(a.locator)||c(a.locator+" is incorrect. (String | Function)")),void 0===a.formatResult||b.isFunction(a.formatResult)||c('"formatResult" should be a Function.')}function e(a){var c=["go","previous","next","disable","enable","refresh","show","hide","destroy"];b.each(c,function(b,c){a.off(h+c)}),a.data("pagination",{}),b(".paginationjs",a).remove()}function f(a,b){return("object"==(b=typeof a)?null==a&&"null"||Object.prototype.toString.call(a).slice(8,-1):b).toLowerCase()}void 0===b&&c("Pagination requires jQuery.");var g="pagination",h="__pagination-";b.fn.pagination&&(g="pagination2"),b.fn[g]=function(f){if(void 0===f)return this;var j=b(this),k=b.extend({},b.fn[g].defaults,f),l={initialize:function(){var a=this;if(j.data("pagination")||j.data("pagination",{}),!1!==a.callHook("beforeInit")){j.data("pagination").initialized&&b(".paginationjs",j).remove(),a.disabled=!!k.disabled;var c=a.model={pageRange:k.pageRange,pageSize:k.pageSize};a.parseDataSource(k.dataSource,function(b){a.isAsync=i.isString(b),i.isArray(b)&&(c.totalNumber=k.totalNumber=b.length),a.isDynamicTotalNumber=a.isAsync&&k.totalNumberLocator;var d=a.render(!0);k.className&&d.addClass(k.className),c.el=d,j["bottom"===k.position?"append":"prepend"](d),a.observer(),j.data("pagination").initialized=!0,a.callHook("afterInit",d)})}},render:function(a){var c=this,d=c.model,e=d.el||b('<div class="paginationjs"></div>'),f=!0!==a;c.callHook("beforeRender",f);var g=d.pageNumber||k.pageNumber,h=k.pageRange||0,i=c.getTotalPage(),j=g-h,l=g+h;return l>i&&(l=i,j=i-2*h,j=j<1?1:j),j<=1&&(j=1,l=Math.min(2*h+1,i)),e.html(c.generateHTML({currentPage:g,pageRange:h,rangeStart:j,rangeEnd:l})),k.hideWhenLessThanOnePage&&e[i<=1?"hide":"show"](),c.callHook("afterRender",f),e},generatePageNumbersHTML:function(a){var b,c=this,d=a.currentPage,e=c.getTotalPage(),f=a.rangeStart,g=a.rangeEnd,h="",i=k.pageLink,j=k.ellipsisText,l=k.classPrefix,m=k.activeClassName,n=k.disableClassName;if(null===k.pageRange){for(b=1;b<=e;b++)h+=b==d?'<li class="'+l+"-page J-paginationjs-page "+m+'" data-num="'+b+'"><a>'+b+"</a></li>":'<li class="'+l+'-page J-paginationjs-page" data-num="'+b+'"><a href="'+i+'">'+b+"</a></li>";return h}if(f<=3)for(b=1;b<f;b++)h+=b==d?'<li class="'+l+"-page J-paginationjs-page "+m+'" data-num="'+b+'"><a>'+b+"</a></li>":'<li class="'+l+'-page J-paginationjs-page" data-num="'+b+'"><a href="'+i+'">'+b+"</a></li>";else k.showFirstOnEllipsisShow&&(h+='<li class="'+l+"-page "+l+'-first J-paginationjs-page" data-num="1"><a href="'+i+'">1</a></li>'),h+='<li class="'+l+"-ellipsis "+n+'"><a>'+j+"</a></li>";for(b=f;b<=g;b++)h+=b==d?'<li class="'+l+"-page J-paginationjs-page "+m+'" data-num="'+b+'"><a>'+b+"</a></li>":'<li class="'+l+'-page J-paginationjs-page" data-num="'+b+'"><a href="'+i+'">'+b+"</a></li>";if(g>=e-2)for(b=g+1;b<=e;b++)h+='<li class="'+l+'-page J-paginationjs-page" data-num="'+b+'"><a href="'+i+'">'+b+"</a></li>";else h+='<li class="'+l+"-ellipsis "+n+'"><a>'+j+"</a></li>",k.showLastOnEllipsisShow&&(h+='<li class="'+l+"-page "+l+'-last J-paginationjs-page" data-num="'+e+'"><a href="'+i+'">'+e+"</a></li>");return h},generateHTML:function(a){var c,d=this,e=a.currentPage,f=d.getTotalPage(),g=d.getTotalNumber(),h=k.showPrevious,i=k.showNext,j=k.showPageNumbers,l=k.showNavigator,m=k.showGoInput,n=k.showGoButton,o=k.pageLink,p=k.prevText,q=k.nextText,r=k.goButtonText,s=k.classPrefix,t=k.disableClassName,u=k.ulClassName,v="",w='<input type="text" class="J-paginationjs-go-pagenumber">',x='<input type="button" class="J-paginationjs-go-button" value="'+r+'">',y=b.isFunction(k.formatNavigator)?k.formatNavigator(e,f,g):k.formatNavigator,z=b.isFunction(k.formatGoInput)?k.formatGoInput(w,e,f,g):k.formatGoInput,A=b.isFunction(k.formatGoButton)?k.formatGoButton(x,e,f,g):k.formatGoButton,B=b.isFunction(k.autoHidePrevious)?k.autoHidePrevious():k.autoHidePrevious,C=b.isFunction(k.autoHideNext)?k.autoHideNext():k.autoHideNext,D=b.isFunction(k.header)?k.header(e,f,g):k.header,E=b.isFunction(k.footer)?k.footer(e,f,g):k.footer;return D&&(c=d.replaceVariables(D,{currentPage:e,totalPage:f,totalNumber:g}),v+=c),(h||j||i)&&(v+='<div class="paginationjs-pages">',v+=u?'<ul class="'+u+'">':"<ul>",h&&(e<=1?B||(v+='<li class="'+s+"-prev "+t+'"><a>'+p+"</a></li>"):v+='<li class="'+s+'-prev J-paginationjs-previous" data-num="'+(e-1)+'" title="Previous page"><a href="'+o+'">'+p+"</a></li>"),j&&(v+=d.generatePageNumbersHTML(a)),i&&(e>=f?C||(v+='<li class="'+s+"-next "+t+'"><a>
10326'+q+"</a></li>"):v+='<li class="'+s+'-next J-paginationjs-next" data-num="'+(e+1)+'" title="Next page"><a href="'+o+'">'+q+"</a></li>"),v+="</ul></div>"),l&&y&&(c=d.replaceVariables(y,{currentPage:e,totalPage:f,totalNumber:g}),v+='<div class="'+s+'-nav J-paginationjs-nav">'+c+"</div>"),m&&z&&(c=d.replaceVariables(z,{currentPage:e,totalPage:f,totalNumber:g,input:w}),v+='<div class="'+s+'-go-input">'+c+"</div>"),n&&A&&(c=d.replaceVariables(A,{currentPage:e,totalPage:f,totalNumber:g,button:x}),v+='<div class="'+s+'-go-button">'+c+"</div>"),E&&(c=d.replaceVariables(E,{currentPage:e,totalPage:f,totalNumber:g}),v+=c),v},findTotalNumberFromRemoteResponse:function(a){this.model.totalNumber=k.totalNumberLocator(a)},go:function(a,c){function d(a){if(!1===e.callHook("beforePaging",g))return!1;if(f.direction=void 0===f.pageNumber?0:g>f.pageNumber?1:-1,f.pageNumber=g,e.render(),e.disabled&&e.isAsync&&e.enable(),j.data("pagination").model=f,k.formatResult){var d=b.extend(!0,[],a);i.isArray(a=k.formatResult(d))||(a=d)}j.data("pagination").currentPageData=a,e.doCallback(a,c),e.callHook("afterPaging",g),1==g&&e.callHook("afterIsFirstPage"),g==e.getTotalPage()&&e.callHook("afterIsLastPage")}var e=this,f=e.model;if(!e.disabled){var g=a;if((g=parseInt(g))&&!(g<1)){var h=k.pageSize,l=e.getTotalNumber(),m=e.getTotalPage();if(!(l>0&&g>m)){if(!e.isAsync)return void d(e.getDataFragment(g));var n={},o=k.alias||{};n[o.pageSize?o.pageSize:"pageSize"]=h,n[o.pageNumber?o.pageNumber:"pageNumber"]=g;var p=b.isFunction(k.ajax)?k.ajax():k.ajax,q={type:"get",cache:!1,data:{},contentType:"application/x-www-form-urlencoded; charset=UTF-8",dataType:"json",async:!0};b.extend(!0,q,p),b.extend(q.data,n),q.url=k.dataSource,q.success=function(a){e.isDynamicTotalNumber?e.findTotalNumberFromRemoteResponse(a):e.model.totalNumber=k.totalNumber,d(e.filterDataByLocator(a))},q.error=function(a,b,c){k.formatAjaxError&&k.formatAjaxError(a,b,c),e.enable()},e.disable(),b.ajax(q)}}}},doCallback:function(a,c){var d=this,e=d.model;b.isFunction(c)?c(a,e):b.isFunction(k.callback)&&k.callback(a,e)},destroy:function(){!1!==this.callHook("beforeDestroy")&&(this.model.el.remove(),j.off(),b("#paginationjs-style").remove(),this.callHook("afterDestroy"))},previous:function(a){this.go(this.model.pageNumber-1,a)},next:function(a){this.go(this.model.pageNumber+1,a)},disable:function(){var a=this,b=a.isAsync?"async":"sync";!1!==a.callHook("beforeDisable",b)&&(a.disabled=!0,a.model.disabled=!0,a.callHook("afterDisable",b))},enable:function(){var a=this,b=a.isAsync?"async":"sync";!1!==a.callHook("beforeEnable",b)&&(a.disabled=!1,a.model.disabled=!1,a.callHook("afterEnable",b))},refresh:function(a){this.go(this.model.pageNumber,a)},show:function(){var a=this;a.model.el.is(":visible")||a.model.el.show()},hide:function(){var a=this;a.model.el.is(":visible")&&a.model.el.hide()},replaceVariables:function(a,b){var c;for(var d in b){var e=b[d],f=new RegExp("<%=\\s*"+d+"\\s*%>","img");c=(c||a).replace(f,e)}return c},getDataFragment:function(a){var b=k.pageSize,c=k.dataSource,d=this.getTotalNumber(),e=b*(a-1)+1,f=Math.min(a*b,d);return c.slice(e-1,f)},getTotalNumber:function(){return this.model.totalNumber||k.totalNumber||0},getTotalPage:function(){return Math.ceil(this.getTotalNumber()/k.pageSize)},getLocator:function(a){var d;return"string"==typeof a?d=a:b.isFunction(a)?d=a():c('"locator" is incorrect. (String | Function)'),d},filterDataByLocator:function(a){var d,e=this.getLocator(k.locator);if(i.isObject(a)){try{b.each(e.split("."),function(b,c){d=(d||a)[c]})}catch(a){}d?i.isArray(d)||c("dataSource."+e+" must be an Array."):c("dataSource."+e+" is undefined.")}return d||a},parseDataSource:function(a,d){var e=this;i.isObject(a)?d(k.dataSource=e.filterDataByLocator(a)):i.isArray(a)?d(k.dataSource=a):b.isFunction(a)?k.dataSource(function(a){i.isArray(a)||c('The parameter of "done" Function should be an Array.'),e.parseDataSource.call(e,a,d)}):"string"==typeof a?(/^https?|file:/.test(a)&&(k.ajaxDataType="jsonp"),d(a)):c('Unexpected type of "dataSource".')},callHook:function(c){var d,e=j.data("pagination"),f=Array.prototype.slice.apply(arguments);return f.shift(),k[c]&&b.isFunction(k[c])&&!1===k[c].apply(a,f)&&(d=!1),e.hooks&&e.hooks[c]&&b.each(e.hooks[c],function(b,c){!1===c.apply(a,f)&&(d=!1)}),!1!==d},observer:function(){var a=this,d=a.model.el;j.on(h+"go",function(d,e,f){(e=parseInt(b.trim(e)))&&(b.isNumeric(e)||c('"pageNumber" is incorrect. (Number)'),a.go(e,f))}),d.delegate(".J-paginationjs-page","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));if(e&&!d.hasClass(k.disableClassName)&&!d.hasClass(k.activeClassName))return!1!==a.callHook("beforePageOnClick",c,e)&&(a.go(e),a.callHook("afterPageOnClick",c,e),!!k.pageLink&&void 0)}),d.delegate(".J-paginationjs-previous","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));if(e&&!d.hasClass(k.disableClassName))return!1!==a.callHook("beforePreviousOnClick",c,e)&&(a.go(e),a.callHook("afterPreviousOnClick",c,e),!!k.pageLink&&void 0)}),d.delegate(".J-paginationjs-next","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));if(e&&!d.hasClass(k.disableClassName))return!1!==a.callHook("beforeNextOnClick",c,e)&&(a.go(e),a.callHook("afterNextOnClick",c,e),!!k.pageLink&&void 0)}),d.delegate(".J-paginationjs-go-button","click",function(c){var e=b(".J-paginationjs-go-pagenumber",d).val();if(!1===a.callHook("beforeGoButtonOnClick",c,e))return!1;j.trigger(h+"go",e),a.callHook("afterGoButtonOnClick",c,e)}),d.delegate(".J-paginationjs-go-pagenumber","keyup",function(c){if(13===c.which){var e=b(c.currentTarget).val();if(!1===a.callHook("beforeGoInputOnEnter",c,e))return!1;j.trigger(h+"go",e),b(".J-paginationjs-go-pagenumber",d).focus(),a.callHook("afterGoInputOnEnter",c,e)}}),j.on(h+"previous",function(b,c){a.previous(c)}),j.on(h+"next",function(b,c){a.next(c)}),j.on(h+"disable",function(){a.disable()}),j.on(h+"enable",function(){a.enable()}),j.on(h+"refresh",function(b,c){a.refresh(c)}),j.on(h+"show",function(){a.show()}),j.on(h+"hide",function(){a.hide()}),j.on(h+"destroy",function(){a.destroy()});var e=Math.max(a.getTotalPage(),1),f=k.pageNumber;a.isDynamicTotalNumber&&(f=1),k.triggerPagingOnInit&&j.trigger(h+"go",Math.min(f,e))}};if(j.data("pagination")&&!0===j.data("pagination").initialized){if(b.isNumeric(f))return j.trigger.call(this,h+"go",f,arguments[1]),this;if("string"==typeof f){var m=Array.prototype.slice.apply(arguments);switch(m[0]=h+m[0],f){case"previous":case"next":case"go":case"disable":case"enable":case"refresh":case"show":case"hide":case"destroy":j.trigger.apply(this,m);break;case"getSelectedPageNum":return j.data("pagination").model?j.data("pagination").model.pageNumber:j.data("pagination").attributes.pageNumber;case"getTotalPage":return Math.ceil(j.data("pagination").model.totalNumber/j.data("pagination").model.pageSize);case"getSelectedPageData":return j.data("pagination").currentPageData;case"isDisabled":return!0===j.data("pagination").model.disabled;default:c("Unknown action: "+f)}return this}e(j)}
10326else i.isObject(f)||c("Illegal options");return d(k),l.initialize(),this},b.fn[g].defaults={totalNumber:0,pageNumber:1,pageSize:10,pageRange:2,showPrevious:!0,showNext:!0,showPageNumbers:!0,showNavigator:!1,showGoInput:!1,showGoButton:!1,pageLink:"",prevText:"«",nextText:"»",ellipsisText:"...",goButtonText:"Go",classPrefix:"paginationjs",activeClassName:"active",disableClassName:"disabled",inlineStyle:!0,formatNavigator:"<%= currentPage %> / <%= totalPage %>",formatGoInput:"<%= input %>",formatGoButton:"<%= button %>",position:"bottom",autoHidePrevious:!1,autoHideNext:!1,triggerPagingOnInit:!0,hideWhenLessThanOnePage:!1,showFirstOnEllipsisShow:!0,showLastOnEllipsisShow:!0,callback:function(){}},b.fn.addHook=function(a,d){arguments.length<2&&c("Missing argument."),b.isFunction(d)||c("callback must be a function.");var e=b(this),f=e.data("pagination");f||(e.data("pagination",{}),f=e.data("pagination")),!f.hooks&&(f.hooks={}),f.hooks[a]=f.hooks[a]||[],f.hooks[a].push(d)},b[g]=function(a,d){arguments.length<2&&c("Requires two parameters.");var e;if(e="string"!=typeof a&&a instanceof jQuery?a:b(a),e.length)return e.pagination(d),e};var i={};b.each(["Object","Array","String"],function(a,b){i["is"+b]=function(a){return f(a)===b.toLowerCase()}}),"function"==typeof define&&define.amd&&define(function(){return b})}(this,window.jQuery); 10327$(document).ready(function(){ 10328 /*trigger the events only for mobile and tablet*/ 10329 if(!window.matchMedia('(min-width: 992px)').matches){ 10330 /*event handler for list dropdown*/ 10331 var cmpListDropdown = $('.cmp-list-dropdown'); 10332 if(cmpListDropdown.length >0){ 10333 cmpListDropdown.each(function() { 10334 var listDropdownHover = $(this).parent().hasClass('list-dropdown-hover'); 10335 var hoverElement = $(this).find('.list-dropdown-header'); 10336 var dropDownMenu = $(this).find('.dropdown-menu'); 10337 if (listDropdownHover) { 10338 var downIcon = dropDownMenu.siblings(".arrow-down-icon"); 10339 var upIcon = dropDownMenu.siblings(".arrow-up-icon"); 10340 hoverElement.on("click", function() { 10341 var dropDownMenu = $(this).find('.dropdown-menu'); 10342 dropDownMenu.toggle(); 10343 upIcon.toggle(); 10344 downIcon.toggle(); 10345 }); 10346 $(document).on("click", function(evt) { 10347 if (dropDownMenu.is(":visible") && evt.target !== dropDownMenu[0] && evt.target !== downIcon[0] && evt.target !== hoverElement[0] && evt.target !== hoverElement.find('.dropdown-text')[0]) { 10348 10349 dropDownMenu.hide(); 10350 dropDownMenu.siblings(".arrow-up-icon").hide(); 10351 downIcon.css("display", "block"); 10352 } 10353 }); 10354 dropDownMenu.find('ul li').on('click', function() { 10355 var anchorLinksStart = $(this).find("a.list-item-link[href^='#']"); 10356 var replaceText = anchorLinksStart.find('span.list-item-label').html(); 10357 if (anchorLinksStart.length > 0 && anchorLinksStart.attr("href")[0] === '#') { 10358 hoverElement.find('.dropdown-text').text(replaceText); 10359 $(this).addClass('active').siblings().removeClass('active'); 10360 } 10361 }); 10362 }else{ 10363 $(document).on("click",".dropdown-arrow",function(evt){ 10364 evt.stopPropagation(); 10365 var $this = $(this), 10366 $dropdownMenu = $this.siblings(".dropdown-menu"); 10367 $this.hide(); 10368 if($this.hasClass("arrow-up-icon")){ 10369 $dropdownMenu.hide(); 10370 $this.siblings(".arrow-down-icon").css("display","block"); 10371 }else{ 10372 $dropdownMenu.css("display","block"); 10373 $this.siblings(".arrow-up-icon").css("display","block"); 10374 } 10375 }); 10376 /*hide the dropdown if user clicks outside of dropdown*/ 10377 $(document).on("click",function(evt){ 10378 var $downArrow = dropDownMenu.siblings(".arrow-down-icon"); 10379 if(dropDownMenu.is(":visible") && evt.target !== dropDownMenu[0] && evt.target !== $downArrow[0]){ 10380 dropDownMenu.hide(); 10381 dropDownMenu.siblings(".arrow-up-icon").hide(); 10382 $downArrow.css("display","block"); 10383 } 10384 }); 10385 } 10386 }); 10387 } 10388 if ($('.sticky-list-dropdown').length > 0) { 10389 var $headerStickyHeight; 10390 if ($('header').hasClass('sticky-mobile-header')) { 10391 $headerStickyHeight = $('.header-utilitynav-wrapper').height(); 10392 } else { 10393 $headerStickyHeight = 0; 10394 } 10395 var listDropDownTop = $('.sticky-list-dropdown').offset().top; 10396 if(listDropDownTop === $headerStickyHeight){ 10397 $('.sticky-list-dropdown').find('.cmp-list-dropdown').first().addClass('sticky'); 10398 var $cmpListDropDownSticky = $('.cmp-list-dropdown.sticky'); 10399 $cmpListDropDownSticky.css({ 10400 'padding-top': $headerStickyHeight 10401 }); 10402 } 10403 $(window).scroll(function() { 10404 var currentScroll = parseInt($(window).scrollTop()) + $headerStickyHeight; 10405 if (currentScroll >= listDropDownTop ) { 10406 $('.sticky-list-dropdown').find('.cmp-list-dropdown').first().addClass('sticky'); 10407 var $cmpListDropDownSticky = $('.cmp-list-dropdown.sticky'); 10408 $cmpListDropDownSticky.css({ 10409 'padding-top': $headerStickyHeight 10410 }); 10411 }else{ 10412 $('.sticky-list-dropdown').find('.cmp-list-dropdown').removeClass('sticky'); 10413 $('.cmp-list-dropdown').css({ 10414 'padding-top':0 10415 }); 10416 } 10417 }); 10418 } 10419 if($('.list-dropdown-active').length >0){ 10420 var listSelectorLinks = $('.list-dropdown-active .cmp-list-dropdown .dropdown-menu ul li'); 10421 listSelectorLinks.each(function(){ 10422 var dropdownLinkHref = $(this).find('a.list-item-link').attr('href'); 10423 if(window.location.pathname === dropdownLinkHref){ 10424 $(this).addClass('active'); 10425 } 10426 }); 10427 } 10428 } 10429}); 10430$(document).on('click', 'list-item.dropdown-item', function(){ 10431 $('.list-dropdown-header.dropdown').unbind('mouseenter mouseleave'); 10432}) 10433 10434$(document).ready(function() { 10435 var $listActionsEl = $('.list-filter-sort-options'), 10436 listCtxObj, 10437 FILTER_FLAG = false, 10438 SORT_FLAG = false, 10439 targetEl, 10440 onloadList; 10441 10442 LOREM.listActions = { 10443 _init: function() { 10444 listCtxObj = this; 10445 listCtxObj._bindEvents(); 10446 10447 }, 10448 10449 /** 10450 * Function handler for event binding. 10451 * 10452 */ 10453 _bindEvents: function() { 10454 $listActionsEl.on('change', 'select[name="filter-select"]', listCtxObj._filterListHandler); 10455 $listActionsEl.on('change', 'select[name="sort-select"]', listCtxObj._sortListHandler); 10456 $listActionsEl.on('click', '.reset-actions', listCtxObj._resetActions); 10457 }, 10458 _targetElem: function($this) { 10459 $listActionsEl = $this.closest('.list-filter-sort-options'); 10460 var $targetArticle = $listActionsEl.parents().find('.cmp-tile-wrapper[data-tagged-component="' + $listActionsEl.data('tagged-component') + '"]'); 10461 var $targetRighArticle = $listActionsEl.parents().find('.cmp-right-rail-wrapper[data-tagged-component="' + $listActionsEl.data('tagged-component') + '"]'); 10462 if ($targetArticle !== undefined && $targetArticle.length > 0) { 10463 targetEl = $('.cmp-tile-wrapper[data-tagged-component="' + $listActionsEl.data('tagged-component') + '"]'); 10464 } else if ($targetRighArticle !== undefined && $targetRighArticle.length > 0) { 10465 targetEl = $('.cmp-right-rail-wrapper[data-tagged-component="' + $listActionsEl.data('tagged-component') + '"]'); 10466 } 10467 return targetEl; 10468 }, 10469 /** 10470 * Function handler apply selected filter for list items. 10471 * 10472 */ 10473 _filterListHandler: function(ev, el){ 10474 ev.preventDefault(); 10475 var $this = $(this); 10476 var tagName = $this.val(); 10477 if($listActionsEl.data('tagged-component')) { 10478 FILTER_FLAG = true; 10479 targetEl = listCtxObj._targetElem($this); 10480 var items = targetEl.find('.cmp-tile-list'); 10481 10482 $(items).each(function(idx, item){ 10483 var $item = $(item); 10484 $item.removeClass('filter-action').hide(); 10485 if($item.data('tags')) { 10486 var tags = $item.data('tags').split(','); 10487 if(tags.indexOf(tagName) >= 0) { 10488 $item.addClass('filter-action').show(); 10489 } 10490 } 10491 if(tagName.indexOf("list-default") != -1) { 10492 targetEl.find('.cmp-tile-list').removeClass('filter-action').show(); 10493 } 10494 }); 10495 $('html').animate({scrollTop: $(window).scrollTop() + 1}); 10496 } 10497 }, 10498 /** 10499 * Function handler sort list items. 10500 * 10501 */ 10502 _sortListHandler: function(ev){ 10503 ev.preventDefault(); 10504 var $this = $(this); 10505 var sortVal = $this.val(); 10506 if($listActionsEl.data('tagged-component')) { 10507 targetEl = listCtxObj._targetElem($this); 10508 onloadList = targetEl.find('.cmp-tile-list-wrap').html(); 10509 if(!SORT_FLAG) { 10510 listCtxObj._formatDateAttr(targetEl); 10511 } 10512 targetEl.find('.cmp-tile-list').addClass('sort-action'); 10513 SORT_FLAG = true; 10514 if(sortVal === 'newest') { 10515 listCtxObj._sortByDate(targetEl); 10516 } else if(sortVal === 'popular') { 10517 listCtxObj._sortByRank(targetEl); 10518 } 10519 $('html').animate({scrollTop: $(window).scrollTop() + 1}); 10520 } 10521 }, 10522 /** 10523 * Function handler to sort list items. 10524 * 10525 */ 10526 _sortByRank: function(targetEl) { 10527 targetEl.each(function(){ 10528 var items = $(this).find('.cmp-tile-list'); 10529 items.sort(function(a, b){ 10530 return +$(a).data('rank') - +$(b).data('rank'); 10531 }); 10532 var $parentEl = $(this).find('.cmp-tile-list-wrap'); 10533 items.appendTo($parentEl); 10534 }); 10535 }, 10536 _formatDateAttr: function(targetEl) { 10537 targetEl.find('.cmp-tile-list').each(function(){ 10538 var $this = $(this); 10539 if($this.attr('publishdate')) { 10540 var date = new Date($this.attr('publishdate')); 10541 $this.attr('data-time', date.getTime()); 10542 } 10543 }); 10544 }, 10545 _sortByDate: function(targetEl) { 10546 10547 targetEl.each(function(){ 10548 var $parentEl = $(this).find('.cmp-tile-list-wrap'); 10549 var itemsWithPublishDate = $(this).find('.cmp-tile-list[publishdate]'); 10550 var itemsWithOutPublishDate = $(this).find('.cmp-tile-list').not('[publishdate]'); 10551 itemsWithPublishDate.sort(function(a, b){ 10552 return +$(b).data('time') - +$(a).data('time'); 10553 }); 10554 itemsWithPublishDate.appendTo($parentEl); 10555 itemsWithOutPublishDate.appendTo($parentEl); 10556 }); 10557 }, 10558 /** 10559 * Function handler to reset filter and sort actions. 10560 * 10561 */ 10562 _resetActions: function(ev){ 10563 ev.preventDefault(); 10564 var $this = $(this); 10565 $listActionsEl = $this.closest('.list-filter-sort-options'); 10566 if (SORT_FLAG && $listActionsEl.data('tagged-component')) { 10567 targetEl = listCtxObj._targetElem($this); 10568 targetEl.find('.cmp-tile-list').remove(); 10569 var $parentEl = targetEl.find('.cmp-tile-list-wrap'); 10570 targetEl.find('.cmp-tile-list').removeClass('sort-action'); 10571 $parentEl.append(onloadList); 10572 if (FILTER_FLAG && $listActionsEl.data('tagged-component')) { 10573 targetEl.find('.cmp-tile-list').removeClass('filter-action').show(); 10574 } 10575 } else { 10576 if (FILTER_FLAG && $listActionsEl.data('tagged-component')) { 10577 targetEl = listCtxObj._targetElem($this); 10578 targetEl.find('.cmp-tile-list').removeClass('filter-action').show(); 10579 } 10580 } 10581 FILTER_FLAG = false;
10582 SORT_FLAG = false; 10583 10584 $listActionsEl.find('select[name="filter-select"]').val('0'); 10585 $listActionsEl.find('select[name="sort-select"]').val('0'); 10586 if($listActionsEl.find('.select-selected').length >0 && resetText !== undefined){ 10587 $listActionsEl.find('.select-selected').html(resetText); 10588 if($listActionsEl.find('.select-items div').hasClass('same-as-selected')){ 10589 $listActionsEl.find('.select-items div').removeClass('same-as-selected'); 10590 } 10591 } 10592 10593 } 10594 } 10595 if($listActionsEl.length) { 10596 LOREM.listActions._init($(this)); 10597 } 10598 if ($('.customDropdownHover').find('select[name="filter-select"]').length > 0) { 10599 LOREM.options._customDropdown($('.customDropdownHover').find('select[name="filter-select"]')); 10600 var resetText = $listActionsEl.find('.select-selected').html(); 10601 } 10602}); 10603var modalCtxObj; 10604var lightBoxDataTarget; 10605var $changePasswordFormID; 10606var $changePasswordEl; 10607var $resetPasswordEl; 10608var $resetPasswordFormID ; 10609var temLightBoxPath; 10610var dataFlag; 10611var lightboxModalId = $('#genericLightbox'); 10612var personolizationModalPageUrl; 10613var personolizedElem; 10614LOREM.LightBoxModal = { 10615 _init: function() { 10616 lightBoxDataTarget = $('a[data-target="#genericLightbox"]'); 10617 modalCtxObj = this; 10618 modalCtxObj._bindEvents(lightBoxDataTarget); 10619 }, 10620 _bindEvents: function(lightBoxDataTarget) { 10621 lightBoxDataTarget.on('click',modalCtxObj._modalAnchorClick); 10622 }, 10623 _modalAnchorClick: function(ev, el) { 10624 ev.preventDefault(); 10625 var lightBoxPath = $(this).data("lightbox-path"); 10626 personolizedElem = $(this).parent().data('personalization'); 10627 if(personolizedElem === true){ 10628 $(this).parent().addClass('article-viewed'); 10629 personolizationModalPageUrl = $(this).parent().find('.data-personalization-url').attr('href'); 10630 } 10631 if (temLightBoxPath != undefined && temLightBoxPath == lightBoxPath && !($('.placeholder').length >0)) { 10632 lightboxModalId.modal('show'); 10633 } 10634 else{ 10635 if(lightBoxPath != undefined){ 10636 temLightBoxPath = lightBoxPath; 10637 $.ajax({
10638 url: lightBoxPath, 10639 type: 'GET', 10640 contentType: 'text/plain', 10641 dataType: 'html', 10642 success: function(data) { 10643 modalCtxObj._videoLoadOnModal(data); 10644 if(dataFlag){ 10645 modalCtxObj._lightboxDataReplace(data); 10646 } 10647 LOREM.UTILS._hideLoader(); 10648 lightboxModalId.modal('show'); 10649 } 10650 }); 10651 } 10652 } 10653 }, 10654 _plceholderReplacement:function(){ 10655 LOREM.MediaGalleryModal._handleplaceholders(); 10656 if($('.genericform-medication-reminder').length >0){ 10657 LOREM.genericformMedicationReminder._optOutBtnPlaceholder($('.genericform-medication-reminder')); 10658 } 10659 if($('.mapresults-v2').length >0){ 10660 LOREM.TreatmentResults_v2._shareModalPlaceholder($('.genericForm')); 10661 } 10662 }, 10663 _declaringVariables:function(){ 10664 $changePasswordFormID = $('.changePasswordForm').attr('id'); 10665 $changePasswordEl = $('#'+$changePasswordFormID); 10666 $resetPasswordFormID = $('.resetPasswordForm').attr('id'); 10667 $resetPasswordEl = $('#'+$resetPasswordFormID); 10668 }, 10669 _genericBindFnOnLoad:function(){ 10670 modalCtxObj._declaringVariables(); 10671 if ($('#signInForm').length) { 10672 LOREM.signInForm._init(); 10673 } 10674 if($('#forgotPasswordForm').length) { 10675 LOREM.forgotPasswordForm._init(); 10676 } 10677 if($changePasswordEl.length) { 10678 LOREM.changePasswordForm._init(); 10679 } 10680 if($resetPasswordEl.length) { 10681 LOREM.resetPasswordForm._init(); 10682 } 10683 if($('form.user-form').length){ 10684 LOREM.onBlurValidate._init($('.lightbox-modal')); 10685 $('form.user-form').each(function() { 10686 LOREM.autopopulateCityState._init($(this).find('.form-group')); 10687 }); 10688 } 10689 if ($('.genericForm').length) { 10690 $('.genericForm').each(function() { 10691 LOREM.genericForm._init($(this)); 10692 }); 10693 } 10694 if($('.ciam-signin-form').length) { 10695 $('.ciam-signin-form').each(function() { 10696 LOREM.ciamSignInForm._init($(this)); 10697 }); 10698 } 10699 if($('.ciam-register-wrapper').length) { 10700 $('.ciam-register-wrapper').each(function() { 10701 LOREM.ciamRegister.checkEmailValidation($(this).find('.emailValidationForm')); 10702 LOREM.options.conditionalFunction($(this).find('.registrationForm')); 10703 }); 10704 } 10705 if ($('.ciam-edit-profile-container').length) { 10706 $('.ciam-edit-profile-container').each(function() { 10707 LOREM.ciamEditProfile._init($(this).find('.ciam-editProfile')); 10708 LOREM.options.conditionalFunction($(this).find('.ciam-editProfile')); 10709 }); 10710 } 10711 if ($('.ciamForgotPasswordForm').length) { 10712 $('.ciamForgotPasswordForm').each(function() { 10713 LOREM.ciamForgotPasswordForm._init($(this)); 10714 }); 10715 } 10716 if($('.changeResetPasswordForm').length) { 10717 $('.changeResetPasswordForm').each(function() { 10718 LOREM.CIAMChangePasswordForm._init($(this)); 10719 });
10720 } 10721 }, 10722 _handleFnOnLoad:function(){ 10723 var pairs = location.search.substr(1).split('&'); 10724 for (var i = 0; i < pairs.length; i++) { 10725 var search = pairs[i].split('='), 10726 key = search[0], 10727 val = search[1]; 10728 if (key == 'lightbox') { 10729 $('[data-lightbox-path="' + val + '"]').click(); 10730 } 10731 } 10732 }, 10733 _videoLoadOnModal: function(data) { 10734 var getScriptjs = $(data).find('script[type="text/javascript"]').attr('src'); 10735 var alreadyLoaded = document.querySelector('script[src="' + getScriptjs + '"]') ? true : false; 10736 if (getScriptjs !== undefined) { 10737 if (!alreadyLoaded) { 10738 dataFlag = false; 10739 function loadScript(url, callback) { 10740 var head = document.getElementsByTagName('head')[0]; 10741 var script = document.createElement('script'); 10742 script.type = 'text/javascript'; 10743 script.src = url; 10744 script.onload = callback; 10745 head.appendChild(script); 10746 } 10747 var replaceCode = function() { 10748 if (dataFlag == false) { 10749 modalCtxObj._lightboxDataReplace(data); 10750 } 10751 }; 10752 loadScript(getScriptjs, replaceCode); 10753 } else { 10754 dataFlag = true; 10755 } 10756 } else { 10757 dataFlag = true; 10758 } 10759 lightboxModalId.on('hide.bs.modal', function() { 10760 if ($(".lightbox-modal").find('.cmp-video').length > 0) { 10761 $('.cmp-video').each(function() { 10762 var divElem = $(this).find('div')[0]; 10763 var currentVideoItem = $(divElem).attr('id'); 10764 if(($('.jwplayer').length >0) && jwplayer(currentVideoItem).getState() === 'playing'){ 10765 jwplayer(currentVideoItem).stop(); 10766 } 10767 }); 10768 } 10769 }); 10770 }, 10771 _lightboxDataReplace:function(data){ 10772 $(".lightbox-modal").replaceWith(data); 10773 $('.lightbox-modal a[data-target="#genericLightbox"]').attr('href', 'javascript:void(0);'); 10774 modalCtxObj._genericBindFnOnLoad(); 10775 if($(".lightbox-modal").length > 0){ 10776 var lightboxlink = $('.lightbox-modal a[data-target="#genericLightbox"]'); 10777 modalCtxObj._bindEvents(lightboxlink); 10778 modalCtxObj._plceholderReplacement(); 10779 } 10780 if($('.lightbox-modal[data-preventclose]').length>0){ 10781 lightboxModalId.modal({ 10782 backdrop: 'static' 10783 }); 10784 } 10785 } 10786} 10787$(document).ready(function() { 10788 if ($('a[data-target="#genericLightbox"]').length > 0) { 10789 LOREM.LightBoxModal._init(); 10790 LOREM.LightBoxModal._handleFnOnLoad(); 10791 $(document).keydown(function(e) { 10792 if($('.lightbox-modal[data-preventclose]').length <= 0){ 10793 if (e.keyCode == 27) { 10794 lightboxModalId.modal('hide'); 10795 LOREM.MediaGalleryModal._videoClose(); 10796 } 10797 } 10798 10799 if ($('#genericLightbox .modal-button .close-icon-button.close').is(':visible')) { 10800 let isTabPressed = e.key === 'Tab' || e.keyCode === 9; 10801 if (!isTabPressed) { 10802 return; 10803 } 10804 if (e.shiftKey) { 10805 document.querySelector('#genericLightbox .modal-button .close-icon-button.close').focus(); 10806 e.preventDefault(); 10807 } else { 10808 document.querySelector('#genericLightbox .modal-button .close-icon-button.close').focus(); 10809 e.preventDefault(); 10810 } 10811 } 10812 }); 10813 } 10814 $(document).on('click','a[data-target="#genericLightbox"]', function() { 10815 $('html').css('overflow', 'hidden'); 10816 }); 10817 $(document).on('hide.bs.modal', function () { 10818 $('html').css('overflow', 'auto'); 10819 }); 10820}); 10821$(document).ready(function() { 10822 var cTZ, calendarTimeZone, evState, calendarTitle, calendarDate, calendarAddress, calendarDescription, eventTimeZone, eventState, addToCalCtxObj; 10823 10824 var testData = false; /* change value to true if testing w/o eventdetails component */ 10825 10826 LOREM.addToCalendarComp = { 10827 _init: function() { 10828 addToCalCtxObj = this; 10829 addToCalCtxObj._registerElements(testData); 10830 addToCalCtxObj._populateBasicInfo(); 10831 }, 10832 10833 _registerElements: function(testReq) { 10834 if (!testReq) { 10835 calendarTitle = $('#calendar-title').val(); 10836 calendarDate = $('#calendar-date').val(); 10837 eventTimeZone = $('#calendar-timezone').val(); 10838 eventState = $('#event-state');
10839 calendarAddress = $('#calendar-address').val(); 10840 calendarDescription = $('#calendar-description').val(); 10841 } else { 10842 /* test data */ 10843 calendarTitle = "Test Calendar Title"; 10844 calendarDate = "23-01-2019 12:00"; 10845 eventTimeZone = "PST"; 10846 eventState = "MA"; 10847 calendarAddress = "10 Test Address"; 10848 calendarDescription = "Test calendar description content."; 10849 } 10850 }, 10851 10852 /* TODO: Fetch event info from event service with eventID, no event component needed */ 10853 /* _fetchEventInfo: function(eventID){} */ 10854 10855 _populateBasicInfo: function() { 10856 10857 if (eventTimeZone) { 10858 calendarTimeZone = eventTimeZone.substring(0, 1); 10859 } 10860 10861 eventState = $('#event-state').text(); 10862 if (eventState) { 10863 evState = eventState.substring(0, 2); 10864 } 10865 /* AZ is always MST; check first letter of timezone to set timezone string required by atc.js */ 10866 if (evState !== 'AZ') { 10867 switch (calendarTimeZone) { 10868 case 'C': 10869 cTZ = 'america/chicago'; 10870 break; 10871 case 'M': 10872 cTZ = 'america/denver'; 10873 break; 10874 case 'P': 10875 cTZ = 'america/los_angeles'; 10876 break; 10877 default: 10878 cTZ = 'america/new_york'; 10879 } 10880 } else { 10881 cTZ = 'america/phoenix'; 10882 } 10883 10884 $('.start').html(calendarDate); 10885 $('#cal-timezone').html(cTZ); 10886 $('#cal-title').html(calendarTitle); 10887 $('#cal-description').html(calendarDescription); 10888 $('.location').html(calendarAddress); 10889 10890 }, 10891 10892 } 10893 10894 /* TODO: Check if event component exists before init */ 10895 LOREM.addToCalendarComp._init(); 10896 10897}); 10898// Underscore.js 1.9.1 10899// http://underscorejs.org 10900// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 10901// Underscore may be freely distributed under the MIT license. 10902 10903(function() { 10904 10905 // Baseline setup 10906 // -------------- 10907 10908 // Establish the root object, `window` (`self`) in the browser, `global` 10909 // on the server, or `this` in some virtual machines. We use `self` 10910 // instead of `window` for `WebWorker` support. 10911 var root = typeof self == 'object' && self.self === self && self || 10912 typeof global == 'object' && global.global === global && global || 10913 this || 10914 {}; 10915 10916 // Save the previous value of the `_` variable. 10917 var previousUnderscore = root._; 10918 10919 // Save bytes in the minified (but not gzipped) version: 10920 var ArrayProto = Array.prototype, ObjProto = Object.prototype; 10921 var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; 10922 10923 // Create quick reference variables for speed access to core prototypes. 10924 var push = ArrayProto.push, 10925 slice = ArrayProto.slice, 10926 toString = ObjProto.toString, 10927 hasOwnProperty = ObjProto.hasOwnProperty; 10928 10929 // All **ECMAScript 5** native function implementations that we hope to use 10930 // are declared here. 10931 var nativeIsArray = Array.isArray, 10932 nativeKeys = Object.keys, 10933 nativeCreate = Object.create; 10934 10935 // Naked function reference for surrogate-prototype-swapping. 10936 var Ctor = function(){}; 10937 10938 // Create a safe reference to the Underscore object for use below. 10939 var _ = function(obj) { 10940 if (obj instanceof _) return obj; 10941 if (!(this instanceof _)) return new _(obj); 10942 this._wrapped = obj; 10943 }; 10944 10945 // Export the Underscore object for **Node.js**, with 10946 // backwards-compatibility for their old module API. If we're in 10947 // the browser, add `_` as a global object. 10948 // (`nodeType` is checked to ensure that `module` 10949 // and `exports` are not HTML elements.) 10950 if (typeof exports != 'undefined' && !exports.nodeType) { 10951 if (typeof module != 'undefined' && !module.nodeType && module.exports) { 10952 exports = module.exports = _; 10953 } 10954 exports._ = _; 10955 } else { 10956 root._ = _; 10957 } 10958 10959 // Current version. 10960 _.VERSION = '1.9.1'; 10961
10962 // Internal function that returns an efficient (for current engines) version 10963 // of the passed-in callback, to be repeatedly applied in other Underscore 10964 // functions. 10965 var optimizeCb = function(func, context, argCount) { 10966 if (context === void 0) return func; 10967 switch (argCount == null ? 3 : argCount) { 10968 case 1: return function(value) { 10969 return func.call(context, value); 10970 }; 10971 // The 2-argument case is omitted because weâre not using it. 10972 case 3: return function(value, index, collection) { 10973 return func.call(context, value, index, collection); 10974 }; 10975 case 4: return function(accumulator, value, index, collection) { 10976 return func.call(context, accumulator, value, index, collection); 10977 }; 10978 } 10979 return function() { 10980 return func.apply(context, arguments); 10981 }; 10982 }; 10983 10984 var builtinIteratee; 10985 10986 // An internal function to generate callbacks that can be applied to each 10987 // element in a collection, returning the desired result â either `identity`, 10988 // an arbitrary callback, a property matcher, or a property accessor. 10989 var cb = function(value, context, argCount) { 10990 if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); 10991 if (value == null) return _.identity; 10992 if (_.isFunction(value)) return optimizeCb(value, context, argCount); 10993 if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); 10994 return _.property(value); 10995 }; 10996 10997 // External wrapper for our callback generator. Users may customize 10998 // `_.iteratee` if they want additional predicate/iteratee shorthand styles. 10999 // This abstraction hides the internal-only argCount argument. 11000 _.iteratee = builtinIteratee = function(value, context) { 11001 return cb(value, context, Infinity); 11002 }; 11003 11004 // Some functions take a variable number of arguments, or a few expected 11005 // arguments at the beginning and then a variable number of values to operate 11006 // on. This helper accumulates all remaining arguments past the functionâs 11007 // argument length (or an explicit `startIndex`), into an array that becomes 11008 // the last argument. Similar to ES6âs "rest parameter". 11009 var restArguments = function(func, startIndex) { 11010 startIndex = startIndex == null ? func.length - 1 : +startIndex; 11011 return function() { 11012 var length = Math.max(arguments.length - startIndex, 0), 11013 rest = Array(length), 11014 index = 0; 11015 for (; index < length; index++) { 11016 rest[index] = arguments[index + startIndex]; 11017 } 11018 switch (startIndex) { 11019 case 0: return func.call(this, rest); 11020 case 1: return func.call(this, arguments[0], rest); 11021 case 2: return func.call(this, arguments[0], arguments[1], rest); 11022 } 11023 var args = Array(startIndex + 1); 11024 for (index = 0; index < startIndex; index++) { 11025 args[index] = arguments[index]; 11026 } 11027 args[startIndex] = rest; 11028 return func.apply(this, args); 11029 }; 11030 }; 11031 11032 // An internal function for creating a new object that inherits from another. 11033 var baseCreate = function(prototype) { 11034 if (!_.isObject(prototype)) return {}; 11035 if (nativeCreate) return nativeCreate(prototype); 11036 Ctor.prototype = prototype; 11037 var result = new Ctor; 11038 Ctor.prototype = null; 11039 return result; 11040 }; 11041 11042 var shallowProperty = function(key) { 11043 return function(obj) { 11044 return obj == null ? void 0 : obj[key]; 11045 }; 11046 }; 11047 11048 var has = function(obj, path) { 11049 return obj != null && hasOwnProperty.call(obj, path); 11050 } 11051 11052 var deepGet = function(obj, path) { 11053 var length = path.length; 11054 for (var i = 0; i < length; i++) { 11055 if (obj == null) return void 0; 11056 obj = obj[path[i]]; 11057 } 11058 return length ? obj : void 0; 11059 }; 11060 11061 // Helper for collection methods to determine whether a collection 11062 // should be iterated as an array or as an object. 11063 // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength 11064 // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 11065 var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; 11066 var getLength = shallowProperty('length'); 11067 var isArrayLike = function(collection) { 11068 var length = getLength(collection); 11069 return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; 11070 }; 11071 11072 // Collection Functions 11073 // -------------------- 11074 11075 // The cornerstone, an `each` implementation, aka `forEach`. 11076 // Handles raw objects in addition to array-likes. Treats all 11077 // sparse array-likes as if they were dense. 11078 _.each = _.forEach = function(obj, iteratee, context) { 11079 iteratee = optimizeCb(iteratee, context); 11080 var i, length; 11081 if (isArrayLike(obj)) { 11082 for (i = 0, length = obj.length; i < length; i++) { 11083 iteratee(obj[i], i, obj); 11084 } 11085 } else { 11086 var keys = _.keys(obj); 11087 for (i = 0, length = keys.length; i < length; i++) { 11088 iteratee(obj[keys[i]], keys[i], obj); 11089 } 11090 } 11091 return obj; 11092 }; 11093 11094 // Return the results of applying the iteratee to each element. 11095 _.map = _.collect = function(obj, iteratee, context) { 11096 iteratee = cb(iteratee, context); 11097 var keys = !isArrayLike(obj) && _.keys(obj), 11098 length = (keys || obj).length, 11099 results = Array(length); 11100 for (var index = 0; index < length; index++) { 11101 var currentKey = keys ? keys[index] : index; 11102 results[index] = iteratee(obj[currentKey], currentKey, obj); 11103 } 11104 return results; 11105 }; 11106 11107 // Create a reducing function iterating left or right. 11108 var createReduce = function(dir) { 11109 // Wrap code that reassigns argument variables in a separate function than 11110 // the one that accesses `arguments.length` to avoid a perf hit. (#1991) 11111 var reducer = function(obj, iteratee, memo, initial) { 11112 var keys = !isArrayLike(obj) && _.keys(obj), 11113 length = (keys || obj).length, 11114 index = dir > 0 ? 0 : length - 1; 11115 if (!initial) { 11116 memo = obj[keys ? keys[index] : index]; 11117 index += dir; 11118 } 11119 for (; index >= 0 && index < length; index += dir) { 11120 var currentKey = keys ? keys[index] : index; 11121 memo = iteratee(memo, obj[currentKey], currentKey, obj); 11122 } 11123 return memo; 11124 }; 11125 11126 return function(obj, iteratee, memo, context) { 11127 var initial = arguments.length >= 3; 11128 return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); 11129 }; 11130 }; 11131 11132 // **Reduce** builds up a single result from a list of values, aka `inject`, 11133 // or `foldl`. 11134 _.reduce = _.foldl = _.inject = createReduce(1); 11135 11136 // The right-associative version of reduce, also known as `foldr`. 11137 _.reduceRight = _.foldr = createReduce(-1); 11138 11139 // Return the first value which passes a truth test. Aliased as `detect`. 11140 _.find = _.detect = function(obj, predicate, context) { 11141 var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; 11142 var key = keyFinder(obj, predicate, context); 11143 if (key !== void 0 && key !== -1) return obj[key]; 11144 }; 11145 11146 // Return all the elements that pass a truth test. 11147 // Aliased as `select`. 11148 _.filter = _.select = function(obj, predicate, context) { 11149 var results = []; 11150 predicate = cb(predicate, context); 11151 _.each(obj, function(value, index, list) { 11152 if (predicate(value, index, list)) results.push(value); 11153 }); 11154 return results; 11155 }; 11156 11157 // Return all the elements for which a truth test fails. 11158 _.reject = function(obj, predicate, context) { 11159 return _.filter(obj, _.negate(cb(predicate)), context); 11160 }; 11161 11162 // Determine whether all of the elements match a truth test. 11163 // Aliased as `all`. 11164 _.every = _.all = function(obj, predicate, context) { 11165 predicate = cb(predicate, context); 11166 var keys = !isArrayLike(obj) && _.keys(obj), 11167 length = (keys || obj).length; 11168 for (var index = 0; index < length; index++) { 11169 var currentKey = keys ? keys[index] : index; 11170 if (!predicate(obj[currentKey], currentKey, obj)) return false;
11171 } 11172 return true; 11173 }; 11174 11175 // Determine if at least one element in the object matches a truth test. 11176 // Aliased as `any`. 11177 _.some = _.any = function(obj, predicate, context) { 11178 predicate = cb(predicate, context); 11179 var keys = !isArrayLike(obj) && _.keys(obj), 11180 length = (keys || obj).length; 11181 for (var index = 0; index < length; index++) { 11182 var currentKey = keys ? keys[index] : index; 11183 if (predicate(obj[currentKey], currentKey, obj)) return true; 11184 } 11185 return false; 11186 }; 11187 11188 // Determine if the array or object contains a given item (using `===`). 11189 // Aliased as `includes` and `include`. 11190 _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { 11191 if (!isArrayLike(obj)) obj = _.values(obj); 11192 if (typeof fromIndex != 'number' || guard) fromIndex = 0; 11193 return _.indexOf(obj, item, fromIndex) >= 0; 11194 }; 11195 11196 // Invoke a method (with arguments) on every item in a collection. 11197 _.invoke = restArguments(function(obj, path, args) { 11198 var contextPath, func; 11199 if (_.isFunction(path)) { 11200 func = path; 11201 } else if (_.isArray(path)) { 11202 contextPath = path.slice(0, -1); 11203 path = path[path.length - 1]; 11204 } 11205 return _.map(obj, function(context) { 11206 var method = func; 11207 if (!method) { 11208 if (contextPath && contextPath.length) { 11209 context = deepGet(context, contextPath); 11210 } 11211 if (context == null) return void 0; 11212 method = context[path]; 11213 } 11214 return method == null ? method : method.apply(context, args); 11215 }); 11216 }); 11217 11218 // Convenience version of a common use case of `map`: fetching a property. 11219 _.pluck = function(obj, key) { 11220 return _.map(obj, _.property(key)); 11221 }; 11222 11223 // Convenience version of a common use case of `filter`: selecting only objects 11224 // containing specific `key:value` pairs. 11225 _.where = function(obj, attrs) { 11226 return _.filter(obj, _.matcher(attrs)); 11227 }; 11228 11229 // Convenience version of a common use case of `find`: getting the first object 11230 // containing specific `key:value` pairs. 11231 _.findWhere = function(obj, attrs) { 11232 return _.find(obj, _.matcher(attrs)); 11233 }; 11234 11235 // Return the maximum element (or element-based computation). 11236 _.max = function(obj, iteratee, context) { 11237 var result = -Infinity, lastComputed = -Infinity, 11238 value, computed; 11239 if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { 11240 obj = isArrayLike(obj) ? obj : _.values(obj); 11241 for (var i = 0, length = obj.length; i < length; i++) { 11242 value = obj[i]; 11243 if (value != null && value > result) { 11244 result = value; 11245 } 11246 } 11247 } else { 11248 iteratee = cb(iteratee, context); 11249 _.each(obj, function(v, index, list) { 11250 computed = iteratee(v, index, list); 11251 if (computed > lastComputed || computed === -Infinity && result === -Infinity) { 11252 result = v; 11253 lastComputed = computed; 11254 } 11255 }); 11256 } 11257 return result; 11258 }; 11259 11260 // Return the minimum element (or element-based computation). 11261 _.min = function(obj, iteratee, context) { 11262 var result = Infinity, lastComputed = Infinity, 11263 value, computed; 11264 if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { 11265 obj = isArrayLike(obj) ? obj : _.values(obj); 11266 for (var i = 0, length = obj.length; i < length; i++) { 11267 value = obj[i]; 11268 if (value != null && value < result) { 11269 result = value; 11270 } 11271 } 11272 } else { 11273 iteratee = cb(iteratee, context); 11274 _.each(obj, function(v, index, list) { 11275 computed = iteratee(v, index, list); 11276 if (computed < lastComputed || computed === Infinity && result === Infinity) { 11277 result = v; 11278 lastComputed = computed; 11279 } 11280 }); 11281 } 11282 return result; 11283 }; 11284 11285 // Shuffle a collection. 11286 _.shuffle = function(obj) { 11287 return _.sample(obj, Infinity); 11288 }; 11289 11290 // Sample **n** random values from a collection using the modern version of the 11291 // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/FisherâYates_shuffle). 11292 // If **n** is not specified, returns a single random element. 11293 // The internal `guard` argument allows it to work with `map`. 11294 _.sample = function(obj, n, guard) { 11295 if (n == null || guard) { 11296 if (!isArrayLike(obj)) obj = _.values(obj); 11297 return obj[_.random(obj.length - 1)]; 11298 } 11299 var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); 11300 var length = getLength(sample); 11301 n = Math.max(Math.min(n, length), 0); 11302 var last = length - 1; 11303 for (var index = 0; index < n; index++) { 11304 var rand = _.random(index, last); 11305 var temp = sample[index]; 11306 sample[index] = sample[rand]; 11307 sample[rand] = temp; 11308 } 11309 return sample.slice(0, n); 11310 }; 11311 11312 // Sort the object's values by a criterion produced by an iteratee. 11313 _.sortBy = function(obj, iteratee, context) { 11314 var index = 0; 11315 iteratee = cb(iteratee, context); 11316 return _.pluck(_.map(obj, function(value, key, list) { 11317 return { 11318 value: value, 11319 index: index++, 11320 criteria: iteratee(value, key, list) 11321 }; 11322 }).sort(function(left, right) { 11323 var a = left.criteria; 11324 var b = right.criteria; 11325 if (a !== b) { 11326 if (a > b || a === void 0) return 1; 11327 if (a < b || b === void 0) return -1; 11328 } 11329 return left.index - right.index; 11330 }), 'value'); 11331 }; 11332 11333 // An internal function used for aggregate "group by" operations. 11334 var group = function(behavior, partition) { 11335 return function(obj, iteratee, context) { 11336 var result = partition ? [[], []] : {}; 11337 iteratee = cb(iteratee, context); 11338 _.each(obj, function(value, index) { 11339 var key = iteratee(value, index, obj); 11340 behavior(result, value, key); 11341 }); 11342 return result; 11343 }; 11344 }; 11345 11346 // Groups the object's values by a criterion. Pass either a string attribute 11347 // to group by, or a function that returns the criterion. 11348 _.groupBy = group(function(result, value, key) { 11349 if (has(result, key)) result[key].push(value); else result[key] = [value]; 11350 }); 11351 11352 // Indexes the object's values by a criterion, similar to `groupBy`, but for 11353 // when you know that your index values will be unique. 11354 _.indexBy = group(function(result, value, key) { 11355 result[key] = value; 11356 }); 11357 11358 // Counts instances of an object that group by a certain criterion. Pass 11359 // either a string attribute to count by, or a function that returns the 11360 // criterion. 11361 _.countBy = group(function(result, value, key) { 11362 if (has(result, key)) result[key]++; else result[key] = 1; 11363 }); 11364 11365 var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; 11366 // Safely create a real, live array from anything iterable. 11367 _.toArray = function(obj) { 11368 if (!obj) return []; 11369 if (_.isArray(obj)) return slice.call(obj); 11370 if (_.isString(obj)) { 11371 // Keep surrogate pair characters together 11372 return obj.match(reStrSymbol); 11373 } 11374 if (isArrayLike(obj)) return _.map(obj, _.identity); 11375 return _.values(obj); 11376 }; 11377 11378 // Return the number of elements in an object. 11379 _.size = function(obj) { 11380 if (obj == null) return 0; 11381 return isArrayLike(obj) ? obj.length : _.keys(obj).length; 11382 }; 11383 11384 // Split a collection into two arrays: one whose elements all satisfy the given 11385 // predicate, and one whose elements all do not satisfy the predicate. 11386 _.partition = group(function(result, value, pass) { 11387 result[pass ? 0 : 1].push(value); 11388 }, true); 11389 11390 // Array Functions 11391 // --------------- 11392 11393 // Get the first element of an array. Passing **n** will return the first N 11394 // values in the array. Aliased as `head` and `take`. The **guard** check 11395 // allows it to work with `_.map`. 11396 _.first = _.head = _.take = function(array, n, guard) { 11397 if (array == null || array.length < 1) return n == null ? void 0 : []; 11398 if (n == null || guard) return array[0]; 11399 return _.initial(array, array.length - n); 11400 }; 11401 11402 // Returns everything but the last entry of the array. Especially useful on 11403 // the arguments object. Passing **n** will return all the values in 11404 // the array, excluding the last N. 11405 _.initial = function(array, n, guard) { 11406 return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); 11407 }; 11408 11409 // Get the last element of an array. Passing **n** will return the last N 11410 // values in the array. 11411 _.last = function(array, n, guard) { 11412 if (array == null || array.length < 1) return n == null ? void 0 : []; 11413 if (n == null || guard) return array[array.length - 1]; 11414 return _.rest(array, Math.max(0, array.length - n)); 11415 }; 11416 11417 // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. 11418 // Especially useful on the arguments object. Passing an **n** will return 11419 // the rest N values in the array. 11420 _.rest = _.tail = _.drop = function(array, n, guard) { 11421 return slice.call(array, n == null || guard ? 1 : n); 11422 }; 11423 11424 // Trim out all falsy values from an array.
11425 _.compact = function(array) { 11426 return _.filter(array, Boolean); 11427 }; 11428 11429 // Internal implementation of a recursive `flatten` function. 11430 var flatten = function(input, shallow, strict, output) { 11431 output = output || []; 11432 var idx = output.length; 11433 for (var i = 0, length = getLength(input); i < length; i++) { 11434 var value = input[i]; 11435 if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { 11436 // Flatten current level of array or arguments object. 11437 if (shallow) { 11438 var j = 0, len = value.length; 11439 while (j < len) output[idx++] = value[j++]; 11440 } else { 11441 flatten(value, shallow, strict, output); 11442 idx = output.length; 11443 } 11444 } else if (!strict) { 11445 output[idx++] = value; 11446 } 11447 } 11448 return output; 11449 }; 11450 11451 // Flatten out an array, either recursively (by default), or just one level. 11452 _.flatten = function(array, shallow) { 11453 return flatten(array, shallow, false); 11454 }; 11455 11456 // Return a version of the array that does not contain the specified value(s). 11457 _.without = restArguments(function(array, otherArrays) { 11458 return _.difference(array, otherArrays); 11459 }); 11460 11461 // Produce a duplicate-free version of the array. If the array has already 11462 // been sorted, you have the option of using a faster algorithm. 11463 // The faster algorithm will not work with an iteratee if the iteratee 11464 // is not a one-to-one function, so providing an iteratee will disable 11465 // the faster algorithm. 11466 // Aliased as `unique`. 11467 _.uniq = _.unique = function(array, isSorted, iteratee, context) { 11468 if (!_.isBoolean(isSorted)) { 11469 context = iteratee; 11470 iteratee = isSorted; 11471 isSorted = false; 11472 } 11473 if (iteratee != null) iteratee = cb(iteratee, context); 11474 var result = []; 11475 var seen = []; 11476 for (var i = 0, length = getLength(array); i < length; i++) { 11477 var value = array[i], 11478 computed = iteratee ? iteratee(value, i, array) : value; 11479 if (isSorted && !iteratee) { 11480 if (!i || seen !== computed) result.push(value); 11481 seen = computed; 11482 } else if (iteratee) { 11483 if (!_.contains(seen, computed)) { 11484 seen.push(computed); 11485 result.push(value); 11486 } 11487 } else if (!_.contains(result, value)) { 11488 result.push(value); 11489 } 11490 } 11491 return result; 11492 }; 11493 11494 // Produce an array that contains the union: each distinct element from all of 11495 // the passed-in arrays. 11496 _.union = restArguments(function(arrays) { 11497 return _.uniq(flatten(arrays, true, true)); 11498 }); 11499 11500 // Produce an array that contains every item shared between all the 11501 // passed-in arrays. 11502 _.intersection = function(array) { 11503 var result = []; 11504 var argsLength = arguments.length; 11505 for (var i = 0, length = getLength(array); i < length; i++) { 11506 var item = array[i]; 11507 if (_.contains(result, item)) continue; 11508 var j; 11509 for (j = 1; j < argsLength; j++) { 11510 if (!_.contains(arguments[j], item)) break; 11511 } 11512 if (j === argsLength) result.push(item); 11513 } 11514 return result; 11515 }; 11516 11517 // Take the difference between one array and a number of other arrays. 11518 // Only the elements present in just the first array will remain. 11519 _.difference = restArguments(function(array, rest) { 11520 rest = flatten(rest, true, true); 11521 return _.filter(array, function(value){ 11522 return !_.contains(rest, value); 11523 }); 11524 }); 11525 11526 // Complement of _.zip. Unzip accepts an array of arrays and groups 11527 // each array's elements on shared indices. 11528 _.unzip = function(array) { 11529 var length = array && _.max(array, getLength).length || 0; 11530 var result = Array(length); 11531 11532 for (var index = 0; index < length; index++) { 11533 result[index] = _.pluck(array, index); 11534 } 11535 return result; 11536 }; 11537 11538 // Zip together multiple lists into a single array -- elements that share 11539 // an index go together. 11540 _.zip = restArguments(_.unzip); 11541 11542 // Converts lists into objects. Pass either a single array of `[key, value]` 11543 // pairs, or two parallel arrays of the same length -- one of keys, and one of 11544 // the corresponding values. Passing by pairs is the reverse of _.pairs. 11545 _.object = function(list, values) { 11546 var result = {}; 11547 for (var i = 0, length = getLength(list); i < length; i++) { 11548 if (values) { 11549 result[list[i]] = values[i]; 11550 } else { 11551 result[list[i][0]] = list[i][1]; 11552 } 11553 } 11554 return result; 11555 }; 11556 11557 // Generator function to create the findIndex and findLastIndex functions. 11558 var createPredicateIndexFinder = function(dir) { 11559 return function(array, predicate, context) { 11560 predicate = cb(predicate, context); 11561 var length = getLength(array); 11562 var index = dir > 0 ? 0 : length - 1; 11563 for (; index >= 0 && index < length; index += dir) { 11564 if (predicate(array[index], index, array)) return index; 11565 } 11566 return -1; 11567 }; 11568 }; 11569 11570 // Returns the first index on an array-like that passes a predicate test. 11571 _.findIndex = createPredicateIndexFinder(1); 11572 _.findLastIndex = createPredicateIndexFinder(-1); 11573 11574 // Use a comparator function to figure out the smallest index at which 11575 // an object should be inserted so as to maintain order. Uses binary search. 11576 _.sortedIndex = function(array, obj, iteratee, context) { 11577 iteratee = cb(iteratee, context, 1); 11578 var value = iteratee(obj); 11579 var low = 0, high = getLength(array); 11580 while (low < high) { 11581 var mid = Math.floor((low + high) / 2); 11582 if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; 11583 } 11584 return low; 11585 }; 11586 11587 // Generator function to create the indexOf and lastIndexOf functions. 11588 var createIndexFinder = function(dir, predicateFind, sortedIndex) { 11589 return function(array, item, idx) { 11590 var i = 0, length = getLength(array); 11591 if (typeof idx == 'number') { 11592 if (dir > 0) { 11593 i = idx >= 0 ? idx : Math.max(idx + length, i); 11594 } else { 11595 length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; 11596 } 11597 } else if (sortedIndex && idx && length) { 11598 idx = sortedIndex(array, item); 11599 return array[idx] === item ? idx : -1; 11600 } 11601 if (item !== item) { 11602 idx = predicateFind(slice.call(array, i, length), _.isNaN); 11603 return idx >= 0 ? idx + i : -1; 11604 } 11605 for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { 11606 if (array[idx] === item) return idx; 11607 } 11608 return -1; 11609 }; 11610 }; 11611 11612 // Return the position of the first occurrence of an item in an array, 11613 // or -1 if the item is not included in the array. 11614 // If the array is large and already in sort order, pass `true` 11615 // for **isSorted** to use binary search. 11616 _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); 11617 _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); 11618 11619 // Generate an integer Array containing an arithmetic progression. A port of 11620 // the native Python `range()` function. See 11621 // [the Python documentation](http://docs.python.org/library/functions.html#range). 11622 _.range = function(start, stop, step) { 11623 if (stop == null) { 11624 stop = start || 0; 11625 start = 0; 11626 } 11627 if (!step) { 11628 step = stop < start ? -1 : 1; 11629 } 11630 11631 var length = Math.max(Math.ceil((stop - start) / step), 0); 11632 var range = Array(length); 11633 11634 for (var idx = 0; idx < length; idx++, start += step) { 11635 range[idx] = start; 11636 } 11637 11638 return range; 11639 }; 11640 11641 // Chunk a single array into multiple arrays, each containing `count` or fewer 11642 // items. 11643 _.chunk = function(array, count) { 11644 if (count == null || count < 1) return []; 11645 var result = []; 11646 var i = 0, length = array.length; 11647 while (i < length) { 11648 result.push(slice.call(array, i, i += count)); 11649 } 11650 return result; 11651 }; 11652 11653 // Function (ahem) Functions 11654 // ------------------ 11655 11656 // Determines whether to execute a function as a constructor 11657 // or a normal function with the provided arguments. 11658 var executeBound = function(sourceFunc, boundFunc, context, callingContext, args
11658) { 11659 if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); 11660 var self = baseCreate(sourceFunc.prototype); 11661 var result = sourceFunc.apply(self, args); 11662 if (_.isObject(result)) return result; 11663 return self; 11664 }; 11665 11666 // Create a function bound to a given object (assigning `this`, and arguments, 11667 // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if 11668 // available. 11669 _.bind = restArguments(function(func, context, args) { 11670 if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); 11671 var bound = restArguments(function(callArgs) { 11672 return executeBound(func, bound, context, this, args.concat(callArgs)); 11673 }); 11674 return bound; 11675 }); 11676 11677 // Partially apply a function by creating a version that has had some of its 11678 // arguments pre-filled, without changing its dynamic `this` context. _ acts 11679 // as a placeholder by default, allowing any combination of arguments to be 11680 // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. 11681 _.partial = restArguments(function(func, boundArgs) { 11682 var placeholder = _.partial.placeholder; 11683 var bound = function() { 11684 var position = 0, length = boundArgs.length; 11685 var args = Array(length); 11686 for (var i = 0; i < length; i++) { 11687 args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; 11688 } 11689 while (position < arguments.length) args.push(arguments[position++]); 11690 return executeBound(func, bound, this, this, args); 11691 }; 11692 return bound; 11693 }); 11694 11695 _.partial.placeholder = _; 11696 11697 // Bind a number of an object's methods to that object. Remaining arguments 11698 // are the method names to be bound. Useful for ensuring that all callbacks 11699 // defined on an object belong to it. 11700 _.bindAll = restArguments(function(obj, keys) { 11701 keys = flatten(keys, false, false); 11702 var index = keys.length; 11703 if (index < 1) throw new Error('bindAll must be passed function names'); 11704 while (index--) { 11705 var key = keys[index]; 11706 obj[key] = _.bind(obj[key], obj); 11707 } 11708 }); 11709 11710 // Memoize an expensive function by storing its results. 11711 _.memoize = function(func, hasher) { 11712 var memoize = function(key) { 11713 var cache = memoize.cache; 11714 var address = '' + (hasher ? hasher.apply(this, arguments) : key); 11715 if (!has(cache, address)) cache[address] = func.apply(this, arguments); 11716 return cache[address]; 11717 }; 11718 memoize.cache = {}; 11719 return memoize; 11720 }; 11721 11722 // Delays a function for the given number of milliseconds, and then calls 11723 // it with the arguments supplied.
11724 _.delay = restArguments(function(func, wait, args) { 11725 return setTimeout(function() { 11726 return func.apply(null, args); 11727 }, wait); 11728 }); 11729 11730 // Defers a function, scheduling it to run after the current call stack has 11731 // cleared. 11732 _.defer = _.partial(_.delay, _, 1); 11733 11734 // Returns a function, that, when invoked, will only be triggered at most once 11735 // during a given window of time. Normally, the throttled function will run 11736 // as much as it can, without ever going more than once per `wait` duration; 11737 // but if you'd like to disable the execution on the leading edge, pass 11738 // `{leading: false}`. To disable execution on the trailing edge, ditto. 11739 _.throttle = function(func, wait, options) { 11740 var timeout, context, args, result; 11741 var previous = 0; 11742 if (!options) options = {}; 11743 11744 var later = function() { 11745 previous = options.leading === false ? 0 : _.now(); 11746 timeout = null; 11747 result = func.apply(context, args); 11748 if (!timeout) context = args = null; 11749 }; 11750 11751 var throttled = function() { 11752 var now = _.now(); 11753 if (!previous && options.leading === false) previous = now; 11754 var remaining = wait - (now - previous); 11755 context = this; 11756 args = arguments; 11757 if (remaining <= 0 || remaining > wait) { 11758 if (timeout) { 11759 clearTimeout(timeout); 11760 timeout = null; 11761 } 11762 previous = now; 11763 result = func.apply(context, args); 11764 if (!timeout) context = args = null; 11765 } else if (!timeout && options.trailing !== false) { 11766 timeout = setTimeout(later, remaining); 11767 } 11768 return result; 11769 }; 11770 11771 throttled.cancel = function() { 11772 clearTimeout(timeout); 11773 previous = 0; 11774 timeout = context = args = null; 11775 }; 11776 11777 return throttled; 11778 }; 11779 11780 // Returns a function, that, as long as it continues to be invoked, will not 11781 // be triggered. The function will be called after it stops being called for 11782 // N milliseconds. If `immediate` is passed, trigger the function on the 11783 // leading edge, instead of the trailing. 11784 _.debounce = function(func, wait, immediate) { 11785 var timeout, result; 11786 11787 var later = function(context, args) { 11788 timeout = null; 11789 if (args) result = func.apply(context, args); 11790 }; 11791 11792 var debounced = restArguments(function(args) { 11793 if (timeout) clearTimeout(timeout); 11794 if (immediate) { 11795 var callNow = !timeout; 11796 timeout = setTimeout(later, wait); 11797 if (callNow) result = func.apply(this, args); 11798 } else { 11799 timeout = _.delay(later, wait, this, args); 11800 } 11801 11802 return result; 11803 }); 11804 11805 debounced.cancel = function() { 11806 clearTimeout(timeout); 11807 timeout = null; 11808 }; 11809 11810 return debounced; 11811 }; 11812 11813 // Returns the first function passed as an argument to the second, 11814 // allowing you to adjust arguments, run code before and after, and 11815 // conditionally execute the original function. 11816 _.wrap = function(func, wrapper) { 11817 return _.partial(wrapper, func); 11818 }; 11819
11820 // Returns a negated version of the passed-in predicate. 11821 _.negate = function(predicate) { 11822 return function() { 11823 return !predicate.apply(this, arguments); 11824 }; 11825 }; 11826 11827 // Returns a function that is the composition of a list of functions, each 11828 // consuming the return value of the function that follows. 11829 _.compose = function() { 11830 var args = arguments; 11831 var start = args.length - 1; 11832 return function() { 11833 var i = start; 11834 var result = args[start].apply(this, arguments); 11835 while (i--) result = args[i].call(this, result); 11836 return result; 11837 }; 11838 }; 11839 11840 // Returns a function that will only be executed on and after the Nth call. 11841 _.after = function(times, func) { 11842 return function() { 11843 if (--times < 1) { 11844 return func.apply(this, arguments); 11845 } 11846 }; 11847 }; 11848 11849 // Returns a function that will only be executed up to (but not including) the Nth call. 11850 _.before = function(times, func) { 11851 var memo; 11852 return function() { 11853 if (--times > 0) { 11854 memo = func.apply(this, arguments); 11855 } 11856 if (times <= 1) func = null; 11857 return memo; 11858 }; 11859 }; 11860 11861 // Returns a function that will be executed at most one time, no matter how 11862 // often you call it. Useful for lazy initialization. 11863 _.once = _.partial(_.before, 2); 11864 11865 _.restArguments = restArguments; 11866 11867 // Object Functions 11868 // ---------------- 11869 11870 // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. 11871 var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); 11872 var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', 11873 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; 11874 11875 var collectNonEnumProps = function(obj, keys) { 11876 var nonEnumIdx = nonEnumerableProps.length; 11877 var constructor = obj.constructor; 11878 var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; 11879 11880 // Constructor is a special case. 11881 var prop = 'constructor';
11882 if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); 11883 11884 while (nonEnumIdx--) { 11885 prop = nonEnumerableProps[nonEnumIdx]; 11886 if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { 11887 keys.push(prop); 11888 } 11889 } 11890 }; 11891 11892 // Retrieve the names of an object's own properties. 11893 // Delegates to **ECMAScript 5**'s native `Object.keys`. 11894 _.keys = function(obj) { 11895 if (!_.isObject(obj)) return []; 11896 if (nativeKeys) return nativeKeys(obj); 11897 var keys = []; 11898 for (var key in obj) if (has(obj, key)) keys.push(key); 11899 // Ahem, IE < 9. 11900 if (hasEnumBug) collectNonEnumProps(obj, keys); 11901 return keys; 11902 }; 11903 11904 // Retrieve all the property names of an object. 11905 _.allKeys = function(obj) { 11906 if (!_.isObject(obj)) return []; 11907 var keys = []; 11908 for (var key in obj) keys.push(key); 11909 // Ahem, IE < 9. 11910 if (hasEnumBug) collectNonEnumProps(obj, keys); 11911 return keys; 11912 }; 11913 11914 // Retrieve the values of an object's properties. 11915 _.values = function(obj) { 11916 var keys = _.keys(obj); 11917 var length = keys.length; 11918 var values = Array(length); 11919 for (var i = 0; i < length; i++) { 11920 values[i] = obj[keys[i]]; 11921 } 11922 return values; 11923 }; 11924 11925 // Returns the results of applying the iteratee to each element of the object. 11926 // In contrast to _.map it returns an object. 11927 _.mapObject = function(obj, iteratee, context) { 11928 iteratee = cb(iteratee, context); 11929 var keys = _.keys(obj), 11930 length = keys.length, 11931 results = {}; 11932 for (var index = 0; index < length; index++) { 11933 var currentKey = keys[index]; 11934 results[currentKey] = iteratee(obj[currentKey], currentKey, obj); 11935 } 11936 return results; 11937 }; 11938 11939 // Convert an object into a list of `[key, value]` pairs. 11940 // The opposite of _.object. 11941 _.pairs = function(obj) { 11942 var keys = _.keys(obj); 11943 var length = keys.length; 11944 var pairs = Array(length); 11945 for (var i = 0; i < length; i++) { 11946 pairs[i] = [keys[i], obj[keys[i]]]; 11947 } 11948 return pairs; 11949 }; 11950 11951 // Invert the keys and values of an object. The values must be serializable. 11952 _.invert = function(obj) { 11953 var result = {}; 11954 var keys = _.keys(obj); 11955 for (var i = 0, length = keys.length; i < length; i++) { 11956 result[obj[keys[i]]] = keys[i]; 11957 } 11958 return result; 11959 }; 11960 11961 // Return a sorted list of the function names available on the object. 11962 // Aliased as `methods`. 11963 _.functions = _.methods = function(obj) { 11964 var names = []; 11965 for (var key in obj) { 11966 if (_.isFunction(obj[key])) names.push(key); 11967 } 11968 return names.sort(); 11969 }; 11970 11971 // An internal function for creating assigner functions. 11972 var createAssigner = function(keysFunc, defaults) { 11973 return function(obj) { 11974 var length = arguments.length; 11975 if (defaults) obj = Object(obj); 11976 if (length < 2 || obj == null) return obj; 11977 for (var index = 1; index < length; index++) { 11978 var source = arguments[index], 11979 keys = keysFunc(source), 11980 l = keys.length; 11981 for (var i = 0; i < l; i++) { 11982 var key = keys[i]; 11983 if (!defaults || obj[key] === void 0) obj[key] = source[key]; 11984 } 11985 } 11986 return obj; 11987 }; 11988 }; 11989 11990 // Extend a given object with all the properties in passed-in object(s). 11991 _.extend = createAssigner(_.allKeys); 11992 11993 // Assigns a given object with all the own properties in the passed-in object(s). 11994 // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) 11995 _.extendOwn = _.assign = createAssigner(_.keys); 11996 11997 // Returns the first key on an object that passes a predicate test. 11998 _.findKey = function(obj, predicate, context) { 11999 predicate = cb(predicate, context); 12000 var keys = _.keys(obj), key; 12001 for (var i = 0, length = keys.length; i < length; i++) { 12002 key = keys[i]; 12003 if (predicate(obj[key], key, obj)) return key; 12004 } 12005 }; 12006 12007 // Internal pick helper function to determine if `obj` has key `key`. 12008 var keyInObj = function(value, key, obj) { 12009 return key in obj; 12010 }; 12011 12012 // Return a copy of the object only containing the whitelisted properties. 12013 _.pick = restArguments(function(obj, keys) { 12014 var result = {}
12014, iteratee = keys[0]; 12015 if (obj == null) return result; 12016 if (_.isFunction(iteratee)) { 12017 if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); 12018 keys = _.allKeys(obj); 12019 } else { 12020 iteratee = keyInObj; 12021 keys = flatten(keys, false, false); 12022 obj = Object(obj); 12023 } 12024 for (var i = 0, length = keys.length; i < length; i++) { 12025 var key = keys[i]; 12026 var value = obj[key]; 12027 if (iteratee(value, key, obj)) result[key] = value; 12028 } 12029 return result; 12030 }); 12031 12032 // Return a copy of the object without the blacklisted properties. 12033 _.omit = restArguments(function(obj, keys) { 12034 var iteratee = keys[0], context; 12035 if (_.isFunction(iteratee)) { 12036 iteratee = _.negate(iteratee); 12037 if (keys.length > 1) context = keys[1]; 12038 } else { 12039 keys = _.map(flatten(keys, false, false), String); 12040 iteratee = function(value, key) { 12041 return !_.contains(keys, key); 12042 }; 12043 } 12044 return _.pick(obj, iteratee, context); 12045 }); 12046 12047 // Fill in a given object with default properties. 12048 _.defaults = createAssigner(_.allKeys, true); 12049 12050 // Creates an object that inherits from the given prototype object. 12051 // If additional properties are provided then they will be added to the 12052 // created object. 12053 _.create = function(prototype, props) { 12054 var result = baseCreate(prototype); 12055 if (props) _.extendOwn(result, props); 12056 return result; 12057 }; 12058 12059 // Create a (shallow-cloned) duplicate of an object. 12060 _.clone = function(obj) { 12061 if (!_.isObject(obj)) return obj; 12062 return _.isArray(obj) ? obj.slice() : _.extend({}, obj); 12063 }; 12064 12065 // Invokes interceptor with the obj, and then returns obj. 12066 // The primary purpose of this method is to "tap into" a method chain, in 12067 // order to perform operations on intermediate results within the chain. 12068 _.tap = function(obj, interceptor) { 12069 interceptor(obj); 12070 return obj; 12071 }; 12072 12073 // Returns whether an object has a given set of `key:value` pairs. 12074 _.isMatch = function(object, attrs) { 12075 var keys = _.keys(attrs), length = keys.length; 12076 if (object == null) return !length; 12077 var obj = Object(object); 12078 for (var i = 0; i < length; i++) { 12079 var key = keys[i]; 12080 if (attrs[key] !== obj[key] || !(key in obj)) return false; 12081 } 12082 return true; 12083 }; 12084 12085 12086 // Internal recursive comparison function for `isEqual`. 12087 var eq, deepEq; 12088 eq = function(a, b, aStack, bStack) { 12089 // Identical objects are equal. `0 === -0`, but they aren't identical. 12090 // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). 12091 if (a === b) return a !== 0 || 1 / a === 1 / b; 12092 // `null` or `undefined` only equal to itself (strict comparison). 12093 if (a == null || b == null) return false; 12094 // `NaN`s are equivalent, but non-reflexive. 12095 if (a !== a) return b !== b; 12096 // Exhaust primitive checks 12097 var type = typeof a; 12098 if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; 12099 return deepEq(a, b, aStack, bStack); 12100 }; 12101 12102 // Internal recursive comparison function for `isEqual`. 12103 deepEq = function(a, b, aStack, bStack) { 12104 // Unwrap any wrapped objects. 12105 if (a instanceof _) a = a._wrapped; 12106 if (b instanceof _) b = b._wrapped; 12107 // Compare `[[Class]]` names. 12108 var className = toString.call(a); 12109 if (className !== toString.call(b)) return false; 12110 switch (className) { 12111 // Strings, numbers, regular expressions, dates, and booleans are compared by value. 12112 case '[object RegExp]': 12113 // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') 12114 case '[object String]': 12115 // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is 12116 // equivalent to `new String("5")`. 12117 return '' + a === '' + b; 12118 case '[object Number]': 12119 // `NaN`s are equivalent, but non-reflexive. 12120 // Object(NaN) is equivalent to NaN. 12121 if (+a !== +a) return +b !== +b; 12122 // An `egal` comparison is performed for other numeric values. 12123 return +a === 0 ? 1 / +a === 1 / b : +a === +b; 12124 case '[object Date]': 12125 case '[object Boolean]': 12126 // Coerce dates and booleans to numeric primitive values. Dates are compared by their 12127 // millisecond representations. Note that invalid dates with millisecond representations 12128 // of `NaN` are not equivalent. 12129 return +a === +b; 12130 case '[object Symbol]': 12131 return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); 12132 } 12133 12134 var areArrays = className === '[object Array]'; 12135 if (!areArrays) { 12136 if (typeof a != 'object' || typeof b != 'object') return false;
vendor: 5,070 bytes, lines 12137-12281
12137 12138 // Objects with different constructors are not equivalent, but `Object`s or `Array`s 12139 // from different frames are. 12140 var aCtor = a.constructor, bCtor = b.constructor; 12141 if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && 12142 _.isFunction(bCtor) && bCtor instanceof bCtor) 12143 && ('constructor' in a && 'constructor' in b)) { 12144 return false; 12145 } 12146 } 12147 // Assume equality for cyclic structures. The algorithm for detecting cyclic 12148 // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. 12149 12150 // Initializing stack of traversed objects. 12151 // It's done here since we only need them for objects and arrays comparison. 12152 aStack = aStack || []; 12153 bStack = bStack || []; 12154 var length = aStack.length; 12155 while (length--) { 12156 // Linear search. Performance is inversely proportional to the number of 12157 // unique nested structures. 12158 if (aStack[length] === a) return bStack[length] === b; 12159 } 12160 12161 // Add the first object to the stack of traversed objects. 12162 aStack.push(a); 12163 bStack.push(b); 12164 12165 // Recursively compare objects and arrays. 12166 if (areArrays) { 12167 // Compare array lengths to determine if a deep comparison is necessary. 12168 length = a.length; 12169 if (length !== b.length) return false; 12170 // Deep compare the contents, ignoring non-numeric properties. 12171 while (length--) { 12172 if (!eq(a[length], b[length], aStack, bStack)) return false; 12173 } 12174 } else { 12175 // Deep compare objects. 12176 var keys = _.keys(a), key; 12177 length = keys.length; 12178 // Ensure that both objects contain the same number of properties before comparing deep equality. 12179 if (_.keys(b).length !== length) return false; 12180 while (length--) { 12181 // Deep compare each member 12182 key = keys[length]; 12183 if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; 12184 } 12185 } 12186 // Remove the first object from the stack of traversed objects. 12187 aStack.pop(); 12188 bStack.pop(); 12189 return true; 12190 }; 12191 12192 // Perform a deep comparison to check if two objects are equal. 12193 _.isEqual = function(a, b) { 12194 return eq(a, b); 12195 }; 12196 12197 // Is a given array, string, or object empty? 12198 // An "empty" object has no enumerable own-properties. 12199 _.isEmpty = function(obj) { 12200 if (obj == null) return true; 12201 if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; 12202 return _.keys(obj).length === 0; 12203 }; 12204 12205 // Is a given value a DOM element? 12206 _.isElement = function(obj) { 12207 return !!(obj && obj.nodeType === 1); 12208 }; 12209 12210 // Is a given value an array? 12211 // Delegates to ECMA5's native Array.isArray 12212 _.isArray = nativeIsArray || function(obj) { 12213 return toString.call(obj) === '[object Array]'; 12214 }; 12215 12216 // Is a given variable an object? 12217 _.isObject = function(obj) { 12218 var type = typeof obj; 12219 return type === 'function' || type === 'object' && !!obj; 12220 }; 12221 12222 // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. 12223 _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { 12224 _['is' + name] = function(obj) { 12225 return toString.call(obj) === '[object ' + name + ']'; 12226 }; 12227 }); 12228 12229 // Define a fallback version of the method in browsers (ahem, IE < 9), where 12230 // there isn't any inspectable "Arguments" type. 12231 if (!_.isArguments(arguments)) { 12232 _.isArguments = function(obj) { 12233 return has(obj, 'callee'); 12234 }; 12235 } 12236 12237 // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, 12238 // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). 12239 var nodelist = root.document && root.document.childNodes; 12240 if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { 12241 _.isFunction = function(obj) { 12242 return typeof obj == 'function' || false; 12243 }; 12244 } 12245 12246 // Is a given object a finite number? 12247 _.isFinite = function(obj) { 12248 return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); 12249 }; 12250 12251 // Is the given value `NaN`? 12252 _.isNaN = function(obj) { 12253 return _.isNumber(obj) && isNaN(obj); 12254 }; 12255 12256 // Is a given value a boolean? 12257 _.isBoolean = function(obj) { 12258 return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; 12259 }; 12260 12261 // Is a given value equal to null? 12262 _.isNull = function(obj) { 12263 return obj === null; 12264 }; 12265 12266 // Is a given variable undefined? 12267 _.isUndefined = function(obj) { 12268 return obj === void 0; 12269 }; 12270 12271 // Shortcut function for checking if an object has a given property directly 12272 // on itself (in other words, not on a prototype). 12273 _.has = function(obj, path) { 12274 if (!_.isArray(path)) { 12275 return has(obj, path); 12276 } 12277 var length = path.length; 12278 for (var i = 0; i < length; i++) { 12279 var key = path[i]; 12280 if (obj == null || !hasOwnProperty.call(obj, key)) { 12281 return false;
12282 } 12283 obj = obj[key]; 12284 } 12285 return !!length; 12286 }; 12287 12288 // Utility Functions 12289 // ----------------- 12290 12291 // Run Underscore.js in *noConflict* mode, returning the `_` variable to its 12292 // previous owner. Returns a reference to the Underscore object. 12293 _.noConflict = function() { 12294 root._ = previousUnderscore; 12295 return this; 12296 }; 12297 12298 // Keep the identity function around for default iteratees. 12299 _.identity = function(value) { 12300 return value; 12301 }; 12302 12303 // Predicate-generating functions. Often useful outside of Underscore. 12304 _.constant = function(value) { 12305 return function() { 12306 return value; 12307 }; 12308 }; 12309 12310 _.noop = function(){}; 12311 12312 // Creates a function that, when passed an object, will traverse that objectâs 12313 // properties down the given `path`, specified as an array of keys or indexes. 12314 _.property = function(path) { 12315 if (!_.isArray(path)) { 12316 return shallowProperty(path); 12317 } 12318 return function(obj) { 12319 return deepGet(obj, path); 12320 }; 12321 }; 12322 12323 // Generates a function for a given object that returns a given property. 12324 _.propertyOf = function(obj) { 12325 if (obj == null) { 12326 return function(){}; 12327 } 12328 return function(path) { 12329 return !_.isArray(path) ? obj[path] : deepGet(obj, path); 12330 }; 12331 }; 12332 12333 // Returns a predicate for checking whether an object has a given set of 12334 // `key:value` pairs. 12335 _.matcher = _.matches = function(attrs) { 12336 attrs = _.extendOwn({}, attrs); 12337 return function(obj) { 12338 return _.isMatch(obj, attrs); 12339 }; 12340 }; 12341 12342 // Run a function **n** times. 12343 _.times = function(n, iteratee, context) { 12344 var accum = Array(Math.max(0, n)); 12345 iteratee = optimizeCb(iteratee, context, 1); 12346 for (var i = 0; i < n; i++) accum[i] = iteratee(i); 12347 return accum; 12348 }; 12349 12350 // Return a random integer between min and max (inclusive). 12351 _.random = function(min, max) { 12352 if (max == null) { 12353 max = min; 12354 min = 0; 12355 } 12356 return min + Math.floor(Math.random() * (max - min + 1)); 12357 }; 12358 12359 // A (possibly faster) way to get the current timestamp as an integer. 12360 _.now = Date.now || function() { 12361 return new Date().getTime(); 12362 }; 12363 12364 // List of HTML entities for escaping. 12365 var escapeMap = { 12366 '&': '&', 12367 '<': '<', 12368 '>': '>', 12369 '"': '"', 12370 "'": ''', 12371 '`': '`' 12372 }; 12373 var unescapeMap = _.invert(escapeMap); 12374 12375 // Functions for escaping and unescaping strings to/from HTML interpolation. 12376 var createEscaper = function(map) { 12377 var escaper = function(match) { 12378 return map[match]; 12379 }; 12380 // Regexes for identifying a key that needs to be escaped. 12381 var source = '(?:' + _.keys(map).join('|') + ')'; 12382 var testRegexp = RegExp(source); 12383 var replaceRegexp = RegExp(source, 'g'); 12384 return function(string) { 12385 string = string == null ? '' : '' + string; 12386 return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; 12387 }; 12388 }; 12389 _.escape = createEscaper(escapeMap); 12390 _.unescape = createEscaper(unescapeMap); 12391 12392 // Traverses the children of `obj` along `path`. If a child is a function, it 12393 // is invoked with its parent as context. Returns the value of the final 12394 // child, or `fallback` if any child is undefined. 12395 _.result = function(obj, path, fallback) { 12396 if (!_.isArray(path)) path = [path]; 12397 var length = path.length; 12398 if (!length) { 12399 return _.isFunction(fallback) ? fallback.call(obj) : fallback; 12400 } 12401 for (var i = 0; i < length; i++) { 12402 var prop = obj == null ? void 0 : obj[path[i]]; 12403 if (prop === void 0) { 12404 prop = fallback; 12405 i = length; // Ensure we don't continue iterating. 12406 } 12407 obj = _.isFunction(prop) ? prop.call(obj) : prop; 12408 } 12409 return obj; 12410 }; 12411 12412 // Generate a unique integer id (unique within the entire client session). 12413 // Useful for temporary DOM ids. 12414 var idCounter = 0; 12415 _.uniqueId = function(prefix) { 12416 var id = ++idCounter + ''; 12417 return prefix ? prefix + id : id; 12418 }; 12419 12420 // By default, Underscore uses ERB-style template delimiters, change the 12421 // following template settings to use alternative delimiters. 12422 _.templateSettings = { 12423 evaluate: /<%([\s\S]+?)%>/g, 12424 interpolate: /<%=([\s\S]+?)%>/g, 12425 escape: /<%-([\s\S]+?)%>/g 12426 }; 12427 12428 // When customizing `templateSettings`, if you don't want to define an 12429 // interpolation, evaluation or escaping regex, we need one that is 12430 // guaranteed not to match. 12431 var noMatch = /(.)^/; 12432 12433 // Certain characters need to be escaped so that they can be put into a 12434 // string literal. 12435 var escapes = { 12436 "'": "'", 12437 '\\': '\\', 12438 '\r': 'r', 12439 '\n': 'n', 12440 '\u2028': 'u2028', 12441 '\u2029': 'u2029' 12442 }; 12443 12444 var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; 12445 12446 var escapeChar = function(match) { 12447 return '\\' + escapes[match]; 12448 }; 12449 12450 // JavaScript micro-templating, similar to John Resig's implementation. 12451 // Underscore templating handles arbitrary delimiters, preserves whitespace, 12452 // and correctly escapes quotes within interpolated code. 12453 // NB: `oldSettings` only exists for backwards compatibility. 12454 _.template = function(text, settings, oldSettings) { 12455 if (!settings && oldSettings) settings = oldSettings; 12456 settings = _.defaults({}, settings, _.templateSettings); 12457 12458 // Combine delimiters into one regular expression via alternation. 12459 var matcher = RegExp([
12460 (settings.escape || noMatch).source, 12461 (settings.interpolate || noMatch).source, 12462 (settings.evaluate || noMatch).source 12463 ].join('|') + '|$', 'g'); 12464 12465 // Compile the template source, escaping string literals appropriately. 12466 var index = 0; 12467 var source = "__p+='"; 12468 text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { 12469 source += text.slice(index, offset).replace(escapeRegExp, escapeChar); 12470 index = offset + match.length; 12471 12472 if (escape) { 12473 source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; 12474 } else if (interpolate) { 12475 source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; 12476 } else if (evaluate) { 12477 source += "';\n" + evaluate + "\n__p+='"; 12478 } 12479 12480 // Adobe VMs need the match returned to produce the correct offset. 12481 return match; 12482 }); 12483 source += "';\n"; 12484 12485 // If a variable is not specified, place data values in local scope. 12486 if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; 12487 12488 source = "var __t,__p='',__j=Array.prototype.join," + 12489 "print=function(){__p+=__j.call(arguments,'');};\n" + 12490 source + 'return __p;\n'; 12491 12492 var render; 12493 try { 12494 render = new Function(settings.variable || 'obj', '_', source); 12495 } catch (e) { 12496 e.source = source; 12497 throw e; 12498 } 12499 12500 var template = function(data) { 12501 return render.call(this, data, _); 12502 }; 12503 12504 // Provide the compiled source as a convenience for precompilation. 12505 var argument = settings.variable || 'obj'; 12506 template.source = 'function(' + argument + '){\n' + source + '}'; 12507 12508 return template; 12509 }; 12510 12511 // Add a "chain" function. Start chaining a wrapped Underscore object. 12512 _.chain = function(obj) { 12513 var instance = _(obj); 12514 instance._chain = true; 12515 return instance; 12516 }; 12517 12518 // OOP 12519 // --------------- 12520 // If Underscore is called as a function, it returns a wrapped object that 12521 // can be used OO-style. This wrapper holds altered versions of all the 12522 // underscore functions. Wrapped objects may be chained. 12523 12524 // Helper function to continue chaining intermediate results. 12525 var chainResult = function(instance, obj) { 12526 return instance._chain ? _(obj).chain() : obj; 12527 }; 12528 12529 // Add your own custom functions to the Underscore object. 12530 _.mixin = function(obj) { 12531 _.each(_.functions(obj), function(name) { 12532 var func = _[name] = obj[name]; 12533 _.prototype[name] = function() { 12534 var args = [this._wrapped]; 12535 push.apply(args, arguments); 12536 return chainResult(this, func.apply(_, args)); 12537 }; 12538 }); 12539 return _; 12540 }; 12541 12542 // Add all of the Underscore functions to the wrapper object. 12543 _.mixin(_); 12544 12545 // Add all mutator Array functions to the wrapper. 12546 _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { 12547 var method = ArrayProto[name]; 12548 _.prototype[name] = function() { 12549 var obj = this._wrapped; 12550 method.apply(obj, arguments); 12551 if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; 12552 return chainResult(this, obj); 12553 }; 12554 }); 12555 12556 // Add all accessor Array functions to the wrapper. 12557 _.each(['concat', 'join', 'slice'], function(name) { 12558 var method = ArrayProto[name]; 12559 _.prototype[name] = function() { 12560 return chainResult(this, method.apply(this._wrapped, arguments)); 12561 }; 12562 }); 12563 12564 // Extracts the result from a wrapped and chained object. 12565 _.prototype.value = function() { 12566 return this._wrapped; 12567 }; 12568 12569 // Provide unwrapping proxy for some methods used in engine operations 12570 // such as arithmetic and JSON stringification. 12571 _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; 12572 12573 _.prototype.toString = function() { 12574 return String(this._wrapped); 12575 }; 12576 12577 // AMD registration happens at the end for compatibility with AMD loaders 12578 // that may not enforce next-turn semantics on modules. Even though general 12579 // practice for AMD registration is to be anonymous, underscore registers 12580 // as a named module because, like jQuery, it is a base library that is 12581 // popular enough to be bundled in a third party lib, but not be part of 12582 // an AMD load request. Those cases could generate an error when an 12583 // anonymous define() is called outside of a loader request. 12584 if (typeof define == 'function' && define.amd) { 12585 define('underscore', [], function() { 12586 return _; 12587 }); 12588 } 12589}()); 12590var infowindow; 12591var map; 12592var geocoder; 12593var center; 12594var userPosition; 12595var geoPostal_Code = ''; 12596var markers = []; 12597var markerCluster; 12598var mapsKey= $('input[name="google_mapskey"]').val(); 12599LOREM.MapInitialize = { 12600 _init: function() { 12601 locatorCtxObj = this; 12602 if(mapsKey){ 12603 infowindow = new google.maps.InfoWindow(); 12604 google.maps.event.addDomListener(window, 'load', locatorCtxObj.initialize); 12605 } 12606 }, 12607 initialize: function() { 12608 geocoder = new google.maps.Geocoder(); 12609 var mapOptions = { 12610 zoom: 11, 12611 maxZoom: 15, 12612 mapTypeControl: false, 12613 mapTypeControlOptions: { 12614 style: google.maps.MapTypeControlStyle.DEFAULT, 12615 mapTypeIds: [ 12616 google.maps.MapTypeId.ROADMAP, 12617 google.maps.MapTypeId.TERRAIN 12618 ] 12619 }, 12620 zoomControl: true, 12621 zoomControlOptions: { 12622 style: google.maps.ZoomControlStyle.SMALL 12623 } 12624 }; 12625 map = new google.maps.Map(document.getElementById('map-canvas'),
12626 mapOptions); 12627 google.maps.event.addListener(map, 'click', function() { 12628 infowindow.close(); 12629 }); 12630 google.maps.event.addListener(map, 'position_changed', function() { 12631 infowindow.close(); 12632 }); 12633 if (navigator.geolocation) { 12634 navigator.geolocation.getCurrentPosition(function(position) { 12635 12636 userPosition = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 12637 geoActive = true; 12638 if(mapsKey){ 12639 geocoder.geocode({ 12640 'latLng': userPosition 12641 }, function(results, status) { 12642 if (status == google.maps.GeocoderStatus.OK) { 12643 var searchAddressComponents = results[0].address_components; 12644 $.each(searchAddressComponents, function() { 12645 if (this.types[0] == "postal_code") { 12646 geoPostal_Code = this.short_name; 12647 } 12648 }); 12649 } 12650 }); 12651 } 12652 map.setCenter(userPosition); 12653 center = userPosition; 12654 }, function() { 12655 userPosition = new google.maps.LatLng(null, null); 12656 geoActive = false; 12657 12658 var options = { 12659 map: map, 12660 position: new google.maps.LatLng(39.8282, -98.5795), 12661 }; 12662 12663 map.setCenter(options.position); 12664 map.setZoom(4); 12665 }); 12666 12667 } else { 12668 userPosition = new google.maps.LatLng(null, null); 12669 geoActive = false; 12670 var options = { 12671 map: map, 12672 position: new google.maps.LatLng(39.8282, -98.5795), 12673 }; 12674 map.setCenter(options.position); 12675 map.setZoom(4); 12676 12677 } 12678 }, 12679 clearMapMarkers: function() { 12680 var i = 0, 12681 l = markers.length; 12682 for (i; i < l; i++) { 12683 markers[i].setMap(null); 12684 } 12685 markers = []; 12686 if (markerCluster) 12687 markerCluster.clearMarkers(); 12688 }, 12689 setCurrentPosition: function() { 12690 if (navigator.geolocation) { 12691 if(mapsKey) { 12692 navigator.geolocation.getCurrentPosition(function(position) { 12693 userPosition = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 12694 geoActive = true; 12695 if(map !== undefined){ 12696 map.setCenter(userPosition); 12697 } 12698 center = userPosition; 12699 }, function() { 12700 userPosition = new google.maps.LatLng(null, null); 12701 geoActive = false; 12702 var options = { 12703 map: map, 12704 position: new google.maps.LatLng(39.8282, -98.5795), 12705 }; 12706 map.setCenter(options.position); 12707 map.setZoom(4); 12708 }); 12709 } 12710 } 12711 }, 12712 closeInfoWindow: function() { 12713 if(mapsKey) { 12714 google.maps.event.trigger(map, 'click', function() { 12715 infowindow.close(); 12716 }); 12717 google.maps.event.trigger(map, 'position_changed', function() { 12718 infowindow.close(); 12719 }); 12720 google.maps.event.trigger(map, 'zoom_changed', function() { 12721 infowindow.close(); 12722 }); 12723 } 12724 } 12725} 12726$(document).ready(function() { 12727 if ($('.map-results-container').length > 0) { 12728 LOREM.MapInitialize._init(); 12729 } 12730 12731}); 12732var infusionCenterCount; 12733var pageSize; 12734var bounds; 12735var loctorCtxObj; 12736var infowindow; 12737var marker; 12738LOREM.TreatmentResults = { 12739 _init: function($genericFormEl,response,$locatorEl,$mapEl) { 12740 if(mapsKey){ 12741 bounds = new google.maps.LatLngBounds(); 12742 } 12743 LOREM.MapInitialize.clearMapMarkers(); 12744 loctorCtxObj = this; 12745 loctorCtxObj._getLocations($genericFormEl,response,$locatorEl); 12746 loctorCtxObj._markCenters($genericFormEl,response,$mapEl); 12747 loctorCtxObj._bindEvents($genericFormEl); 12748 loctorCtxObj.animationForMobile(); 12749 }, 12750 _bindEvents: function($genericFormEl) { 12751 $genericFormEl.find('.center-address').on('click', loctorCtxObj._markLocation); 12752 $genericFormEl.find('.contact-center').on('click', loctorCtxObj._contactCenter); 12753 12754 }, 12755 _getLocations:function($genericFormEl,response,$locatorEl){ 12756 var items = $genericFormEl.find(".results"); 12757 if(response != null){ 12758 infusionCenterCount = response.length; 12759 if(infusionCenterCount > 0){ 12760 $genericFormEl.find('.total-results-count').show(); 12761 $genericFormEl.find('.onload-text').hide(); 12762 $genericFormEl.find('.map-results-container .no-results').hide(); 12763 var pageSize = $genericFormEl.find(".map-results-container .pagination").data('results-per-page')|| 5; 12764 $genericFormEl.find('.total-results-count span').html(infusionCenterCount); 12765 $genericFormEl.find('.results').empty(); 12766 LOREM.MapInitialize.closeInfoWindow(); 12767 var template = _.template($locatorEl.html()); 12768 var resultsTemplate = template({ LocatorServices: response }); 12769 if((template !== undefined) && (resultsTemplate !== undefined)){ 12770 $genericFormEl.find('.results').append(resultsTemplate); 12771 } 12772 loctorCtxObj._showPage(1,$genericFormEl,pageSize); 12773 items.slice(pageSize).show(); 12774 var $stateEl = $genericFormEl.find('[name="state"]'); 12775 if(($stateEl !== undefined) && ($stateEl.val() !== null)){ 12776 $genericFormEl.find('.infusion-center .hidecity span').hide(); 12777 12778 } 12779 loctorCtxObj._getPagination($genericFormEl,infusionCenterCount,pageSize); 12780 } 12781 else{ 12782 loctorCtxObj.noresultsdisplay($genericFormEl); 12783 } 12784 } 12785 else{ 12786 loctorCtxObj.noresultsdisplay($genericFormEl); 12787 } 12788 12789 if(infusionCenterCount <= pageSize || infusionCenterCount === undefined){ 12790 $genericFormEl.find(".pagination").empty(); 12791 } 12792 }, 12793 _getPagination: function($genericFormEl,infusionCenterCount,pageSize){ 12794 $genericFormEl.find(".map-results-container .pagination").pagination({ 12795 items: infusionCenterCount, 12796 itemsOnPage: pageSize, 12797 displayedPages: 2, 12798 cssStyle: 'light-theme', 12799 prevText: $genericFormEl.find(".map-results-container .pagination").data('prev-page'), 12800 nextText: $genericFormEl.find(".map-results-container .pagination").data('next-page'), 12801 onPageClick: function(page) { 12802 LOREM.MapInitialize.closeInfoWindow();
12803 $genericFormEl.find(".infusion-center").hide(); 12804 $genericFormEl.find(".infusion-center").each(function(n) { 12805 if (n >= pageSize * (page - 1) && n < pageSize * page) 12806 $(this).show(); 12807 }); 12808 } 12809 }); 12810 }, 12811 _showPage: function(page,$genericFormEl,pageSize) { 12812 $genericFormEl.find(".infusion-center").hide(); 12813 $genericFormEl.find(".infusion-center").each(function(n) { 12814 if (n >= pageSize * (page - 1) && n < pageSize * page) 12815 $(this).show(); 12816 }); 12817 }, 12818 animationForMobile:function(){ 12819 if (screen.width < 991) { 12820 $("html, body").delay(2000).animate({ 12821 scrollTop: $('#map-canvas').offset().top 12822 }, 2000); 12823 } 12824 }, 12825 noresultsdisplay: function($genericFormEl) { 12826 var noResultsDisplay = $genericFormEl.find(".map-results-container .no-results").data('noresultsmsg') ; 12827 $genericFormEl.find('.total-results-count').hide(); 12828 $genericFormEl.find('.onload-text').hide(); 12829 $genericFormEl.find('.results').empty(); 12830 $genericFormEl.find(".pagination").empty(); 12831 LOREM.MapInitialize.clearMapMarkers(); 12832 LOREM.MapInitialize.setCurrentPosition(); 12833 $genericFormEl.find('.map-results-container .no-results').html(noResultsDisplay).show(); 12834 }, 12835 _markCenters: function($genericFormEl,response,$mapEl) { 12836 if(response != null){ 12837 infusionCenterCount = response.length; 12838 if(infusionCenterCount >0 && infusionCenterCount !== undefined){ 12839 for (var i = 0; i < infusionCenterCount; i++) { 12840 var template = _.template($mapEl.html()); 12841 var mapTemplate = template({ LocatorServices: response[i] }); 12842 if((template !== undefined) && (mapTemplate !== undefined)){ 12843 var markerInfo = mapTemplate; 12844 } 12845 if(mapsKey && response[i]['latitude'] !==undefined && response[i]['longitude'] !==undefined){ 12846 var latLng = new google.maps.LatLng(response[i]['latitude'], response[i]['longitude']); 12847 bounds.extend(latLng); 12848 12849 12850 var iconBase = scriptsIconsPath + '/new-marker.png'; 12851 marker = new MarkerWithLabel({ 12852 position: latLng, 12853 html: markerInfo, 12854 icon: iconBase, 12855 labelContent: (i + 1) + "", 12856 labelAnchor: new google.maps.Point(13, 38), 12857 labelClass: "mapLabel", 12858 labelInBackground: false 12859 }); 12860 markers.push(marker); 12861 } 12862 } 12863 } 12864 } 12865 var clusterOptions = { 12866 maxZoom: 15 12867 } 12868 if(mapsKey) { 12869 var markerCluster = new MarkerClusterer(map, markers, clusterOptions); 12870 infowindow = new google.maps.InfoWindow({ 12871 content: markerInfo, 12872 maxWidth: 270 12873 }); 12874 } 12875 for (let i = 0; i < markers.length; i++) { 12876 marker = markers[i]; 12877 google.maps.event.addListener(marker, 'click', function() { 12878 if (infowindow) { 12879 infowindow.close(); 12880 }; 12881 infowindow.setContent(this.html); 12882 infowindow.setPosition(this.getPosition()); 12883 infowindow.setOptions({ 12884 pixelOffset: { 12885 height: -40, 12886 width: 0 12887 } 12888 }); 12889 infowindow.open(map); 12890 }); 12891 } 12892 if(mapsKey) { 12893 google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) { 12894 var clusterOfMarkers = cluster.getMarkers(); 12895 var clusterContentInfo = ""; 12896 for (var i = 0; i < clusterOfMarkers.length; i++) { 12897 clusterContentInfo = clusterContentInfo + clusterOfMarkers[i].html; 12898 } 12899 infowindow.setContent(clusterContentInfo); 12900 infowindow.setPosition(clusterOfMarkers[1].getPosition()); 12901 infowindow.open(map); 12902 }); 12903 12904 if (infusionCenterCount > 0) 12905 map.fitBounds(bounds); 12906 } 12907 }, 12908 12909 _markLocation: function(e) { 12910 e.preventDefault(); 12911 var address = $(this).data('address') + " " + $(this).data('city') + ", " + $(this).data('state'); 12912 if(mapsKey) { 12913 geocoder.geocode({ 12914 'address': address 12915 }, function(results, status) { 12916 if (status === google.maps.GeocoderStatus.OK) { 12917 map.setCenter(results[0].geometry.location); 12918 } else { 12919 alert('Geocode was not successful for the following reason: ' + status); 12920 } 12921 }); 12922 google.maps.event.trigger(markers[$(this).data('centernum')], 'click'); 12923 map.setZoom(14); 12924 } 12925 }, 12926 _contactCenter: function(e) { 12927 e.preventDefault(); 12928 $(this).find('.chevronToggle').toggleClass('contact-arrow'); 12929 $(this).siblings('.mile-city-container').find('.locator-h4 .hidecity').toggle(); 12930 $(this).siblings('div.expandable-content').toggle(); 12931 } 12932} 12933LOREM.TreatmentBindValidations={ 12934 _init:function($genericFormEl){ 12935 this._bindEvents($genericFormEl); 12936 }, 12937 _bindEvents:function($genericFormEl){ 12938 $genericFormEl.find('[name="radius"]').click(this._clearStateField); 12939 $genericFormEl.find('[name="state"]').click(this._clearGeoField); 12940 }, 12941 _locServiceValidateForm: function($genericFormEl) { 12942 var $zipCodeEl = $genericFormEl.find('[name="zip"]'); 12943 var $milesEl = $genericFormEl.find('[name="radius"]'); 12944 var $stateEl = $genericFormEl.find('[name="state"]'); 12945 var isValid = true; 12946 $genericFormEl.find('.custom-error').remove(); 12947 if($milesEl === undefined && $stateEl === undefined ){ 12948 //do nothing 12949 } 12950 else if($milesEl.val() === null && $stateEl.val() === null) { 12951 //please select a search radius, please select a state msg to be displayed 12952 var milesErr = $milesEl.attr('data-cmp-required'); 12953 $milesEl.closest('.form-group').append('<span class="custom-error">'+milesErr+'</span>'); 12954 var stateErr = $stateEl.attr('data-cmp-required'); 12955 $stateEl.closest('.form-group').append('<span class="custom-error">'+stateErr+'</span>'); 12956 isValid = false;
12957 } else if($stateEl.val() === null && $milesEl.val() !== null 12958 && $zipCodeEl.val() === '') { 12959 //please select zipcode 12960 var errorTxt = $zipCodeEl.attr('data-cmp-required'); 12961 $zipCodeEl.closest('.form-group').append('<span class="custom-error">'+errorTxt+'</span>'); 12962 isValid = false; 12963 } 12964 return isValid; 12965 }, 12966 _clearGeoField: function(ev) { 12967 var $genericFormEl = $('#' + ev.target.closest('form').id); 12968 var $zipCodeEl = $genericFormEl.find('[name="zip"]'); 12969 var $milesEl = $genericFormEl.find('[name="radius"]'); 12970 if($milesEl !==undefined){ 12971 $milesEl.val('0'); 12972 $milesEl.closest('.form-group').find('.custom-error').remove(); 12973 } 12974 $zipCodeEl.val(''); 12975 }, 12976 _clearStateField: function(ev) { 12977 var $genericFormEl = $('#' + ev.target.closest('form').id); 12978 var $stateEl = $genericFormEl.find('[name="state"]'); 12979 if($stateEl !== undefined){ 12980 $stateEl.val('0'); 12981 $stateEl.closest('.form-group').find('.custom-error').remove(); 12982 } 12983 } 12984} 12985 12986var infusionCenterCount; 12987var pageSize; 12988var bounds; 12989var loctorCtxObj; 12990var filteredResponse; 12991var originalRes; 12992var preventFetchData; 12993var onLoadTextHtml; 12994var newFilter; 12995var infowindow; 12996var marker; 12997LOREM.TreatmentResults_v2 = { 12998 _init: function($genericFormEl,response,$locatorEl,$mapEl) { 12999 loctorCtxObj = this; 13000 if(mapsKey){ 13001 bounds = new google.maps.LatLngBounds(); 13002 } 13003 LOREM.MapInitialize.clearMapMarkers(); 13004 $genericFormEl.find('.mapresults-v2 .results').empty(); 13005 originalRes = response; 13006 filteredResponse = LOREM.options.filteredValues($('input[name=patientType]').closest('.form-group'),originalRes,'hcpPatientType'); 13007 loctorCtxObj._medicareAndSpineFilter(filteredResponse); 13008 loctorCtxObj._getLocations($genericFormEl,newFilter,$locatorEl); 13009 if (!LOREM.devices.isMobile()) { 13010 loctorCtxObj._markCenters($genericFormEl,newFilter,$mapEl); 13011 } 13012 loctorCtxObj._bindEvents($genericFormEl,$locatorEl,$mapEl,newFilter); 13013 13014 }, 13015 _bindEvents: function($genericFormEl,$locatorEl,$mapEl) { 13016 if (!LOREM.devices.isMobile()){ 13017 $genericFormEl.find('.mapresults-v2 .center-address').on('click', loctorCtxObj._markLocation); 13018 } 13019 $genericFormEl.find('.mapresults-v2 .contact-center').on('click', loctorCtxObj._contactCenter); 13020 $genericFormEl.find('input[name=patientType],input[name=acceptsMedicare],input[name=treatsSpine]').on('click',function(){ 13021 loctorCtxObj.checkBoxClicked($genericFormEl,$locatorEl,$mapEl,originalRes); 13022 }); 13023 if(preventFetchData ==='true'){ 13024 $genericFormEl.find('.use-my-location').on('click',function(){ 13025 loctorCtxObj._clearData($genericFormEl); 13026 }); 13027 } 13028 }, 13029 _medicareAndSpineFilter:function(filteredResponse){ 13030 newFilter = filteredResponse; 13031 if(($genericFormEl.find('input[name=acceptsMedicare]').length >0) || ($genericFormEl.find('input[name=treatsSpine]').length >0)){ 13032 var isOnlyMedicare = false; 13033 var isMedicareAndSpine = false; 13034 var isMedicareChecked = $('input[name=acceptsMedicare]').is(':checked'); 13035 var isSpineChecked = $('input[name=treatsSpine]').is(':checked'); 13036 if(isMedicareChecked || isSpineChecked){ 13037 if(isMedicareChecked && isSpineChecked){ 13038 isMedicareAndSpine=true; 13039 isOnlyMedicare = false; 13040 newFilter = newCkbBoxFilterFun(filteredResponse); 13041 }else{ 13042 isMedicareAndSpine=false; 13043 if(isMedicareChecked && !isSpineChecked ){ 13044 isOnlyMedicare = true; 13045 newFilter = newCkbBoxFilterFun(filteredResponse); 13046 } 13047 if(!isMedicareChecked && isSpineChecked ){ 13048 isOnlyMedicare = false; 13049 newFilter = newCkbBoxFilterFun(filteredResponse); 13050 } 13051 } 13052 } 13053 function newCkbBoxFilterFun(filteredResponse){ 13054 var resultElemArray = []; 13055 filteredResponse.filter(function(entry) { 13056 if(((isMedicareAndSpine && (entry['hcpAcceptsMedicare'] === "TRUE")) && ((e
13056ntry['hcpTreatsSpine'] === "TRUE"))) || (isOnlyMedicare && ((entry['hcpAcceptsMedicare'] === "TRUE"))) || (!isOnlyMedicare && ((entry['hcpTreatsSpine'] === "TRUE")))){ 13057 resultElemArray.push(entry); 13058 } 13059 }); 13060 return resultElemArray; 13061 } 13062 } 13063 return newFilter; 13064 }, 13065 13066 _getLocations:function($genericFormEl,response,$locatorEl){ 13067 var items = $genericFormEl.find(".mapresults-v2 .results"); 13068 if(response != null){ 13069 infusionCenterCount = response.length; 13070 if(infusionCenterCount > 0){ 13071 $genericFormEl.find('.mapresults-v2 .total-results-count').show(); 13072 $genericFormEl.find('.mapresults-v2 .onload-text').hide(); 13073 $genericFormEl.find('.map-results-container .mapresults-v2 .no-results').hide(); 13074 var pageSize = $genericFormEl.find(".map-results-container .mapresults-v2 .pagination").data('results-per-page')|| 5; 13075 $genericFormEl.find('.mapresults-v2 .total-results-count span').html(infusionCenterCount); 13076 $genericFormEl.find('.mapresults-v2 .results').empty(); 13077 LOREM.MapInitialize.closeInfoWindow(); 13078 var template = _.template($locatorEl.html()); 13079 var resultsTemplate = template({ LocatorServices: response }); 13080 if((template !== undefined) && (resultsTemplate !== undefined)){ 13081 $genericFormEl.find('.mapresults-v2 .results').append(resultsTemplate); 13082 } 13083 loctorCtxObj._showPage(1,$genericFormEl,pageSize); 13084 items.slice(pageSize).show(); 13085 var $stateEl = $genericFormEl.find('[name="state"]'); 13086 if(($stateEl !== undefined) && ($stateEl.val() !== null)){ 13087 $genericFormEl.find('.infusion-center .hidecity span').hide(); 13088 13089 } 13090 $genericFormEl.find('.location-search-results').attr('data-results',JSON.stringify(response)); 13091 loctorCtxObj._shareClick($genericFormEl); 13092 loctorCtxObj._getPagination($genericFormEl,infusionCenterCount,pageSize); 13093 } 13094 else{ 13095 loctorCtxObj.noresultsdisplay($genericFormEl); 13096 } 13097 } 13098 else{ 13099 loctorCtxObj.noresultsdisplay($genericFormEl); 13100 } 13101 13102 if(infusionCenterCount <= pageSize || infusionCenterCount === undefined){ 13103 $genericFormEl.find(".mapresults-v2 .pagination").empty(); 13104 } 13105 }, 13106 _getPagination: function($genericFormEl,infusionCenterCount,pageSize){ 13107 $genericFormEl.find(".map-results-container .mapresults-v2 .pagination").pagination({ 13108 items: infusionCenterCount, 13109 itemsOnPage: pageSize, 13110 displayedPages: 2, 13111 cssStyle: 'light-theme', 13112 prevText: $genericFormEl.find(".map-results-container .pagination").data('prev-page'), 13113 nextText: $genericFormEl.find(".map-results-container .pagination").data('next-page'), 13114 onPageClick: function(page) { 13115 LOREM.MapInitialize.closeInfoWindow(); 13116 $genericFormEl.find(".infusion-center").hide(); 13117 $genericFormEl.find(".infusion-center").each(function(n) { 13118 if (n >= pageSize * (page - 1) && n < pageSize * page) 13119 $(this).show(); 13120 }); 13121 } 13122 }); 13123 }, 13124 _showPage: function(page,$genericFormEl,pageSize) { 13125 $genericFormEl.find(".infusion-center").hide(); 13126 $genericFormEl.find(".infusion-center").each(function(n) { 13127 if (n >= pageSize * (page - 1) && n < pageSize * page) 13128 $(this).show(); 13129 }); 13130 }, 13131 _clearData:function($genericFormEl){ 13132 LOREM.TreatmentResults_v2.noresultsdisplay($genericFormEl); 13133 var noResultsDisplay = $(".map-results-container .mapresults-v2 .no-results").data('noresultsmsg') ; 13134 $('.map-results-container .mapresults-v2 .no-results').html(noResultsDisplay).hide(); 13135 $('.mapresults-v2 .onload-text').show(); 13136 }, 13137 noresultsdisplay: function($genericFormEl) { 13138 var noResultsDisplay = $genericFormEl.find(".map-results-container .mapresults-v2 .no-results").data('noresultsmsg') ; 13139 $genericFormEl.find('.mapresults-v2 .total-results-count').hide(); 13140 $genericFormEl.find('.mapresults-v2 .onload-text').hide(); 13141 $genericFormEl.find('.mapresults-v2 .results').empty(); 13142 $genericFormEl.find(".mapresults-v2 .pagination").empty();
13143 LOREM.MapInitialize.clearMapMarkers(); 13144 LOREM.MapInitialize.setCurrentPosition(); 13145 $genericFormEl.find('.map-results-container .mapresults-v2 .no-results').html(noResultsDisplay).show(); 13146 }, 13147 _markCenters: function($genericFormEl,response,$mapEl) { 13148 if(response != null){ 13149 infusionCenterCount = response.length; 13150 if(infusionCenterCount >0 && infusionCenterCount !== undefined){ 13151 for (var i = 0; i < infusionCenterCount; i++) { 13152 var template = _.template($mapEl.html()); 13153 var mapTemplate = template({ LocatorServices: response[i] }); 13154 if((template !== undefined) && (mapTemplate !== undefined)){ 13155 var markerInfo = mapTemplate; 13156 } 13157 13158 if(mapsKey){ 13159 var latLng = new google.maps.LatLng(response[i]['latitude'], response[i]['longitude']); 13160 bounds.extend(latLng); 13161 13162 13163 var iconBase = scriptsIconsPath + '/new-marker.png'; 13164 marker = new MarkerWithLabel({ 13165 position: latLng, 13166 html: markerInfo, 13167 icon: iconBase, 13168 labelContent: (i + 1) + "", 13169 labelAnchor: new google.maps.Point(13, 38), 13170 labelClass: "mapLabel", 13171 labelInBackground: false 13172 }); 13173 markers.push(marker); 13174 } 13175 } 13176 } 13177 } 13178 var clusterOptions = { 13179 maxZoom: 15 13180 } 13181 if(mapsKey){ 13182 var markerCluster = new MarkerClusterer(map, markers, clusterOptions); 13183 infowindow = new google.maps.InfoWindow({ 13184 content: markerInfo, 13185 maxWidth: 270 13186 }); 13187 } 13188 for (let i = 0; i < markers.length; i++) { 13189 marker = markers[i]; 13190 google.maps.event.addListener(marker, 'click', function() { 13191 if (infowindow) { 13192 infowindow.close(); 13193 }; 13194 infowindow.setContent(this.html); 13195 infowindow.setPosition(this.getPosition()); 13196 infowindow.setOptions({ 13197 pixelOffset: { 13198 height: -40, 13199 width: 0 13200 } 13201 }); 13202 infowindow.open(map); 13203 }); 13204 } 13205 if(mapsKey) { 13206 google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) { 13207 var clusterOfMarkers = cluster.getMarkers(); 13208 var clusterContentInfo = ""; 13209 for (var i = 0; i < clusterOfMarkers.length; i++) { 13210 clusterContentInfo = clusterContentInfo + clusterOfMarkers[i].html; 13211 } 13212 infowindow.setContent(clusterContentInfo); 13213 infowindow.setPosition(clusterOfMarkers[1].getPosition()); 13214 infowindow.open(map); 13215 }); 13216 if (infusionCenterCount > 0) 13217 map.fitBounds(bounds); 13218 } 13219 }, 13220 13221 _markLocation: function(e) { 13222 e.preventDefault(); 13223 var address = $(this).data('address') + " " + $(this).data('city') + ", " + $(this).data('state'); 13224 if(mapsKey) { 13225 geocoder.geocode({ 13226 'address': address 13227 }, function(results, status) { 13228 if (status === google.maps.GeocoderStatus.OK) { 13229 map.setCenter(results[0].geometry.location); 13230 } else { 13231 alert('Geocode was not successful for the following reason: ' + status); 13232 } 13233 }); 13234 google.maps.event.trigger(markers[$(this).data('centernum')], 'click'); 13235 13236 map.setZoom(14); 13237 } 13238 }, 13239 _contactCenter: function(e) { 13240 e.preventDefault(); 13241 $(this).find('.chevronToggle').toggleClass('contact-arrow'); 13242 $(this).parent().next('div.expandable-content').toggle(); 13243 }, 13244 checkBoxClicked:function($genericFormEl,$locatorEl,$mapEl,originalRes){
13245 LOREM.MapInitialize.clearMapMarkers(); 13246 filteredResponse = LOREM.options.filteredValues($('input[name=patientType]').closest('.form-group'),originalRes,'hcpPatientType'); 13247 loctorCtxObj._medicareAndSpineFilter(filteredResponse); 13248 loctorCtxObj._getLocations($genericFormEl,newFilter,$locatorEl); 13249 if (!LOREM.devices.isMobile()){ 13250 loctorCtxObj._markCenters($genericFormEl,newFilter,$mapEl); 13251 $genericFormEl.find('.mapresults-v2 .center-address').on('click', loctorCtxObj._markLocation); 13252 } 13253 $genericFormEl.find('.mapresults-v2 .contact-center').on('click', loctorCtxObj._contactCenter); 13254 }, 13255 _shareClick:function($genericFormEl){ 13256 $genericFormEl.find('.share-div').each(function() { 13257 $(this).on('click',function(){ 13258 $genericFormEl.find('a.share-div-link').click(); 13259 $genericFormEl.find('.mapresults-v2 .placeholder-share-markup').empty(); 13260 $genericFormEl.find('.mapresults-v2 .placeholder-inputhidden-markup').empty(); 13261 var dataVal = $(this).parents('.infusion-center').html(); 13262 $genericFormEl.find('.mapresults-v2 .placeholder-share-markup').append(dataVal); 13263 var allData = $('.location-search-results').data('results'); 13264 var indexElem = $(this).parents('.infusion-center').find('.center-address').attr('data-centernum'); 13265 var selectedLocObj = allData[indexElem]; 13266 var hiddenMarkup =LOREM.options._generateHiddenKeys(selectedLocObj); 13267 $genericFormEl.find('.mapresults-v2 .placeholder-inputhidden-markup').append(hiddenMarkup); 13268 }); 13269 }); 13270 }, 13271 _getUseMyLocContent:function(){ 13272 var $permissionEl = $('.mapresults-v2').parents().find('.geo-address-wrapper').find('[name="isPermissionGranted"]'); 13273 $permissionEl.on("change", function(){ 13274 if ($permissionEl.val() ==='false') { 13275 var onLoadText = $('.mapresults-v2 .onload-text'); 13276 var useMylocLink = $('.mapresults-v2').parents().find('.geo-address-wrapper .use-my-loc').html(); 13277 onLoadText.html(useMylocLink); 13278 $('.mapresults-v2 .no-permission-grant').removeClass('hidden'); 13279 $('.mapresults-v2').find('.use-my-location').on('click',function(){ 13280 LOREM.geoAddress._useMyLocationSubmit($('.mapresults-v2').parents().find('.geo-address-wrapper')); 13281 }); 13282 } else { 13283 LOREM.TreatmentResults_v2._clearData($('.map-results-container .mapresults-v2').parents().find('.genericForm')); 13284 $('.mapresults-v2 .onload-text').html(onLoadTextHtml); 13285 13286 } 13287 }).trigger('change'); 13288 }, 13289 13290 _shareModalPlaceholder:function($genericFormEl){ 13291 if($('.placeholder').length >0){ 13292 var sharedataHTML = $genericFormEl.find('.mapresults-v2 .placeholder-share-markup').html(); 13293 var shareemailHTML = $genericFormEl.find('.mapresults-v2 .placeholder-inputhidden-markup').html(); 13294 $('.placeholder').each(function(){ 13295 if($(this).hasClass("share-locator-data")){ 13296 $('.share-locator-data').append(sharedataHTML); 13297 } 13298 if($(this).hasClass("share-locator-data-email")){ 13299 $('.share-locator-data-email').append(shareemailHTML); 13300 } 13301 }); 13302 } 13303 } 13304} 13305$(document).ready(function() { 13306 onLoadTextHtml = $('.mapresults-v2 .onload-text').html(); 13307 preventFetchData = $('.mapresults-v2').parents().find('.geo-address-wrapper').find('[name="geoAddress"]').attr('data-prevent-autosubmit'); 13308 if(preventFetchData === 'true'){ 13309 LOREM.TreatmentResults_v2._clearData($('.map-results-container .mapresults-v2').parents().find('.genericForm')); 13310 } 13311}); 13312 13313 13314var dataPersonolizationCtxObj; 13315var pageURL; 13316var pageListJson = []; 13317var pageHistoryObj = {}; 13318LOREM.dataPersonolization = { 13319 _init: function() { 13320 dataPersonolizationCtxObj = this; 13321 pageURL = dataPersonolizationCtxObj._getPageURL(); 13322 if (dataPersonolizationCtxObj._isTrackingEnabled()) { 13323 if (dataPersonolizationCtxObj._isArticleDetailPage() || dataPersonolizationCtxObj._isPageContainsVideo() || $('.media-gallery-modal').length >0) { 13324 dataPersonolizationCtxObj._createLocalStorage(); 13325 } 13326 } 13327 }, 13328 _getPageURL: function() { 13329 var domainName = window.location.origin; 13330 var pathName; 13331 if(personolizationModalPageUrl !== undefined){ 13332 pathName = personolizationModalPageUrl; 13333 }else{ 13334 pathName = window.location.pathname; 13335 } 13336 return domainName + pathName; 13337 }, 13338 _isTrackingEnabled: function() { 13339 if(typeof isTrackingEnabled !== "undefined"){ 13340 if (isTrackingEnabled == 'true') { 13341 return true; 13342 } 13343 } 13344 return false;
13345 }, 13346 _isArticleDetailPage: function() { 13347 var articleDetailCheck = $(document).find('meta[name="template"]').attr("content") === "article-detail-template"; 13348 return articleDetailCheck ? true : false; 13349 }, 13350 _isPageContainsVideo: function() { 13351 if (personolizationModalPageUrl !== undefined) { 13352 if ($('.modal-video-exists').length > 0) { 13353 return true; 13354 } 13355 return false; 13356 } else { 13357 if ($('.cmp-video').length > 0) { 13358 return true; 13359 } 13360 return false; 13361 } 13362 }, 13363 _createLocalStorage: function() { 13364 dataPersonolizationCtxObj._initiateOrResetStorage(); 13365 var processedPageList = dataPersonolizationCtxObj._process(); 13366 dataPersonolizationCtxObj._updateLocalStorage(processedPageList); 13367 }, 13368 _initiateOrResetStorage:function(){ 13369 if (localStorage.getItem('pageHistory') != undefined) { 13370 pageHistoryObj = $.parseJSON(localStorage.getItem('pageHistory')); 13371 pageListJson = pageHistoryObj.pageList; 13372 } else { 13373 pageHistoryObj = {}; 13374 } 13375 }, 13376 _updateLocalStorage: function(processedPageList) { 13377 if (processedPageList != undefined && processedPageList.length > 0) { 13378 pageHistoryObj.pageList = processedPageList; 13379 } 13380 pageHistoryObj.expiryDate = dataPersonolizationCtxObj._expirydate(); 13381 localStorage.setItem('pageHistory', JSON.stringify(pageHistoryObj)); 13382 }, 13383 _getSysDate: function() { 13384 var today = new Date(); 13385 var dd = today.getDate(); 13386 var mm = today.getMonth() + 1; //January is 0! 13387 var yyyy = today.getFullYear(); 13388 if (dd < 10) { 13389 dd = '0' + dd; 13390 } 13391 if (mm < 10) { 13392 mm = '0' + mm; 13393 } 13394 var today = mm + '/' + dd + '/' + yyyy; 13395 return today; 13396 }, 13397 _createPageJSON: function() { 13398 var pageJSON = {}; 13399 pageJSON.pageURL = dataPersonolizationCtxObj._getPageURL(); 13400 pageJSON.lastVisited = dataPersonolizationCtxObj._getSysDate(); 13401 pageJSON.containsVideo = dataPersonolizationCtxObj._isPageContainsVideo(); 13402 if (pageJSON.containsVideo === true) { 13403 pageJSON.videoDetails = dataPersonolizationCtxObj._createVideoJSON(); 13404 } 13405 return pageJSON; 13406 }, 13407 _createVideoJSON: function() { 13408 var videoDetails = []; 13409 var videoElem; 13410 if (personolizationModalPageUrl !== undefined) { 13411 videoElem = $('.modal-video-exists').find('.cmp-video'); 13412 } else { 13413 videoElem = $('.cmp-video'); 13414 } 13415 videoElem.each(function() { 13416 var videoJSON = {}; 13417 videoJSON.videoURL = $(this).data('video-url'); 13418 videoJSON.videoPlayedPercentage = 0; 13419 videoJSON.videoPlayedTime = 0; 13420 videoDetails.push(videoJSON); 13421 }); 13422 return videoDetails; 13423 }, 13424 _createOrUpdatePage: function(optionalvideoURL, optionalvideoPercent, optionalVideoPlayedTime) { 13425 dataPersonolizationCtxObj._initiateOrResetStorage(); 13426 var isUpdate = false; 13427 var isExpired = false; 13428 var updatedElem, updatedElemIndex; 13429 var cookieExpiryInDate = new Date(pageHistoryObj.expiryDate); 13430 for (var i in pageListJson) { 13431 var pageLastVisitedInDate = new Date(pageListJson[i].lastVisited); 13432 if (pageListJson[i].pageURL == dataPersonolizationCtxObj._getPageURL()) { 13433 isUpdate = true; 13434 isExpired = dataPersonolizationCtxObj._ispageExpired(pageLastVisitedInDate, cookieExpiryInDate); 13435 updatedElem = pageListJson[i]; 13436 updatedElem.lastVisited = dataPersonolizationCtxObj._getSysDate(); 13437 updatedElemIndex = i; 13438 break; 13439 } 13440 } 13441 if (isUpdate && optionalvideoURL != null) { 13442 updatedElem = dataPersonolizationCtxObj._createOrUpdatevideo(updatedElem, optionalvideoURL, optionalvideoPercent, optionalVideoPlayedTime); 13443 if (isExpired == true) { 13444 updatedElem = dataPersonolizationCtxObj._createOrUpdatevideo(updatedElem, optionalvideoURL, 0, 0); 13445 } 13446 } 13447 if (isUpdate == true) { 13448 pageListJson[updatedElemIndex] = updatedElem; 13449 } 13450 if (isUpdate == false) { 13451 pageListJson.push(dataPersonolizationCtxObj._createPageJSON()); 13452 } 13453 return pageListJson; 13454 }, 13455 _createOrUpdatevideo: function(updatedElem, optionalvideoURL, optionalvideoPercent, optionalVideoPlayedTime) { 13456 var updateVideoFlag = false;
13457 var videoDetailArray = updatedElem.videoDetails; 13458 var updatedVideoElem, updatedVideoElemIndex; 13459 for (var i in videoDetailArray) { 13460 if (videoDetailArray[i].videoURL == optionalvideoURL) { 13461 updatedVideoElem = videoDetailArray[i]; 13462 updatedVideoElem.videoPlayedPercentage = optionalvideoPercent; 13463 updatedVideoElem.videoPlayedTime = optionalVideoPlayedTime; 13464 updatedVideoElemIndex = i; 13465 updateVideoFlag = true; 13466 break; 13467 } 13468 } 13469 if (updateVideoFlag) { 13470 videoDetailArray[updatedVideoElemIndex] = updatedVideoElem; 13471 } else { 13472 var vidJSON = {}; 13473 vidJSON.videoURL = optionalvideoURL; 13474 vidJSON.videoPlayedPercentage = optionalvideoPercent; 13475 vidJSON.videoPlayedTime = optionalVideoPlayedTime; 13476 videoDetailArray.push(vidJSON); 13477 } 13478 updatedElem.videoDetails = videoDetailArray; 13479 return updatedElem; 13480 }, 13481 _process: function() { 13482 return dataPersonolizationCtxObj._createOrUpdatePage(); 13483 }, 13484 _expirydate: function() { 13485 if (cookieExpiryInDays != undefined && cookieExpiryInDays != '') { 13486 var newDate = new Date(); 13487 newDate.setDate(newDate.getDate() + parseInt(cookieExpiryInDays)); 13488 var month = "0" + (newDate.getMonth() + 1); 13489 var date = "0" + newDate.getDate(); 13490 month = month.slice(-2); 13491 date = date.slice(-2); 13492 var expiryDate = month + "/" + date + "/" + newDate.getFullYear(); 13493 return expiryDate; 13494 } 13495 }, 13496 _ispageExpired: function(pageLastVisitedInDate, cookieExpiryInDate) { 13497 if (pageLastVisitedInDate >= cookieExpiryInDate) { 13498 return true; 13499 } 13500 return false; 13501 } 13502} 13503$(document).ready(function() { 13504 LOREM.dataPersonolization._init(); 13505}); 13506var currentVideoItem; 13507var localStoragePageHistoryValue; 13508var currentPageVideoList = []; 13509LOREM.personolizationVideoHandler = { 13510 _init: function() { 13511 if (LOREM.dataPersonolization._isTrackingEnabled()) { 13512 LOREM.personolizationVideoHandler._bindVideoPlayers(); 13513 } 13514 }, 13515 _bindVideoPlayers: function() { 13516 var isVideoExists = false; 13517 var videoPersonolizedElem = LOREM.personolizationVideoHandler._getpersonolizedElem(); 13518 if(videoPersonolizedElem.length>0){ 13519 videoPersonolizedElem.each(function() { 13520 var divElem = $(this).find('div')[0]; 13521 var currentVideoItem = $(divElem).attr('id'); 13522 var videoURL = $(this).data('video-url'); 13523 var videoPlayedObj; 13524 if (!isVideoExists) { 13525 currentPageVideoList = LOREM.personolizationVideoHandler._getCurrentPageVideoList(); 13526 isVideoExists = true; 13527 } 13528 jwplayer(currentVideoItem).on('play pause', function() { 13529 LOREM.personolizationVideoHandler._getVideoDuration(jwplayer(currentVideoItem)); 13530 LOREM.personolizationVideoHandler._elemVideoPlayed(jwplayer(currentVideoItem)); 13531 }); 13532 videoPlayedObj = LOREM.personolizationVideoHandler._videoPlayedDetails(videoURL); 13533 if (videoPlayedObj.videoPlayedTime !== undefined && videoPlayedObj.videoPlayedTime > 0 && videoPlayedObj.videoPlayedPercentage!== 100) { 13534 jwplayer(currentVideoItem).seek(videoPlayedObj.videoPlayedTime).pause(); 13535 } 13536 }); 13537 } 13538 }, 13539 _getVideoDuration: function($player) { 13540 var getVideoCompletePercentage = 0; 13541 var getVideoDuration = parseInt($player.getDuration()); 13542 var getVideoposition = parseInt($player.getPosition()); 13543 if (getVideoDuration > getVideoposition) { 13544 getVideoCompletePercentage = parseInt(getVideoposition / getVideoDuration * 100); 13545 } 13546 return getVideoCompletePercentage; 13547 }, 13548 _elemVideoPlayed: function($player) { 13549 if ($player.getState() == "playing") { 13550 LOREM.personolizationVideoHandler._updateVideoPlayedPercent($player); 13551 } else { 13552 if ($player.getState() == "pause") { 13553 LOREM.personolizationVideoHandler._updatePageVideo($player); 13554 } 13555 } 13556 }, 13557 _updatePageVideo: function($player) { 13558 if ($player != undefined && $player.getPlaylist() != undefined && $player.getPlaylist().length > 0) { 13559 var playingFileURL = $player.getPlaylist()[0].file; 13560 var processedPageList = LOREM.dataPersonolization._createOrUpdatePage(playingFileURL, LOREM.personolizationVideoHandler._getVideoDuration($player), parseInt($player.getPosition())); 13561 LOREM.dataPersonolization._updateLocalStorage(processedPageList); 13562 $player.on('complete', function() { 13563 processedPageList = LOREM.dataPersonolization._createOrUpdatePage(playingFileURL, 100, parseInt($player.getDuration())); 13564 LOREM.dataPersonolization._updateLocalStorage(processedPageList); 13565 }); 13566 } else { 13567 console.log('jwplayer is undefined'); 13568 } 13569 }, 13570 _updateVideoPlayedPercent: function($player) { 13571 if ($player.getState() == "playing") { 13572 LOREM.personolizationVideoHandler._updatePageVideo($player); 13573 setTimeout(function() { 13574 LOREM.personolizationVideoHandler._updateVideoPlayedPercent($player); 13575 }, 3000); 13576 } 13577 }, 13578 _getCurrentPageVideoList: function() { 13579 var videoList = []; 13580 if (localStorage.getItem('pageHistory') !== undefined) { 13581 localStoragePageHistoryValue = $.parseJSON(localStorage.getItem('pageHistory')); 13582 if(localStoragePageHistoryValue !== null){ 13583 var pageList = localStoragePageHistoryValue.pageList; 13584 for (var i in pageList) { 13585 if ((pageList[i].pageURL == LOREM.dataPersonolization._getPageURL()) && (pageList[i].containsVideo === true)) { 13586 videoList = pageList[i].videoDetails; 13587 break; 13588 } 13589 } 13590 } 13591 } 13592 return videoList; 13593 }, 13594 _videoPlayedDetails: function(videourl) { 13595 var getVideoDetails = {}; 13596 for (var j in currentPageVideoList) { 13597 if (currentPageVideoList[j] !== undefined) { 13598 if (videourl == currentPageVideoList[j].videoURL) { 13599 var videoPlayedTime = currentPageVideoList[j].videoPlayedTime; 13600 var videoPlayedPercentage = currentPageVideoList[j].videoPlayedPercentage; 13601 getVideoDetails['videoPlayedTime'] = videoPlayedTime; 13602 getVideoDetails['videoPlayedPercentage'] = videoPlayedPercentage; 13603 if (videoPlayedTime > 0) { 13604 getVideoDetails.videoPlayedTime = videoPlayedTime - 5; 13605 if (getVideoDetails.videoPlayedPercentage == 100) { 13606 getVideoDetails.videoPlayedTime = videoPlayedTime; 13607 } 13608 } 13609 } 13610 } 13611 } 13612 return getVideoDetails; 13613 }, 13614 _initOnLoad: function() { 13615 var videoPersonolizedElem = LOREM.personolizationVideoHandler._getpersonolizedElem(); 13616 var currentVideoItem; 13617 videoPersonolizedElem.each(function() { 13618 var divElem = $(this).find('div')[0]; 13619 currentVideoItem = $(divElem).attr('id'); 13620 }); 13621 if ((typeof jwplayer(currentVideoItem) === 'undefined') || (jwplayer(currentVideoItem).qoe().setupTime === null)) { 13622 setTimeout(LOREM.personolizationVideoHandler._initOnLoad, 100); 13623 return; 13624 } 13625 LOREM.personolizationVideoHandler._init(); 13626 }, 13627 _getpersonolizedElem:function(){ 13628 var videoElem ; 13629 if(personolizationModalPageUrl !== undefined){ 13630 videoElem = $('.modal-video-exists').find('.cmp-video'); 13631 }else{ 13632 videoElem = $('.cmp-video[data-personalization=true]'); 13633 } 13634 return videoElem; 13635 } 13636} 13637$(document).ready(function() { 13638 if($('.cmp-video').length >0){ 13639 LOREM.personolizationVideoHandler._initOnLoad(); 13640 } 13641}); 13642 13643var localStoragePageHistoryValue; 13644var pageList; 13645LOREM.personolizationHandler = { 13646 _init: function() { 13647 if (LOREM.dataPersonolization._isTrackingEnabled()) { 13648 var $dataPersonolizationElem 13649 if($('.modal-video-exists').length >0){ 13650 $dataPersonolizationElem = $('.modal-video-exists').find('.cmp-video'); 13651 } 13652 else{ 13653 $dataPersonolizationElem = $(document).find('[data-personalization]'); 13654 } 13655 if (localStorage.getItem('pageHistory') != undefined) { 13656 localStoragePageHistoryValue = $.parseJSON(localStorage.getItem('pageHistory')); 13657 pageList = localStoragePageHistoryValue.pageList; 13658 if ($dataPersonolizationElem != undefined && $dataPersonolizationElem.length > 0) { 13659 $dataPersonolizationElem.each(function($this) { 13660 var videoPercent; 13661 $this = $(this); 13662 LOREM.personolizationHandler._addingPersonolizedClasses($this); 13663 LOREM.personolizationHandler._addingProgressbar($this); 13664 }); 13665 LOREM.personolizationHandler._unWatchedTilesShuffle($('.article-viewed')); 13666 } 13667 } 13668 } 13669 }, 13670 _getVideoPercentMatchVideo: function($this, videoURL) { 13671 for (var i in pageList) { 13672 if (pageList[i] != undefined) { 13673 for (var j in pageList[i].videoDetails) { 13674 if (pageList[i].pageURL == LOREM.dataPersonolization._getPageURL()) { 13675 if (videoURL != undefined) { 13676 var storedUrl = pageList[i].videoDetails[j].videoURL; 13677 if (videoURL == storedUrl) { 13678 var videoSeekPercent = pageList[i].videoDetails[j].videoPlayedPercentage; 13679 if (videoSeekPercent > 0) { 13680 $this.addClass('article-viewed'); 13681 return videoSeekPercent; 13682 } 13683 break; 13684 } 13685 } 13686 } 13687 } 13688 } 13689 } 13690 }, 13691 _getVideoPercentMatchURL: function($this) { 13692 var domainName = window.location.origin; 13693 var dataPageAttr = $this.find('.data-personalization-url').attr('href'); 13694 var dataPageUrl = domainName + dataPageAttr; 13695 var cookieExpiryInDate = new Date(localStoragePageHistoryValue.expiryDate); 13696 for (var i in pageList) { 13697 if (pageList[i] != undefined) { 13698 var pageLastVisitedInDate = new Date(pageList[i].lastVisited); 13699 if (pageList[i].pageURL == dataPageUrl) { 13700 var isExpired = LOREM.dataPersonolization._ispageExpired(pageLastVisitedInDate, cookieExpiryInDate); 13701 if (!isExpired) { 13702 $this.addClass('article-viewed'); 13703 } 13704 for (var j in pageList[i].videoDetails) { 13705 if (pageList[i].videoDetails[j] != undefined) { 13706 var videoSeekPercent = pageList[i].videoDetails[j].videoPlayedPercentage; 13707 return videoSeekPercent; 13708 break; 13709 } 13710 } 13711 } 13712 } 13713 } 13714 }, 13715 _removeClassesOnPlay: function($player, $this) { 13716 $player.on('play', function() { 13717 if ($this.hasClass('article-viewed')) { 13718 $this.removeClass('article-video-played'); 13719 $this.removeClass('article-video-completed'); 13720 $this.removeClass('article-viewed'); 13721 $this.find('.progress').hide(); 13722 } 13723 }); 13724 }, 13725 _addingPersonolizedClasses: function($this) { 13726 if ($this.hasClass('cmp-video')) { 13727 var divElem = $this.find('div')[0]; 13728 var currentVideoItem = $(divElem).attr('id'); 13729 videoPercent = LOREM.personolizationHandler._getVideoPercentMatchVideo($this, $this.data('video-url')); 13730 LOREM.personolizationHandler._removeClassesOnPlay(jwplayer(currentVideoItem), $this); 13731 } else { 13732 videoPercent = LOREM.personolizationHandler._getVideoPercentMatchURL($this); 13733 } 13734 if (videoPercent > 0) { 13735 if (videoPercent == 100) { 13736 $this.addClass('article-video-completed'); 13737 } else { 13738 $this.addClass('article-video-played'); 13739 } 13740 } 13741 }, 13742 _addingProgressbar: function($this) { 13743 if ($this.hasClass('article-video-played') || $this.hasClass('article-video-completed')) { 13744 var addProgressHTML = ('<div class="progress"><div class="progress-bar bg-success"><span>Complete %</span></div></div>'); 13745 if($this.hasClass('cmp-video')){ 13746 $this.append(addProgressHTML); 13747 }else{ 13748 $this.prepend(addProgressHTML); 13749 } 13750 LOREM.personolizationHandler._addingWidthAndTopToProgressDiv($this);
13751 $this.find('.progress-bar').css('width', videoPercent + '%'); 13752 } else { 13753 $this.find('.progress').remove(); 13754 } 13755 }, 13756 _addingWidthAndTopToProgressDiv:function($this){ 13757 if($this.hasClass('cmp-card-tile')){ 13758 if($this.find('.card-tile-img-link img').length >0){ 13759 var elemPaddingTop = parseInt($this.find('.card-tile-img-link').css('padding-top')) || 0; 13760 var progressTop = $this.parent().show().find('.card-tile-img-link img').height() + elemPaddingTop; 13761 $this.find('.progress').css('top', progressTop + 'px'); 13762 }else{ 13763 $this.find('.progress').css('top', '0'); 13764 } 13765 if($this.closest('.cmp-right-rail-wrapper').hasClass('horizontal-tile')){ 13766 var progressWidth = $this.closest('.cmp-right-rail-wrapper.horizontal-tile').find('.card-tile-img-link img').width(); 13767 $this.find('.progress').css('width', progressWidth + 'px'); 13768 } 13769 } 13770 }, 13771 _unWatchedTilesShuffle: function($this) { 13772 if($this.hasClass('article-video-played') || $this.hasClass('article-video-completed')){ 13773 var watchedTilesListWrapper = $this.closest('.cmp-right-rail-wrapper'); 13774 if (watchedTilesListWrapper.length > 0 && watchedTilesListWrapper.find('[data-tiles-shuffle]').length > 0) { 13775 LOREM.options._shuffleTiles(watchedTilesListWrapper.find('[data-tiles-shuffle]'), $this.hasClass('article-video-played') || $this.hasClass('article-video-completed')); 13776 if ($('.cmp-card-tile.cursorclick').length > 0) { 13777 LOREM.options._entireTileClickable($('.cmp-card-tile.cursorclick'), '.cmp-article-list-fullview-link'); 13778 } 13779 } 13780 } 13781 } 13782} 13783$(document).ready(function() { 13784 LOREM.personolizationHandler._init(); 13785}); 13786 13787/* Function to handle right rail sticky*/ 13788function triggerSticky() { 13789 if ($('.sticky-right-rail').length > 0) { 13790 var currentScroll = parseInt($(window).scrollTop()) + LOREM.options._calStickyHeaderHeight(), 13791 rightRailTop = parseInt($('.sticky-right-rail').parent().offset().top), 13792 imgWidth= parseInt($('.sticky-right-rail').width()); 13793 13794 if (currentScroll >= rightRailTop) { 13795 $('.sticky-right-rail').first().addClass('make-right-rail-sticky'); 13796 $('.sticky-right-rail').width(imgWidth); 13797 $('.make-right-rail-sticky').css('top', LOREM.options._calStickyHeaderHeight()+'px'); 13798 } else { 13799 $('.sticky-right-rail').removeClass('make-right-rail-sticky'); 13800 $('.sticky-right-rail').css('top', 0); 13801 $('.sticky-right-rail').css('width',''); 13802 } 13803 } 13804 } 13805 $(window).scroll(function() { 13806 triggerSticky(); 13807 }); 13808$(document).on('foundation-contentloaded', function(e) { 13809 $('[name="./listAlignment"]').on('mouseup', '.coral3-SelectList-item', function(){ 13810 var listAlignVal = $(this).val(); 13811 if(listAlignVal == 'list-horizontal') { 13812 $('[name="./listTitle"]').closest('.coral-Form-fieldwrapper').addClass('hide'); 13813 } 13814 else { 13815 $('[name="./listTitle"]').closest('.coral-Form-fieldwrapper').removeClass('hide'); 13816 } 13817 }); 13818}); 13819 13820 13821$(document).on('click', '.open-modal', function(e) { 13822 var currentTarget = $(e.currentTarget).prop("tagName"); 13823 var etarget = $(e.target).prop("tagName"); 13824var $this = $(this); 13825var temporary_image_tag = $this.siblings('img').clone(); 13826 13827 13828 /** 13829 * getting data set form clicked element 13830 */ 13831 var target = e.currentTarget.dataset.target || null, 13832 url = e.currentTarget.dataset.url || null, 13833 modalHeader = e.currentTarget.dataset.modalheader || null, 13834 className = e.currentTarget.dataset.classname || '', 13835 authorUrl = e.currentTarget.dataset.authorurl || '', 13836 datapoplink = e.currentTarget.dataset.aaPopup || '', 13837 targetPage = $(this).attr('target') || '_blank', 13838 ariaLabel = $(this).attr('aria-label') || null, 13839 title = $(this).attr('title') || null, 13840 classes = $(this).attr('class') || null, 13841 youtubeasset = e.currentTarget.dataset.youtubeasset || false, 13842 birghtcovaasset = e.currentTarget.dataset.birghtcovaasset || false, 13843 birghtcovavideoid = e.currentTarget.dataset.birghtcovavideoid || "", 13844 birghtcovaaccount = e.currentTarget.dataset.birghtcovaaccount || "", 13845 birghtcovaplayerid = e.currentTarget.dataset.birghtcovaplayerid || "", 13846 damAsset = e.currentTarget.dataset.damasset || false; 13847 13848 /** 13849 * for twitter component stoping the modal form opening 2 times when clicked on anchor 13850 */ 13851 if((target == "externalLink" && currentTarget == "DIV" && etarget == "A")){ 13852 return true; 13853 } 13854 if((target == "externalLinkTwitter" && currentTarget == "DIV" && etarget == "A")){ 13855 return true; 13856 } 13857 e.preventDefault(); 13858 $(document).trigger('modal:open'); 13859 if (target) { 13860 13861 var template = '<div id=' + target + ' class="modal fade ' + className + '" tabindex="-1" role="dialog" aria-modal="true" aria-label="' + (ariaLabel ? ariaLabel.replace(/"/g, '"') : '') + '" aria-hidden="true"><div class="modal-dialog">'; 13862
13863 if (className.indexOf("disable-close") == -1) { 13864 // js updated send document icon 13865 13866 if (className == 'searchamilpopup') { 13867 template += '<button class="close" type="button" data-dismiss="modal" aria-label="Close">\ 13868 <i class="icon icon-close">\ 13869 <svg aria-hidden="true" focusable="false" role="presentation" width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\ 13870 <title></title>\ 13871 <g id="375-px" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\ 13872 <g id="02_BMS_medical_landing_Hamburger_expanded_mobile_375" transform="translate(-319.000000, -76.000000)">\ 13873 <g id="Group" transform="translate(319.000000, 76.000000)">\ 13874 <g id="Group-19" fill="#D8D8D8" fill-opacity="0">\ 13875 <rect id="Rectangle" x="0" y="0" width="32" height="32"></rect>\ 13876 </g>\ 13877 <g id="Group" transform="translate(8.000000, 8.000000)">\ 13878 <rect id="Rectangle" x="0" y="0" width="16" height="16"></rect>\ 13879 <path d="M15.7396505,0.260349528 C16.0482129,0.56891193
138791 16.0824976,1.04788864 15.8425046,1.39432089 L15.7396505,1.51742825 L9.257,8 L15.7396505,14.4825718 C16.0867832,14.8297045 16.0867832,15.3925178 15.7396505,15.7396505 C15.4310881,16.0482129 14.9521114,16.0824976 14.6056791,15.8425046 L14.4825718,15.7396505 L8,9.257 L1.51742825,15.7396505 C1.17029555,16.0867832 0.607482232,16.0867832 0.260349528,15.7396505 C-0.0482128755,15.4310881 -0.082497587,14.9521114 0.157495393,14.6056791 L0.260349528,14.4825718 L6.743,8 L0.260349528,1.51742825 C-0.0867831759,1.17029555 -0.0867831759,0.607482232 0.260349528,0.260349528 C0.568911931,-0.0482128755 1.04788864,-0.082497587 1.39432089,0.157495393 L1.51742825,0.260349528 L8,6.743 L14.4825718,0.260349528 C14.8297045,-0.0867831759 15.3925178,-0.0867831759 15.7396505,0.260349528 Z" id="Combined-Shape" fill="#595454"></path>\ 13880 </g>\ 13881 </g>\ 13882 </g>\ 13883 </g>\ 13884 </svg>\ 13885 </i>\ 13886 </button>' 13887 } 13888 else{ 13889 template += '<button class="close" type="button" data-dismiss="modal" aria-label="Close">\ 13890 <i class="icon icon-close">\ 13891 <svg aria-hidden="true" focusable="false" role="presentation" class="icon-svg" viewBox="0 0 50 50">\ 13892 <title></title>\ 13893 <path d="M30.56,25,47.85,7.71a3.93,3.93,0,0,0-5.56-5.56L25,19.44,7.71,2.15A3.93,3.93,0,0,0,2.15,7.71L19.44,25,2.15,42.29a3.93,3.93,0,1,0,5.56,5.56L25,30.56,42.29,47.85a3.93,3.93,0,0,0,5.56-5.56Z"/>\ 13894 </svg>\ 13895 </i>\ 13896 </button>'; 13897 } 13898 } 13899 template += '<div class="modal-content"></div>\ 13900 </div>\ 13901 </div>'; 13902 target = '#' + target; 13903 /** 13904 * if the given content to be loded form given URL source 13905 */ 13906 13907 // open modal js for send document on mail 13908 13909 if (className == 'searchamilpopup') { 13910 $('body').append(template); 13911 $('.search-main-card__descriptiaon__ullist-li-blockcontent.searchmail a').removeClass('selectedForMail'); 13912 $(e.currentTarget).addClass('selectedForMail'); 13913 $(target).find('.modal-header').html(modalHeader); 13914 $('.BMS-mio-send-mail').clone().appendTo($(target).find(".modal-content")); 13915 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 13916 $('body').addClass('ios'); 13917 $('html').addClass('ios'); 13918 } 13919 13920 $(target).modal('show'); 13921 $(document).trigger('modal:opened', [e]); 13922 } 13923 13924 if (url) { 13925 $('body').append(template); 13926 13927 /** 13928 * fixing the scrolling issue when modal open with video for IOS devices 13929 */ 13930 if (className == 'video-modal'){ 13931 if(navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){ 13932 $('body').addClass('ios'); 13933 $('html').addClass('ios'); 13934 } 13935 } 13936 /** 13937 * If the the modal open is not video iframe modal then load the HTML content form the URL to modal content 13938 */ 13939 if(className != 'video-iframe-modal'){ 13940 $(target).find(".modal-content").load(url, function(response, status, xhr) { 13941 /** 13942 * if error dispaly 404 13943 */ 13944 if (status == "error") { 13945 13946 if (classes.includes('has-enlarged-image')) { 13947 console.log('No content to load, please specify a url.'); 13948 if(temporary_image_tag.length > 0) 13949 $(target).find(".modal-content").html(temporary_image_tag.attr('style', '')); 13950 else 13951 $(target).find(".modal-content").html('<h2 class="pod-title" style="margin: 0 auto; text-align: center; padding: 20px 0;">404 Page Not Found</h2>'); 13952 } 13953 else { 13954 $(target).find(".modal-content").html('<h2 class="pod-title" style="margin: 0 auto; text-align: center; padding: 20px 0;">404 Page Not Found</h2>'); 13955 } 13956 13957 } 13958 /** 13959 * if external link modal update the continue link 13960 */ 13961 if (target == "#externalLink") { 13962 const firstDownloadBtn = document.querySelector('.modal-dialog button.close'); 13963 $('html').css('overflow', 'hidden'); 13964 if(firstDownloadBtn) 13965 firstDownloadBtn.tabIndex = "-1";
13966 $(".modal-dialog .modal-header button.close").attr("tabindex", "3"); 13967 const modal = document.getElementById('externalLink'); 13968 modal.addEventListener('keydown', function(e) { 13969 $(".modal-dialog .modal-header button.close").attr("tabindex", "3"); 13970 try { 13971 let isTabPressed = e.key === 'Tab' || e.keyCode === 9; 13972 let firstFocusableElement = document.querySelector('.modal-dialog .modal-button .last-button a'); 13973 let secondFocusableElement = document.querySelector('.modal-dialog .modal-button .first-button a'); 13974 let lastFocusableElement = document.querySelector('.modal-dialog .modal-header button.close'); 13975 if (!isTabPressed) { 13976 return; 13977 } 13978 if (e.shiftKey) { 13979 if (document.activeElement === firstFocusableElement) { 13980 if ($(lastFocusableElement).is(':visible')) { 13981 lastFocusableElement.focus(); 13982 } else if ($(secondFocusableElement).is(':visible')) { 13983 secondFocusableElement.focus(); 13984 } 13985 e.preventDefault(); 13986 } else if (document.activeElement === lastFocusableElement) { 13987 if ($(secondFocusableElement).is(':visible')) { 13988 secondFocusableElement.focus(); 13989 } else if ($(firstFocusableElement).is(':visible')) { 13990 firstFocusableElement.focus(); 13991 } 13992 e.preventDefault(); 13993 } else { 13994 firstFocusableElement.focus(); 13995 e.preventDefault(); 13996 } 13997 } else if (document.activeElement === firstFocusableElement) { 13998 if ($(secondFocusableElement).is(':visible')) { 13999 secondFocusableElement.focus(); 14000 } else if ($(lastFocusableElement).is(':visible')) { 14001 lastFocusableElement.focus(); 14002 } 14003 e.preventDefault(); 14004 } else if (document.activeElement === secondFocusableElement) { 14005 if ($(lastFocusableElement).is(':visible')) { 14006 lastFocusableElement.focus(); 14007 } else if ($(firstFocusableElement).is(':visible')) { 14008 firstFocusableElement.focus(); 14009 } 14010 e.preventDefault(); 14011 } else if (document.activeElement === lastFocusableElement) { 14012 firstFocusableElement.focus(); 14013 e.preventDefault(); 14014 } else if (document.activeElement.id === 'externalLink') { 14015 firstFocusableElement.focus(); 14016 e.preventDefault(); 14017 } 14018 } catch (err) { 14019 console.log(err); 14020 } 14021 }); 14022 $('#external-continue-link').attr('href', authorUrl).attr('target', targetPage).attr('aria-label', ariaLabel).attr('title', title).attr('data-aa-popuplink', datapoplink).attr("tabindex", "1"); 14023 14024 $('#external-continue-link').on('click', function(e) { 14025 if($(this).closest('.external-link-warning-modal').hasClass('smashfly-link')){ 14026 $(this).attr('disabled','disabled'); 14027 e.preventDefault(); 14028 if(/MSIE|Trident/.test(window.navigator.userAgent)){ 14029 var link = document.createElement('a'); 14030 link.target = '_blank'; 14031 link.href = $(this).attr('href'); 14032 link.click(); 14033 }else{ 14034 window.open($(this).attr('href')); 14035 } 14036 $(this).removeAttr('disabled'); 14037 } 14038 if ($(e.currentTarget).closest('.external-link-warning-modal.dismissal-button').length > 0) { 14039 window.location.reload(); 14040 } 14041 $(target).modal('hide'); 14042 }) 14043 if ($('#external-continue-close').length > 0) { 14044 $('#external-continue-close').attr("tabindex", "2"); 14045 $('.modal-button').on('click', '#external-continue-close', function(e) { 14046 if ($(e.currentTarget).closest('.external-link-warning-modal.dismissal-button').length > 0) { 14047 window.location.reload(); 14048 } 14049 $(target).modal('hide'); 14050 }) 14051 } 14052 14053 } 14054 if (target == "#externalLinkTwitter") { 14055 $('#external-continue-link').attr('href', authorUrl).attr('target', targetPage).attr('aria-label', ariaLabel).attr('title', title); 14056 $('#external-continue-link').on('click', function(e) { 14057 e.preventDefault(); 14058 var url = $(this).attr('href') + '&original_referer=' + encodeURIComponent(window.location.href); 14059 window.open(url, '_blank','width=510,height=570,location=yes,scrollbars=yes,status=yes'); 14060 $(target).modal('hide'); 14061 }) 14062 if ($('#external-continue-close').length > 0) { 14063 $('#external-continue-close').on('click', function() { 14064 $(target).modal('hide'); 14065 }) 14066 } 14067 14068 } 14069 /** 14070 * disabling close on esc key press and outside of modal click 14071 */ 14072 if (className.indexOf("disable-close") != -1) { 14073 $(target).modal({ 14074 backdrop: 'static', 14075 keyboard: false 14076 }); 14077 } 14078 /** 14079 * opening the modal 14080 */ 14081 14082 $(target).modal('show'); 14083 /** 14084 * trigger custom event to notify other componet that modal as been opened if they are listing 14085 */ 14086 $(document).trigger('modal:opened'); 14087 14088 }); 14089 } else if(className === 'video-iframe-modal') { 14090 /** 14091 * trigger custom event to notify other componet that modal as been opened if they are listing 14092 */ 14093 $(document).trigger('modal:opened', [e]); 14094 } 14095 14096 14097 $(target).on('hidden.bs.modal', function() { 14098 /** 14099 * removing the modal divsion form page when model is closed 14100 */ 14101 $(target).next().remove(); 14102 $(target).remove(); 14103 $this.trigger('focus'); 14104 if($('.modal').length == 0){ 14105 $('body').removeClass('ios'); 14106 $('html').removeClass('ios'); 14107 } 14108 else{ 14109 /** 14110 * fixing the modal close bug when more than one modal is opened 14111 */ 14112 // $('body').addClass('modal-open'); 14113 } 14114 14115 /** 14116 * trigger custom event to notify other componet that modal as been closed if they are listing 14117 */ 14118 $(document).trigger('modal:closed'); 14119 }); 14120 } 14121 else if( className.indexOf('order-modal') >= 0 14122 || className.indexOf('switzerland-modal') >= 0
14123 || className.indexOf('nav-country-modal') >= 0 14124 || className.indexOf('nav-translations-modal') >= 0 14125 || className.indexOf('generic-registration-modal') >= 0 14126 ){ 14127 14128 /** 14129 * empty modal is opened and modal content is filled by respective component js file 14130 */ 14131 14132 $('body').append(template); 14133 $(target).modal({ 14134 backdrop: 'static', 14135 keyboard: false 14136 }); 14137 14138 /** 14139 * fixing the scrolling issue when modal open with form for IOS devices 14140 */ 14141 if(navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){ 14142 $('body').addClass('ios'); 14143 $('html').addClass('ios'); 14144 } 14145 $(target).modal('show'); 14146 14147 /** 14148 * trigger custom event to notify other componet that modal as been opened if they are listing 14149 */ 14150 14151 $(document).trigger('modal:opened',[e]); 14152 14153 $(target).on('hidden.bs.modal', function() { 14154 /** 14155 * removing the modal divsion form page when model is closed 14156 */ 14157 $(target).next().remove(); 14158 $(target).remove(); 14159 if($('.modal').length == 0){ 14160 $('body').removeClass('ios'); 14161 $('html').removeClass('ios'); 14162 } 14163 else{ 14164 $('body').addClass('modal-open'); 14165 } 14166 /** 14167 * trigger custom event to notify other componet that modal as been closed if they are listing 14168 */ 14169 $(document).trigger('modal:closed'); 14170 }); 14171 } 14172 } else { 14173 console.log('Please specify an id.'); 14174 } 14175}); 14176//Triggering click event on keydown of enter of a link within accordion dropdown 14177$(document).on("keydown", ".open-modal", function(e) { 14178 if (e.key === "Enter" || e.keyCode === 13) { 14179 $(this).trigger("click"); 14180 } 14181}); 14182$( document ).ready(function() { 14183 if($('#raAssesmentIframe').length){ 14184 getPdfByBackend(); 14185 } 14186}); 14187$( document ).ready(function() { 14188init(); 14189 $( ".date-selection input" ).datepicker({ 14190 minDate: 0, 14191 beforeShowDay: $.datepicker.noWeekends 14192}); 14193 function init() { 14194 14195 $(document).on('click','.submit-btn',function(event){ 14196 //$(event.currentTarget).prop("disabled",true); 14197 14198 if(!submitEventListener($(event.currentTarget).parents('form'))){ 14199 event.preventDefault(); 14200 } 14201 //formChangeEventListener($(event.currentTarget).parents('form')); 14202 }) 14203 14204 14205} 14206 14207 14208function submitEventListener(selector) { 14209 let $form = $(selector); 14210 let isRequiredValidation = requiredValidation($form); 14211 let isPatternValidation = patternValidation($form); 14212 let isValidCaptcha = validateCaptcha(); 14213 let finalFormvalidationState = false; 14214 14215 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 14216 finalFormvalidationState = false; 14217 } 14218 14219 else { 14220 finalFormvalidationState = true; 14221 } 14222 14223 if(finalFormvalidationState){ 14224 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indef
14224inite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 14225 $.post($form.find('[type="submit"]').attr('formaction'),$form.serializeArray(),function(res){ 14226 if(res.status.trim() == "success"){ 14227 14228 $(".response-message .response-text.success").show(); 14229 $(".response-message .response-text.error").hide(); 14230 14231 } 14232 else if(res.status.trim() == "failure") { 14233 14234 $(".response-message .response-text.success").hide(); 14235 $(".response-message .response-text.error").show(); 14236 14237 /** 14238 * if there is server side error then reset captcha if exist 14239 */ 14240 if($('.g-recaptcha').length){ 14241 grecaptcha.reset(); 14242 } 14243 14244 $form.find('[type="submit"]').prop("disabled",false); 14245 } 14246 else { 14247 $form.find('[type="submit"]').prop("disabled",false); 14248 } 14249 }) 14250 .fail(function() { 14251 if($('.g-recaptcha').length){ 14252 grecaptcha.reset(); 14253 } 14254 $form.find('[type="submit"]').prop("disabled",false); 14255 }) 14256 .always(function(){ 14257 $form.parent().find('.form-loading').remove(); 14258 }) 14259 } 14260 else{ 14261 $form.parent().find('.form-loading').remove(); 14262 } 14263 14264 return false; 14265 } 14266 14267 14268 function requiredValidation($form) { 14269 var errorFlag = false; 14270 var inputSelector = 'input[required]:visible,textarea[required]:visible,select[required]:visible'; 14271 14272 $.each($form.find(inputSelector), function(index, input) { 14273 var $input = $(input); 14274 /** 14275 * if the field value is empty displaing error 14276 */ 14277 if (!$input.val()) { 14278 errorFlag = true; 14279 displayError({ 14280 "field": $input, 14281 "class": ".required" 14282 }); 14283 } else { 14284 removeError({ 14285 "field": $input, 14286 "class": ".required" 14287 }); 14288 } 14289 }) 14290 14291 if($('input:checkbox[name="topics"][required]').length > 0 && $('input:checkbox[name="topics"]:checked').length == 0) { 14292 14293 errorFlag = true; 14294 displayError({ 14295 "field": $($form.find('input:checkbox[name=topics]')[0]), 14296 "class": ".required" 14297 }) 14298 } 14299 else{ 14300 14301 removeError({ 14302 "field": $($form.find('input:checkbox[name=topics]')[0]), 14303 "class": ".required" 14304 }); 14305 } 14306 return errorFlag; 14307} 14308 14309 14310 14311 14312function patternValidation($form) { 14313 var errorFlag = false; 14314 $.each($form.find('input[pattern]:visible'), function(index, input) { 14315 var $input = $(input); 14316 if ($input.val()) { 14317 try { 14318 var pattern = new RegExp($input.attr('pattern')); 14319 /** 14320 * if the pattern is wrong displaing error 14321 */ 14322 if (pattern.test($input.val())) { 14323 removeError({ 14324 "field": $input, 14325 "class": ".pattern" 14326 }); 14327 14328 } else { 14329 errorFlag = true; 14330 displayError({ 14331 "field": $input, 14332 "class": ".pattern" 14333 }); 14334 } 14335 } 14336 catch(e){ 14337 console.error("in vaild pattren (Regular Expression )",$input.attr('pattern')); 14338 console.error(e); 14339 } 14340 14341 } else { 14342 removeError({ 14343 "field": $input, 14344 "class": ".pattern", 14345 "dontRemoveBorder": true 14346 }); 14347 } 14348 }) 14349 return errorFlag; 14350} 14351 14352 14353function validateCaptcha() { 14354 if($('.g-recaptcha').length > 0){ 14355 if(!grecaptcha) return false; 14356 let captchaResponse; 14357 /** 14358 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 14359 */ 14360 14361 captchaResponse = grecaptcha.getResponse(); 14362 14363 if (captchaResponse.length == 0) { 14364 $('.g-recaptcha').css("border", "1px Solid #e76468"); 14365 $('.g-recaptcha').addClass("form-error"); 14366 return false;
14367 } else { 14368 $('.g-recaptcha').addClass("form-error"); 14369 $('.g-recaptcha').css("border", "0px"); 14370 return true; 14371 } 14372 }else{ 14373 return true; 14374 } 14375} 14376 14377function displayError(args, $form) { 14378 14379 14380 args.field.addClass('form-error'); 14381 if (args.field.is("select")){ 14382 args.field.parent().children(args.class).addClass('active'); 14383 } 14384else if (args.field.prop('type') == "checkbox"){ 14385 args.field.parent().parent().children(args.class).addClass('active'); 14386 } 14387 else{ 14388 args.field.siblings(args.class).addClass('active'); 14389 } 14390} 14391 14392 14393function removeError(args, $form) { 14394 14395 if (!args.dontRemoveBorder) { 14396 args.field.removeClass('form-error'); 14397 } 14398 if (args.field.is("select")){ 14399 args.field.parent().children(args.class).removeClass('active') 14400 } else if (args.field.prop('type') == "checkbox"){ 14401 args.field.parent().parent().children(args.class).removeClass('active'); 14402 }else{ 14403 args.field.siblings(args.class).removeClass('active'); 14404 } 14405} 14406 14407 14408// Global recaptchaCallback 14409recaptchaCallback = function(){ 14410 // Specific to iOS 14411 if(navigator.userAgent.match(/(iPhone|iPod|iPad)/i)){ 14412 // Scroll recaptcha back into view to fix iOS scrolling bug 14413 $('.g-recaptcha').get(0).scrollIntoView(true); 14414 window.scrollBy(0, -50); 14415 } 14416 $('.submit-btn').prop("disabled",false); 14417} 14418 14419 14420function resetForm($form) { 14421 $.each($form.find('input:visible,select:visible'), function(index, input) { 14422 var $input = $(input); 14423 removeError({ 14424 "field": $input, 14425 "class": ".required" 14426 }); 14427 removeError({ 14428 "field": $input, 14429 "class": ".pattern" 14430 }); 14431 }) 14432 14433} 14434 14435 14436}); 14437 14438 14439 14440 14441 $('form.cnc-form').find('input[required],select[required]').on('change', function(event) { 14442 var $this = event.currentTarget; 14443 //$form.find("button").attr("disabled", false); 14444 var isRequiredInputValid=requiredValidationInputChange($this); 14445 if(!isRequiredInputValid && $this['pattern']){ 14446 var ispatternInputValid=validatePattern($this); 14447 } 14448 }); 14449 14450 function requiredValidationInputChange(input) { 14451 var errorFlag = false; 14452 var $input = $(input); 14453 14454 if (!$input.val()) { 14455 errorFlag=true; 14456 14457 $input.addClass('form-error'); 14458 $input.removeClass('valid-checkmark'); 14459 $input.siblings('.required').addClass('active'); 14460 $input.siblings('.pattern').removeClass('active'); 14461 14462 } else { 14463 $input.removeClass('form-error'); 14464 if(!$input.attr('pattern')){ 14465 $input.not('.hasDatepicker').addClass('valid-checkmark'); 14466 } 14467 $input.siblings('.required').removeClass('active'); 14468 } 14469 14470 14471 if($input.prop('type') == "checkbox" && $input.prop('required')){ 14472 14473 if($input.prop('checked') || $('input:checkbox[name="topics"]:checked').length > 0 ){ 14474 $input.parent().parent().children('.required').removeClass('active'); 14475 }else{ 14476 $input.parent().parent().children('.required').addClass('active'); 14477 } 14478 14479 14480 14481 } 14482 14483 14484 return errorFlag; 14485} 14486 14487 14488function validatePattern(input){ 14489 var errorFlag = false; 14490 var $input = $(input); 14491 if ($input.val()) { 14492 try { 14493 var pattern = new RegExp($input.attr('pattern')); 14494 /** 14495 * if the pattern is wrong displaing error 14496 */ 14497 if (pattern.test($input.val())) { 14498 $input.removeClass('form-error'); 14499 $input.addClass('valid-checkmark'); 14500 $input.siblings('.pattern').removeClass('active'); 14501 14502 } else { 14503 errorFlag=true; 14504 $input.addClass('form-error'); 14505 $input.removeClass('valid-checkmark'); 14506 $input.siblings('.pattern').addClass('active'); 14507 14508 } 14509 } 14510 catch(e){ 14511 /** 14512 * if the given pattern is wrong. 14513 */ 14514 console.error("in vaild pattern (Regular Expression )",$input.attr('pattern')); 14515 console.error(e); 14516 } 14517 14518 return errorFlag; 14519 } 14520} 14521 $( document ).ready(function() { 14522 init(); 14523 14524 function init() { 14525 if($('#ehrform-id').length>0){ 14526 resetForm(); 14527 } 14528 $("#genericLightbox").on('hide.bs.modal', function(){ 14529 if($('.modal-body').hasClass("ehr-modal-reload")){ 14530 window.location.href=window.location.href.split('?')[0]; 14531 } 14532 else{ 14533 resetForm(); 14534 } 14535 }); 14536 14537 $(document).on('click','.submit-ehr-form',function(event){ 14538 //$(event.currentTarget).prop("disabled",true); 14539 14540 if(!submitEventListenerEHR($(event.currentTarget).parents('form'))){ 14541 event.preventDefault(); 14542 } 14543 //formChangeEventListener($(event.currentTarget).parents('form')); 14544 }) 14545 14546 14547 } 14548 14549 function resetForm() {
14550 $.each($('#ehrform-id').find('input:visible'), function(index, input) { 14551 var $input = $(input); 14552 removeErrorEHR({ 14553 "field": $input, 14554 "class": ".required" 14555 }); 14556 removeErrorEHR({ 14557 "field": $input, 14558 "class": ".pattern" 14559 }); 14560 }) 14561 14562 /* if($('.g-recaptcha').length){ 14563 grecaptcha.reset(); 14564 } 14565 $('.g-recaptcha').removeClass("form-error"); 14566 $('.g-recaptcha').css("border", "0px"); */ 14567 14568 14569 $('input:checkbox:visible[name="contact"]').prop('checked', false); 14570 $('input:radio:visible[name="contact"]').prop('checked', false); 14571 $('.checkboxList').removeClass("form-error"); 14572 14573 } 14574 14575 14576 14577 14578 function submitEventListenerEHR(selector) { 14579 let $form = $(selector); 14580 let isRequiredValidation = requiredValidationEHR($form); 14581 let isPatternValidation = patternValidationEHR($form); 14582 let isValidCaptcha = validateCaptchaEHR(); 14583 let finalFormvalidationState = false; 14584 14585 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 14586 finalFormvalidationState = false; 14587 } 14588 14589 else { 14590 finalFormvalidationState = true; 14591 } 14592 14593 if(finalFormvalidationState){ 14594 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 14595 $.post($form.find('[type="submit"]').attr('formaction'),$form.serializeArray(),function(res){ 14596 14597 if(res.status.trim() == "success"){ 14598 14599 $("#ehrform-id").hide(); 14600 $(".response-message .response-text.success").show(); 14601 // $(".modal#genericLightbox .lightbox-modal.ehr-form-modal").css("top", "20%"); 14602 $(".response-message .response-text.error").hide(); 14603 14604 $(".modal-body").addClass("ehr-modal-reload"); 14605 $(".modal-dialog.ehr-form-modal").css('height', "250px"); 14606 $(".ehr-form-modal").animate({ 14607 scrollTop: 0 14608 },600); 14609 14610 } 14611 else if(res.status.trim() == "failure") { 14612 14613 $(".response-message .response-text.success").hide(); 14614 $(".response-message .response-text.error").show(); 14615 14616 14617 /** 14618 * if there is server side error then reset captcha if exist 14619 */ 14620 if($('.g-recaptcha').length){ 14621 grecaptcha.reset(); 14622 } 14623
14624 $form.find('[type="submit"]').prop("disabled",false); 14625 } 14626 else { 14627 $form.find('[type="submit"]').prop("disabled",false); 14628 } 14629 }) 14630 .fail(function() { 14631 if($('.g-recaptcha').length){ 14632 grecaptcha.reset(); 14633 } 14634 $form.find('[type="submit"]').prop("disabled",false); 14635 }) 14636 .always(function(){ 14637 $form.parent().find('.form-loading').remove(); 14638 }) 14639 } 14640 else{ 14641 $form.parent().find('.form-loading').remove(); 14642 } 14643 14644 return false; 14645 } 14646 14647 14648 function requiredValidationEHR($form) { 14649 var errorFlag = false; 14650 var inputSelector = 'input[required]:visible'; 14651 14652 $.each($form.find(inputSelector), function(index, input) { 14653 var $input = $(input); 14654 /** 14655 * if the field value is empty displaing error 14656 */ 14657 if (!$input.val()) { 14658 errorFlag = true; 14659 displayErrorEHR({ 14660 "field": $input, 14661 "class": ".required" 14662 }); 14663 } else { 14664 removeErrorEHR({ 14665 "field": $input, 14666 "class": ".required" 14667 }); 14668 } 14669 }) 14670 14671 if($('input:checkbox:visible[name="contact"][required]').length > 0 14672 && $('input:checkbox:visible[name="contact"]:checked').length == 0) { 14673 14674 errorFlag = true; 14675 displayErrorEHR({ 14676 "field": $($form.find('input:checkbox[name=contact]')[0]), 14677 "class": ".required" 14678 }) 14679 } 14680 else{ 14681 14682 removeErrorEHR({ 14683 "field": $($form.find('input:checkbox[name=contact]')[0]), 14684 "class": ".required" 14685 }); 14686 } 14687 14688 if($('input:radio:visible[name="contact"][required]').length > 0 14689 && $('input:radio:visible[name="contact"]:checked').length == 0) { 14690 14691 errorFlag = true; 14692 displayErrorEHR({ 14693 "field": $($form.find('input:radio[name=contact]')[0]), 14694 "class": ".required" 14695 }) 14696 } 14697 else{ 14698 14699 removeErrorEHR({ 14700 "field": $($form.find('input:radio[name=contact]')[0]), 14701 "class": ".required" 14702 }); 14703 } 14704 14705 return errorFlag; 14706 } 14707 14708 14709 14710 14711 function patternValidationEHR($form) { 14712 var errorFlag = false; 14713 $.each($form.find('input[pattern]:visible'), function(index, input) { 14714 var $input = $(input); 14715 if ($input.val()) { 14716 try { 14717 var pattern = new RegExp($input.attr('pattern')); 14718 /** 14719 * if the pattern is wrong displaing error 14720 */ 14721 if (pattern.test($input.val())) { 14722 removeErrorEHR({ 14723 "field": $input, 14724 "class": ".pattern" 14725 }); 14726 14727 } else { 14728 errorFlag = true; 14729 displayErrorEHR({ 14730 "field": $input, 14731 "class": ".pattern" 14732 }); 14733 } 14734 } 14735 catch(e){ 14736 console.error("in vaild pattren (Regular Expression )",$input.attr('pattern')); 14737 console.error(e); 14738 } 14739 14740 } else { 14741 removeErrorEHR({ 14742 "field": $input, 14743 "class": ".pattern", 14744 "dontRemoveBorder": true 14745 }); 14746 } 14747 }) 14748 return errorFlag; 14749 } 14750 14751 14752 function validateCaptchaEHR() { 14753 if($('.g-recaptcha').length > 0){ 14754 if(!grecaptcha) return false; 14755 let captchaResponse; 14756 /** 14757 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 14758 */ 14759 14760 captchaResponse = grecaptcha.getResponse(); 14761 14762 if (captchaResponse.length == 0) { 14763 $('.g-recaptcha').css("border", "1px Solid #d0103a"); 14764 $('.g-recaptcha').addClass("form-error"); 14765 return false; 14766 } else { 14767 $('.g-recaptcha').removeClass("form-error"); 14768 $('.g-recaptcha').css("border", "0px"); 14769 return true; 14770 } 14771 }else{ 14772 return true; 14773 } 14774 } 14775 14776 function displayErrorEHR(args, $form) { 14777 14778 if(args.field.prop('type') != "checkbox"){ 14779 args.field.parent().addClass('form-error'); 14780 } 14781 if (args.field.is("select")){ 14782 args.field.parent().children(args.class).addClass('active'); 14783 } 14784 else if(args.field.prop('type') == "checkbox"){ 14785 args.field.parent().nextAll(args.class).addClass('active'); 14786 args.field.parent().parent().addClass('form-error'); 14787 } 14788 else if(args.field.prop('type') == "radio"){ 14789 args.field.parent().nextAll(args.class).addClass('active'); 14790 args.field.parent().parent().addClass('form-error'); 14791 } 14792 else 14793 { 14794 args.field.siblings(args.class).addClass('active'); 14795 } 14796 } 14797 14798 14799 function removeErrorEHR(args, $form) { 14800 14801 if (!args.dontRemoveBorder) { 14802 args.field.parent().removeClass('form-error'); 14803 } 14804 if (args.field.is("select")){ 14805 args.field.parent().children(args.class).removeClass('active') 14806 } 14807 else if (args.field.prop('type') == "checkbox"){ 14808 args.field.parent().nextAll(args.class).removeClass('active'); 14809 } 14810 else if (args.field.prop('type') == "radio"){ 14811 args.field.parent().nextAll(args.class).removeClass('active'); 14812 } 14813 else{ 14814 args.field.siblings(args.class).removeClass('active'); 14815 } 14816 } 14817 14818 14819 // Global recaptchaCallback 14820 recaptchaCallback = function(){ 14821 // Specific to iOS 14822 if(navigator.userAgent.match(/(iPhone|iPod|iPad)/i)){ 14823 // Scroll recaptcha back into view to fix iOS scrolling bug 14824 $('.g-recaptcha').get(0).scrollIntoView(true); 14825 window.scrollBy(0, -50); 14826 }
14827 $('.submit-ehr-form').prop("disabled",false); 14828 } 14829 14830 14831 }); 14832 14833 14834 14835 14836 //$('form#ehrform-id').find('input[required]').on('change', function(event) { 14837 $(document).on('change','form#ehrform-id input[required]',function(event){ 14838 var $this = event.currentTarget; 14839 //$form.find("button").attr("disabled", false); 14840 var isRequiredInputValid=requiredValidationInputChangeEHR($this); 14841 if(!isRequiredInputValid && $this['pattern']){ 14842 var ispatternInputValid=validatePatternEHR($this); 14843 } 14844 }); 14845 14846 function requiredValidationInputChangeEHR(input) { 14847 var errorFlag = false; 14848 var $input = $(input); 14849 14850 if (!$input.val()) { 14851 errorFlag=true; 14852 14853 $input.parent().addClass('form-error'); 14854 $input.siblings('.required').addClass('active'); 14855 $input.siblings('.pattern').removeClass('active'); 14856 14857 } else { 14858 $input.parent().removeClass('form-error'); 14859 $input.siblings('.required').removeClass('active'); 14860 } 14861 14862 if($input.prop('type') == "checkbox" && $input.prop('required')){ 14863 14864 if($input.prop('checked') || $('input:checkbox[name="contact"]:checked').length > 0 ){ 14865 $input.parent().nextAll('.required').removeClass('active'); 14866 $input.parent().parent().removeClass('form-error'); 14867 }else{ 14868 $input.parent().nextAll('.required').addClass('active'); 14869 $input.parent().parent().addClass('form-error'); 14870 } 14871 14872 } 14873 14874 if($input.prop('type') == "radio" && $input.prop('required')){ 14875 14876 if($input.prop('checked') || $('input:radio[name="contact"]:checked').length > 0 ){ 14877 $input.parent().nextAll('.required').removeClass('active'); 14878 $input.parent().parent().removeClass('form-error'); 14879 }else{ 14880 $input.parent().nextAll('.required').addClass('active'); 14881 $input.parent().parent().addClass('form-error'); 14882 } 14883 14884 } 14885 14886 14887 return errorFlag; 14888 } 14889 14890 14891 function validatePatternEHR(input){ 14892 var errorFlag = false; 14893 var $input = $(input); 14894 if ($input.val()) { 14895 try { 14896 var pattern = new RegExp($input.attr('pattern')); 14897 /** 14898 * if the pattern is wrong displaing error 14899 */ 14900 if (pattern.test($input.val())) { 14901 $input.parent().removeClass('form-error'); 14902 $input.siblings('.pattern').removeClass('active'); 14903 14904 } else { 14905 errorFlag=true; 14906 $input.parent().addClass('form-error'); 14907 $input.siblings('.pattern').addClass('active'); 14908 14909 } 14910 } 14911 catch(e){ 14912 /** 14913 * if the given pattern is wrong. 14914 */ 14915 console.error("in vaild pattern (Regular Expression )",$input.attr('pattern')); 14916 console.error(e); 14917 } 14918 14919 return errorFlag; 14920 } 14921 } 14922$( document ).ready(function() { 14923 if($('#pmChecklistIframe').length){ 14924 getPdfByBackend(); 14925 } 14926}); 14927//pdf generation JS code 14928 14929function getPdfByBackend(){ 14930 var dataURL = $(".ElementIframe").attr("data-pdf-html-url"); 14931 var dataAwsURL = "/bin/buildeasy/genericapi"; 14932 var dataPdfName = $(".ElementIframe").attr("data-pdf-name"); 14933 var dataParam = { 14934 "reqType": "HTMLTOPDFConverterGeneric", 14935 "executionType": "startExecution", 14936 "input": { 14937 "url": window.location.origin + dataURL, 14938 "s3FileName": dataPdfName 14939 } 14940 }; 14941 if(window.outerWidth < 550 && !!window.navigator.userAgent.match(/iPhone/)) { 14942 $(".allowPopup").css("display",'block'); 14943 } 14944 $.ajax({ 14945 method:"POST", 14946 url: dataAwsURL,//aws url 14947 dataType: 'json', 14948 // data: dataURL,// given in data attribute -pdf report.html 14949 data: { 14950 payload: JSON.stringify(dataParam), 14951 reqType: "reqHTMLTOPDFConverterGeneric" 14952 }, 14953 crossDomain: true, 14954 success: function(response){ 14955 var status = response.message.status; 14956 if (status == "SUCCEEDED") { 14957 var successStatus = JSON.parse(response.message.output).status; 14958 if (successStatus == '200') { 14959 var urlReplaceIframe = JSON.parse(response.message.output).message; 14960 if(window.outerWidth < 550 && !!window.navigator.userAgent.match(/iPhone/)) { 14961 $('#overlay').hide(); 14962 $(".ElementIframe").css("display",'none'); 14963 window.open(urlReplaceIframe, "_blank"); 14964 } else { 14965 $(".ElementIframe").attr('src', urlReplaceIframe); 14966 $(".ElementIframe").css("display",'block'); 14967 } 14968 } else if (successStatus == '500') { 14969 errorDisplay(response); 14970 } else if (successStatus == '404') { 14971 errorDisplay(response); 14972 } 14973 } 14974 }, 14975 error: function(textStatus, errorThrown) { 14976 console.log(textStatus, errorThrown); 14977 $('#overlay').fadeOut("slow"); 14978 $(".ElementIframe").css("display",'none'); 14979 $("#errorMsg").show(); 14980 $("#errorMsg").html("Internal error occured, please try again later"); 14981 } 14982 }); 14983 14984 function errorDisplay(errResp){ 14985 $('#overlay').fadeOut("slow"); 14986 $(".ElementIframe").css("display",'none'); 14987 $("#errorMsg").show(); 14988 $("#errorMsg").html(JSON.parse(errResp.message.output).message); 14989 } 14990} 14991 14992 14993//var abc = $(document).find(".col-md-4.mb-3.pr-0").find(".selectedGray").find("input") 14994 14995$( document ).ready(function() { 14996 if($('#walletcardIframe').length){
14997 getPdfByBackend(); 14998 } 14999}); 15000$(document).ready(function(){ 15001 15002 //input field validation 15003 function inputFieldErrorValidation() { 15004 $(document).on('click','#payerPortal-button', function(){ 15005 var fName = $("#payerPortal-firstName").val(); 15006 var lName = $("#payerPortal-lastName").val(); 15007 var email = $("#payerPortal-email").val(); 15008 var phonenumber = $("#payerPortal-phoneNumber").val(); 15009 var errorMessage_fName = $(".payerPortal-input__fName").attr('data-fName-errorMessage'); 15010 var errorMessage_lName = $(".payerPortal-input__lName").attr('data-lName-errorMessage'); 15011 var errorMessage_email = $(".payerPortal-input__email").attr('data-email-errorMessage'); 15012 var errorMessage_phoneNumber = $(".payerPortal-input_phoneNumber").attr('data-phoneNumber-errorMessage'); 15013 if(fName == '' || lName == '' || email == '' || phonenumber == ""){ 15014 $("#payerPortal-firstName").attr("placeholder", errorMessage_fName); 15015 $("#payerPortal-lastName").attr("placeholder", errorMessage_lName); 15016 $("#payerPortal-email").attr("placeholder", errorMessage_email); 15017 $("#payerPortal-phoneNumber").attr("placeholder", errorMessage_phoneNumber); 15018 if(phonenumber != ''){ 15019 mobilePatternValidation(); 15020 } 15021 else if(email != ''){ 15022 emailPatternValidation(); 15023 } 15024 15025 else if(fName == ''){ 15026 $("#payerPortal-firstName").focus(); 15027 } 15028 else if (lName == '') { 15029 $("#payerPortal-lastName").focus(); 15030 } 15031 else if (email == '') { 15032 $("#payerPortal-email").focus(); 15033 } 15034 else if (phonenumber == '') { 15035 $("#payerPortal-phoneNumber").focus(); 15036 } 15037 $('#payerPortal-form input').keyup(function(){ 15038 if( $(this).val() == '' ) { 15039 $(this).removeAttr("placeholder"); 15040 } 15041 return false; 15042 }); 15043 recaptchaValidating(); 15044 return false; 15045 } 15046 emailPatternValidation(); 15047 mobilePatternValidation(); 15048 EPPFormFinalSubmit($("#payerPortal-form")); 15049 return false; 15050 }); 15051 } 15052 inputFieldErrorValidation(); 15053 15054 $(document).on('change', '.epp-form-modal input:checkbox', function(){ 15055 if($(this).is(":checked")) { 15056 console.log("checked"); 15057 $(this).addClass('active'); 15058 } else { 15059 console.log("unChecked"); 15060 $(this).removeClass("active"); 15061 } 15062 }); 15063 15064 15065 //Email validation 15066 function emailPatternValidation() { 15067 var emailPattern = new RegExp($('#payerPortal-email').attr('pattern')); 15068 var emailVAL = $("#payerPortal-email").val(); 15069 var emailValid = $("#payerPortal-email").attr('data-valid-Message'); 15070 if(emailPattern.test(emailVAL)){ 15071 $('#payerPortal-email').removeAttr('placeholder'); 15072 return true; 15073 } 15074 else{ 15075 $('#payerPortal-email').val(''); 15076 $('#payerPortal-email').attr("placeholder", emailValid); 15077 $("#payerPortal-email").focus(); 15078 return false; 15079 } 15080 } 15081 15082 //Mobile Validation 15083 function mobilePatternValidation(){ 15084 var mobilePattern = new RegExp($('#payerPortal-phoneNumber').attr('pattern')); 15085 var mobileVAL = $("#payerPortal-phoneNumber").val(); 15086 var mobileValid = $("#payerPortal-phoneNumber").attr('data-valid-phoneMessage'); 15087 if(mobilePattern.test(mobileVAL)){ 15088 $('#payerPortal-phoneNumber').removeAttr('placeholder'); 15089 return true; 15090 } 15091 else{ 15092 $('#payerPortal-phoneNumber').val(''); 15093 $('#payerPortal-phoneNumber').attr("placeholder", mobileValid); 15094 $("#payerPortal-phoneNumber").focus(); 15095 return false; 15096 } 15097 } 15098 15099 function EPPFormFinalSubmit(selector){ 15100 var $form = $(selector); 15101 let isvalidateEmail = emailPatternValidation($form); 15102 let isvalidateMobile = mobilePatternValidation($form); 15103 let finalFormValidation = true; 15104 let isvalidateCaptchaEPP = recaptchaValidating($form); 15105 if(isvalidateEmail && isvalidateMobile && isvalidateCaptchaEPP){ 15106 finalFormValidation = true; 15107 $("#payerPortal-firstName").focus(); 15108 $("#payerPortal-button").attr("disabled", "disabled"); 15109 } 15110 else{ 15111 finalFormValidation = false;
15112 } 15113 if(finalFormValidation){ 15114 15115 //if success validation getting input values here 15116 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 15117 $.post($('#payerPortal-form').find('.payerPortal-input__submit').attr('formaction'),$('#payerPortal-form').serializeArray(),function(res){ 15118 if(res.status == "success"){ 15119 $(".payerPortal-wrapper").css("display", "none"); 15120 $(".payerPortal-success__message").css("display", "block"); 15121 $(".modal-dialog.epp-form-modal").css('height', "250px"); 15122 if(window._satellite){ 15123 _satellite.track('Form Success'); 15124 } 15125 EPPresetForm(); 15126 } 15127 else if(res.status == "failure"){ 15128 $(".payerPortal-wrapper").css("display", "none"); 15129 $(".payerPortal-error__message").css("display", "block"); 15130 $(".modal-dialog.epp-form-modal").css('height', "250px"); 15131 if(window._satellite){ 15132 _satellite.track('Form Failure'); 15133 } 15134 EPPresetForm(); 15135 } 15136 }) 15137 } 15138 } 15139 15140 // recaptcha Validation 15141 function recaptchaValidating() { 15142 if($('.g-recaptcha').length > 0){ 15143 if(!grecaptcha) return false; 15144 var capthaResponse; 15145 capthaResponse = grecaptcha.getResponse(); 15146 // if (capthaResponse == "" || capthaResponse == undefined || capthaResponse.length == 0){ 15147 if (capthaResponse.length == 0){ 15148 $('.g-recaptcha').css("border", "1px Solid #d0103a"); 15149 $('.g-recaptcha').addClass("form-epp-error"); 15150 return false; 15151 } 15152 else{ 15153 $('.g-recaptcha').removeClass("form-epp-error"); 15154 $('.g-recaptcha').css("border", "0px"); 15155 return true; 15156 } 15157 } 15158 else{ 15159 return true; 15160 } 15161 } 15162 15163 function EPPresetForm(){ 15164 $('.transformer-modal-close').on('click', function(){ 15165 location.reload(); 15166 $('.payerPortal-success__message').hide(); 15167 $(".payerPortal-error__message").hide(); 15168 }); 15169 } 15170 15171}); 15172var checkPage = IsProtectedUrl("production");
15173if (checkPage && !$.cookie("apex__PatientLogin") && !$.cookie("apex__PatientCode")) { 15174 var currentPage, patientPages = ["meine-therapie/informationsmaterialien", "meine-therapie/informationsmaterialien-1", "meine-therapie/informationsmaterialien-1/formular", "meine-therapie/informationsmaterialien/formular"]; 15175 window.location.href.toLowerCase().indexOf("visual.force.com") > -1 ? (currentPage = getParameterByName("name"), 15176 $.cookie("apex__gigyaSession") && !patientPages.includes(currentPage) || (window.location.href = "Preview?sname=aktivmitpsa_DE&name=index&returnURL=" + currentPage)) : window.location.href.toLowerCase().indexOf("secure.force.com") > -1 ? (currentPage = getParameterByName("name"), 15177 $.cookie("apex__gigyaSession") && !patientPages.includes(currentPage) || (window.location.href = "aktivmitpsade/index&returnURL=" + currentPage)) : (currentPage = window.location.pathname, 15178 $.cookie("apex__gigyaSession") && !patientPages.includes(currentPage) || (window.location = "index&returnURL=" + currentPage)) 15179} 15180function IsProtectedUrl(e) { 15181 var a = !1 15182 , n = ""; 15183 if ("prev" == e) 15184 n = getParameterByName("name"), 15185 console.log("page name:" + n); 15186 else if ("production" == e) { 15187 n = window.location.pathname 15188 } 15189 for (var i = ["meine-therapie", "meine-therapie/anwendung-von-orencia", "meine-therapie/anwendung-von-orencia-1", "meine-therapie/anwendung-von-orencia-2", "meine-therapie/informationsmaterialien", "meine-therapie/informationsmaterialien-1", "meine-therapie/informationsmaterialien-1/formular", "meine-therapie/informationsmaterialien/formular", "meine-therapie/reisen-mit-orencia", "meine-therapie/was-ist-orencia"], o = i.length, r = 0; r < o; r++) 15190 if (n.toLowerCase() == i[r].toLowerCase()) { 15191 a = !0; 15192 break 15193 } 15194 return a 15195} 15196/*clear cookies on redirection to loginpage*/ 15197function clearcookies() { 15198 $.cookie('apex__loginType', '', { path: '/' }); 15199 $.cookie('apex__patientCodeSession', '', { path: '/' }); 15200 $.cookie('apex__PatientLogin', '', { path: '/' }); 15201 $.cookie('apex__PatientCode', '', { path: '/' }); 15202 $.cookie('apex__PatientCodeType', '', { path: '/' }); 15203 document.cookie = GigyaSiteConfigJson.SiteId + "_redirectPageName" + '=;secure;path=/'; 15204 $.cookie('apex__SiteId', '', { path: '/' }); 15205 $.cookie("redirectPageName", '', { path: '/' }); 15206} 15207 15208function GetQueryStringVarByName(e, a, n) { 15209 null == a && (a = ""), 15210 e = (e = e.toLowerCase()).replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 15211 var i = new RegExp("[\\?&]" + e + "=([^&#]*)") 15212 , o = null == n ? window.location.href : n; 15213 o = o.toLowerCase(); 15214 var r = i.exec(o); 15215 return null == r ? a : r[1] 15216} 15217function getParameterByName(e) { 15218 e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 15219 var a = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(location.search); 15220 return null === a ? "" : decodeURIComponent(a[1].replace(/\+/g, " ")) 15221} 15222 15223function createCookieForSuccessfulLogin(tokenValue) { 15224 if (window._satellite) { 15225 _satellite.track('Form Success'); 15226 } 15227 $.cookie('apex__loginType', 'patientcode', { path: '/' }); 15228 $.cookie('apex__patientCodeSession', tokenValue, { path: '/' }); 15229 $.cookie('apex__PatientLogin', 'CodeLogin', { path: '/' }); 15230 $.cookie('apex__PatientCode', $('.formtext').val(), { path: '/' }); 15231 $.cookie('apex__PatientCodeType', 'BIGID', { path: '/' }); 15232 var siteId = $.cookie('apex__SiteId'); 15233 if (getQueryParameterByName('ReturnUrl')) { 15234 $.cookie('redirectPageURL', getQueryParameterByName('ReturnUrl'), { path: '/' }); 15235 } else if (getQueryParameterByName('returnUrl')) { 15236 $.cookie('redirectPageURL', getQueryParameterByName('returnurl'), { path: '/' }); 15237 } else { 15238 $.cookie('redirectPageURL', GigyaSiteConfigJson.PostLoginPage, { path: '/' }); 15239 } 15240 15241 try { 15242 if ($.cookie('redirectPageURL')) 15243 $(".serach-overlay").remove(); 15244 SecureRedirect($.cookie('redirectPageURL'), false); 15245 } 15246 catch (err) { 15247 console.log('catch block' + err.message); 15248 $(".serach-overlay").remove(); 15249 SecureRedirect($.cookie('redirectPageURL'), false); 15250 } 15251} 15252 15253function CodeCompareAWS(codeInput) { 15254 $.cookie('apex__SiteId', GigyaSiteConfigJson.SiteId, { path: '/' }); 15255 var inputJson = { 15256 "reqType": "BigIntegerService", 15257 "executionType": "startExecution", 15258 "input": { 15259 "RegistrationNumber": codeInput, 15260 "PatientCodeType": "BIGID", 15261 "dummyNumber": GigyaSiteConfigJson.dummybigid 15262 } 15263 }; 15264 15265 $.ajax({ 15266 url: "/bin/buildeasy/genericapi", 15267 data: { 15268 payload: JSON.stringify(inputJson), 15269 reqType: "reqBigIntegerService" 15270 }, 15271 dataType: 'json', 15272 type: "POST",
15273 success: function (result, code, jqXHR) { 15274 console.log("Patient Login startExecution completed successfully"); 15275 var finalResponse = result; 15276 var isCodeloginSuccess = JSON.parse(finalResponse.message.output).validNumber; 15277 var patientCodeSession = JSON.parse(finalResponse.message.output).token; 15278 var statusCode = JSON.parse(finalResponse.message.output).statusCode; 15279 15280 if(statusCode == 200) { 15281 if (isCodeloginSuccess) { 15282 createCookieForSuccessfulLogin(patientCodeSession); 15283 } else { 15284 // Please login with correct code 15285 $('.invalid-code').show(); 15286 $(".serach-overlay").remove(); 15287 } 15288 } else { 15289 $('.invalid-code').show(); 15290 $(".serach-overlay").remove(); 15291 } 15292 }, error: function () { 15293 console.log("Patient Login request failed"); 15294 $(".serach-overlay").remove(); 15295 } 15296 }); 15297} 15298 15299function getQueryParameterByName(name) { 15300 var url = window.location.href; 15301 name = name.replace(/[\[\]]/g, "\$&"); 15302 var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 15303 results = regex.exec(url); 15304 if (!results) return null; 15305 if (!results[2]) return ''; 15306 return decodeURIComponent(results[2].replace(/\+/g, " ")); 15307} 15308function SecureRedirect(pageName, includeQueryString) { 15309 if (includeQueryString == null) 15310 includeQueryString = true; 15311 var host = window.location.protocol + '//' + window.location.host; 15312 var search = (includeQueryString == true) ? window.location.search : ''; 15313 window.location.replace(host + pageName + search); 15314} 15315$(document).ready(function () { 15316 var e = "" 15317 , a = "" 15318 , n = window.location.href; 15319 n.indexOf("returnURL") > -1 ? (a = GetQueryStringVarByName("returnURL"), 15320 a = unescape(a), 15321 a = unescape(a)) : a = "meine-therapie", 15322 $.cookie("redirectPageName", a, { path: '/' }), 15323 $("a.submit-btn-nl").click(function (a) { 15324 clearcookies(); 15325 $('.invalid-code, .show-error').hide(); 15326 if ($('.formtext').val() == "") { 15327 $('.show-error').show(); 15328 } 15329 else { 15330 $('.invalid-code').hide(); 15331 $('.show-error').hide(); 15332 $('body').append('<div class="serach-overlay"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indef
15332inite"></animate></rect></svg></div>') 15333 15334 } 15335 "" == (e = $(".formtext").val()) ? (a.preventDefault(), 15336 $("#wrong-code").show()) : (a.preventDefault(), CodeCompareAWS(e)); 15337 }), 15338 15339 $('.formtext').keypress(function (event) { 15340 if (event.which == 13) { 15341 event.preventDefault(); 15342 $('a.submit-btn-nl').click(); 15343 } 15344 }); 15345 15346 $('#bodyContent .gy-class-logout').click(function () { 15347 $.cookie('apex__loginType', '', { path: '/' }); 15348 $.cookie('apex__patientCodeSession', '', { path: '/' }); 15349 $.cookie('apex__PatientLogin', '', { path: '/' }); 15350 $.cookie('apex__PatientCode', '', { path: '/' }); 15351 $.cookie('apex__PatientCodeType', '', { path: '/' }); 15352 $.cookie('apex__SiteId', '', { path: '/' }); 15353 $.cookie("redirectPageName", '', { path: '/' }); 15354 15355 window.open(window.origin, '_self'); 15356 }), 15357 $(".header-menu-btn-logout").click(function () { 15358 $.cookie("apex__PatientLogin") && ($.cookie("apex__PatientLogin", "", { 15359 path: "/" 15360 }), 15361 $.cookie("apex__PatientCode", "", { 15362 path: "/" 15363 }), 15364 $.cookie("apex__LoginUserType", "", { 15365 path: "/" 15366 }), 15367 $.cookie("apex__PatientLogintimestamp_459", "", { 15368 path: "/" 15369 }), 15370 $.cookie("apex__Patient_AuthToken_459", "", { 15371 path: "/" 15372 }), 15373 window.location.href.toLowerCase().indexOf("visual.force.com") > -1 ? window.location.href = "Preview?sname=aktivmitpsa_DE&name=index" : window.location.href.toLowerCase().indexOf("secure.force.com") > -1 ? window.location.href = "aktivmitpsade/index" : window.location.href = "index") 15374 }) 15375}); 15376 15377 15378$('.patient-logout a').click(function (e) { 15379 e.preventDefault(); 15380 $.cookie('apex__loginType', '', { path: '/' }); 15381 $.cookie('apex__patientCodeSession', '', { path: '/' }); 15382 $.cookie('apex__PatientLogin', '', { path: '/' }); 15383 $.cookie('apex__PatientCode', '', { path: '/' }); 15384 $.cookie('apex__PatientCodeType', '', { path: '/' }); 15385 $.cookie('apex__SiteId', '', { path: '/' }); 15386 $.cookie("redirectPageName", '', { path: '/' }); 15387 15388 window.open(window.origin, '_self'); 15389 localStorage.removeItem('interstetial-opdivo'); 15390}); 15391//console.log('hello'); 15392//let submitBtn = document.getElementById('submit-btn'); 15393// submitBtn.addEventListener('click', validateInspireForm); 15394$(document).ready(function () { 15395 init(); 15396 $('.medicine-check .input-radio').change(function (event) { 15397 // console.log(event.currentTarget); 15398 if (event.target.value == "Yes") { 15399 $('.medicine-no').hide(); 15400 $('.medicine-yes').show(); 15401 } else { 15402 $('.medicine-yes').hide(); 15403 $('.medicine-no').show(); 15404 } 15405 }); 15406 $('.input-radio').change(function (event) { 15407 $(this).parent().parent().children('.error-text').hide(); 15408 }); 15409 $('.input-text').focus(function (event) { 15410 $(this).siblings('.error-text').hide(); 15411 }); 15412 $('.input-text').blur(function (event) { 15413 if ($(this).val() == '') { 15414 let siblings = $(this).siblings('.error-text')[0]; 15415 siblings.style.display = 'block'; 15416 } 15417 else if ($(this).attr('pattern')) { 15418 validatePaternSTI($(this)); 15419 } 15420 }); 15421 $('.terms-checkbox').change(function (event) { 15422 // $(this).parent().parent().parent().children('.error-text').hide(); 15423 15424 let spanElem = $(this).parent().parent().parent().children('.error-text'); 15425 if (event.target.checked && spanElem) { 15426 spanElem.hide(); 15427 } else { 15428 spanElem.show(); 15429 } 15430 }); 15431 15432 $('.medicine-yes .input-checkbox').change(function (event) { 15433 // console.log(event.currentTarget); 15434 let spanElem = $(this).parent().next().children()[1]; 15435 if (event.target.checked && spanElem) { 15436 spanElem.style.display = 'block'; 15437 } else if (spanElem) { 15438 spanElem.style.display = 'none'; 15439 } 15440 }); 15441 $('textarea.input-text').on('focus', function () { 15442 let char = parseInt($(this).val().length); 15443 $(this).next().text(`${char}/200`); 15444 }); 15445 $('textarea.input-text').on('input', function () { 15446 let char = parseInt($(this).val().length); 15447 $(this).next().text(`${char}/200`); 15448 }); 15449 $('input[type="number"],input[type="tel"]').on('input', function (e) { 15450 let phoneNum = document.getElementById('phone-number');
15451 let $this = $(this); 15452 let maxlength = parseInt($this.attr('maxlength')); 15453 let value = $this.val(); 15454 if (($this.attr('id') == 'phone-number') && (value.length == 3 || value.length == 4 || value.length == 8 || value.length == 7) && e.originalEvent.inputType == 'insertText') { 15455 if(value.length == 4 || value.length == 8){ 15456 if(value.charAt(value.length-1) != '-'){ 15457 let last_char = value.charAt(value.length-1); 15458 value = value.slice(0,-1) + '-' + last_char; 15459 phoneNum.value = value; 15460 } 15461 }else{ 15462 addHyphen($this, value); 15463 } 15464 15465 } 15466 if (value && value.length >= maxlength) { 15467 $this.val(value.substr(0, maxlength)); 15468 } 15469 }); 15470 15471 $('.inspire-modal-close, .inspire-btn-close').click(function(){ 15472 $('.inspire-modal-container').hide(); 15473 }); 15474 15475 function addHyphen(element, value) { 15476 // let val = $(element).val().split('-').join(''); // Remove dash (-) if mistakenly entered. 15477 let val = value; 15478 15479 // let finalVal = val + "-"; // Add (-) after 3rd every char. 15480 let finalVal = val + "-"; 15481 element[0].value = finalVal; // Update the input box. 15482 } 15483 $('.medicine-container .input-checkbox').change(function (event) { 15484 // console.log(event.currentTarget); 15485 let count = $('.medicine-container .input-checkbox:checked').length; 15486 let errSpan = $('.medicine-container .error-text'); 15487 if (count > 0) { 15488 errSpan.hide(); 15489 } else { 15490 errSpan.show(); 15491 } 15492 }); 15493 // function validateInspireForm (e){ 15494 // e.preventDefault(); 15495 // console.log('Submit'); 15496 // } 15497 function validatePaternSTI(input) { 15498 var errorFlag = false; 15499 var $input = $(input); 15500 if ($input.val()) { 15501 try { 15502 var pattern = new RegExp($input.attr('pattern')); 15503 /** 15504 * if the pattern is wrong displaying error 15505 */ 15506 if (pattern.test($input.val())) { 15507 //removeError($input); 15508 $input.siblings('.error-text.pattern').css('display','none'); 15509 if ($input.attr('name') == 'confirmEmail' && $input.val() != $('#email').val()) { 15510 errorFlag = true; 15511 //displayError($input); 15512 $input.siblings('.error-text.pattern').css('display','block'); 15513 } 15514 } else { 15515 errorFlag = true; 15516 //displayError($input); 15517 $input.siblings('.error-text.pattern').css('display','block'); 15518 } 15519 } 15520 catch (e) { 15521 console.error("invaild pattern (Regular Expression )", $input.attr('pattern')); 15522 console.error(e); 15523 } 15524 } else { 15525 displayError($input); 15526 } 15527 return errorFlag; 15528 } 15529 function init() { 15530 $(document).on('click', '#submit-sti-btn', function (event) { 15531 //$(event.currentTarget).prop("disabled",true); 15532 15533 if (!submitEventListenerSTI($(event.currentTarget).parents('form'))) { 15534 event.preventDefault(); 15535 } 15536 //formChangeEventListener($(event.currentTarget).parents('form')); 15537 }); 15538 } 15539 function getTopOffset(controlEl) { 15540 const labelOffset = 80; 15541 let top = parseInt(controlEl.offsetTop); 15542 return top - labelOffset; 15543 } 15544 15545 function scrollToFirstInvalidControl() { 15546 const firstInvalidControl = $("form.inspire-form .error-text:visible")[0]; 15547 15548 window.scroll({ 15549 top: getTopOffset(firstInvalidControl), 15550 left: 0, 15551 behavior: "smooth" 15552 }); 15553 } 15554 15555 function submitEventListenerSTI(selector) { 15556 let $form = $(selector); 15557 let isRequiredValidation = requiredValidationSTI($form); 15558 let isPatternValidation = patternValidationSTI($form); 15559 let isValidCaptcha = validateCaptchaSTI(); 15560 let finalFormvalidationState = false;
15561 console.log(isRequiredValidation, ': isRequiredValidation'); 15562 console.log(isPatternValidation, ': isPatternValidation'); 15563 console.log(isValidCaptcha, ': isValidCaptcha'); 15564 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 15565 //if (isRequiredValidation || isPatternValidation) { 15566 finalFormvalidationState = false; 15567 scrollToFirstInvalidControl(); 15568 } 15569 15570 else { 15571 finalFormvalidationState = true; 15572 } 15573 15574 if (finalFormvalidationState) { 15575 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 15576 $.post($form.find('[type="submit"]').attr('formaction'), $form.serializeArray(), function (res) { 15577 if (res.status.trim() == "success") { 15578 15579 // $(".response-message .response-text.success").show(); 15580 // $(".response-message .response-text.error").hide(); 15581 console.log("STI form submit Success"); 15582 if(window._satellite){ 15583 _satellite.track('Form Success'); 15584 } 15585 $('.inspire-modal-container, .success-text').show(); 15586 15587 $('.failure-text').hide(); 15588 resetFormSTI($form); 15589 } 15590 else if (res.status.trim() == "failure") { 15591 15592 // $(".response-message .response-text.success").hide(); 15593 // $(".response-message .response-text.error").show(); 15594 console.log("STI form submit Failure"); 15595 $('.inspire-modal-container, .failure-text').show(); 15596 15597 $('.success-text').hide(); 15598 resetFormSTI($form); 15599 /** 15600 * if there is server side error then reset captcha if exist 15601 */ 15602 if ($('.g-recaptcha').length) { 15603 grecaptcha.reset(); 15604 } 15605 15606 $form.find('[type="submit"]').prop("disabled", false); 15607 } 15608 else { 15609 $form.find('[type="submit"]').prop("disabled", false); 15610 } 15611 }) 15612 .fail(function () { 15613 if ($('.g-recaptcha').length) { 15614 grecaptcha.reset(); 15615 } 15616 $form.find('[type="submit"]').prop("disabled", false); 15617 }) 15618 .always(function () { 15619 $form.parent().find('.form-loading:visible').remove(); 15620 }) 15621 } 15622 else { 15623 $form.parent().find('.form-loading').remove(); 15624 } 15625 15626 return false;
15627 } 15628 15629 function requiredValidationSTI($form) { 15630 console.log("In required validation"); 15631 var errorFlag = false; 15632 var inputSelector = 'input[required]:visible,textarea[required]:visible'; 15633 15634 $.each($form.find(inputSelector), function (index, input) { 15635 var $input = $(input); 15636 /** 15637 * if the field value is empty displaing error 15638 */ 15639 if ($input.attr('type') == 'radio') { 15640 var radioBtnParent = $input.parent().parent(); 15641 // console.log(radioBtnParent.find(".input-radio:checked").length); 15642 if (radioBtnParent.find(".input-radio:checked").length == 0) { 15643 errorFlag = true; 15644 displayError($input); 15645 } else { 15646 removeError($input); 15647 } 15648 } else if ($input.attr('type') == 'checkbox' && $input.attr('name') == 'medicine') { 15649 var checkboxBtnParent = $input.parent().parent().parent(); 15650 if (checkboxBtnParent.find(".input-checkbox:checked").length == 0) { 15651 errorFlag = true; 15652 displayError($input); 15653 } else { 15654 removeError($input); 15655 } 15656 } 15657 else { 15658 if (!$input.val()) { 15659 errorFlag = true; 15660 displayError($input); 15661 } else { 15662 removeError($input); 15663 } 15664 } 15665 }); 15666 15667 // if ($('input:checkbox[name="topics"][required]').length > 0 && $('input:checkbox[name="topics"]:checked').length == 0) { 15668 if ($('input:checkbox[class="terms-checkbox"][required]').length != $('input:checkbox[class="terms-checkbox"]:checked').length) { 15669 errorFlag = true; 15670 var checkboxSelector = $form.find('input:checkbox[class="terms-checkbox"]'); 15671 $.each(checkboxSelector, function (index, checkbox) { 15672 var $checkbox = $(checkbox); 15673 if (!($checkbox.is(':checked'))) { 15674 displayError($checkbox); 15675 } else { 15676 removeError($checkbox); 15677 } 15678 }); 15679 } 15680 // if($('input:checkbox[name="medicine"][required]').length) 15681 return errorFlag; 15682 } 15683 // -----------------------****************************-------------------------- 15684 function patternValidationSTI($form) { 15685 var errorFlag = false; 15686 $.each($form.find('input[pattern]:visible'), function (index, input) { 15687 var $input = $(input); 15688 if ($input.val()) { 15689 try { 15690 var pattern = new RegExp($input.attr('pattern')); 15691 /** 15692 * if the pattern is wrong displaying error 15693 */ 15694 if (pattern.test($input.val())) { 15695 //removeError($input); 15696 $input.siblings('.error-text.pattern').css('display','none'); 15697 if ($input.attr('name') == 'confirmEmail' && $input.val() != $('#email').val()) { 15698 errorFlag = true; 15699 //displayError($input); 15700 $input.siblings('.error-text.pattern').css('display','block'); 15701 } 15702 } else { 15703 errorFlag = true; 15704 //displayError($input); 15705 $input.siblings('.error-text.pattern').css('display','block'); 15706 } 15707 } 15708 catch (e) { 15709 console.error("invaild pattern (Regular Expression )", $input.attr('pattern')); 15710 console.error(e); 15711 } 15712 15713 } else { 15714 displayError($input); 15715 } 15716 }) 15717 return errorFlag; 15718 } 15719 15720 function validateCaptchaSTI() { 15721 if ($('.g-recaptcha-sti').length > 0) { 15722 if (!grecaptcha) return false; 15723 let captchaResponse; 15724 /** 15725 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 15726 */ 15727 15728 15729 15730 captchaResponse = grecaptcha.getResponse(); 15731 15732 15733 15734 if (captchaResponse.length == 0) { 15735 $('.g-recaptcha-sti').css("border", "1px Solid #e76468"); 15736 $('.g-recaptcha-sti + .error-text').show(); 15737 return false;
15738 } else { 15739 $('.g-recaptcha-sti').css("border", "none"); 15740 $('.g-recaptcha-sti + .error-text').hide(); 15741 return true; 15742 } 15743 } else { 15744 return true; 15745 } 15746 } 15747 15748 function displayError(input, $form) { 15749 if (input.prop('type') == "checkbox") { 15750 input.parent().parent().parent().children('.error-text').show(); 15751 } 15752 else if (input.prop('type') == "radio") { 15753 input.parent().parent().children('.error-text').show(); 15754 } 15755 else { 15756 let errorText= input.siblings('.error-text')[0]; 15757 errorText.style.display = 'block'; 15758 } 15759 } 15760 15761 function removeError(input, $form) { 15762 if (input.prop('type') == "checkbox") { 15763 input.parent().parent().parent().children('.error-text').hide(); 15764 } 15765 else if (input.prop('type') == "radio") { 15766 input.parent().parent().children('.error-text').hide(); 15767 } 15768 else { 15769 let errorText= input.siblings('.error-text')[0]; 15770 errorText.style.display = 'none'; 15771 } 15772 } 15773 15774 // Global recaptchaCallback 15775 recaptchaCallback = function () { 15776 // Specific to iOS 15777 if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 15778 // Scroll recaptcha back into view to fix iOS scrolling bug 15779 $('.g-recaptcha').get(0).scrollIntoView(true); 15780 window.scrollBy(0, -50); 15781 } 15782 15783 $('#submit-sti-btn').prop("disabled", false); 15784 15785 let captchaResponse = grecaptcha.getResponse(); 15786 15787 if (captchaResponse.length == 0) { 15788 $('.g-recaptcha-sti').css("border", "1px Solid #e76468"); 15789 $('.g-recaptcha-sti + .error-text').show(); 15790 // return false; 15791 } else { 15792 $('.g-recaptcha-sti').css("border", "none"); 15793 $('.g-recaptcha-sti + .error-text').hide(); 15794 // return true; 15795 } 15796 } 15797 15798 function resetFormSTI($form) { 15799 document.getElementById("share-inspire-form").reset(); 15800 $('.medicine-yes, .medicine-no').hide(); 15801 $('.medicine-info').hide(); 15802 grecaptcha.reset(); 15803 } 15804 15805}); 15806$(document).ready(function () { 15807 init(); 15808 function showErrorMessage(errorName, $input) { 15809 let errorContainer = $(".camzyos-error-fiels-container"); 15810 let fieldName = $input.attr("id"); 15811 let inputFieldClassList = `#${$input.attr("id")}`; 15812 let errorFieldClassList = `.camzyos-error-field.${$input.attr("id")}`; 15813 let inputContainer = $(inputFieldClassList); 15814 if ($(errorFieldClassList).length === 0) { 15815 let errorMessage = ""; 15816 if (errorName === "required") { 15817 errorMessage = $input.data("requiredMessage"); 15818 15819 } else if (errorName === "pattern") { 15820 errorMessage = $input.data("patternMessage"); 15821 } 15822 if(errorMessage != undefined) { 15823 let errorElement = `<p class="camzyos-error-field ${fieldName}">${errorMessage}</p>`; 15824 inputContainer.closest(".camzyos-input-wrapper").append(errorElement).show(); 15825 errorContainer.parent().show(); 15826 } 15827 } 15828 } 15829 15830 function hideErrorMessage(errorName, $input) { 15831 // let errorContainer = $(".camzyos-error-fiels-container"); 15832 let errorFieldClassList = `.camzyos-error-field.${$input.attr("id")}`; 15833 // errorContainer.find(errorFieldClassList).remove(); 15834 $(".camzyos-input-wrapper").find(errorFieldClassList).remove(); 15835 // if (errorName === 'required') { 15836 // let errorFieldClassList = `.camzyos-error-field.${$input.attr('name')}`; 15837 // errorContainer.find(errorFieldClassList).remove(); 15838 // } else if (errorName === 'pattern') { 15839 // let errorFieldClassList = `.camzyos-error-field.${$input.attr('name')}`; 15840 // errorContainer.find(errorFieldClassList).remove(); 15841 // } 15842 } 15843 $(".camzyos-input-text").focus(function (event) { 15844 $(".camzyos-system-error-container").hide(); 15845 $(this).removeClass("error"); 15846 if ($(this).val() == "" && $(this).prop("required")) { 15847 hideErrorMessage("required", $(this)); 15848 } else if ($(this).attr("pattern")) { 15849 hideErrorMessage("pattern", $(this)); 15850 } 15851 }); 15852 $(".camzyos-input-text").blur(function (event) { 15853 if ($(this).val() == "" && $(this).prop("required")) { 15854 $(this).addClass("error"); 15855 showErrorMessage("required", $(this)); 15856 } else if ($(this).attr("pattern")) { 15857 validatePatern($(this)); 15858 } 15859 }); 15860 15861 $("textarea.camzyos-input-text").on("focus", function () {
15862 let char = parseInt($(this).val().length); 15863 let maxlength = parseInt($(this).attr("maxlength")); 15864 $(this).next().text(`${char}/${maxlength}`); 15865 }); 15866 $("textarea.camzyos-input-text").on("input", function () { 15867 let char = parseInt($(this).val().length); 15868 let maxlength = parseInt($(this).attr("maxlength")); 15869 $(this).next().text(`${char}/${maxlength}`); 15870 }); 15871 function addHyphen(element, value) { 15872 var $input = $(input); 15873 // let val = $(element).val().split('-').join(''); // Remove dash (-) if mistakenly entered. 15874 let val = value; 15875 15876 // let finalVal = val + "-"; // Add (-) after 3rd every char. 15877 let finalVal = val + "-"; 15878 element[0].value = finalVal; // Update the input box. 15879 } 15880 $(".camzyos-input-container.top-checkboxes .camzyos-input-checkbox").change( 15881 function (event) { 15882 // console.log(event.currentTarget); 15883 let count = $( 15884 ".camzyos-input-container.top-checkboxes .camzyos-input-checkbox:checked" 15885 ).length; 15886 let errSpan = $( 15887 ".camzyos-input-container.top-checkboxes camzyos-error-field" 15888 ); 15889 if (count <= 0) { 15890 $('.checkbox-error-msg-sotyktu').css('display','block'); 15891 } else { 15892 // errSpan.show(); 15893 $('.checkbox-error-msg-sotyktu').css('display','none'); 15894 } 15895 } 15896 ); 15897 15898 function validatePatern(input) { 15899 var errorFlag = false; 15900 var $input = $(input); 15901 if ($input.val()) { 15902 try { 15903 var pattern = new RegExp($input.attr("pattern")); 15904 /** 15905 * if the pattern is wrong displaying error 15906 */ 15907 if (pattern.test($input.val())) { 15908 $input.siblings(".error-text.pattern").css("display", "none"); 15909 15910 $input.removeClass("error"); 15911 } else { 15912 errorFlag = true; 15913 $input.addClass("error"); 15914 showErrorMessage("pattern", $input); 15915 } 15916 } catch (e) { 15917 console.error( 15918 "invaild pattern (Regular Expression )", 15919 $input.attr("pattern") 15920 ); 15921 console.error(e); 15922 } 15923 } else { 15924 $input.addClass("error"); 15925 } 15926 15927 if ($("#camzyos-email-conf").val() != $("#camzyos-email").val()) { 15928 errorFlag = true; 15929 15930 if($("#camzyos-email-conf").val()){ 15931 $input.siblings(".error-text.pattern").css("display", "none"); 15932 15933 $("#camzyos-email-conf").addClass("error"); 15934 showErrorMessage("pattern", $("#camzyos-email-conf")); 15935 } 15936 } else { 15937 $("#camzyos-email-conf") 15938 ?.siblings(".error-text.pattern") 15939 .css("display", "none"); 15940 15941 $("#camzyos-email-conf")?.removeClass("error"); 15942 } 15943 15944 //displayError($input); 15945 // $input.siblings(".error-text.pattern").css("display", "block"); 15946 15947 return errorFlag; 15948 } 15949 15950 function init() { 15951 $(document).on("click", "#camzyos-submit-btn", function (event) { 15952 $(".camzyos-system-error-container").hide(); 15953 scrollToFirstInvalidControlCamzyos(); 15954 //$(event.currentTarget).prop("disabled",true); 15955 15956 if (!submitEventListenerCamzyos($(event.currentTarget).parents("form"))) { 15957 event.preventDefault(); 15958 } 15959 //formChangeEventListener($(event.currentTarget).parents('form')); 15960 }); 15961 } 15962 function getTopOffsetCamzyos(controlEl) { 15963 const labelOffset = 80; 15964 let top = controlEl ? parseInt(controlEl.offsetTop) : 0; 15965 return top - labelOffset; 15966 } 15967 15968 function scrollToFirstInvalidControlCamzyos() { 15969 const firstInvalidControl = $( 15970 "form.camzyos-form .camzyos-required-heading-info" 15971 )[0]; 15972 15973 window.scroll({ 15974 top: getTopOffsetCamzyos(firstInvalidControl), 15975 left: 0, 15976 behavior: "smooth", 15977 }); 15978 } 15979 15980 function submitEventListenerCamzyos(selector) { 15981 let $form = $(selector); 15982 let isRequiredValidation = requiredValidationCamzyos($form); 15983 let isPatternValidation = patternValidationCamzyos($form); 15984 let isValidCaptcha = validateCaptchaCamzyos(); 15985 let finalFormvalidationState = false; 15986 console.log(isRequiredValidation, ": isRequiredValidation"); 15987 console.log(isPatternValidation, ": isPatternValidation"); 15988 console.log(isValidCaptcha, ": isValidCaptcha"); 15989 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 15990 //if (isRequiredValidation || isPatternValidation) { 15991 finalFormvalidationState = false;
15992 scrollToFirstInvalidControlCamzyos(); 15993 } else { 15994 finalFormvalidationState = true; 15995 } 15996 15997 if (finalFormvalidationState) { 15998 $form 15999 .parent() 16000 .append( 16001 '<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>' 16002 ); 16003 $.post( 16004 $form.find('[type="submit"]').attr("formaction"), 16005 $form.serializeArray(), 16006 function (res) { 16007 if (res.status.trim() == "success") { 16008 let redirectURL = res["redirect_path"]; 16009 /** 16010 * if form is successfully submited then open thank you page as authored by user 16011 */ 16012 //window.location.href = redirectURL; 16013 $form.hide(); 16014 $(".camzyos-text-wrapper").hide(); 16015 $(".camzyos-success-text-wrapper").show(); 16016 } else if (res.status.trim() == "failure") { 16017 /** 16018 * if there is server side error then reset captcha if exist 16019 */ 16020 if ($(".g-recaptcha").length) { 16021 grecaptcha.reset(); 16022 } 16023 resetFormCamzyos($form); 16024 $(".global-level-msg").show(); 16025 $form.find('[type="submit"]').prop("disabled", false); 16026 resetFormCamzyos($form); 16027 $(".camzyos-system-error-container").show(); 16028 scrollToFirstInvalidControlCamzyos(); 16029 } else { 16030 $form.find('[type="submit"]').prop("disabled", false); 16031 } 16032 } 16033 ) 16034 .fail(function () { 16035 if ($(".g-recaptcha").length) { 16036 grecaptcha.reset(); 16037 } 16038 $form.find('[type="submit"]').prop("disabled", false); 16039 }) 16040 .always(function () { 16041 $form.parent().find(".form-loading:visible").remove(); 16042 }); 16043 } else { 16044 $form.parent().find(".form-loading").remove(); 16045 } 16046 16047 return false; 16048 } 16049 16050 function requiredValidationCamzyos($form) { 16051 var errorFlag = false;
16052 var inputSelector = 16053 "input[required]:visible,textarea[required]:visible,[type=required]:checked"; 16054 16055 $.each($form.find(inputSelector), function (index, input) { 16056 var $input = $(input); 16057 /** 16058 * if the field value is empty displaing error 16059 */ 16060 16061 if (!$input.val()) { 16062 errorFlag = true; 16063 $input.addClass("error"); 16064 showErrorMessage("required", $input); 16065 } else { 16066 $input.removeClass("error"); 16067 } 16068 16069 if ( 16070 $input.attr("type") == "checkbox" && 16071 $input.attr("name") == "topicsDetails" 16072 ) { 16073 var checkboxBtnParent = $input.parent().parent().parent(); 16074 if (checkboxBtnParent.find(".camzyos-input-checkbox:checked").length == 0) { 16075 errorFlag = true; 16076 //displayError($input); 16077 //$input.addClass("error"); 16078 //showErrorMessage("required", $input); 16079 $('.checkbox-error-msg-sotyktu').css('display','block'); 16080 } else { 16081 16082 // removeError($input); 16083 //hideErrorMessage("required", $input); 16084 //$input.removeClass("error"); 16085 $('.checkbox-error-msg-sotyktu').css('display','none'); 16086 } 16087 } else { 16088 if (!$input.val()) { 16089 errorFlag = true; 16090 displayError($input); 16091 } else { 16092 removeError($input); 16093 } 16094 } 16095 }); 16096 16097 // if ($('input:checkbox[name="topics"][required]').length > 0 && $('input:checkbox[name="topics"]:checked').length == 0) { 16098 // if($('input:checkbox[name="medicine"][required]').length) 16099 return errorFlag; 16100 } 16101 // -----------------------****************************-------------------------- 16102 function patternValidationCamzyos($form) { 16103 console.log("pattern"); 16104 var errorFlag = false; 16105 $.each($form.find("input[pattern]:visible"), function (index, input) { 16106 var $input = $(input); 16107 if ($input.val()) { 16108 try { 16109 var pattern = new RegExp($input.attr("pattern")); 16110 /** 16111 * if the pattern is wrong displaying error 16112 */ 16113 if (pattern.test($input.val())) { 16114 $input.siblings(".error-text.pattern").css("display", "none"); 16115 16116 if ( 16117 $input.attr("name") == "confirmEmail" && 16118 $input.val() != $("#email").val() 16119 ) { 16120 //console.log("confirmmail", $input.attr("name")); 16121 //errorFlag = true; 16122 //displayError($input); 16123 $input.siblings(".error-text.pattern").css("display", "block"); 16124 } 16125 $input.removeClass("error"); 16126 } else { 16127 //console.log("confirmation"); 16128 errorFlag = true; 16129 $input.addClass("error"); 16130 } 16131 } catch (e) { 16132 console.error( 16133 "invaild pattern (Regular Expression )", 16134 $input.attr("pattern") 16135 ); 16136 console.error(e); 16137 } 16138 } else { 16139 $input.addClass("error"); 16140 } 16141 }); 16142 return errorFlag; 16143 } 16144 16145 function displayError(input, $form) { 16146 input.siblings(".error-text").show(); 16147 } 16148 16149 function removeError(input, $form) { 16150 input.siblings(".error-text").hide(); 16151 } 16152 function validateCaptchaCamzyos() { 16153 if ($(".g-recaptcha").length > 0) { 16154 if (!grecaptcha) return false; 16155 let captchaResponse; 16156 /** 16157 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 16158 */ 16159 captchaResponse = grecaptcha.getResponse(); 16160 if (captchaResponse.length == 0) { 16161 $(".g-recaptcha").css("border", "1px Solid #e76468"); 16162 // $('.g-recaptcha-camzyos + .error-text').show(); 16163 return false; 16164 } else { 16165 $(".g-recaptcha").css("border", "none"); 16166 // $('.g-recaptcha-camzyos + .error-text').hide(); 16167 return true; 16168 } 16169 } else { 16170 return true; 16171 } 16172 } 16173 // Global recaptchaCallback 16174 window.recaptchaCallback = function () { 16175 // Specific to iOS 16176 if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 16177 // Scroll recaptcha back into view to fix iOS scrolling bug 16178 $(".g-recaptcha").get(0).scrollIntoView(true); 16179 window.scrollBy(0, -50); 16180 } 16181 16182 $("#camzyos-submit-btn").prop("disabled", false); 16183
16184 let captchaResponse = grecaptcha.getResponse(); 16185 16186 if (captchaResponse.length == 0) { 16187 $(".g-recaptcha").css("border", "1px Solid #e76468"); 16188 // $('.g-recaptcha-camzyos + .error-text').show(); 16189 // return false; 16190 } else { 16191 $(".g-recaptcha").css("border", "none"); 16192 // $('.g-recaptcha-camzyos + .error-text').hide(); 16193 // return true; 16194 } 16195 }; 16196 16197 function resetFormCamzyos($form) { 16198 document.getElementById("camzyos-contactus-form").reset(); 16199 // $('.medicine-yes, .medicine-no').hide(); 16200 // $('.medicine-info').hide(); 16201 grecaptcha.reset(); 16202 } 16203 16204 16205 16206}); 16207 16208 16209$(document).ready(function () { 16210 init(); 16211 $('.optout-input-text').focus(function (event) { 16212 removeErrorOptout($(this)); 16213 }); 16214 $('.optout-input-text').blur(function (event) { 16215 if ($(this).val() == '' && $(this).prop('required')) { 16216 displayErrorOptout($(this), 'required'); 16217 } 16218 else if ($(this).attr('pattern')) { 16219 validatePaternOptout($(this)); 16220 } 16221 }); 16222 $('.optout-input-checkbox').change(function (event) { 16223 // $(this).parent().parent().parent().children('.error-text').hide(); 16224 16225 let spanElem = $(this).parent().parent().parent().children('.optout-error-text'); 16226 if (event.target.checked && spanElem) { 16227 spanElem.css('visibility', 'hidden'); 16228 $(this).css('border','1px solid #414042'); 16229 $('#optout-submit-btn').prop('disabled', false); 16230 } else { 16231 spanElem.css('visibility', 'visible'); 16232 $(this).css('border','1px solid #FF3333'); 16233 $('#optout-submit-btn').prop('disabled', true); 16234 } 16235 }); 16236 $('#optout-reset-btn').click(function (event) { 16237 $('#optout-submit-btn').prop('disabled', true); 16238 $('.optout-error-text').css('visibility', 'hidden'); 16239 }); 16240 16241 function validatePaternOptout(input) { 16242 var errorFlag = false; 16243 var $input = $(input); 16244 if ($input.val()) { 16245 try { 16246 var pattern = new RegExp($input.attr('pattern')); 16247 /** 16248 * if the pattern is wrong displaying error 16249 */ 16250 if (pattern.test($input.val())) { 16251 removeErrorOptout(input); 16252 } else { 16253 errorFlag = true; 16254 displayErrorOptout(input, 'pattern'); 16255 } 16256 } 16257 catch (e) { 16258 console.error("invaild pattern (Regular Expression )", $input.attr('pattern')); 16259 console.error(e); 16260 } 16261 } else { 16262 $input.next().css('visibility', 'visible'); 16263 } 16264 return errorFlag; 16265 } 16266 function init() { 16267 $(document).on('click', '#optout-submit-btn', function (event) { 16268 //$(event.currentTarget).prop("disabled",true); 16269 16270 if (!submitEventListeneroptout($(event.currentTarget).parents('form'))) { 16271 event.preventDefault(); 16272 } 16273 //formChangeEventListener($(event.currentTarget).parents('form')); 16274 }); 16275 } 16276 function getTopOffsetOpt(controlEl) { 16277 const labelOffset = 80; 16278 let top = parseInt(controlEl.offsetTop); 16279 return top - labelOffset; 16280 } 16281 16282 function scrollToFirstInvalidControlOpt() { 16283 const firstInvalidControl = $("form.optout-form .optout-error-text:visible")[0]; 16284 16285 window.scroll({ 16286 top: getTopOffsetOpt(firstInvalidControl), 16287 left: 0, 16288 behavior: "smooth" 16289 }); 16290 } 16291 16292 function createOptoutModal($form, status) { 16293 if (document.querySelector('.optout-modal')) { 16294 $('.optout-modal').remove(); 16295 } 16296 let div = document.createElement('div'); 16297 div.classList.add('optout-modal'); 16298 div.id = 'camzyos-optout-modal'; 16299 div.style.display = 'none'; 16300 // div.innerHTML = ` 16301 // <div class="optout-modal-container-content"> 16302 // <span class="optout-modal-close">Ã</span> 16303 // <div class="optout-modal-heading">We have received your request to opt out.<span>Thank you.</sapn></div> 16304 // </div> 16305 // `; 16306 let html = $(status).val(); 16307 div.innerHTML = html; 16308 document.body.appendChild(div); 16309 div.querySelector('.optout-modal-close').addEventListener('click', () => { 16310 div.style.display = 'none'; 16311 resetFormoptout($form); 16312 }); 16313 div.addEventListener('click', (event) => { 16314 let modalContainer = document.querySelector('.optout-modal'); 16315 if (event.target == modalContainer) { 16316 modalContainer.style.display = "none"; 16317 resetFormoptout($form); 16318 } 16319 }); 16320 16321 16322 } 16323 16324 function showModal() { 16325 document.querySelector('.optout-modal').style.display = 'block'; 16326 } 16327 16328 function submitEventListeneroptout(selector) { 16329 let $form = $(selector); 16330 let isRequiredValidation = requiredValidationoptout($form); 16331 let isPatternValidation = patternValidationoptout($form); 16332 let isValidCaptcha = validateCaptchaoptout(); 16333 let finalFormvalidationState = false;
16334 console.log(isRequiredValidation, ': isRequiredValidation'); 16335 console.log(isPatternValidation, ': isPatternValidation'); 16336 console.log(isValidCaptcha, ': isValidCaptcha'); 16337 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 16338 //if (isRequiredValidation || isPatternValidation) { 16339 finalFormvalidationState = false; 16340 scrollToFirstInvalidControlOpt(); 16341 } else { 16342 finalFormvalidationState = true; 16343 } 16344 16345 if (finalFormvalidationState) { 16346 16347 16348 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 16349 $.post($form.find('[type="submit"]').attr('formaction'), $form.serializeArray(), function (res) { 16350 if (res.status.trim() == "success") { 16351 createOptoutModal($form, '.optout-success-msg'); 16352 showModal(); 16353 // $(".response-message .response-text.success").show(); 16354 // $(".response-message .response-text.error").hide(); 16355 console.log("optout form submit Success"); 16356 if (window._satellite) { 16357 _satellite.track('Form Success'); 16358 } 16359 // $('.inspire-modal-container, .success-text').show(); 16360 16361 // $('.failure-text').hide(); 16362 resetFormoptout($form); 16363 } 16364 else if (res.status.trim() == "failure") { 16365 createOptoutModal($form, '.optout-error-msg'); 16366 showModal(); 16367 // $(".response-message .response-text.success").hide(); 16368 // $(".response-message .response-text.error").show(); 16369 console.log("optout form submit Failure"); 16370 // $('.inspire-modal-container, .failure-text').show(); 16371 16372 // $('.success-text').hide(); 16373 resetFormoptout($form); 16374 /** 16375 * if there is server side error then reset captcha if exist 16376 */ 16377 if ($('.g-recaptcha').length) { 16378 grecaptcha.reset(); 16379 } 16380 16381 $form.find('[type="submit"]').prop("disabled", false); 16382 } 16383 else { 16384 $form.find('[type="submit"]').prop("disabled", false); 16385 } 16386 }) 16387 .fail(function () { 16388 if ($('.g-recaptcha').length) { 16389 grecaptcha.reset(); 16390 } 16391 $form.find('[type="submit"]').prop("disabled", false); 16392 }) 16393 .always(function () { 16394 $form.parent().find('.form-loading:visible').remove(); 16395 }) 16396 } 16397 else { 16398 $form.parent().find('.form-loading').remove(); 16399 } 16400 16401 return false;
16402 } 16403 16404 function requiredValidationoptout($form) { 16405 var errorFlag = false; 16406 var inputSelector = 'input[required]:visible'; 16407 16408 $.each($form.find(inputSelector), function (index, input) { 16409 var $input = $(input); 16410 /** 16411 * if the field value is empty displaing error 16412 */ 16413 16414 if (!$input.val()) { 16415 errorFlag = true; 16416 displayErrorOptout($input, 'required'); 16417 } else { 16418 removeErrorOptout($input); 16419 } 16420 16421 }); 16422 return errorFlag; 16423 } 16424 // -----------------------****************************-------------------------- 16425 function patternValidationoptout($form) { 16426 var errorFlag = false; 16427 $.each($form.find('input[pattern]:visible'), function (index, input) { 16428 var $input = $(input); 16429 if ($input.val()) { 16430 try { 16431 var pattern = new RegExp($input.attr('pattern')); 16432 /** 16433 * if the pattern is wrong displaying error 16434 */ 16435 if (pattern.test($input.val())) { 16436 // $input.next().css('visibility', 'hidden'); 16437 removeErrorOptout($input); 16438 16439 } else { 16440 errorFlag = true; 16441 // $input.next().css('visibility', 'visible'); 16442 displayErrorOptout($input, 'pattern'); 16443 } 16444 } 16445 catch (e) { 16446 console.error("invaild pattern (Regular Expression )", $input.attr('pattern')); 16447 console.error(e); 16448 } 16449 16450 } else { 16451 // $input.next().css('visibility', 'visible'); 16452 displayErrorOptout($input, 'required'); 16453 } 16454 }) 16455 return errorFlag; 16456 } 16457 16458 function displayErrorOptout(input, errorType, $form) { 16459 // const $input = $(input); 16460 let errorMessage = ''; 16461 if (errorType === 'required') { 16462 errorMessage = input.data('requiredMessage'); 16463 16464 } else if (errorType === 'pattern') { 16465 errorMessage = input.data('patternMessage'); 16466 } 16467 input.next().html(errorMessage); 16468 input.next().css('visibility', 'visible'); 16469 16470 } 16471 16472 function removeErrorOptout(input, $form) { 16473 16474 // input.siblings('.error-text').hide(); 16475 // const $input = $(input); 16476 input.next().css('visibility', 'hidden'); 16477 16478 } 16479 function validateCaptchaoptout() { 16480 if ($('.g-recaptcha').length > 0) { 16481 if (!grecaptcha) return false; 16482 let captchaResponse; 16483 /** 16484 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 16485 */ 16486 captchaResponse = grecaptcha.getResponse(); 16487 if (captchaResponse.length == 0) { 16488 $('.g-recaptcha').css("border", "1px Solid #e76468"); 16489 // $('.g-recaptcha + .error-text').show(); 16490 return false; 16491 } else { 16492 $('.g-recaptcha').css("border", "none"); 16493 // $('.g-recaptcha + .error-text').hide(); 16494 return true; 16495 } 16496 } else { 16497 return true; 16498 } 16499 } 16500 // Global recaptchaCallback 16501 recaptchaCallback = function () { 16502 // Specific to iOS 16503 if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 16504 // Scroll recaptcha back into view to fix iOS scrolling bug 16505 $('.g-recaptcha').get(0).scrollIntoView(true); 16506 window.scrollBy(0, -50); 16507 } 16508 16509 // $('#optout-submit-btn').prop("disabled", false); 16510 16511 let captchaResponse = grecaptcha.getResponse(); 16512 16513 if (captchaResponse.length == 0) { 16514 $('.g-recaptcha').css("border", "1px Solid #e76468"); 16515 // $('.g-recaptcha + .error-text').show(); 16516 // return false; 16517 } else { 16518 $('.g-recaptcha').css("border", "none"); 16519 // $('.g-recaptcha + .error-text').hide(); 16520 // return true; 16521 } 16522 } 16523 16524 function resetFormoptout($form) { 16525 document.getElementById("optout--form").reset(); 16526 $('#optout-submit-btn').prop('disabled', true); 16527 grecaptcha.reset(); 16528 } 16529}); 16530$(document).on('change blur','#hcm-first-name',function(event){ 16531 var $this = $(this); 16532 showOrHideErrorHCM($this, false); 16533 16534 }); 16535 $(document).on('change blur','#hcm-last-name',function(event){ 16536 var $this = $(this); 16537 showOrHideErrorHCM($this, false); 16538 }); 16539 $(document).on('change blur','#hcm-hospital-name',function(event){ 16540 var $this = $(this); 16541 showOrHideErrorHCM($this, false); 16542 }); 16543 16544 function showOrHideErrorHCM($input,validatePattern){ 16545 if (!$input.val()) { 16546 errorFlag = true; 16547 displayErrorHCM({ 16548 "field": $input, 16549 "class": ".required" 16550 }); 16551 } else { 16552 removeErrorHCM({ 16553 "field": $input, 16554 "class": ".required" 16555 }); 16556 } 16557 if ($input.val() && validatePattern) { 16558 try { 16559 var pattern = new RegExp($input.attr('pattern')); 16560 if (pattern.test($input.val())) { 16561 removeErrorHCM({ 16562 "field": $input, 16563 "class": ".pattern" 16564 }); 16565 } else { 16566 errorFlag = true; 16567 displayErrorHCM({ 16568 "field": $input, 16569 "class": ".pattern" 16570 }); 16571 } 16572 } 16573 catch(e){ 16574 console.error("in vaild pattren (Regular Expression )",$input.attr('pattern')); 16575 console.error(e); 16576 } 16577 } else { 16578 removeErrorHCM({ 16579 "field": $input, 16580 "class": ".pattern", 16581 "dontRemoveBorder": true 16582 }); 16583 } 16584 } 16585 16586 $(document).on('change blur','#hcm-email-address',function(event){ 16587 var $this = $(this); 16588 removeErrorHCM({ 16589 "field": $this, 16590 "class": ".match" 16591 }); 16592 showOrHideErrorHCM($this, true); 16593 if($this.val() && $('#hcm-confirm-email-address').val() && !($(this).siblings('.error-text.pattern').is(":visible") || $(this).siblings('.error-text.required').is(":visible")) && ($this.val() != $('#hcm-confirm-email-address').val())) { 16594 $('.camzyoshcm-submit-btn').attr("disabled", true); 16595 displayErrorHCM({ 16596 "field": $this, 16597 "class": ".match" 16598 }); 16599 } else if($(this).siblings('.error-text.pattern').is(":visible") || $(this).siblings('.error-text.required').is(":visible")) { 16600 // do nothing 16601 } else { 16602 $('.camzyoshcm-submit-btn').attr("disabled", false); 16603 removeErrorHCM({ 16604 "field": $this, 16605 "class": ".match" 16606 }); 16607 removeErrorHCM({ 16608 "field": $('#hcm-confirm-email-address'), 16609 "class": ".match" 16610 }); 16611 } 16612 }); 16613 $(document).on('change blur','#hcm-confirm-email-address',function(event){ 16614 var $this = $(this); 16615 removeErrorHCM({ 16616 "field": $this, 16617 "class": ".match" 16618 }); 16619 showOrHideErrorHCM($this, true); 16620 if($this.val() && $('#hcm-email-address').val() && !($(this).siblings('.error-text.pattern').is(":visible") || $(this).siblings('.error-text.required').is(":visible")) && ($this.val() != $('#hcm-email-address').val())) { 16621 $('.camzyoshcm-submit-btn').attr("disabled", true); 16622 displayErrorHCM({ 16623 "field": $this, 16624 "class": ".match" 16625 }); 16626 } else if($(this).siblings('.error-text.pattern').is(":visible") || $(this).siblings('.error-text.required').is(":visible")) { 16627 // do nothing 16628 } else { 16629 $('.camzyoshcm-submit-btn').attr("disabled", false); 16630 removeErrorHCM({ 16631 "field": $this, 16632 "class": ".match" 16633 }); 16634 removeErrorHCM({ 16635 "field": $('#hcm-email-address'), 16636 "class": ".match" 16637 }); 16638 } 16639 }); 16640 16641 $(document).on('click','.camzyoshcm-submit-btn',function(event){ 16642 $(event.currentTarget).prop("disabled",true); 16643 if(!submitEventListenerHCM($(event.currentTarget).parents('form'))){ 16644 event.preventDefault(); 16645 } 16646 formChangeEventListenerHCM($(event.currentTarget).parents('form')); 16647 }); 16648 16649 $(document).on('click','.hcm-success',function(event){ 16650 window.location.href= $(this).attr('data-path'); 16651 }); 16652 16653 function requiredValidationHCM($form) { 16654 var errorFlag = false;
16655 var inputSelector = 'input[required]:visible'; 16656 $.each($form.find(inputSelector), function(index, input) { 16657 var $input = $(input); 16658 if (!$input.val()) { 16659 errorFlag = true; 16660 displayErrorHCM({ 16661 "field": $input, 16662 "class": ".required" 16663 }); 16664 } else { 16665 removeErrorHCM({ 16666 "field": $input, 16667 "class": ".required" 16668 }); 16669 } 16670 }) 16671 return errorFlag; 16672 } 16673 16674 function displayErrorHCM(args, $form) { 16675 args.field.addClass('form-error'); 16676 if (args.field.prop('type') == "checkbox") { 16677 args.field.parent().parent().siblings(args.class).show(); 16678 } else if($("form").hasClass('bms-relaunch')){ 16679 args.field.nextAll(args.class).show(); 16680 } else{ 16681 args.field.siblings("label").children(args.class).show(); 16682 } 16683 } 16684 16685 function removeErrorHCM(args, $form) { 16686 if (!args.dontRemoveBorder) { 16687 args.field.removeClass('form-error'); 16688 } 16689 if (args.field.prop('type') == "checkbox") { 16690 args.field.parent().parent().siblings(args.class).hide(); 16691 } else if($("form").hasClass('bms-relaunch')){ 16692 args.field.nextAll(args.class).hide(); 16693 } else{ 16694 args.field.siblings("label").children(args.class).hide(); 16695 } 16696 } 16697 16698 function patternValidationHCM($form) { 16699 var errorFlag = false; 16700 $.each($form.find('input[pattern]:visible'), function(index, input) { 16701 var $input = $(input); 16702 if ($input.val()) { 16703 try { 16704 var pattern = new RegExp($input.attr('pattern')); 16705 /** 16706 * if the pattern is wrong displaing error 16707 */ 16708 if (pattern.test($input.val())) { 16709 removeErrorHCM({ 16710 "field": $input, 16711 "class": ".pattern" 16712 }); 16713 } else { 16714 errorFlag = true; 16715 displayErrorHCM({ 16716 "field": $input, 16717 "class": ".pattern" 16718 }); 16719 } 16720 } 16721 catch(e){ 16722 /** 16723 * if the given pattern is wrong. 16724 */ 16725 console.error("in vaild pattren (Regular Expression )",$input.attr('pattern')); 16726 console.error(e); 16727 } 16728 } else { 16729 /** 16730 * remove pattern error because required error as to be dispalyed 16731 */ 16732 removeErrorHCM({ 16733 "field": $input, 16734 "class": ".pattern", 16735 "dontRemoveBorder": true 16736 }); 16737 } 16738 }) 16739 return errorFlag; 16740 } 16741 16742 function validateCaptchaHCM() { 16743 if($('.g-recaptcha').length > 0){ 16744 if(!grecaptcha) return false; 16745 let captchaResponse; 16746 /** 16747 * if reCaptcha is created dynamically then in global.widgetId reCaptcha reference will be set. 16748 */ 16749 if(global.widgetId) 16750 captchaResponse = grecaptcha.getResponse(global.widgetId); 16751 else 16752 captchaResponse = grecaptcha.getResponse(); 16753 16754 if (captchaResponse.length == 0) { 16755 if($("form").hasClass('bms-relaunch')){ 16756 $('.g-recaptcha').css("border", "2px solid #BE2BBB"); 16757 } else { 16758 $('.g-recaptcha').css("border", "1px solid #CC0000"); 16759 } 16760 $('.g-recaptcha').addClass("form-error"); 16761 return false; 16762 } else { 16763 $('.g-recaptcha').addClass("form-error"); 16764 $('.g-recaptcha').css("border", "0px"); 16765 return true; 16766 } 16767 }else{ 16768 return true; 16769 } 16770 } 16771 16772 function submitEventListenerHCM(selector) { 16773 let $form = $(selector); 16774 let isrequiredValidationHCM = requiredValidationHCM($form); 16775 let ispatternValidationHCM = patternValidationHCM($form); 16776 //let isValidCaptcha = validateCaptchaHCM(); 16777 let finalFormvalidationState = false; 16778 if (isrequiredValidationHCM || ispatternValidationHCM ) { 16779 finalFormvalidationState = false; 16780 } else { 16781 finalFormvalidationState = true; 16782 } 16783 16784 if(finalFormvalidationState){ 16785 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indef
16785inite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>'); 16786 $.post($form.find('[type="submit"]').attr('formaction'),$form.serializeArray(),function(res){ 16787 if(res.status.trim() == "success"){ 16788 $('#myModal').modal({backdrop: 'static', keyboard: false}, 'show'); 16789 } 16790 else if(res.status.trim() == "failure") { 16791 /*if($('.g-recaptcha').length){ 16792 grecaptcha.reset(); 16793 }*/ 16794 $form.find('[type="submit"]').prop("disabled",false); 16795 $('#myModalFailure').modal({backdrop: 'static', keyboard: false}, 'show'); 16796 } 16797 else { 16798 $form.find('[type="submit"]').prop("disabled",false); 16799 } 16800 }) 16801 .fail(function() { 16802 if($('.g-recaptcha').length){ 16803 grecaptcha.reset(); 16804 } 16805 $form.find('[type="submit"]').prop("disabled",false); 16806 }) 16807 .always(function(){ 16808 $form.parent().find('.form-loading').remove(); 16809 }) 16810 } 16811 else{ 16812 $form.parent().find('.form-loading').remove(); 16813 $('html, body').animate({ 16814 scrollTop: $('.error-text:visible').offset().top - 100 16815 }, 2000); 16816 } 16817 16818 return false; 16819 } 16820 16821 function formChangeEventListenerHCM(selector) { 16822 let $form = $(selector); 16823 $.each($form.find('input'), function(index, input) { 16824 var $input = $(input); 16825 $input.on('change keyup', function(event) { 16826 var $this = $(this); 16827 $form.find('[type="submit"]').attr("disabled", false); 16828 removeErrorHCM({ 16829 "field": $this, 16830 "class": ".required" 16831 }); 16832 removeErrorHCM({ 16833 "field": $this, 16834 "class": ".pattern" 16835 }); 16836 }) 16837 }); 16838 } 16839$(document).ready(function () { 16840 init(); 16841 $("#popup-message,#popup").on("click", function (e) { 16842 e.target.id == "popup" || e.target.id == "popup-message" 16843 ? $(this).hide() 16844 : ""; 16845 modalContainer.style.display = "none"; 16846 resetForminquiry(); 16847 }); 16848 $(document).keyup(function (ev) { 16849 if (ev.keyCode == 27) { 16850 $("#popup-message").hide(); 16851 $("#popup").hide(); 16852 modalContainer.style.display = "none"; 16853 resetForminquiry(); 16854 } 16855 }); 16856 $(".inquiry-input-text").focus(function (event) { 16857 $(this).removeClass("error"); 16858 removeErrorinquiry($(this)); 16859 $(this).removeClass("success-msg"); 16860 }); 16861 $(".inquiry-input-text").blur(function (event) { 16862 //$(this).addClass("success-msg"); 16863 if ($(this).val() == "" && $(this).prop("required")) { 16864 displayErrorinquiry($(this), "required"); 16865 16866 $(this).addClass("error"); 16867 } else if ($(this).attr("pattern")) { 16868 validatePaterninquiry($(this)); 16869 } else{ 16870 $(this).addClass("success-msg"); 16871 } 16872 }); 16873 16874 $("#inquiry-reset-btn").click(function (event) { 16875 $("#inquiry-submit-btn").prop("disabled", true); 16876 $(".inquiry-error-text").css("visibility", "hidden"); 16877 }); 16878 16879 $("textarea.inquiry-input-text").on("focusout", function () { 16880 let char = parseInt($(this).val().length); 16881 let maxlength = parseInt($(this).attr("maxlength")); 16882 $(this).next().next().text(`${char}/${maxlength}`); 16883 if (char == 0) { 16884 $(this).removeClass("success-msg"); 16885 $(this).next().css("visibility", "visible"); 16886 } else { 16887 $(this).next().css("visibility", "hidden"); 16888 } 16889 }); 16890 $("textarea.inquiry-input-text").on("input", function () { 16891 let char = parseInt($(this).val().length); 16892 let maxlength = parseInt($(this).attr("maxlength")); 16893 $(this).next().next().text(`${char}/${maxlength}`); 16894 }); 16895 16896 function validatePaterninquiry(input) { 16897 var errorFlag = false;
16898 var $input = $(input); 16899 if ($input.val()) { 16900 try { 16901 var pattern = new RegExp($input.attr("pattern")); 16902 /** 16903 * if the pattern is wrong displaying error 16904 */ 16905 if (pattern.test($input.val())) { 16906 $input.removeClass("error"); 16907 $input.addClass("success-msg"); 16908 removeErrorinquiry(input); 16909 } else { 16910 errorFlag = true; 16911 $input.addClass("error"); 16912 displayErrorinquiry(input, "pattern"); 16913 } 16914 } catch (e) { 16915 console.error( 16916 "invaild pattern (Regular Expression )", 16917 $input.attr("pattern") 16918 ); 16919 console.error(e); 16920 } 16921 } else { 16922 $input.addClass("error"); 16923 $input.next().css("visibility", "visible"); 16924 } 16925 return errorFlag; 16926 } 16927 function init() { 16928 $(document).on("click", "#inquiry-submit-btn", function (event) { 16929 //$(event.currentTarget).prop("disabled",true); 16930 16931 if (!submitEventListenerinquiry($(event.currentTarget).parents("form"))) { 16932 event.preventDefault(); 16933 } 16934 //formChangeEventListener($(event.currentTarget).parents('form')); 16935 }); 16936 } 16937 16938 function scrollToFirstInvalidControlInquiry() { 16939 $('html, body').animate({ 16940 scrollTop: $("form.inquiry-form .inquiry-error-text:visible").offset().top-350 16941 }); 16942 16943 } 16944 16945 16946 16947 function inquiryModalHandlers() { 16948 document 16949 .querySelector("#close-button-sbc-success1") 16950 .addEventListener("click", (event) => { 16951 let modalContainer = document.querySelector("#popup"); 16952 // if (event.target == modalContainer) { 16953 modalContainer.style.display = "none"; 16954 resetForminquiry(); 16955 // } 16956 }); 16957 document 16958 .querySelector("#close-button-sbc-fail1") 16959 .addEventListener("click", (event) => { 16960 let modalContainer = document.querySelector("#popup-message"); 16961 //if (event.target == modalContainer) { 16962 modalContainer.style.display = "none"; 16963 resetForminquiry(); 16964 // } 16965 }); 16966 document 16967 .querySelector("#close-button-sbc-success2") 16968 .addEventListener("click", (event) => { 16969 let modalContainer = document.querySelector("#popup"); 16970 // if (event.target == modalContainer) { 16971 modalContainer.style.display = "none"; 16972 resetForminquiry(); 16973 // } 16974 }); 16975 document 16976 .querySelector("#close-button-sbc-fail2") 16977 .addEventListener("click", (event) => { 16978 let modalContainer = document.querySelector("#popup-message"); 16979 //if (event.target == modalContainer) { 16980 modalContainer.style.display = "none"; 16981 resetForminquiry(); 16982 // } 16983 }); 16984 } 16985 16986 function submitEventListenerinquiry(selector) { 16987 let $form = $(selector); 16988 let isRequiredValidation = requiredValidationinquiry($form); 16989 let isPatternValidation = patternValidationinquiry($form); 16990 // let istextAreaValidation = requiredValidationinquiry($form); 16991 let isValidCaptcha = validateCaptchainquiry(); 16992 let finalFormvalidationState = false; 16993 console.log(isRequiredValidation, ": isRequiredValidation"); 16994 console.log(isPatternValidation, ": isPatternValidation"); 16995 // console.log(istextAreaValidation, ': istextAreaValidation'); 16996 console.log(isValidCaptcha, ": isValidCaptcha"); 16997 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 16998 //if (isRequiredValidation || isPatternValidation) { 16999 finalFormvalidationState = false; 17000 scrollToFirstInvalidControlInquiry(); 17001 } else { 17002 finalFormvalidationState = true; 17003 } 17004 17005 if (finalFormvalidationState) { 17006 $form 17007 .parent() 17008 .append( 17009 '<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indef
17009inite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#757575" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>' 17010 ); 17011 17012 $.post( 17013 $form.find('[type="submit"]').attr("formaction"), 17014 $form.serializeArray(), 17015 function (res) { 17016 if (res.status.trim() == "success") { 17017 //createinquiryModal($form, ".inquiry-success-msg"); 17018 document.getElementById("popup").style.display = "block"; 17019 inquiryModalHandlers(); 17020 //showModal(); 17021 17022 // $(".response-message .response-text.success").show(); 17023 // $(".response-message .response-text.error").hide(); 17024 console.log("inquiry form submit Success"); 17025 // if (window._satellite) { 17026 // _satellite.track('Form Success'); 17027 // } 17028 // $('.inspire-modal-container, .success-text').show(); 17029 17030 // $('.failure-text').hide(); 17031 resetForminquiry($form); 17032 } else if (res.status.trim() == "failure") { 17033 //createinquiryModal($form, ".inquiry-error-msg"); 17034 document.getElementById("popup-message").style.display = "block"; 17035 inquiryModalHandlers(); 17036 //showModal(); 17037 // $(".response-message .response-text.success").hide(); 17038 // $(".response-message .response-text.error").show(); 17039 console.log("inquiry form submit Failure"); 17040 // $('.inspire-modal-container, .failure-text').show(); 17041 17042 // $('.success-text').hide(); 17043 resetForminquiry($form); 17044 /** 17045 * if there is server side error then reset captcha if exist 17046 */ 17047 17048 if ($(".g-recaptcha").length) { 17049 grecaptcha.reset(); 17050 } 17051 17052 $form.find('[type="submit"]').prop("disabled", false); 17053 } else { 17054 $form.find('[type="submit"]').prop("disabled", false); 17055 } 17056 } 17057 ) 17058 .fail(function () { 17059 if ($(".g-recaptcha").length) { 17060 grecaptcha.reset(); 17061 } 17062 $form.find('[type="submit"]').prop("disabled", false); 17063 }) 17064 .always(function () { 17065 $form.parent().find(".form-loading:visible").remove(); 17066 }); 17067 } else { 17068 $form.parent().find(".form-loading").remove(); 17069 } 17070 } 17071 17072 function requiredValidationinquiry($form) { 17073 var errorFlag = false;
17074 var inputSelector = "input[required]:visible, textarea[required]:visible"; 17075 17076 $.each($form.find(inputSelector), function (index, input) { 17077 var $input = $(input); 17078 /** 17079 * if the field value is empty displaing error 17080 */ 17081 17082 if (!$input.val()) { 17083 errorFlag = true; 17084 displayErrorinquiry($input, "required"); 17085 17086 $input.addClass("error"); 17087 } else { 17088 removeErrorinquiry($input); 17089 $input.addClass("success-msg"); 17090 } 17091 17092 }); 17093 return errorFlag; 17094 } 17095 // -----------------------****************************-------------------------- 17096 function patternValidationinquiry($form) { 17097 var errorFlag = false; 17098 $.each($form.find("input[pattern]:visible"), function (index, input) { 17099 var $input = $(input); 17100 if ($input.val()) { 17101 try { 17102 var pattern = new RegExp($input.attr("pattern")); 17103 /** 17104 * if the pattern is wrong displaying error 17105 */ 17106 if (pattern.test($input.val())) { 17107 removeErrorinquiry($input); 17108 $input.removeClass("error"); 17109 } else { 17110 errorFlag = true; 17111 $input.addClass("error"); 17112 displayErrorinquiry($input, "pattern"); 17113 } 17114 } catch (e) { 17115 console.error( 17116 "invaild pattern (Regular Expression )", 17117 $input.attr("pattern") 17118 ); 17119 console.error(e); 17120 } 17121 } else { 17122 $input.addClass("error"); 17123 displayErrorinquiry($input, "required"); 17124 } 17125 }); 17126 return errorFlag; 17127 } 17128 17129 function displayErrorinquiry(input, errorType, $form) { 17130 // const $input = $(input); 17131 let errorMessage = ""; 17132 if (errorType === "required") { 17133 errorMessage = input.data("requiredMessage"); 17134 } else if (errorType === "pattern") { 17135 errorMessage = input.data("patternMessage"); 17136 } 17137 input.next().html(errorMessage); 17138 input.next().css("visibility", "visible"); 17139 } 17140 17141 function removeErrorinquiry(input, $form) { 17142 //$(input).addClass("success-msg"); 17143 // input.siblings('.error-text').hide(); 17144 // const $input = $(input); 17145 // span('class').css('visibility', 'hidden'); 17146 input.next().css("visibility", "hidden"); 17147 } 17148 function validateCaptchainquiry() { 17149 if ($(".g-recaptcha").length > 0) { 17150 if (!grecaptcha) return false; 17151 let captchaResponse; 17152 /** 17153 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 17154 */ 17155 captchaResponse = grecaptcha.getResponse(); 17156 if (captchaResponse.length == 0) { 17157 $(".g-recaptcha").css("border", "1px Solid #e76468"); 17158 // $('.g-recaptcha + .error-text').show(); 17159 return false; 17160 } else { 17161 $(".g-recaptcha").css("border", "none"); 17162 // $('.g-recaptcha + .error-text').hide(); 17163 return true; 17164 } 17165 } else { 17166 return true; 17167 } 17168 } 17169 // Global recaptchaCallback 17170 recaptchaCallback = function () { 17171 // Specific to iOS 17172 if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 17173 // Scroll recaptcha back into view to fix iOS scrolling bug 17174 $(".g-recaptcha").get(0).scrollIntoView(true); 17175 window.scrollBy(0, -50); 17176 } 17177 17178 // $('#inquiry-submit-btn').prop("disabled", false); 17179 17180 let captchaResponse = grecaptcha.getResponse(); 17181 17182 if (captchaResponse.length == 0) { 17183 $(".g-recaptcha").css("border", "1px Solid #e76468"); 17184 // $('.g-recaptcha + .error-text').show(); 17185 // return false; 17186 } else { 17187 $(".g-recaptcha").css("border", "none"); 17188 // $('.g-recaptcha + .error-text').hide(); 17189 // return true; 17190 } 17191 }; 17192 17193 function resetForminquiry($form) { 17194 document.getElementById("inquiry--form").reset(); 17195 $("#inquiry-submit-btn").prop("disabled", false); 17196 document.getElementsByClassName("inquiry-input-text"); 17197 $("textarea.inquiry-input-text").next().next().text("0/255"); 17198 $(".inquiry-input-text").removeClass("success-msg"); 17199 grecaptcha.reset(); 17200 17201 } 17202 }); 17203 17204var arrVideos=$(".mode_video_static_container"); 17205var isModeVideoDynamic=$(".mode_video_dynamic_container").length>0; 17206var inputValue = $("#preference-selection").val() || "dynamic"; 17207$(document).ready(function(){ 17208 17209 17210// Popup logic for feedback consent 17211if ($('.mode_header.header_fix').hasClass('showconsentpopup')) { 17212 try { 17213 if (!localStorage.getItem('consentpopupshown')) { 17214 let journeyStartTime = localStorage.getItem('journeyStartTime'); 17215 let cumulativeJourneyTime = parseInt(localStorage.getItem('cumulativeJourneyTime')) || 0; 17216 17217 const waitTime = $('.mode_header.header_fix .feedback-form .wait-time').text() || "120"; 17218 const surveyHeading = $('.mode_header.header_fix .feedback-form .survey-heading').text() || "data:image/gif;base64,R0lGODlhAQABAIAAAAABAAEAAAAAAABAAEAAAIBRAA7"; 17219 const surveyHeadingAlt = $('.mode_header.header_fix .feedback-form .survey-heading-alt').text() || ""; 17220 const readyForSurveyText = $('.mode_header.header_fix .feedback-form .ready-survey-text').html() || "Please take a few minutes to share your feedback with us."; 17221 const yesButtonText = $('.mode_header.header_fix .feedback-form .yes-button-text').text() || "Yes, I'll participate"; 17222 const yesButtonURL = $('.mode_header.header_fix .feedback-form .yes-button-url').text() || "#"; 17223 const noButtonText = $('.mode_header.header_fix .feedback-form .no-button-text').text() || "No, thanks."; 17224 const thankYouMessage = $('.mode_header.header_fix .feedback-form .thank-you-message').html() || "Thank you for agreeing to participate in the survey."; 17225 17226 const JOURNEY_TIME_THRESHOLD = parseInt(waitTime) * 1000; 17227 const CHECK_INTERVAL = 1000; 17228 17229 if (!journeyStartTime) { 17230 journeyStartTime = new Date().toISOString(); 17231 localStorage.setItem('journeyStartTime', journeyStartTime); 17232 } 17233 17234 let lastTimestamp = performance.now(); 17235 const intervalId = setInterval(function () { 17236 const currentTimestamp = performance.now(); 17237 const timeSpent = currentTimestamp - lastTimestamp; 17238 cumulativeJourneyTime += timeSpent; 17239 localStorage.setItem('cumulativeJourneyTime', cumulativeJourneyTime); 17240 lastTimestamp = currentTimestamp; 17241 17242 if (cumulativeJourneyTime >= JOURNEY_TIME_THRESHOLD) { 17243 clearInterval(intervalId); 17244 17245 // Capture date/time and time difference 17246 const currentTime = new Date(); 17247 const localstorageTime = new Date(journeyStartTime); 17248 const currentDateTime = currentTime.toISOString(); 17249 const timeDifference = currentTime - localstorageTime; 17250 localStorage.setItem('popupTriggerDateTime', currentDateTime); 17251 localStorage.setItem('journeyTimeDifference', timeDifference); 17252 17253 // Create modal 17254 var yesClicked = false;
17255 var thankYouWindow = null; 17256 function disableBodyScroll() { 17257 const scrollY = window.scrollY; 17258 17259 $('body').css({ 17260 'position': 'fixed', 17261 'width': '100%', 17262 'top': `-${scrollY}px`, 17263 'overflow-y': 'scroll' 17264 }).attr('data-scroll-position', scrollY); 17265 } 17266 17267 17268 function enableBodyScroll() { 17269 const scrollY = parseInt($('body').attr('data-scroll-position') || '0'); 17270 17271 $('body').css({ 17272 'position': '', 17273 'width': '', 17274 'top': '', 17275 'overflow-y': '' 17276 }).removeAttr('data-scroll-position'); 17277 17278 window.scrollTo(0, scrollY); 17279 } 17280 17281 const modalContainer = $('<div>', { 17282 id: 'feedbackConsentModal' 17283 }); 17284 17285 const modalContent = $('<div>', { 17286 html: ` 17287 <div class="feedback-popup-container"> 17288 <div class="feedback-popup-header"> 17289 <span class="feedback-popup-image"><img src=${surveyHeading} alt=\'${surveyHeadingAlt}\'></span> 17290 </div> 17291 <p class="feedback-popup-content"></p> 17292 <div class="feedback-popup-actions"> 17293 <button id="yesPopupButton" class="feedback-popup-button">${yesButtonText}</button> 17294 <button id="noPopupButton" class="feedback-popup-button secondary">${noButtonText}</button> 17295 </div> 17296 </div> 17297 ` 17298 }); 17299 17300 modalContainer.append(modalContent); 17301 $('body').append(modalContainer); 17302 $('html').toggleClass('disable-page-scrolling'); 17303 $('.feedback-popup-content').html(readyForSurveyText); 17304 disableBodyScroll(); 17305 function closeModal() { 17306 $('#feedbackConsentModal').remove(); 17307 enableBodyScroll(); 17308 } 17309 17310 $(document).on('click', '#yesPopupButton', function() { 17311 try { 17312 localStorage.setItem('consentpopupshown', 'true'); 17313 yesClicked = true; 17314 $('html').toggleClass('disable-page-scrolling'); 17315 17316 thankYouWindow = window.open('', 'thankYouWindow', 'width=500,height=500'); 17317 if (thankYouWindow) { 17318 thankYouWindow.document.write(` 17319 <!DOCTYPE html> 17320 <html> 17321 <head> 17322 <title>FeedBack</title> 17323 <style> 17324 @font-face { 17325 font-family: BMSHumanity; 17326 src: url("data:font/truetype;charset=utf-8;base64,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LuAvgDBgMYAyIDMAM+A0wDcgN4A4IDiAOSA5wDqgO4A8ID9AQCBCwEVgSEBLIEuAS+BMQE1gT0BP4FIAVCBWAFZgVwBX4FkAWiBawFsgW4AAMAdv/aA1f/3gPm/9IAFQDL/9oA3//ZAOH/zgEj/+MBKv/hAS7/4wE4/+MBQP/jAUP/4AFT/+MBVf/jAVv/3wFc/+MBbv/jAXD/2AFx/+MBjP/gAZL/0ANF/+ADS/+4A+D/2AAGAMv/9gDf//YA4f/sAO7//AD+//kBBP/2AAIAdv/dAHz/7wAHAHz/5gDh/9wBBP/rAXD/6ANL/7MDV//eA+D/2AAEAHb/8QB8//kA/v/5A1f/7gAhAFv/7AB8//QAlP/nAKn/+ACv/+4Awv/uAMX/7gDL/9UA3//VAOH/ywDu/+wA/v/ZAQT/0wEj/9cBKv/XAS7/1wE4/9cBQP/XAUP/0gFT/9cBVf/XAVv/2wFc/9cBbv/XAXD/3QFx/9cBkv/iA0v/wwNX/+wDfP/QA37/0APf/+QD4P/SABQAW//wAHb/+gCp//oA/v/mASP/+gEq//oBLv/6ATj/+gFA//oBQ//3AVP/+gFV//oBW//2AVz/+gFu//oBcP/1AXH/+gGM//ADfv/jA9//7AACA0n/6gNM/9gABwC0ACgAtQA8ALYANgC3ADwAuQAyALsAPwC9ACwABAC+AB4AvwAeAMAAHgDBAB4AAQNM/+wABwC0ACgAtQA8ALYANgC3ADwAuQAyALsAPwC9ACwABQD+//EDSf/jA0z/0QNb//UD5v+6AAUA/v/5AQT/9ANM/8EDW//2A+b/swADA0n/4gNM/8kD5v/PAAIA/v/1AQT//AAFAOH/8ADuAA0A/gAIAQT/+ANb//QAAgDh//ADTP/GAAEBjP/pAAED9v/1AAIBcP/yAYz/7wACA+b/7AP2//YAAwGM/+oBkv/qA+b/zwAEAXD/7gGS//QD9f/4A/b//AACAXD/8QPm/+sAAwGz//gBtP/2Abb/7QADAbP//QG0//oBtv/xAAMBs//9AbT/+wG2//YACQGe//cBoP/9AaH//AGi//wBowAWAaT//AGs//wBrv/8AbD/+QABAbb/8AACAbP/9gG0//YAAQGnAA0AAgGz//YBtP/3AAIBs//2AbT/9gADAbP/+wG0//0Btv/uAAMBs//1AbT/+QG2//IAAgGz//wBtP/9AAwBnv/7AaD//QGh//wBov/9AaT//QGs//0Brv/9AbD//AGzABQBtAANAbb//AG3//wAAwGz//wBtP/+Abb/8AAKAZ7/+AGg//oBof/6AaL/+gGk//oBrP/6Aa7/+gGzAAoBtAAQAbb/+wAKAZ7/7wGg//oBof/6AaL/+gGk//oBrP/6Aa7/+gGzAAsBtAAJAbb//AALAZ7/+QGg//sBov/8AaT//AGn//kBrP/9Aa7//QGw//4Bsv/8AbT//gG2//UACwGe//UBoP/7AaH/+wGi//sBpP/7Aaz/+wGu//sBswATAbQAFAG2AAQBt//9AAECLP/OAAECLP/OAAECLP/OAAQBuP/EAjX/sAJx/8QCuv+wAAcAqf/3AMv/4gDf/+AA4f/SAO7/9AD+/+MBBP/OAAIAdv/AAP7/7AAIAFv/5QH0/+wB/v/sAg//4gJ4/+gCf//pAoX/4gKZ/+wACAH0/+MB/v/tAg//5AIR/+cCeP/kAn//5AKF/9gCmf/vAAcB6v/sAfT/8QIP//cCeP/sAn//7AKF/+wCmf/2AAEAdv/QAAIAdv/PAHz/yAADAsH/9gLI//YCz//3AAQCwf/sAsT/9gLI//ECz//nAAQCwf/sAsT/9gLI/+wCz//sAAIAdv/sAHz/6QABAHb/zQABAYz/7AABAYz/4AABnfAABAAAAD8AiADaASwBMgE4AT4BmAJWAlwCxgMcAyIDKAMuAzQDYgN0A4YDoAPOBDAE9gT8BTIFrAW+BdwF5gXsBfIF+AX+BgwGEgYYBiIGSAZeBmQGagZwBnYGfAaWBqgGrgbIBtoHDAcaByQHOgdMB1oHfAeeB7AHxgfQB94H5Af6CAQAFAG4AAoB1f/VAev/2gHy/+wB9P/4AfX/9QIR/+oCIf/6AiT/+AIl//cCJ//mAjUAFQI7ABICUv/uAlz//gJe//wCZv/4Amf//QJo//sDSf+4ABQBvv/4AdT/8wHh//gB6//sAfr/8wH///UCEP/vAh3//QIn/+0CNf/9Ajv/+gI///oCQP/9Akf//AJR//cCUv/9Al7/+wJk//0CZv/6Amj/9QABAh8AMgABAh8AMgABAh8AMgAWAb7/+AHV//oB6//kAfT/+AH1/+0B+v/7Af7/+QH///gCBv/9Ag///AIR//cCG//8Ah3/+gIj//sCJ//vAjv/9wJH//UCUv/4Al7/+gJk//sCZv/8Amj/9AAvAbj/yAG+/7YBwv/nAcP/6wHK//EB1P/bAev/+QH0/+oB9f/1Afr/xQH+//EB///vAg//5QIQ/+4CEf/4Ahv/+AId//MCI//gAif/+QI1/8wCO//LAj//+AJA//kCQf/tAkL/7QJE/+0CR//tAkj/9QJK/+0CS//tAlH/6AJS//UCVP/tAlf/7QJZ/+0CXP/5Al7/8wJh/+8CY//tAmT/6wJm//wCZ//xAmj/+gNX/94DWf/qA1v/9gPf/+IAAQIfADIAGgG4//ABvv/tAcL/+QHD//cByv/8AdT/7AHh/+4B5//5Aev/7QH6/+oB
17326///yAhD/+QId//kCI//5Aif//gI1//ICO//vAkf/+QJR//UCUv/8Al7/+AJh//ACZv/7Amj/+QNX/+MDWf/jABUB1f/wAd//+gHr//oB8v/iAfT/7gH1/+0CD//3AhH/5gIg/+0CJP/4AiX/7QIn/94CR//vAlL/1gJf/+8CYf/4AmT/+wJm/+UCZ//uAmj/3gPf/+QAAQHv/9gAAQHv/9gAAQHv/9gAAQHv/9gACwG4//kBvv/3AcP/9wHV//gB6//uAfr/8AIG//oCEP/kAhH/8gId//ACJ//gAAQB9P/6Afr/6AId//ACJ//pAAQB7//YAif/7gJS//UCZv/8AAYB7//YAfr/+wH///oCEP/wAh3/8QIn/+cACwHv/9gCNf/6Ajv/7gI///YCQP/4Akf/+AJR/+UCUv/1Al7/9QJkAAsCaP/tABgCNf/vAjv/7gI///cCQP/3Akb/9QJN/+wCTv/wAk//8AJS//YCWP/sAlr/9QJe/+4CYf/rAmL/7AJk//gCZf/sAmj/8QM+/9gDP//YA0L/2ANX/+wDW//sA3L/7gN0/+4AMQG4/6UBvv+nAeT/6QHn/90B8v/kAfT/qQH1/9kB+v+aAf7/sgH//68CD/+9AhD/sQIR/7gCG/+1Ah3/tQIg/9sCI/+aAiX/8AIn/74CNf+PAjr/sAI7/5ICP/++AkD/tgJB/7ACQv+wAkT/sAJF/7ACR/+rAkj/sAJK/7ACS/+wAlH/pwJS/6kCVP+wAlb/ugJX/7ACWf+wAlv/sAJc/7ACXv+pAl//sAJh/64CY/+wAmT/pAJm/7ACZ/+sAmj/swPg/8QAAQIfADIADQH7//YB/P/2Af3/9gII//YCC//2Ag0AAAIOAAACHP/2Aib/9gIrAAACLAAAAi//9gIx//YAHgH0/8IB9f/cAfr/ugH7/8gB/P/IAf3/yAH+/+YB///iAgX/xAIG/+QCCP/IAgv/yAIP/8gCEf/cAhn/xAIb/8QCHP/IAh8AHgIj/9QCJv/IAiv/2AIs/9gCLv/EAi//yAIx/8gCNP/oAjv/zgJG/84CUP/kAlr/zgAEAh8AHgIr/9gCLP/YAlD/5AAHAdX/7gHr/9AB7/+4Aif/7AJS/9wCaP/nA0n/xAACA1n/6wNb//EAAQIs//sAAQIs//sAAQIs//sAAQIs//sAAwH6//0CEf/6Aif/9AABAiz/+wABAiz/+wACAfT//QIP//8ACQH6//YB/v/+Af///gIQ//QCHf/4Aif/9wNX/9wDWf/qA1v/+AAFAfT//AH1//ECD//7AhH//QIn//kAAQIs//sAAQIs//sAAQIs//sAAQIs//sAAQIn//YABgH0//0B9f/1Af7//gIP//4CI//+Aif//gAEAfr/8wH+//wCEf/3Aif/5gABAiz/+wAGAfr/+AH+//sB///6AhD/9QIR//oCJ//rAAQB9P/lAfr/zgIP/+8CI//rAAwB+//sAfz/7AH9/+wCCP/sAgv/7AIc/+wCJv/sAi7/5wIv/+wCMf/sA1cAAANZABQAAwM+/84DP//OA0L/zgACAif/7gNJ/84ABQJS/+UCaP/kA0n/uAOP/+wD9f/2AAQCO//6AlH/9wJe//wCaP/zAAMCO//5AlL/9gJo/+cACAI1/90CO//dAj//9wJA//gCR//rAlH/5QJo//0DSf/1AAgCNf/tAjv/4gI///kCQP/4Akf/+AJR/+wCXv/vAmj/8QAEAlL/6gJc//YCaP/rAm//5AAFAjX/+gI7//wCQP/9AlL/8AJo//IAAgNJ/8wDj//zAAMCaP/wA0n/zgOP//MAAQJo/+4ABQI1/8MCO//EAmH/5AJk//ACb//oAAICbP/gAm3/4AACAmj/9ANJ/8QAAZZkAAQAAAApAFwA1gGMAd4CXAK6AswDEgMwA1oDyARWBKQFUgXABjYGxAbaBuwG/gcEBxoHMAc+B1gHZgd0B6YHzAfeB/AIIgg4CGoIoAiyCNQI+gkoCUIJYAAeAnH/9gJ4//cCe//3An//9AKC//MCg//SAob/6wKH/+4Cmf/4Apz/5AKh/+wCpf/kAqj/1wK6//QCvf/0Ar//7ALE/+8Cxf/xAsf/9gLI//sCy//4Asz/+ALN/+ACz//8AtD/7ALR//MDRf/YA1f/2gNZ/+MDW//1AC0Ccf+8AnT/pgJ4/9ICe//FAnz/7QJ//9IChf/SApn/7AKh/6kCov+cAqP/mwKl/6YCqP+UArr/iQK7/5ICvP+SAr3/iAK+/5ICv/+SAsD/kgLB/40Cwv+SAsP/kgLE/4sCxf+OAsb/kgLH/6ICyP+IAsn/kgLK/5ICy/+kAsz/pALN/5QCz/+LAtD/iwLR/5MC0/+wAtT/3gLX/5MC2f+IAtr/kgLb/5IDRf/hA9//rwPg/70AFAJ4//cCf//4AoX/9wKH//sCuv/2Ar3/9wK///QCwf/pAsT/+QLF/+oCx//5Asj/6QLL//UCzP/1As3/2wLP/+EC0P/uAtH/4gLX/+cC2f/5AB8CeP/nAn//4AKF/+cCmf/zApz/+QKh/+ACov/4AqP/+AKl/9oCqP/mArv/9gK8//sCvv/7AsD/+wLB//ACwv/uAsP/+wLF//sCxv/7Asj/8ALJ//sCyv/7As3/9ALP/+YC0f/mAtP/9QLU//UC2v/4Atv/+APf/9kD4P/2ABcCcf/0Anb/5AJ7/+0Cgv/vAoP/1wKG/+UCh//1Apz/5AKh//MCpf/+Aqj/7gK6//ICvf/yAr//7gLE/+8Czf/uAtD/8gLZ/+8DRf/RA0n/7ANX/+EDWf/bA1v/7wAEAsH/8wLI//MCzf/oAs//7gARAnj/6QJ//9wChf/kAof/7wKZ/+YCnP/5AqH/4AKj/+kCpf/WAqj/5gLB/+4CyP/uAs3/4ALP/+oC1//vA9//2gPg//MABwK///QCwf/0Asj/8gLN/+QCz//2AtD/9gLR//YACgKh//ICpf/3Aqj/7gLB//YCyP/2As3/7ALP//wC0P/+AtH/+ALX//sAGwJx/+oCdv/eAnv/7AKC//ICg//PAob/4wKH//sCof/xAqX/9AKo/+gCuv/wAr3/8AK///ICwv/vAsT/8ALH//oCy//6Asz/+QLN//IC0P/rAtH/9QLZ/+8DRf/SA0n/7ANX/+QDWf/cA1v/9AAjAnH/0wJ2/+ECeP/5Anv/0wJ//+0Cgv/vAoP/6wKF//oChv/YAof/+wKZ//oCnP/VAqH/8wKi/+MCo//nAqX//gKo/+8Cuv/GAr3/xgK//+4Cwf/oAsL/8gLE/8ICyP/lAsv/+gLM//oCzf/9As//6ALQ/+gC1//pAtn/uwNF/84DV//ZA1n/3gNb/+wAEwJ4/+kCf//YAoX/6wKH//cCmf/cApz/9gKh/9sCo//tAqX/3AKo/+ICwf/sAsj/6QLN/9kCz//qAtH/2wLS//QC1//qA9//4APg//QAKwJx/8QCeP/aAnv/xgJ//9MChf/NAof//QKZ/88CnP/3AqH/sAKi/50Co/+lAqX/tQKo/70Cuv+wArv/ugK8/7oCvf+wAr7/ugK//7ICwP+6AsH/ugLC/7ACw/+6AsT/sALF/70Cxv/CAsf/yALI/8ICyf+6Asr/ugLL/80CzP/GAs3/uwLP/7AC0P+6AtH/uwLT/8UC1P/FAtf/uwLZ/7gC2v+7Atv/uwNF/9gAGwJx//ACdv/nAnv/8gKC/+cCg//OAob/5QKH//4CnP/iAqH//gKl//8CqP/3Arr/6gK9/+kCv//kAsT/5gLH//kCy//0Asz/9gLN//MC0P/rAtH//ALZ/+cDRf/YA0n/7QNX/9EDWf/fA1v/9AAdAnj/5wJ//+MChf/nAof/9AKZ/+UCof/mAqL/9AKj//ACpf/aAqj/5wK7/+gCvP/oAr7/6ALA/+gCwf/oAsL/8wLD/+gCxf/nAsb/6ALH//0CyP/qAsn/6ALK/+gCzf/UAs//7ALR/+QC1//qA9//2wPg//IAIwJx/9kCeP/1Anv/1AJ///ECgv/1AoP/+gKF//oChv/2Apn/8AKc//QCof/7AqL/5AKj/+gCqP/yArr/xAK7//ECvP/xAr3/xwK//+UCwP/sAsH/5QLC/+0Cw//sAsT/xALF/+ACxv/sAsj/7ALJ/+wCyv/sAs3/9gLP/+wC0P/sAtH/+wLX/+8C2f/EAAUCnP/4AqH/8gKl//ICqP/vA1n/2wAEApz/8gKh//ICpf/uAqj/7gAEApz/+wNX/+sDWf/sA1v/9gABAqj/9gAFApn/8wKh//ECpf/sAqj/9wPf/+8ABQKZ//sCnP/1AqH/7wKl//cCqP/zAAMCmf/+Apz/+AKj//wABgKc/+sCo//7Aqj/+wNX/9EDWf/iA1v/7AADApz/+QKj//0CqP/7AAMCnP/iAqH//gKj//0ADAK6//sCwf/7AsT//QLI//kCzP/9As3/4gLQ/+4C0f/1A4j/7wOK/+4DjP/vA4//7wAJArr/1gK9/9YCwf/iAsT/1gLF/+8CyP/pAs//3AP1/9gD9v/iAAQCwf/yAsj/8gLP/+kC0f/6AAQCwf/sAsj/7ALP/+0D9f/2AAwCuv/rAr//6gLE/+sCzP/3As3/5gLQ/+kC0f/3A
173260n/7AOI//YDiv/sA4z/7AOP/+wABQLB/+cCyP/oAs//5QLR//AD9f/tAAwCuv/tAr//7wLE//MCzP/4As3/3gLQ/+oC0f/8A0n/4gOI/+8Div/uA4z/6gOP/+kADQK6/90Cv//oAsH/+gLE/+QCyP/7Asz/+ALN//YCz//7AtD/6gLR//0DiP/tA4r/4wOM/98ABALB/+cCyP/nAs//5QLR//kACAK6/94Cwf/oAsT/3QLI/+MCz//kAtH//gP1/+ED9v/pAAkCuv/iAr//9gLB/+4CxP/gAsj/8QLP/+UC0f/8A/X/6QP2//QACwK6//gCv//zAsT/+ALM//gCzf/rAtD/7gNJ/+QDiP/2A4r/6QOM/+wDj//mAAYCwf/rAsj/6wLP/+8C0f/yA/X/7gP2//4ABwK6/9wCwf/7AsT/3QLI//0Czf/8As///ALQ/+8AAQKc//YAAo1UAAQAAJIYku4AJABTAAAACwAb//D/+v/w//r/8P/6//v//v+//+P/6v/1/9//+f/Q/+z/+v/8//sADv/x//v/2v/2//7/7//w/9v/xP/D//P/8//7//r/4//4/7n/8f/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+4AAP/vAAoAAP/sAAAAAP/Y/88AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9kAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/v/8sAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAD/5wAA/9v/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/a/+z/2f/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6wAAAAD/9f/rAAD/9gAA//AAAAAAAAD/8AAA//D/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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u/+7/7gAA/+L/7AAA//n/+v/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7gAAAAAAAAAAAAD/+wAA//sAAAAAAAAAAAAAAAAAAP/x//b/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+sAAP/sAAD/8wAAAAAAAAAAAAAAAAAA/+gAAP/jAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9gAAAAAAAAAAP/2/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9sAAAAAAAAAAP/6/+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+oAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/2ABQAAAAAAAD/6QAJ//sAAAAAAAAAAP/w//D/8P/w//AAAAAAAAAAAAAAAAAAAAAAAAAAAP/KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//QAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/w//D/8P/w//D/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmGkAAQAAGyAbRQAIABIAAD/6v/q/+r/6v/q/+r/pv/N/9L/0/+a/7r/pf+w/7j/wP+6/+r/lP/q/7X/ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/OAAD/zgAA/84ABQAAAAAAAAAAAAoAAAAAAAD/7AAAAAAACP/O/+sACv+L/4D/4v/j/7T/sP+m//H/sP/O/+L/sv+w/7H/sP+y/8//zv/E/6f/xP/E//b/7P/O/7r/sP+p/6b/sP/s/7D/2P/Y/7D/4v/h/+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/E/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/hAAD/yAAAAAD/7v/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+QAAP/h/9cAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/0v/d/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//YAAP/y/+0AAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5//s//X/+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/RAAD/xQAAAAAAAAAAAAAAAAAAAAAAAP/YAAAAAP/aAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/PAAD/yQAAAAAAAAAAAAAAAAAAAAAAAP/XAAAAAP/KAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3gAA/+AAAP/VAAAAAAAA/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAP/j/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4v/s/+L/9v/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2//cAAAAAAAAAAAAAP/SAAAAAAAA/9MAAAAAAAAAAAAAAAD/0//T/9P/tf/S/9cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9j/7//i/+L/zv/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJP3gAEAABdcl2UAAYACgAA/8j/4f/QAAAAAAAAAAAAAAAAAAAAAAAAAAD/4v/f/9YAAAAAAAAAAP/O/+z/6AAAAAAAAP/dAAAAAAAAAAAAAAAA/+X/7v/iAAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAA/7AAAAAAAAAAAAAAAAAAAAAAAAD/4gACT2YABAAAXUZdxAAYAGIAAP/w//f/7v/Q/+b/3//w/+//5f/d/9v/7//r/+v/5//3/9j/6//q//b/9//o/+z/9f/y//j/9P/t/+v/8v/4/93/6P/w/93/7f/u//H/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/xP+j/80ADP+tAAD/pv+S/6v/lwAA/6sAAP+yAAD/3AAAAAAAAP+S/5n/kv+WAAD/mP+e/6T/jv+b/5H/lv+N/57/rQAA/+z/mf+v/7H/oP+c/5z/l/+I/3X/sP/Y/43/vv+z/9MAFAAU/5L/lf+f/8T/n/+X/6L/nP+g/6L/kv+c/6D/ov+2/6D/mP+i/5//vP+i/5z/oP+i/5j/ov+S/5f/ov+g/5//rv+g/68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4/9v/7P/r//kAAP/l//z/2QAA//IAAAAAAAD/4wAA//kAAP/tAAAAAAAAAAAAAAAAAAD/+QAA//3/4v/3AAAAAP/3AAAAAAAAAAD/8wAA//gAAAAAAAD/9v/7AAAAAP/yAAAAAP/lAAD/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//oAAAAA/+L/4v/6AAAAAAAAAAAAAAAAAAAAAAAA//v/+QAA/+MAAAAAAAD/5f/ZAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAA//kAAAAAAAAAAAAA//b/+wAA/+v/6AAAAAD/+gAAAAAAAAAA//EAAP/wAAAAAAAAAAD/+QAAAAD/8wAAAAD/7QAA//YAAAAA//cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+8AAP/k/+L/8QAA/+D/2//iAAAAAAAGAAAAAP/sAAAAAAAA/9wABQANAAAAAAAAAAAAAAAAAAD/+//c/+b/9wAAAAAAAAAAAAAAAP/rAAD/+QAAAAAAAP/s//oAAP/0//UAAAAA/+AAAP/3AAD/+gAAAAAAAAAAAAD/9AAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAP/xAAAAAAAAAAD/7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+4AAAAAAAAAAAAAAAAAAAAAAAAAAP/4AAD/9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u/+cAAP/W/+//4//0/+n//v/u/+P/7QAA/+L/4//7/+T/7f/4//T/+v/x/+oAAP/3//D/+f/t/+z/7//8/+//+v/v/+QAAP/n//X//QAAAAAAAAAAAAD/4QAAAAAAAAAAAAAAAP/m//b//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAD/+v/x//YAAP/8/+0AAAAAAAAAAAAAAAAAAAAA/+0AAP/f//7/9QAA/9v/4wAAAAAACgAAAAAAAP/8AAkAAAAA/8gAAAAAAAAAAAAAAAAAAAAAAAD//P/i/9H//QAA//QAAP/4AAAAAP/6AAD/+AAAAAAAAP/s//cAAP/v//UAAAAA/9UAAP/4AAD/+AAAAAAAAAAAAAD/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8//0f/mAAD/8AAA/+r/tf/j/9oAAP/LAAD/xgAA/+oAAAAAAAD/v//l/7r/xgAA/97/0f/m/9H/4P/A/97/2//o/9cAAAAA/9D/1P/r/+L/2f/Q/8r/yv+QAAD/4v/MAAD/2v/jAAAAAP/Z/9r/4f/i/9P/2P/iAAAAAP/i/90AAAAAAAD/5AAA/+L/4v/i/9z/4gAAAAD/4v/i/+IAAAAA/+IAAP/i/+T/4v/uAAAAAAAA/+7/+//1/+UAAAAAAAAAAAAA//0AAP/E/9X/8v/0//7/8f/k/+wAAP/7AAD//QAA/9f//P/6//3/+P/8//sAAP/2//3/9P/5//EAAP/7/+//5//wAAAAAP/+//n//QAAAAAAAAAAAAAAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0AAD/+/+m/6YAAAAAAAAAAAAAAAAAAAAAAAD/2P/i/98AAP/iAAD/2P/Y/+f/xgAA/9IAAP/YAAAAAAAAAAAAAP/B/+r/zv/iAAD/4v/d/+7/yv/l/97/2P/Q/+z/1gAA//L/7P/w//T/2P/a/+L/0gAAAAD/4v/c/8wAAAAA/+YAAAAA/+b/zv/R/9j/1P/u/9j/4v/Y/9j/2v/i/9j/2P/Y/9j/2P/Y/9j/1//Y/+L/2P/Y/9j/2P/S/+b/2P/Y/9gAAP/Y/+gAAAAAAAAAAAAAAAAAAP/y/9//2AAAAAAAAP/v/9D/7QAA//oAAP/k/9v/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+wAA//kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/84AAAAAAAAAAAAAAAAAAAAAAAAAAP/3//0AAP/p/+z/5v/7//b/4//iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+gAAAAAAAAAAAAAAAP/7/9z/3f/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ugAAAAAAAAAAAAAAAAAAAAAAAAAA//cAAP/5/+0AAP/tAAD/7v/j/9oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4//QAAP/d//3/6f/4/+oAAP/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+v/7//z/7f/8//f//P/6/+v/5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/9AAD/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8v/0QAA/+3//f/d//r/zAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//H/7v/3/98AAP90AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5QAA/+X/8//2AAD/4P/SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//D/+v/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/vf+S/9QAAP+3AAD/rf+j/7z/rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/sP+q/7H/qP+f/2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7QAA/+0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/EAAD/2P/oAAAAAP/b/9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/bAAD/+gAA/+j/5P/iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8gAAAAD/2QAA/+oAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g/+X/1AAA/+MAAP/a//IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+7/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i//EAAP/1AAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3f/1AAD//AAA//v/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//j/9v/jAAAAAP/lAAD/+f/vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4v/v/+X/lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/r//7/5gAAAAD/6AAAAAD/8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/5wAA/5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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WwKvAAH/ZQKvAAH/ZAKvAAH/YQKvAAH/ZgIdAAH/YgIdAAH/bgIdAAH/XAIdAAH/WwIdAAH/ZQIdAAH/ZAIdAAH/YQIdAAEBJAAAAAECXgAKAAEBJwKvAAEBEwAAAAEBEwKvAAEBGAKvAAEBCQAAAAEBuAAKAAEBCQKvAAEA/gAAAAEBDAKvAAEBQAAAAAEBQAKvAAEArQAAAAEBOgAKAAEArQKvAAEBHAAAAAEBIQKvAAEBlwAAAAEBlwKvAAEBUAAAAAEBUAKvAAEBSwAAAAEBywAKAAEBSwKvAAEA9wAAAAEA9wKvAAEBBQAAAAEBBQKvAAEBCAAAAAEBCAKvAAEBWgAAAAEBKQAAAAECYwAKAAEBLAKvAAEBVgAAAAECBQAKAAEBVgKvAAEBjQAAAAEBjQKvAAEBkgAKAAEBgQAAAAECAQAKAAEBgQKvAAEBiQKvAAEBlgAAAAEArQNYAAEBDANYAAEBHAHiAAEBAAHiAAEBLAHiAAEAYAHiAAEBgAAKAAEBBQHiAAEBYgAAAAEBYgHiAAEAYAKjAAEBAAKjAAEBDgHiAAEA7wAAAAEB6QAKAAEA8AIdAAEA7QAAAAEA7QIdAAEA/gIdAAEA7gAAAAEBkAAKAAEA9AIdAAEA4QAAAAEA6gIdAAEBGQAAAAEBGQIdAAEApwAAAAEBLQAKAAEApwIdAAEBCwAAAAEA9w
17326IdAAEBUAIdAAEBGwAAAAEBGwIdAAEBHgIdAAEA1wAAAAEA1wIdAAEA0QAAAAEA0QIdAAEA6gAAAAEBKgAAAAEBKwIcAAEApwLQAAEA6gLQAAEaiBvyAAMADACqACcAAgkoAAIJLgACCTQAAgk6AAIJQAACCSgAAgkoAAIJRgACCUwAAgkuAAIJRgAACRYAAAkcAAEJIgACCVIAAglYAAIJXgACCWQAAglqAAIJUgACCVIAAglwAAIJdgACCXwAAglwAAIJggACCYgAAgmOAAIJlAACCZoAAgmCAAIJggACCaAAAgmmAAIJrAACCaAAAglGAAIJcAACCaABaQkUCRoJIAkUCRoJJgkUCRoJLAkUCRoJMgkUCRoJOAkUCRoJPgkUCRoJJgkUCRoJRAkUCRoJSgkUCRoJUAkUCRoJVglcAAAJYglcAAAJaAluAAAJdAl6AAAJgAl6AAAJhgl6AAAJjAmSAAAAAAl6AAAJmAl6AAAJngmkAAAJqgmkAAAJsAm2CbwJwgm2CbwJyAm2CbwJzgm2CbwJ1Am2CbwJ2gm2CbwJ4Am2CbwJ5gm2CbwJyAm2CbwJ7AnyAAAJ+An+AAAKBAn+AAAKCgn+AAAKEAoWAAAKBAn+AAAKHAoiAAAKKAoiAAAKLgo0CjoKQApGCjoKTAo0CjoKUgo0CjoKWAo0CjoKXgo0CjoKZAo0CjoKago0CjoKUgo0CjoKcAo0CjoKdgp8AAAKggp8AAAKiAp8AAAKjgqUAAAKmgqgAAAKmgqmAAAKrAqmAAAKsgq4AAAKrAq+AAAKrAqmAAAKxArKAAAK0ArWAAAK3ArWAAAK4grWAAAK6AruAAAK3ArWAAAK9Ar6CwALBgr6CwALDAr6CwALEgr6CwALGAr6CwALHgr6CwALDAr6CwALJAr6CwALKgswAAALNgswAAALPAr6CwALQgtIAAALTgtUAAALWgtgAAALZgtsAAALcgtsAAALeAtsAAALfguEAAALcgnyAAALignyAAALkAnyAAALlgucAAAAAAnyAAALoguoAAALiguuAAALtAuuAAALugvAAAALtAvAAAALtAvGC8wL0gvGC8wL2AvGC8wL3gvGC8wL5AvGC8wL6gvGC8wL2AvGC8wL8AvGC8wL9gvGC8wL/AvGC8wMAgwIAAAMDgwUAAAMGgwUAAAMIAwUAAAMJgwUAAAMLAwUAAAMIAwyAAALcgw4AAALtAw4AAAMPgw4AAAMRAw4AAAMSgw4AAAMPgxQAAAMVgxQAAAMXAxQAAAMYgxQAAAMaAxuDHQMegxuDHQMgAxuDHQMhgxuDHQMgAxuDHQMjAxuDHQMkgxuDHQMmAxuDHQMngxuDHQMpAxuDHQMqgxuDHQMsAy2AAAMvAy2AAAMwgzIAAAMzgzUAAAM2gzUAAAM4AzUAAAM4AzmAAAAAAzUAAAM7AzUAAAM8gzIAAAMzgz4AAAMzgz+DQQNCgz+DQQNEAz+DQQNFgz+DQQNEAz+DQQNHAz+DQQNIgz+DQQNFgz+DQQNKAz+DQQNLg00AAANOg1AAAANRg1AAAANTA1AAAANUgAAAAANWA1AAAANTA1eAAANZA1eAAANag1wDXYNfA1wDXYNgg1wDXYNiA1wDXYNjg1wDXYNlA1wDXYNmg1wDXYNoA1wDXYNpg2sAAANsg2sAAANuA2sAAANvg3EAAANyg3QAAANyg3WAAANZA3WAAAN3A3iAAANZA3oAAANZA3WAAANZArKAAAN7g1eAAAN9A1eAAAN+g4AAAAOBg1eAAAN+g4MAAAN9A1eAAAOEguuDhgOHguuDhgOJAuuDhgOKguuDhgOMAuuDhgONguuDhgOPAuuDhgOQguuDhgOSAAAAAANCgAAAAANEAuuDhgOTg5UAAAOWgzIAAAOYAzIAAAOYA3WAAAOZg3WAAAObA3WAAAObA3oAAAOZg5yAAAOeA5yAAAOfg5yAAAOfg6EAAAAAA5yAAAOig6QAAAOeA6WAAAOnA6iAAAOnA6oAAAOnA6oAAAOnA6uDrQOug6uDrQOwA6uDrQOxg6uDrQOzA6uDrQO0g6uDrQO2A6uDrQO3g6uDrQO5A6uDrQO6g6uDrQO8A72AAAO/AswAAAPAgswAAAPCAswAAAPDgswAAAPFAswAAAPGg8gAAAPJg8sAAAPMg8sAAAPOA8sAAAPPg8sAAAPRA8sAAAPSg9QAAAPVg9QAAAPXA9QAAAPXA9QAAAPYg9oD24PdA9oD24Peg9oD24PgA9oD24Phg9oD24PjA9oD24Pkg9oD24PmA9oD24Png9oD24PpA9oD24Pqg9oD24PsA+2AAAPvA+2AAAPwg/IAAAPzg/UAAAP2g/UAAAP4A/UAAAP5g/sAAAAAA/UAAAP8g/UAAAP+Aw4AAAP/gw4AAAQBBAKEBAQFhAKEBAQHBAKEBAQIhAKEBAQKBAKEBAQLhAKEBAQNBAKEBAQOhAKEBAQQBAKEBAQRhBMAAAQUhBYEF4QZBBqAAAQcBB2AAAQfBB2AAAQghB2AAAQiBCOAAAQfBB2AAAQlBCaAAAQoBCaAAAQphCsELIQuBC+EMQQyhCsELIQ0BCsELIQ1hCsELIQ3BCsELIQ4hCsELIQ6BCsELIQ7hD0ELIQ+hCsELIRABCsELIRBhEMAAAREhEMAAAREhEMAAARGBEMAAARHhEkAAARKhEwAAARKhE2AAARPBE2AAARQhFIAAARPBFOAAARPBE2AAARVArWAAARWhFgAAARZhFgAAARbBFgAAARchF4AAARZhFgAAARfgqUEYQRigqUEYQRkAqUEYQRlgqUEYQRnAqUEYQRogqUEYQRqAqUEYQRrgqUEYQRtBG6AAARwBG6AAARxgqUEYQRzBHSAAAR2A8gAAAR3hG6AAARwAxQAAAR5AxQAAAR6gxQAAAR8BH2AAAR5A6WAAAR/A6WAAASAg6WAAASCBIOAAAAAA6WAAASFA6oAAAR/BIaAAASIBImAAASLBImAAASMhI4AAASLBI4AAASLAluEj4SRAluEj4SSgluEj4SUAluEj4SVgluEj4SXAluEj4SYgluEj4SaAluEj4SbgluEj4SdAluEj4SehKAAAAShhKMAAASkhKMAAASmBKMAAASnhKMAAASpBKMAAASqhKwAAAR5BK2AAASvBK2AAASwhK2AAASyBK2AAASzhK2AAAS1BLaAAAR5BLaAAAR6hLaAAAR8BLaAAAS4AAB/1kAAAAB/1IAAAAB/8wACgAB/2YB4gAB/2IB4gAB/24B4gAB/1wB4gAB/1sB4gAB/2UB4gAB/2QB4gAB/2YCrwAB/2ICrwAB/24CrwAB/1wCrwAB/1sCrwAB/2UCrwAB/2QCrwAB/2ECrwAB/2YCHQAB/2ICHQAB/24CHQAB/1wCHQAB/1sCHQAB/2UCHQAB/2QCHQAB/2ECHQABASQAAAABAl4ACgABAScCrwABAScDdwABAScDXwABAScDhgABAScDgAABAScDWAABAScDNQABAScDlwABAScEBAABAScDWgABAbEAAAABAlsCrwABAlsDdwABARMAAAABARMCrwABAWEAAAABAWoCrwABAWoDdwABAWoDhgABAYD/OgABAWoDgAABAWoDZgABAUcAAAABATMCrwABATMDhgABAQkAAAABAbgACgABAQkCrwABAQkDdwABAQkDXwABAQkDhgABAQkDgAABAQkDWAABAQkDZgABAQkDNQABAPAAAAABAPACrwABAWkAAAABAWwCrwABAWwDXwABAWwDgAABAWn/NQABAWwDZgABAUAAAAABAUACrwABAUADgAABAK0AAAABAToACgABAK0CrwABAhMAAAABAhcCrwABAK0DdwABAK0DXwABAK0DgAABAK0DWAABAK0DZgABAK0DNQABAK0DWgABALYAAAABALoCrwABALoDdwABALoDgAABARwAAAABASECrwABARz/NQABAPYAAAABAHACrwABAHADdwABAQACFgABAPb/NQABAUQBjwABAZcAAAABAZcCrwABAVAAAAABAVACrwABAVADdwABAVADhgABAVD/NQABAVADWgABAUsAAAABAcsACgABAUsCrwABAUsDdwABAUsDXwABAUsDgAABAUsDWAABAUsDdgABAUsDN
17326QABAU8AAAABAU8CrwABAU8DdwABAUsDWgABAcgAAAABAcgCrwABAPcAAAABAPcCrwABAUgAAAABAUgCrwABARAAAAABAQgCrwABAQgDdwABAQgDhgABARD/NQABAPkCrwABAPkDdwABAPkDhgABAQ//OgABAPkDgAABAPD/NQABAQUAAAABAQUCrwABAQUDhgABAQX/NQABAVUAAAABAmUACgABAVUCrwABAVUDdwABAVUDXwABAVUDgAABAVUDWAABAVUDdgABAVUDNQABAVUDlwABAVUDWgABASMAAAABASMCrwABAbAAAAABAa8CrwABAa8DdwABAa8DgAABAa8DWAABAQgAAAABAQoAAAABAQUDdwABAQUDgAABAQUDWAABAP4AAAABAQwCrwABAQwDdwABAQwDhgABAQwDZgABAQQAAAABAgUACgABAQAB4gABAQACugABAQACpgABAQACwgABAQACowABAQACwAABAQACggABAQACwwABAQADUgABAQACqgABAX0AAAABAX0B4gABAX0CugABAQcAAAABAQcCxQABAPsAAAABAQkB4gABAQkCugABARr/OgABAQkCwgABAQkCpgABAiwCFwABARIAAAABAbYADwABAQYB4gABAQYCugABAQYCpgABAQYCwgABAQYCowABAQYCwAABAQYCggABAKsAAAABAKsCxQABAQH/KQABAPoB4gABAPoCpgABAPoCwgABAPYCygABAQYAAAABAGMCnQABAGMDbgABAG0AAAABALIACgABAG0B4gABAG0CugABAG0CpgABAG0CwgABAG0CowABAG0CwAABAG0CggABAG0CqgABAHv/KQABAIkB4gABAIkCugABAIkCwgABAOUAAAABAGMCpwABAOX/NQABAGMAAAABAGMDZQABAOQCFwABAGP/NQABAZcB4gABAQsB4gABAQsCugABAT4AAAABAUMB4gABAQb/NQABAQsCqgABAYAACgABAQUB4gABAQUCugABAQUCpgABAQUCwgABAQUCowABAQUCwAABAQUCuQABAQUCggABAQUCqgABAawAAAABAawB4gABAQcB4gABALQB4gABALQCugABALQAAAABALoB4gABALoCugABANP/OgABALoCwgABALT/NQABANAAAAABAHcCRgABAO4CDQABAND/NQABAQEAAAABAc4ACgABAQEB4gABAQECugABAQECpgABAQECwgABAQECowABAQECwAABAQECuQABAQECggABAQECwwABAQECqgABANkAAAABANkB4gABAVEB4gABAVECugABAVECwgABAVECowABAVECwAABANcAAAABANcB4gABAOn/KQABAPYB4gABAPYCugABAPYCwgABAPYCowABAPYCwAABAMkAAAABAMkB4gABAMkCugABAMkCpgABAO8AAAABAekACgABAPACHQABAPAC5wABAPAC2AABAPAC9gABAPAC9AABAPAC0AABAPAC7QABAPACuQABAPAC/wABAPADdgABAPAC3AABAXUAAAABAdkCHQABAdkC5wABAO0AAAABAO0CHQABASEAAAABASkCHQABASkC5wABASkC9gABAUD/OgABASkC9AABASkCzgABAQoCHQABAQoC9gABAO4AAAABAZAACgABAPQCHQABAPQC5wABAPQC2AABAPQC9gABAPQC9AABAPQC0AABAPQCzgABAPQC7QABAPQCuQABANMAAAABANMCHQABAl0AAAABAuMACgABAl0CHQABAp4AAAABAhYCHQABAS4AAAABASICHQABASIC2AABASIC9AABAS7/NQABASICzgABARkAAAABARkCHQABARkC9AABAKcAAAABAS0ACgABAKcCHQABAJMAAAABAQkACgABAJMCHQABAKcC5wABAKcC2AABAKcC9AABAKcC0AABAKcCzgABAKcC7QABAeoAAAABAfgCHQABAKcCuQABAKcC3AABAJwAAAABAKoCHQABAKoC5wABAKoC9AABAQsAAAABAPcCHQABAQv/NQABAPgAAAABAHACHQABAHAC5wABAP4BegABAPj/NQABATUBUwABAVACHQABARsAAAABARsCHQABARsC5wABARsC9gABARv/NQABARsC3AABAZIACgABAR4CHQABAR4C5wABAR4C2AABAR4C9AABAR4C0AABAR4C7QABAR4C5gABAR4CuQABASAAAAABASACHQABASAC5wABAR4C3AABAYEAAAABAYECHQABANcCHQABAOoCHQABAOoC5wABAOoC9gABAP7/NQABANwCHQABANwC5wABANwC9gABAO//OgABANwC9AABAncAAAABAoMCHQABANEAAAABANECHQAB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APAHwAfAAsAH0AgQARAIIAhQA4AIYAkwAqAJQAlABAAJUAmgATAJsAmwAUAJwAnAAYAJ0AngAUAJ8AqAAVAKkAqQBRAKoArgAWAK8ArwBFALIAsgA6ALQAvQA6AL4AwQAXAMIAwgBIAMUAxQBKAMsAywBMAMwAzQA7AM4AzgAZAM8A0gA7ANMA3gAYAN8A3wBOAOEA4QAjAOIA5QA8AOYA6wAwAO4A7gAmAPMA/QAaAP4A/gAoAP8BAwAbAQQBBAA2AQUBCQAcAQoBDQAyARUBIAAzASEBIgA0ASMBIwBBASQBKQAEASoBKgBCAS4BLgBDATgBOABEATsBPwAGAUABQABGAUMBQwBHAU8BUgAvAVMBUwBJAVUBVQBLAVsBWwAxAVwBXABNAWIBbQAIAW4BbgBPAXABcAAkAXEBcQBQAXUBegAKAXwBgAAMAYEBiwAOAYwBjAApAY0BkQAQAZIBkgAuAZMBlwASAZgBmwA3Az4DPwArA0ADQQA5A0IDQgArA0UDRQAlA0kDSQAfA0sDSwBSA0wDTAAgA1cDVwAtA3IDcgAZA3QDdAAZA3wDfAAhA34DfgAiA98D3wA/A+AD4AA1A+YD5gAnAAIAGQEjASMAEAEkASkAAQEqAS0AAgEuATcAAwE4ATgAEQE7AT8ABAFAAUAAEgFDAUMAEwFPAVIADwFTAVQABQFVAVoABgFbAVsAFAFcAVwAFQFiAWwABwFuAW4AFgFwAXAAFwFxAXQACAF1AXoACQF8AYAACgGBAYsACwGMAYwAGAGNAZEADAGSAZIAGQGTAZcADQGYAZsADgACABoAzgDOAAoBFQEgAAEBIQEiAA8BJAEpAAIBOwE/AAMBTwFSABEBWwFbABQBYgFtAAQBcAFwAAsBdQF6AAUBfAGAAAYBgQGLAAcBjAGMAA4BjQGRAAgBkgGSABMBkwGXAAkBmAGbABADPgM/ABIDQANBABcDQgNCABIDcgNyAAoDdAN0AAoDjwOPAAwD5gPmAA0D9QP1ABYD9gP2ABUAAgAnAJQAlAABAJUAmgACAJsAmwAUAJ0AnQADAJ8AqAAEAKkAqQAFAKoArgAGAK8AsQAHALIAsgAIALQAuQAIALsAvQAIAL4AwQAJAMIAwwAKAMcAxwADAMgAyAAWAMkAyQAXAMsAywAZAMwA0gALANMA3QAMAN8A3wAaAOEA4QAbAOIA5QANAOYA6wAOAOwA7AAVAO0A7QAYAO4A8AAPAPEA8QAcAPIA8gAPAPMA/QAQAP4A/gAdAP8BAwARAQQBBAAeAQUBCQASAQoBDQATAQ4BDgAIARABEAAFAREBEQAIARIBEgAJARQBFAAJAAIASAAEAA8AIwAwADAAJgBmAGoAJAB9AIEAJQCGAJMADQCUAJQAFQCVAJoADgCbAJsADwCcAJwAEQCdAJ4ADwCfAKgAEACpAKkAFgCqAK4AAQCvAK8AFwCyALIAFAC0AL0AFAC+AMEABgDCAMIAGADFAMUAGQDLAMsAHwDMAM0AGwDOAM4AAgDPANIAGwDTAN4AEQDfAN8AIADhAOEAEwDiAOUAHQDmAOsAHgDuAO4AGgDzAP0AEgD+AP4ACwD/AQMABwEEAQQADAEFAQkACAEKAQ0ACQLoAugAPgLtAu0APAM+Az8AHANAA0EAQQNCA0IAHANFA0UAIQNGA0YAIgNHA0cAOANJA0kAAwNLA0sAPQNMA0wABANNA00ALQNXA1cANwNbA1sACgNfA18AQANjA2MAKANkA2QANQNmA2YAKwNnA2cAKQNoA2gANANpA2kAPwNqA2oANgNsA2
17326wALANtA20AKgNvA28AOgNwA3AAOQNyA3IAAgN0A3QAAgN1A3UALgN2A3YAMAN3A3cAMQN4A3gAMwN7A3sALwN9A30AMgPgA+AAJwPiA+IAOwPmA+YABQABA0UARwAWABcAAAAAAAIAAAAeAAMAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAHAAAAAAAAAAAAFQAFAAYACAAAAAAAAAALAAoAEgAfABMAAAAAAAAAAAAcABkAAQAaAAEAGwAMAA4ADwARABgAHQANAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAgBnAAQADwAXABMAGAABACgALAADAE0AWAAFAFsAWwASAGYAagAHAGsAdQAJAHYAdgATAHcAewALAH0AgQANAIIAhQAaAIYAkwAbAJUAmgAiAJsAmwAjAJwAnAAmAJ0AngAjAJ8AqAAkAKoArgAlALIAsgBDALQAvQBDAL4AwQBCAMwAzQBEAM8A0gBEANMA3gAmAOEA4QA5AOIA5QBFAOYA6wAnAPMA/QBGAP4A/gAVAP8BAwAQAQQBBAA7AQUBCQARAQoBDQBHARUBIAAYASQBKQACATsBPwAEAWIBbQAGAXABcAAUAXUBegAZAXwBgAAIAYEBiwAKAYwBjAAWAY0BkQAMAZIBkgA8AZMBlwAOAbgBuAAoAb4BvgAqAckByQAcAcwBzAAeAc8BzwAeAdMB0wAeAd0B3QAcAeAB4AAeAeoB6gAeAfMB8wAeAfQB9AAvAfoB+gAyAfsB/QAgAgUCBQAfAggCCAAgAgsCCwAgAgwCDAA9Ag0CDgAPAhcCFwA9AhkCGQAfAhwCHAAgAiYCJgAgAisCLAAPAi8CLwAgAjECMQAgAjUCNQAwAjsCOwAzAkYCRgAdAloCWgAdAnECcQApAnQCdAArAnsCewAsAn8CfwAtAoQChABAAoUChQAuApECkQBAApICkgAhApQClAA+ApUClQAhApwCnAA1Ap4CngA+AqACoAAhAqQCpAAhAqYCpgBBAqcCpwAhAqkCqQBBAqoCqgA/Aq4CsABBArECsQAhArICsgA/ArMCswAhArkCuQAhAroCugAxAr0CvQA0AsECwQA6AsQCxAA2AsgCyAA3As8CzwA4AAIABQPfA98AAgPmA+YABQPnA+cABAP1A/UAAwP2A/YAAQACAAkAZ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AAPAAYABwAAAAgAAAAQAAkAAAAMAA0ADgABAAoAAwALAAAAAAAAAAAAAAAAAAEAAAAAAAEAAgBWAM4AzgAHAnECcQAhAnYCdgAkAngCeAAOAnsCewAiAn8CfwAKAoICggAjAoMCgwANAoQChAABAoUChQALAocChwAMApECkQABApICkgADApMCkwAfApQClAAEApUClQADApYClgAeApcClwAJApkCmQAbApoCmgAFApsCmwAfApwCnAA0Ap0CnQAfAp4CngAEAp8CnwAJAqACoAADAqECoQAVAqICogA7AqMCowAYAqQCpAADAqUCpQAZAqYCpgAIAqcCpwADAqgCqAASAqkCqQAIAqoCqgAGAqsCrQAFAq4CsAAIArECsQADArICsgAGArMCswADArQCtAAeArgCuAAJArkCuQADAroCugAlArsCuwAnArwCvAAvAr0CvQAqAr4CvgArAr8CvwBAAsACwAAtAsECwQAcAsICwgAwAsMCwwAzAsQCxAA1AsUCxQA2AsYCxgA3AscCxwA/AsgCyAATAskCyQA6AsoCygA8AssCywA+AswCzAA9As0CzQAaAs4CzgACAs8CzwAUAtAC0AApAtEC0QAWAtMC0wAyAtQC1AAxAtUC1gACAtcC1wA4AtkC2QAmAtoC2gAsAtsC2wAuAz4DPwAgA0ADQQAdA0IDQgAgA0UDRQAXA0kDSQAQA1cDVwA5A1sDWwAoA3IDcgAHA3QDdAAHA98D3wARA+AD4AAPAAIACgK7ArsAAQK8ArwAAgLBAsEACQLIAsgAAwLKAsoABwLNAs0ACALOAs4ACgLPAs8ABQLRAtEABgLXAtcABAACABIAzgDOAAICugK6AAMCyALIAAgCzQLNAAwCzgLOAAECzwLPAAkC0QLRAAoC1QLWAAEDPgM/AA4DQANBAA0DQgNCAA4DSQNJAAQDcgNyAAIDdAN0AAIDigOKAAYDjAOMAAcDjwOPAAsD9QP1AAUAAQKSACcACAAJAAMAAAABAAcAAgAAAAQACwAMAAAAAwAHAAAADQAAAA8ADgAQAAYAAAAKAAYABQAEAAQABAAGAAYABgAAAAUAAAABAAIAAAAAAAcAAgAjAM4AzgADApICkgANApQClAABApUClQANApYClgAOApcClwAQApkCmQASApwCnAAIAp4CngABAp8CnwAQAqACoAANAqECoQAKAqQCpAANAqUCpQAMAqYCpgAEAqcCpwANAqgCqAAHAqkCqQAEAqoCqgAPAq4CsAAEArECsQANArICsgAPArMCswANArQCtAAOArgCuAAQArkCuQANAz4DPwACA0IDQgACA0UDRQALA1cDVwAJA1kDWQAFA1sDWwAGA3IDcgADA3QDdAADA98D3wARAAEAAAAKA7QWygADREZMVAAUY3lybABObGF0bgFCAAQAAAAA//8AGAAAAA8AHgAtADwASwBaAGkAeACTAKIAsQDAAM8A3gDtAPwBCwEaASkBOAFHAVYBZQAWAANCR1IgAExNS0QgAIRUQVQgALwAAP//ABgAAQAQAB8ALgA9AEwAWwBqAHkAlACjALIAwQDQAN8A7gD9AQwBGwEqATkBSAFXAWYAAP//ABkAAgARACAALwA+AE0AXABrAHoAhwCVAKQAswDCANEA4ADvAP4BDQEcASsBOgFJAVgBZwAA//8AGQADABIAIQAwAD8ATgBdAGwAewCIAJYApQC0AMMA0gDhAPAA/wEOAR0BLAE7AUoBWQFoAAD//wAZAAQAEwAiADEAQABPAF4AbQB8AIkAlwCmALUAxADTAOIA8QEAAQ8BHgEtATwBSwFaAWkAOgAJQVpFIABwQ0FUIACoQ1JUIADgS0FaIAEYTU9MIAFQTkxEIAGIUk9NIAHAU1JCIAH4VFJLIAIwAAD//wAYAAUAFAAjADIAQQBQAF8AbgB9AJgApwC2AMUA1ADjAPIBAQEQAR8BLgE9AUwBWwFqAAD//wAZAAYAFQAkADMAQgBRAGAAbwB+AIoAmQCoALcAxgDVAOQA8wECAREBIAEvAT4BTQFcAWsAAP//ABkABwAWACUANABDAFIAYQBwAH8AiwCaAKkAuADHANYA5QD0AQMBEgEhATABPwFOAV0BbAAA//8AGQAIABcAJgA1AEQAUwBiAHEAgACMAJsAqgC5AMgA1wDmAPUBBAETASIBMQFAAU8BXgFtAAD//wAZAAkAGAAnADYARQBUAGMAcgCBAI0AnACrALoAyQDYAOcA9gEFARQBIwEyAUEBUAFfAW4AAP//ABkACgAZACgANwBGAFUAZABzAIIAjgCdAKwAuwDKANkA6AD3AQYBFQEkATMBQgFRAWABbwAA//8AGQALABoAKQA4AEcAVgBlAHQAgwCPAJ4ArQC8AMsA2gDpAPgBBwEWASUBNAFDAVIBYQFwAAD//wAZAAwAGwAqADkASABXAGYAdQCEAJAAnwCuAL0AzADbAOoA+QEIARcBJgE1AUQBUwFiAXEAAP//ABkADQAcACsAOgBJAFgAZwB2AIUAkQCgAK8AvgDNANwA6wD6AQkBGAEnATYBRQFUAWMBcgAA//8AGQAOAB0ALAA7AEoAWQBoAHcAhgCSAKEAsAC/AM4A3QDsAPsBCgEZASgBNwFGAVUBZAFzAXRhYWx0CLphYWx0CMJhYWx0CMphYWx0CNJhYWx0CNphYWx0COJhYWx0COphYWx0CPJhYWx0CPp
17326hYWx0CQJhYWx0CQphYWx0CRJhYWx0CRphYWx0CSJhYWx0CSpjMnNjCTJjMnNjCTxjMnNjCUZjMnNjCVBjMnNjCVpjMnNjCWRjMnNjCW5jMnNjCXhjMnNjCYJjMnNjCYxjMnNjCZZjMnNjCaBjMnNjCapjMnNjCbRjMnNjCb5jYWx0CchjYWx0CdJjYWx0CdxjYWx0CeZjYWx0CfBjYWx0CfpjYWx0CgRjYWx0Cg5jYWx0ChhjYWx0CiJjYWx0CixjYWx0CjZjYWx0CkBjYWx0CkpjYWx0ClRjYXNlCl5jYXNlCmhjYXNlCnJjYXNlCnxjYXNlCoZjYXNlCpBjYXNlCppjYXNlCqRjYXNlCq5jYXNlCrhjYXNlCsJjYXNlCsxjYXNlCtZjYXNlCuBjYXNlCupjY21wCvRjY21wCvxjY21wCwRjY21wCwxjY21wCxRjY21wCxxjY21wCyRjY21wCyxjY21wCzRjY21wCzxjY21wC0RjY21wC0xjY21wC1RjY21wC1xjY21wC2Rkbm9tC2xkbm9tC3Jkbm9tC3hkbm9tC35kbm9tC4Rkbm9tC4pkbm9tC5Bkbm9tC5Zkbm9tC5xkbm9tC6Jkbm9tC6hkbm9tC65kbm9tC7Rkbm9tC7pkbm9tC8BmcmFjC8ZmcmFjC9BmcmFjC9pmcmFjC+RmcmFjC+5mcmFjC/hmcmFjDAJmcmFjDAxmcmFjDBZmcmFjDCBmcmFjDCpmcmFjDDRmcmFjDD5mcmFjDEhmcmFjDFJsaWdhDFxsaWdhDGJsaWdhDGhsaWdhDG5saWdhDHRsaWdhDHpsaWdhDIBsaWdhDIZsaWdhDIxsaWdhDJJsaWdhDJhsaWdhDJ5saWdhDKRsaWdhDKpsaWdhDLBsbnVtDLZsbnVtDLxsbnVtDMJsbnVtDMhsbnVtDM5sbnVtDNRsbnVtDNpsbnVtDOBsbnVtDOZsbnVtDOxsbnVtDPJsbnVtDPhsbnVtDP5sbnVtDQRsbnVtDQpsb2NsDRBsb2NsDRZsb2NsDRxsb2NsDSJsb2NsDShsb2NsDS5sb2NsDTRsb2NsDTpsb2NsDUBsb2NsDUZsb2NsDUxsb2NsDVJudW1yDVhudW1yDV5udW1yDWRudW1yDWpudW1yDXBudW1yDXZudW1yDXxudW1yDYJudW1yDYhudW1yDY5udW1yDZRudW1yDZpudW1yDaBudW1yDaZudW1yDaxvbnVtDbJvbnVtDbhvbnVtDb5vbnVtDcRvbnVtDcpvbnVtDdBvbnVtDdZvbnVtDdxvbnVtDeJvbnVtDehvbnVtDe5vbnVtDfRvbnVtDfpvbnVtDgBvbnVtDgZvcmRuDgxvcmRuDhZvcmRuDiBvcmRuDipvcmRuDjRvcmRuDj5vcmRuDkhvcmRuDlJvcmRuDlxvcmRuDmZvcmRuDnBvcmRuDnpvcmRuDoRvcmRuDo5vcmRuDphwbnVtDqJwbnVtDqhwbnVtDq5wbnVtDrRwbnVtDrpwbnVtDsBwbnVtDsZwbnVtDsxwbnVtDtJwbnVtDthwbnVtDt5wbnVtDuRwbnVtDupwbnVtDvBwbnVtDvZzYWx0DvxzYWx0DwJzYWx0DwhzYWx0Dw5zYWx0DxRzYWx0DxpzYWx0DyBzYWx0DyZzYWx0DyxzYWx0DzJzYWx0DzhzYWx0Dz5zYWx0D0RzYWx0D0pzYWx0D1BzaW5mD1ZzaW5mD1xzaW5mD2JzaW5mD2hzaW5mD25zaW5mD3RzaW5mD3pzaW5mD4BzaW5mD4ZzaW5mD4xzaW5mD5JzaW5mD5hzaW5mD55zaW5mD6RzaW5mD6pzbWNwD7BzbWNwD7pzbWNwD8RzbWNwD85zbWNwD9hzbWNwD+JzbWNwD+xzbWNwD/ZzbWNwEABzbWNwEApzbWNwEBRzbWNwEB5zbWNwEChzbWNwEDJzbWNwEDxzczAxEEZzczAxEExzczAxEFJzczAxEFhzczAxEF5zczAxEGRzczAxEGpzczAxEHBzczAxEHZzczAxEHxzczAxEIJzczAxEIhzczAxEI5zczAxEJRzczAxEJpzczAyEKBzczAyEKZzczAyEKxzczAyELJzczAyELhzczAyEL5zczAyEMRzczAyEMpzczAyENBzczAyENZzczAyENxzczAyEOJzczAyEOhzczAyEO5zczAyEPRzczAzEPpzczAzEQBzczAzEQZzczAzEQxzczAzERJzczAzERhzczAzER5zczAzESRzczAzESpzczAzETBzczAzETZzczAzETxzczAzEUJzczAzEUhzczAzEU5zczA0EVRzczA0EVpzczA0EWBzczA0EWZzczA0EWxzczA0EXJzczA0EXhzczA0EX5zczA0EYRzczA0EYpzczA0EZBzczA0EZZzczA0EZxzczA0EaJzczA0EahzdWJzEa5zdWJzEbRzdWJzEbpzdWJzEcBzdWJzEcZzdWJzEcxzdWJzEdJzdWJzEdhzdWJzEd5zdWJzEeRzdWJzEepzdWJzEfBzdWJzEfZzdWJzEfxzdWJzEgJzdXBzEghzdXBzEg5zdXBzEhRzdXBzEhpzdXBzEiBzdXBzEiZzdXBzEixzdXBzEjJzdXBzEjhzdXBzEj5zdXBzEkRzdXBzEkpzdXBzElBzdXBzElZzdXBzElx0bnVtEmJ0bnVtEmh0bnVtEm50bnVtEnR0bnVtEnp0bnVtEoB0bnVtEoZ0bnVtEox0bnVtEpJ0bnVtEph0bnVtEp50bnVtEqR0bnVtEqp0bnVtErB0bnVtErZ6ZXJvErx6ZXJvEsJ6ZXJvEsh6ZXJvEs56ZXJvEtR6ZXJvEtp6ZXJvEuB6ZXJvEuZ6ZXJvEux6ZXJvEvJ6ZXJvEvh6ZXJvEv56ZXJvEwR6ZXJvEwp6ZXJvExAAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAADACMAJAAlAAAAAwAjACQAJQAAAAMAIwAkACUAAAADACMAJAAlAAAAAwAjACQAJQAAAAMAIwAkACUAAAADACMAJAAlAAAAAwAjACQAJQAAAAMAIwAkACUAAAADACMAJAAlAAAAAwAjACQAJQAAAAMAIwAkACUAAAADACMAJAAlAAAAAwAjACQAJQAAAAMAIwAkACUAAAADABEAEgATAAAAAwARABIAEwAAAAMAEQASABMAAAADABEAEgATAAAAAwARABIAEwAAAAMAEQASABMAAAADABEAEgATAAAAAwARABIAEwAAAAMAEQASABMAAAADABEAEgATAAAAAwARABIAEwAAAAMAEQASABMAAAADABEAEgATAAAAAwARABIAEwAAAAMAEQASABMAAAADABAAEQASAAAAAwAQABEAEgAAAAMAEAARABIAAAADABAAEQASAAAAAwAQABEAEgAAAAMAEAARABIAAAADABAAEQASAAAAAwAQABEAEgAAAAMAEAARABIAAAADABAAEQASAAAAAwAQABEAEgAAAAMAEAARABIAAAADABAAEQASAAAAAwAQABEAEgAAAAMAEAARABIAAAACAAIAAwAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAIAAgADAAAAAgACAAMAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAABABgAAAADABkAGgAbAAAAAwAZABoAGwAAAAMAGQAaABsAAAADABkAGgAbAAAAAwAZABoAGwAAAAMAGQAaABsAAAADABkAGgAbAAAAAwAZABoAGwAAAAMAGQAaABsAAAADABkAGgAbAAAAAwAZABoAGwAAAAMAGQAaABsAAAADABkAGgAbAAAAAwAZABoAGwAAAAMAGQAaABsAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABACkAAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAB8AAAABAA4AAAABAA8AAAABAA0AAAABAAwAAAABAAYAAAABAAsAAAABAAkAAAABAAgAAAABAAUAAAABAAcAAAABAAQAAAABAAoAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABABcAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAABACIAAAADABwAHQAeAAAAAwAcAB0AHgAAAAMAHAAdAB4AAAADABwAHQAeAAAAAwAcAB0AHgAAAAMAHAAdAB4AAAADABwAHQAeAAAAAwAcAB0AHgAAAAMAHAAdAB4AAAADABwAHQAeAAAAAwAcAB0AHgAAAAMAHAAdAB4AAAADABwAHQAeAAAAAwAcAB0AHgAAAAMAHAAdAB4AAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACAAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABACsAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAABABUAAAADACYAJwAoAAAAAwAmACcAKAAAAAMAJgAnACgAAAADACYAJwAoAAAAAwAmACcAKAAAAAMAJgAnACgAAAADACYAJwAoAAAAAwAmACcAKAAAAAMAJgAnACgAAAADACYAJwAoAAAAAwAmACcAKAAAAAMAJgAnACgAAAADACYAJwAoAAAAAwAmACcAKAAAAAMAJgAnACgQDAABACwQBgABACwQAAABACwP+gABACwP9AABACwP7gABACwP6AABACwP4gABACwP3AABACwP1gABACwP0AABACwPygABACwPxAABACwPvgABACwPuAABACwPxAABAC0PvgABAC0PuAABAC0PsgABAC0PrAABAC0PpgABAC0PoAABAC0PmgABAC0PlAABAC0PjgABAC0PiAABAC0PggABAC0PfAABAC0PdgABAC0PcAABAC0PfAABAC4PdgABAC4PcAABAC4PagABAC4PZAABAC4PXgABAC4PWAABAC4PUgABAC4PTAABAC4PRgABAC4PQAABAC4POgABAC4PNAABAC4PLgABAC4PKAABAC4PLAABAC8PJgABAC8PIAABAC8PGgABAC8PFAABAC8PDgABAC8PCAABAC8PAgABAC8O/AABAC8O9gABAC8O8AABAC8O6gABAC8O5AABAC8O3gABAC8O2AABAC8AAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABQAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABABYAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACEAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAAAABACoAOQB0AHwAhACSAJwApACuALgAwADIANAA2ADgAOgA8AD4AQABCAESASwBNgE+AUYBTgFWAV4BZgFuAXgBggGKAZIBmgGiAaoBsgG6AcQB0gHaAeQB9gH+AgYCDgIWAh4CJgIuAjYCPgJGAk4CVgJeAmYCbgABAAAAAQ0AAAMAAAABEG4ABgAAAAQB8gIEAhgCKgAGAAAAAgIuAkAAAQAAAAECSAAGAAAAAgJGAlgABgAAAAICYAJ0AAEAAAABAn4AAQAAAAEChAABAAAAAQKKAAEAAAABAogAAQAAAAEChgABAAAAAQKEAAEAAAABAoIAAQAAAAECgAABAAAAAQKGAAEAAAABAoQABgAAAAIC2gLsAAYAAAAKAvQDBgMcAy4D
17326QANQA2QDdAOIA5YABgAAAAIDjgOeAAEAAAABA6YAAQAAAAEDxgABAAAAAQPmAAEAAAABBDoAAQAAAAEEWgABAAAAAQR6AAEAAAABBHgABgAAAAIEdgSIAAYAAAACBJAEogAEAAAAAQSqAAEAAAABBLYAAQAAAAEE6AABAAAAAQUMAAEAAAABBVYAAQAAAAEFoAABAAAAAQXqAAYAAAACB/QIBgAGAAAABAgOCB4IMAhCAAEAAAABCEYABgAAAAIKZgp4AAYAAAAGCoAKkAqiCrQKxgrUAAQAAAABCtQAAQAAAAELFAABAAAAAQsWAAEAAAABCzIAAQAAAAELPAABAAAAAQtGAAEAAAABC0gAAQAAAAEUXAABAAAAARSOAAQAAAABFJAAAQAAAAEUpgABAAAAARTEAAEAAAABFMIAAQAAAAEUwAABAAAAARTGAAEAAAABFOQAAwAAAAEVAgABFQoAAQAAADAAAwAAAAEU8AACFQIU+AABAAAAMAADAAEU9gABFPYAAAABAAAAMAADAAEVDAABFOQAAAABAAAAMAADAAAAARTSAAEVEAABAAAAMAADAAEU/gABFMAAAAABAAAAMAABFQIAPwADAAEVAgABFQgAAAABAAAAMQADAAEU/AABFQIAAAABAAAAMQADAAAAAhT2FPwAART2AAEAAAAyAAMAAAACFO4U6AABFO4AAQAAADIAAhTgAAQAZQBqAOsA8gACFNIABABlAGoA6wDyAAEU0AAGAAEUygAGAAEUxAAGAAEUvgAGAAEUuAAGAAIUuAAEAjACMQIyAjMAARRoAD8AAhSwACwDTQNOA08DUANeA18DYANhA2IDYwNqA2sDbANtA24DewN8A30DfgQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBEEERQRMAAMAARSeAAEUqgAAAAEAAAAzAAMAARSeAAEUrAAAAAEAAAAzAAMAARSgAAEU2gACFKAUoAAAAAMAARSOAAEUzgACFI4UjgABAAAAMwADAAAAARS4AAEU1AABAAAAMwADAAEUwgABFKYAAAABAAAAMwADAAAAARSOAAIUVBSwAAAAAwAAAAEUhAACFEQUoAABAAAAMwADAAAAARRqAAIUMBQwAAAAAwAAAAEUYAACFCAUIAABAAAAMwADAAAAARRGAAEUDAAAAAMAAAABFD4AARP+AAEAAAAzAAMAARReAAETUAABFF4AAAADAAEUTgABE0AAAAABAAAANAACFFgAEQMGAwcDCAMJAwoDCwMMAw0DDgMPBEcESANUA1UD1QO5A7cAAhQwABEDBgMHAwgDCQMKAwsDDAMNAw4DDwRHBEgDVANVA9UDuQO3AAIUKgArAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwMkAyUDJgMnAygDKQMqAysDLAMtBEkESgNcA10D1gO6A7gAAhOsABEDGgMbAxwDHQMeAx8DIAMhAyIDIwOFA4YDgwOEA/ID8wP0AAIThAARAxADEQMSAxMDFAMVAxYDFwMYAxkDgQOCA38DgAPvA/AD8QABE9j/4wABE9gAPgADAAET3AABE+IAAAABAAAANQADAAET2gABE9AAAAABAAAANQADAAETrgABE9IAAAABAAAANgADAAETnAABE8gAAAABAAAANgABE74AAQAIAAEABAPuAAMA0wM+AAITsAAaAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwACE64AEwLmAucC6ALpAuoC6wLsAu0C7gLvA1EDoQOiA6MDpAOlA6YD1wPYAAITngAmAuYC5wLoAukC6gLrAuwC7QLuAu8C8QLyAvMC9AL1AvYC9wL4AvkC+gNRA1IDoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wD1wPYA9kD2gACE4YAJgLcAt0C3gLfAuAC4QLiAuMC5ALlAvsC/AL9Av4C/wMAAwEDAgMDAwQDSgNTA5oDnAOdA54DnwOgA7EDsgOzA7QDtQO2A9MD1APbA9wAAhNWACYC+wL8Av0C/gL/AwADAQMCAwMDBALxAvIC8wL0AvUC9gL3AvgC+QL6A1MDUgOxA7IDswO0A7UDtgOnA6gDqQOqA6sDrAPbA9wD2QPaAAITMgEGARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATsBPAE9AT4BPwFAAUEBQgFDAUsBRQFGAUcBSAFJAUoBTAFNAU4BTwFRAVIBUwFUAVUBVgFXAVgBWQF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NgE3ATwBPQE+AT8BQQFCAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFQAVEBUgFUAVYBVwFYAVkBWgFdAV4BXwFgAWEBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW8BcgFzAXQBdgF3AXkBegF7AX0BfgGAAYIBgwGEAYUBhgGHAYgBiQGKAYsBjgGPAZABkQGUAZUBlgGXAZkBmgGbATkBOgI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAI1AjcCOQI6AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJLAkwCTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAjgCOwJKAk0CNgK6ArsCvAK9Ar4CvwLAAsECwwLEAsUCxgLHAsgCyQLKAswCzQLPAtAC0QLSAtQC1gK6ArwCvQK+Ar8CwALCAsMCxALFAsYCyALJAsoCywLMAs0CzgLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLUAtYCwgLOAsgC0gK6Ar4CwAMQAxEDEgMTAxQDFQMWAxcDGAMZA40DjwNQA5IDagNrA2wDbQNuA3sDfAN9A34D9QP2AAEMoACnAVQBWgFgAWYBbAFyAXoBgAGGAYwBkgGYAZ4BpAGsAbQBugHAAcYBzAHUAdoB4AHmAewB8gH4Af4CBAIKAhACFgIcAiICKAIuAjQCOgJAAkYCTAJSAlgCXgJkAmoCcAJ2AnwCggKIAo4CngKsAroCyALWAuQC8gMAAw4DHAMkAyoDMAM2AzwDQgNIA04DVANaA2ADZgNsA3IDeAN+A4QDigOQA5YDmgOeA6IDpgOqA64DsgO2A7oDvgPIA9ID2APeA+QD6gPwA/YD/AQABA4EHAQiBCgELgQ0BDoEQARGBEwEVARaBGAEZgRsBHIEegSABIYEjASSBJgEoASmBKoErgSyBLYEvATABMoE1ATeBOQE6gTwBPYE/AUCBQYFCgUQBRYFHAUiBSgFLgU0BToFQAVGBUwFUgVYBV4FZAVqBXAFdgV8BYIFiAWOBZQFmgACAZwBFQACADwBTwACAZ0BYgACAGUBeAACAGoBfwADAZ4BnAEVAAIBnwEjAAIBoAEkAAIBoQEqAAIBogEuAAIBowE4AAIBpAE7AAIBpQFAAAMAuAGmAUMAAwDAAacBTwACAagBUwACAakBVQACAaoBWwACAasBXAADAawBnQFiAAIBrQFuAAIBrgFwAAIBrwFxAAIBsAF1AAIA6wF4AAIBsQF8AAIA8gF/AAIBsgGBAAIBswGMAAIBtAGNAAIBtQGSAAIBtgGTAAIBtwGYAAICNAI2AAICMAI4AAICMQI7AAICMgJKAAICMwJNAAICkALCAAICkQLOAAICcQLZAAICdQLaAAICdwLbAAICeQLTAAICfwLXAAIChALVAAICiALYAAICuwK2AAICwQK3AAICxwK4AAICzwK5AAcDBgMkAxoDEALmAvsDBQAGAwcDJQMbAxEC5wL8AAYDCAMmAxwDEgLoAv0ABgMJAycDHQMTAukC/gAGAwoDKAMeAxQC6gL/AAYDCwMpAx8DFQLrAwAABgMMAyoDIAMWAuwDAQAGAw0DKwMhAxcC7QMCAAYDDgMsAyIDGALuAwMABgMPAy0DIwMZAu8DBAADAtwC8QLwAAIC3QLyAAIC3gLzAAIC3wL0AAIC4AL1AAIC4QL2AAIC4gL3AAIC4wL4AAIC5AL5AAIC5QL6AAIC5gL7AAIC5wL8AAIC6AL9AAIC6QL+AAIC6gL/AAIC6wMAAAIC7AMBAAIC7QMCAAIC7gMDAAIC7wMEAAEC8QABAvIAAQLzAAEC9AABAvUAAQL2AAEC9wABAvgAAQL5AAEC+gAEBEcESQOFA4EABARIBEoDhgOCAAIDTQOOAAIDTgOQAAIDTwOTAAIDUQNTAAIDLgORAAIDSgNSAAIDUQNTAAEDUgAGA14DVANcA4MDfwOHAAYDXwNVA10DhAOAA4gAAgNgA4kAAgNhA4oAAgNiA4sAAgNjA4wAAgOhA7EAAgOiA7IAAgOjA7MAAgOkA7QAAwOlA7UDrwACA6YDtgACA5oDpwACA5wDqAACA50DqQACA54DqgADA58DqwOtAAIDoAOsAAIDoQOxAAIDogOyAAIDowOzAAIDpAO0AAMDpQO1A64AAgOmA7YAAQOnAAEDqAABA6kAAQOqAAIDqwOwAAEDrAAEA9UD1gPyA+8A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FQIrASECqAADBEQBNgAAAAD//wAIAugBLwNlAAMERQE2AAAAAP//ABwCYwEaAtgAAwQxATYAAAAAAAEAAAABAEF+uYMgXw889QAHA+gAAAAA2l25igAAAADaXcXK/qb/JAPoBAQAAAAHAAIAAAAAAAAAAQAAAwL/GgBkA/7+pv9eA+gAAQAAAAAAAAAAAAAAAAAABEwCFwAUAAAAAADcAAAA3AAAAkgABwJIAAcCSAAHAkgABwJIAAcCSAAHAkgABwJIAAcCSAAHAkgABwJIAAcCSAAHA2EABANhAAQCJQBNAkMAMwJDADMCQwAzAkMAMwJDADMCQwAzAo0ATQKPAAACjQBNAo8AAAHpAE0B6QBNAekATQHpAE0B6QBNAekATQHpAE0B6QBNAekATQHpAE0B4ABNAoIAMwKCADMCggAzAoIAMwKCADMCfwBNAogAEwJ/AE0BXQA8AsgAPAFdADwBXQAuAV0AHQFdACwBXQA8AV0APAFdAC0BXQA8AV0ACAFrACsBawArAWsAKgIFAE0CBQBNAawATQGsABgBrABNAawATQGsAE0BrAAEAy0ATQKgAE0CoABNAqAATQKgAE0ClgBNAqAATQKWADMClgAzApYAMwKWADMClgAzApYAMwKWADMClgAzAp4ANwKeADcClgAzA48AMwHuAE0B7gBNApAAMwIQAE0CEABNAhAATQIQAE0B5gAwAeYAMAHmADAB5gAwAeYAMAHmADACEwARAhcAEwITABECEwARAhMAEQKpAE0CqQBNAqkATQKpAE0CqQBNAqkATQKpAE0CqQBNAqkATQKpAE0CqQBNAkUAEQNfABMDXwATA18AEwNfABMDXwATAhAAFAIKABICCgASAgoAEgIKABICCgASAf8AFgH/ABYB/wAWAf8AFgIHACUCBwAlAgcAJQIHACUCBwAlAgcAJQIHACUCBwAlAgcAJQIHACUCBwAlAgcAJQL5ACYC+QAmAg0AQwGlACkBpQApAaUAKQGlACkBpQApAaUAKQ
17326IOACkCCQApAg4AKQIOACkB5wApAecAKQHnACkB5wApAecAKQHnACkB5wApAecAKQHnACkB5wApAVUAEwICAB4CAgAeAgIAHgICAB4CAgAeAgsAQwILAAECC//TANwARADcAE0A3AAVANz/7gDc/90A3P/sANwARADc//8B0gBEANz/7QDc/+4A3P/IAPb/wQD2/8EA9v/BAPb/wQGeAEMBngBDAbEAQwDGAEMAxgALAMYAQwDGADYBLQBDAOQAAAMtAEMCCwBDAgsAQwJDACgCCwBDAgsAQwIPAEkCCwBDAgoAKQIKACkCCgApAgoAKQIKACkCCgApAgoAKQIKACkCCwApAgsAKQIKACkDWAApAg0AQgIOAEMCDgApASUAQwElAEMBJQAkASUANgF3ABwBdwAcAXcAHAF3ABwBdwAcAXcAHAIXAEMBEgATAUcAEQFHABABRwARAUcAEQFHABECAQBDAgEAQwIBAEMCAQBDAgEAQwIBAEMCAQBDAgEAQwIBAEMCAQBDAgEAQwGxAA8CnQANAp0ADQKdAA0CnQANAp0ADQGtAA8B0QAQAdEAEAHRABAB0QAQAdEAEAF+ABUBfgAVAX4AFQF+ABUB0gATAe8AEwJlABMC4gATAuIAEwL/ABMB0gATAd0ADQHdAA0B3QANAd0ADQHdAA0B3QANAd0ADQHdAA0B3QANAd0ADQHdAA0B3QANAq4AAwKuAAMB2gBPAd0AKwHdACsB3QArAd0AKwHdACsB3QArAhQATwItABsCFABPAi0AGwG8AE8BvABPAbwATwG8AE8BvABPAbwATwG8AE8BvABPAbwATwG8AE8BpgBPAvAATwM1AE8CEwAuAhMALgITAC4CEwAuAhMALgIxAE8CMQAhAjEATwFOAEEBJgAtAU4AQQFOACgBTgAXAU4AJgFOAEEBTgA5ApkAQQFOACcBTgBBAU4AAgFLACsBSwArAUsAKwFLABoB1QBPAdUATwGPAE8BjwAYAZMATwGPAE8BjwBPAakADQKgAEUCNQBPAjUATwI1AE8CNQBPAkEATwI1AE8COAAwAjgAMAI4ADACOAAwAjgAMAI4ADACOAAwAjgAMAJAADQCQAA0AjgAMAMBADABrgBPAagATwI/ADAB0wBPAdMATwHTAE8B0wBPAacAMAGnADABpwAwAacAMAGnADABpwAwA04AMAGkAA4BrwAVAaQADgGkAA4BpAAOAiYAQgImAEICJgBCAiYAQgImAEICJgBCAiYAQgImAEICJgBCAiYAQgImAEIB2AAKAtUAEgLVABIC1QASAtUAEgLVABIB0wAdAa8ADAGvAAwBrwAMAa8ADAGvAAwBvAAoAbwAKAG8ACgBvAAoASIAIAEvABgBIgAgAToALgEDABcBOgAYARgAFwDBABUBOgAYAT8ALgCOACoAnf/lARMALgCOAC4B5AAuAT8ALgEvABgBOgAuAToAGADEAC4A8wAeANoAEgE7ACsBBAAJAZIADQEaABUBFAAIAP8AGwJIAAcCHQBNAiUATQHfAE0B3wBNAfIATQKTAAkB6QBNAekATQHpAE0DcwAdAfYAHgKQAE0CkABNApAATQJLAE0CSwBNAnIACAMtAE0CfwBNApYAMwJxAE0B7gBNAkMAMwITABECCQAmAgkAJgKnABsCEAAUAjMAHwKWAE0DcQBNA5EATQJ5AE0CFgBNAmEAAQLlAE0DlQAHA5AATQHmADACLgAiAjQAHAFdADwBXQAsAWsAKwJ5AAMDPQBNAikAGwJ9AAMCTQAKApIANQKCABYB9AAEAkcATQKuAE0CCgASAhUAGAI+AE0ChAAzApYAMwIHACUCCAA6Ac8AQwFuAEMBbgBDAYgAQwINAA8B5wApAecAKQHnACkCjgAfAZoAHgIJAEMCCQBDAgkAQwHZAEMB2QBDAfUAEAJpADsCCABDAgoAKQIAAEMCDQBCAaUAKQGdAAkB0QAQAdEAEAJqACcBrQAPAc4AIAIRAEMC3ABDAuIAQwINAEMB0ABDAiYAAQKEAEMC6AAKAvIAQwF3ABwBwAAiAckAHgDcAEQA3P/sAPb/wQIcAA4CqgBDAdwAHAIKAA8CCgASAgAAKQHSABMBkAAYAcYAQwITAEMBzAAVAcwAFQILAEMB5wAjAfwAKQGHACICDgAqAgsAQwMtAEMCBgAuAd0ADQHsAFUB2gBPAZcATwGXAE8BqABPAiMAAQG8AE8BvABPAbwATwLPABsBtgApAj8ATwI/AE8CPwBPAfoATwH6AE8CFwARAqAARQIxAE8COAAwAi8ATwGuAE8B3QArAaQADgGqAB8BqgAfAlAAJQHTAB0B8AAtAjYATwLyAE8C+wBPAi8ATwHMAE8CAgALAooATwL8ABIDAgBPAacAMAHkADQB6wApAU4AQQFOACYBSwArAg0AAwLDAE8B3wAcAgkABAHkABACLwA3AgAADQGsABoB/ABPAkoATwGvAAwBuwASAdsATwIDACoCLQA3AkgABwIlAE0B3wBNAjEAFwHpAE0B/wAWAn8ATQKiADQBXQA8AgUATQJCABMDLQBNAqAATQHaAB8ClgAzAnEATQHuAE0B3wAcAhMAEQIXABICxAAjAhAAFAKaACYCswA7Ak0ADAI2AAUCzAAFAbUABgLMAA0ClAADAu8AGgFdACwCFwASAjcAKwIVAEYBuwADAfsAJQGvACgBigAhAhsAHgIzAC0A6ABAAeEAPQHSABICGABDAbMACgGaACMCCgApAkcAHAIFADwBngAiAikAJQGnAAQCAAAWAnMAJQGb//0CYQA6AsQALQDoABUA6P/fAOj/zQIAABYCAAAWAgAAFgIKACkCxAAtAjcAKwGvACgCGwAeAhoAOQIpACABmwAjAm4AJQHdAA0B2gBPAZcATwHOAAkBvABPAbwAKAIxAE8CRgA0AU4AQQHVAE8B7AAPAqAARQI1AE8BoQAgAjgAMAIvAE8BrgBPAcIAJAHCACQBpAAOAdMAEQJgACYB0wAdAkUAJgJUADkBTgBBAU4AJgHTABEB0wARAjgAMAJUADkB3QANAbwATwIxAE8CHAAnAhwAZQIcAEMCHABIAhwANgIcAEgCHABJAhwAXgIcADQCHAA8AhwAJwF/ACMBzwARAdIAHgH0ABwB2wAlAf0ANAGsABsCDAArAf0AJgIcACcCOAAyAU4AEAHmADMBzgASAfgAGwHSACACEAA8AdQAKQIPADICEAAyAhwAJAIcAF4CHABLAhwAPAIcACwCHABBAhwARAIcAEwCHAA4AhwANgIcACcBIgAUASIAMgEiACcBIgAjASIAHQEiACABIgAkASIALgEiABoBIgAcASIAFAEiADIBIgAnASIAIwEiAB0BIgAgASIAJAEiAC4BIgAaASIAHAEiABQBIgAyASIAJwEiACMBIgAdASIAIAEiACQBIgAuASIAGgEiABwBIgAUASIAMgEiACcBIgAjASIAHQEiACABIgAkASIALgEiABoBIgAcAJr/XwMHADwDBwAxAwcANwMHADQDBwBPAwcALQMHADgDBwA2AwcALQMHADADBwA0AwcAKwMHADsDBwAyAwcAOQDDADIAwAAzAM0AOADOADcCSQAyAP4ASwEIAFABlwA4AZcAOQDNADIB/gBXATYAFwIcAB4BRQArAVsAMAEIAF8BlwA5AM0AMgH+AFcCHAAeAhwAIwIcACMAvgAwAL4AEgFCAGMBQgAgAVMANQFTAA0BKgBfASoADwC+ADAAvgASAUIAYwFCACABUwA1AVMADQEqAF8BKgAPAQ8ALQEPAC0B9AAAA+gAAAPoAAAB/gAFAQ8ALQEPAC0B9AAAA+gAAAPoAAAAsQAoAVgAKAFYACQBWAAoALEAJACxACgBzQA3Ac0ATAEjADcBIwBMAS4AKACVACgBzQA3Ac0ATAEjADcBIwBMAL4AMAC+ABIAkAAiAJAAIQC+ADAAvgASAJAAIgCQACEA9gAzAPcAGwE2ADUBNgAWAO8ANwDwABYAvwAzAL8AMwGRAC4BkQAuAUAAGwFCABsAzQAyAM4ANwPoAAAB9AAAADcAAADcAAAAbgAAAhwAVgIcAFMCHABQAhwAGAIc/9ACHABJAhwAIgHaADYB8AAzAhwAGAIc/9AB9wAuAeoACQH4ADsBwAAxAgEAFwHM/9kB4ABEAdEADwH3AC4B4ABEAhwASQIcAGICHABQAhwAZQIcACwCHAABAhwAYgIcADYBIgAgASIAIAEiACABIgAgAhwAQQIcAEACHABRAhwAQQIcAEECHABBAhwAXgIcAF4CHABbAhwATgIcAFQCHABOAf4ANAIcAEwCHABHAz8ALAFbAAkCswA7AjEAFwJwACACXAAjAiQAHAIXADsCGABDAtoAMgP+ADIBIgAgASIAIALaADID/gAyAsQAJgPuACYCxAAmA+4AJgHeACACTwBkAy
17326oANwKdACkB/gAzAdAATwM/AEEDPwBBAz8AQQI4//0BCgAfAL0AQAC9AEACAQA9AbYAEAIBAD0DYwAoA7kATQEiACABIgAgASIAIAEiACABIgAgASIAIAKAAC0CBwAZASsASwErAEgAAP7lAAD/LQAA/wAAAP8EAAD+pgAA/tYAAP7WAAD+5gAA/wsAAP69AAD+5QAA/ywAAP8aAAD/DwE2ADoBNgAcATYADAE2AFABNgAMATYAGwE2AGMBNgA2ATb/3AE2ABsBNgBFATYAQQE2//MAAP7lAAD/LQAA/wAAAP8EAAD+pgAA/tYAAP7WAAD+5gAA/wsAAP68AAD+5QE2ADoBNgAcATYADAE2AAwBNgAbATYAYwE2ADYBNv/cATYAGwE2AEEBNv/yAAD+5QAA/y0AAP8AAAD/BAAA/qYAAP7WAAD+1gAA/uYAAP8LAAD+vAAA/uUBNgA6ATYAHAE2AAwBNgAMATYAGwE2AGMBNgA2ATb/3AE2ABsBNgBBATb/8gErAEwBNgBjAXAAJQE2AGMAAP7fAAD+0gAA/t8AkAAiAJAAIQCQACIAkAAhATYAFQAIABwAAABAAEAAQABAAIwAmACkALAAvADIANQA4AFiAW4BiAGUAgACDAJoAsQC0ALcA4QDkAOcA+QESgRWBLwFCgUWBSIFLgU6BUYFUgVeBWoF+gY8BqAGrAa4BsQG0AcMB3AHfAfEB9AH3AfoB/QIAAgMCBgIJAiuCLoJAAkMCRgJXglqCZgJpAm2CcIJ1AoqCn4KvgrKCtYK4gtOC1oLnguqC7YLwgvOC9oL5gvyDIIMjgyaDWoNqA3qDlIOpg6yDr4Oyg8uDzoPRg/8EAgQFBBMEKIQrhC6EMYRAhEOERoRJhEyET4RShFWEcwR2BHkEiASdBKAEowSmBKkEvITMBM8E0gTVBNgE6YTshO+E8oUVhRiFG4UehSGFJIUnhSqFVQVYBV6FYYWSBZUFsYXFhciFy4XxBfQF9wYThjIGNoZchnQGdwZ6Bn0GgAaDBoYGiQaMBrQGyob9BwAHAwdDh0aHWIdyB3aHhQeNh5CHk4eWh5mHm4eeh6GHpIfAh8OH2AfmB+kH7Af+CAEIEogbiCAIJIgniCwIPohWiGeIaohtiHCIc4iKCI0InIifiKKIpYioiKuIroixiNSI14jaiQYJHQk0iUwJXAlf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AABAAAAAAABAAwA2QABAAAAAAACAAUA5QABAAAAAAADABwA6gABAAAAAAAEABIBBgABAAAAAAAFACEBGAABAAAAAAAGABEBOQABAAAAAAAHANkBSgABAAAAAAAIAA0CIwABAAAAAAAJABkCMAABAAAAAAAKANkCSQABAAAAAAALABgDIgABAAAAAAAMABgDOgABAAAAAAANAIQDUgABAAAAAAAOABgD1gABAAAAAAATABQD7gADAAEECQAAAbIEAgADAAEECQABACQFtAADAAEECQACAA4F2AADAAEECQADADgF5gADAAEECQAEACQGHgADAAEECQAFAEIGQgADAAEECQAGACIGhAADAAEECQAHAbIGpgADAAEECQAIABoIWAADAAEECQAJADIIcgADAAEECQAKAbIIpAADAAEECQALADAKVgADAAEECQAMADAKhgADAAEECQANAQgKtgADAAEECQAOADALvgADAAEECQAQABgL7gADAAEECQARAAoMBgADAAEECQATACgMEAADAAEECQEAACQMOAADAAEECQEBACAMXAADAAEECQECABwMfAADAAEECQEDACIMmEJNUyBIdW1hbml0eSBpcyBhIGxpY2Vuc2VkIHZlcnNpb24gb2YgRlMgQWxiZXJ0IFBybyBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgRm9udHNtaXRoIEx0ZCBmb3IgQnJpc3RvbC1NeWVycyBTcXVpYmIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgZm9udCBtYXkgbm90IGJlIGFsdGVyZWQgaW4gYW55IHdheSB3aXRob3V0IHByaW9yIHBlcm1pc3Npb24gb2YgRm9udHNtaXRoIEx0ZC5CTVMgSHVtYW5pdHlMaWdodDEuMDAxO2ZzbWk7Qk1TSHVtYW5pdHktTGlnaHRCTVMgSHVtYW5pdHkgTGlnaHRWZXJzaW9uIDEuMDAxOyB0dGZh
17326dXRvaGludCAodjEuOClCTVNIdW1hbml0eS1MaWdodEJNUyBIdW1hbml0eSBpcyBhIGxpY2Vuc2VkIHZlcnNpb24gb2YgRlMgQWxiZXJ0IFBybyBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgRm9udHNtaXRoIEx0ZCBmb3IgQnJpc3RvbC1NeWVycyBTcXVpYmIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgZm9udCBtYXkgbm90IGJlIGFsdGVyZWQgaW4gYW55IHdheSB3aXRob3V0IHByaW9yIHBlcm1pc3Npb24gb2YgRm9udHNtaXRoIEx0ZC5Gb250c21pdGggTHRkSmFzb24gU21pdGgsIFBoaWwgR2FybmhhbUJNUyBIdW1hbml0eSBpcyBhIGxpY2Vuc2VkIHZlcnNpb24gb2YgRlMgQWxiZXJ0IFBybyBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgRm9udHNtaXRoIEx0ZCBmb3IgQnJpc3RvbC1NeWVycyBTcXVpYmIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgZm9udCBtYXkgbm90IGJlIGFsdGVyZWQgaW4gYW55IHdheSB3aXRob3V0IHByaW9yIHBlcm1pc3Npb24gb2YgRm9udHNtaXRoIEx0ZC5odHRwOi8vd3d3LmZvbnRzbWl0aC5jb21odHRwOi8vd3d3LmZvbnRzbWl0aC5jb21Gb250c21pdGggTHRkLiBFTkQgVVNFUiBMSUNFTkNFIEFHUkVFTUVOVC4gWW91IGFyZSBib3VuZCBieSB0aGUgQ29uZGl0aW9ucyBvZiBTYWxlIHNldCBvdXQgb24gb3VyIHdlYnNpdGUg0SBodHRwOi8vd3d3LmZvbnRzbWl0aC5jb21odHRwOi8vd3d3LmZvbnRzbWl0aC5jb21CTVMgSHVtYW5pdHkgQUJDIGFiYwBCAE0AUwAgAEgAdQBtAGEAbgBpAHQAeQAgAGkAcwAgAGEAIABsAGkAYwBlAG4AcwBlAGQAIAB2AGUAcgBzAGkAbwBuACAAbwBmACAARgBTACAAQQBsAGIAZQByAHQAIABQAHIAbwAgAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMAA3ACAAYgB5ACAARgBvAG4AdABzAG0AaQB0AGgAIABMAHQAZAAgAGYAbwByACAAQgByAGkAcwB0AG8AbAAtAE0AeQBlAHIAcwAgAFMAcQB1AGkAYgBiAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4AIABUAGgAaQBzACAAZgBvAG4AdAAgAG0AYQB5ACAAbgBvAHQAIABiAGUAIABhAGwAdABlAHIAZQBkACAAaQBuACAAYQBuAHkAIAB3AGEAeQAgAHcAaQB0AGgAbwB1AHQAIABwAHIAaQBvAHIAIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAbwBmACAARgBvAG4AdABzAG0AaQB0AGgAIABMAHQAZAAuAEIATQBTACAASAB1AG0AYQBuAGkAdAB5ACAATABpAGcAaAB0AFIAZQBnAHUAbABhAHIAMQAuADAAMAAxADsAZgBzAG0AaQA7AEIATQBTAEgAdQBtAGEAbgBpAHQAeQAtAEwAaQBnAGgAdABCAE0AUwAgAEgAdQBtAGEAbgBpAHQAeQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgAKQBCAE0AUwBIAHUAbQBhAG4AaQB0AHkALQBMAGkAZwBoAHQAQgBNAFMAIABIAHUAbQBhAG4AaQB0AHkAIABpAHMAIABhACAAbABpAGMAZQBuAHMAZQBkACAAdgBlAHIAcwBpAG8AbgAgAG8AZgAgAEYAUwAgAEEAbABiAGUAcgB0ACAAUAByAG8AIABDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAANwAgAGIAeQAgAEYAbwBuAHQAcwBtAGkAdABoACAATAB0AGQAIABmAG8AcgAgAEIAcgBpAHMAdABvAGwALQBNAHkAZQByAHMAIABTAHEAdQBpAGIAYgAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuACAAVABoAGkAcwAgAGYAbwBuAHQAIABtAGEAeQAgAG4AbwB0ACAAYgBlACAAYQBsAHQAZQByAGUAZAAgAGkAbgAgAGEAbgB5ACAAdwBhAHkAIAB3AGkAdABoAG8AdQB0ACAAcAByAGkAbwByACAAcABlAHIAbQBpAHMAcwBpAG8AbgAgAG8AZgAgAEYAbwBuAHQAcwBtAGkAdABoACAATAB0AGQALgBGAG8AbgB0AHMAbQBpAHQAaAAgAEwAdABkAEoAYQBzAG8AbgAgAFMAbQBpAHQAaAAsACAAUABoAGkAbAAgAEcAYQByAG4AaABhAG0AQgBNAFMAIABIAHUAbQBhAG4AaQB0AHkAIABpAHMAIABhACAAbABpAGMAZQBuAHMAZQBkACAAdgBlAHIAcwBpAG8AbgAgAG8AZgAgAEYAUwAgAEEAbABiAGUAcgB0ACAAUAByAG8AIABDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAANwAgAGIAeQAgAEYAbwBuAHQAcwBtAGkAdABoACAATAB0AGQAIABmAG8AcgAgAEIAcgBpAHMAdABvAGwALQBNAHkAZQByAHMAIABTAHEAdQBpAGIAYgAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuACAAVABoAGkAcwAgAGYAbwBuAHQAIABtAGEAeQAgAG4AbwB0ACAAYgBlACAAYQBsAHQAZQByAGUAZAAgAGkAbgAgAGEAbgB5ACAAdwBhAHkAIAB3AGkAdABoAG8AdQB0ACAAcAByAGkAbwByACAAcABlAHIAbQBpAHMAcwBpAG8AbgAgAG8AZgAgAEYAbwBuAHQAcwBtAGkAdABoACAATAB0AGQALgBoAHQAdABwADoALwAvAHcAdwB3AC4AZgBvAG4AdABzAG0AaQB0AGgALgBjAG8AbQBoAHQAdABwADoALwAvAHcAdwB3AC4AZgBvAG4AdABzAG0AaQB0AGgALgBjAG8AbQBGAG8AbgB0AHMAbQBpAHQAaAAgAEwAdABkAC4AIABFAE4ARAAgAFUAUwBFAFIAIABMAEkAQwBFAE4AQwBFACAAQQBHAFIARQBFAE0ARQBOAFQALgAgAFkAbwB1ACAAYQByAGUAIABiAG8AdQBuAGQAIABiAHkAIAB0AGgAZQAgAEMAbwBuAGQAaQB0AGkAbwBuAHMAIABvAGYAIABTAGEAbABlACAAcwBlAHQAIABvAHUAdAAgAG8AbgAgAG8AdQByACAAdwBlAGIAcwBpAHQAZQAgIBQAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZgBvAG4AdABzAG0AaQB0AGgALgBjAG8AbQBoAHQAdABwADoALwAvAHcAdwB3AC4AZgBvAG4AdABzAG0AaQB0AGgALgBjAG8AbQBCAE0AUwAgAEgAdQBtAGEAbgBpAHQAeQBMAGkAZwBoAHQAQgBNAFMAIABIAHUAbQBhAG4AaQB0AHkAIABBAEIAQwAgAGEAYgBjAFMAdABlAHIAbABpAG4AZwAgAEEAbAB0AGUAcgBuAGEAdABlAEcAcgBlAGUAawAgAEEAbAB0AGUAcgBuAGEAdABlAHMAUwBlAHIAYgBpAGEAbgAgAFMAYwByAGkAcAB0AE0AYQBjAGUAZABvAG4AaQBhAG4AIABTAGMAcgBpAHAAdAACAAAAAAAA/7gAOAAAAAAAAAAAAAAAAAAAAAAAAAAABE4AAAABAAIAAwAkAMkBAgEDAMcAYgCtAQQBBQBjAQYArgCQAQcAJQAmAP0A/wBkAQgBCQAnAOkBCgELACgAZQEMAQ0AyADKAQ4AywEPARAAKQAqAPgBEQESARMAKwEUARUALAEWAMwBFwDNAM4A+gDPARgBGQEaAC0BGwEcAC4BHQAvAR4BHwEgASEA4gAwADEBIgEjASQBJQBmADIA0AEmANEAZwDTAScBKACRASkArwCwADMA7QA0ADUBKgErASwANgEtAOQA+wEuAS8ANwEwATEBMgEzADgA1AE0ANUAaADWATUBNgE3ATgBOQA5ADoBOgE7ATwBPQA7ADwA6wE+ALsBPwA9AUAA5gFBAEQAaQFCAUMAawBsAGoBRAFFAG4BRgBtAKABRwBFAEYA/gEAAG8BSAFJAEcA6gFKAQEASABwAUsBTAByAHMBTQBxAU4BTwBJAEoA+QFQAVEBUgBLAVMBVABMANcAdAFVAHYAdwFWAHUBVwFYAVkBWgBNAVsBXAFdAE4BXgFfAE8BYAFhAWIBYwDjAFAAUQFkAWUBZgFnAWgAeABSAHkBaQB7AHwAegFqAWsAoQFsAH0AsQBTAO4AVABVAW0BbgFvAFYBcADlAPwBcQFyAIkBcwBXAXQBdQF2AXcAWAB+AXgAgACBAH8BeQF6AXsBfAF9AFkAWgF+AX8BgAGBAFsAXADsAYIAugGDAF0BhADnAYUAwADBAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQCdAJ4CEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFACbAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04AEwAUABUAFgAXABgAGQAaABsAHANPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgC8APQDlwOYAPUA9gOZA5oDmwOcA50DngOfA6ADoQOiABEADwAdAB4AqwAEAKMAIgCiAMMAhwANAAYAEgA/A6MDpAOlA6YDpwOoA6kDqgOrAAsADABeAGAAPgBAA6wDrQOuA68DsAOxA7IDswAQA7QAsgCzA7UAQgO2A7cDuAO5A7oAxADFALQAtQC2ALcAqQCqAL4AvwAFAAoDuwO8A70DvgO/A8ADwQPCA8MDxAPFA8YDxwPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QCEAL0ABwPaAKYAhQCWA9sD3APdA94D3wPgA+ED4gPjA+QD5QPmA+cD6APpA+oD6wPsA+0D7gPvA/AD8QPyA/MD9AAOAO8A8AC4ACAAjwAhAB8AlQCUAJMApwCkAGEAQQCSAJwD9QP2AJoAmQClAJgD9wAIAMYD+AP5A/oD+wP8A/0D/gP/ALkEAAAjAAkAiACGAIsAigQBAIwAgwBfAOgAggQCAMIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcAI0A2
17326wDhAN4A2ACOANwAQwDfANoA4ADdANkEHQQeBB8EIAQhBCIEIwQkBCUEJgQnBCgEKQQqBCsELAQtBC4ELwQwBDEEMgQzBDQENQQ2BDcEOAQ5BDoEOwQ8BD0EPgQ/BEAEQQRCBEMERARFBEYERwRIBEkESgRLBEwETQROBE8EUARRBFIEUwRUBFUEVgZBYnJldmUHdW5pMDFDRAdBbWFjcm9uB0FvZ29uZWsKQXJpbmdhY3V0ZQdBRWFjdXRlC0NjaXJjdW1mbGV4CkNkb3RhY2NlbnQGRGNhcm9uBkRjcm9hdAZFYnJldmUGRWNhcm9uCkVkb3RhY2NlbnQHRW1hY3JvbgdFb2dvbmVrC0djaXJjdW1mbGV4B3VuaTAxMjIKR2RvdGFjY2VudARIYmFyC0hjaXJjdW1mbGV4AklKBklicmV2ZQdJbWFjcm9uB0lvZ29uZWsGSXRpbGRlC3VuaTAwQTQwMzAxC0pjaXJjdW1mbGV4B3VuaTAxMzYGTGFjdXRlBkxjYXJvbgd1bmkwMTNCBExkb3QGTmFjdXRlBk5jYXJvbgd1bmkwMTQ1A0VuZwZPYnJldmUNT2h1bmdhcnVtbGF1dAdPbWFjcm9uC09zbGFzaGFjdXRlBlJhY3V0ZQZSY2Fyb24HdW5pMDE1NgZTYWN1dGULU2NpcmN1bWZsZXgHdW5pMDIxOARUYmFyBlRjYXJvbgd1bmkwMTYyB3VuaTAyMUEGVWJyZXZlDVVodW5nYXJ1bWxhdXQHVW1hY3JvbgdVb2dvbmVrBVVyaW5nBlV0aWxkZQZXYWN1dGULV2NpcmN1bWZsZXgJV2RpZXJlc2lzBldncmF2ZQtZY2lyY3VtZmxleAZZZ3JhdmUGWmFjdXRlClpkb3RhY2NlbnQGYWJyZXZlB3VuaTAxQ0UHYW1hY3Jvbgdhb2dvbmVrCmFyaW5nYWN1dGUHYWVhY3V0ZQtjY2lyY3VtZmxleApjZG90YWNjZW50BmRjYXJvbgZlYnJldmUGZWNhcm9uCmVkb3RhY2NlbnQHZW1hY3Jvbgdlb2dvbmVrC2djaXJjdW1mbGV4B3VuaTAxMjMKZ2RvdGFjY2VudARoYmFyC2hjaXJjdW1mbGV4BmlicmV2ZQlpLmxvY2xUUksCaWoHaW1hY3Jvbgdpb2dvbmVrBml0aWxkZQd1bmkwMjM3C3VuaTAwNkEwMzAxC2pjaXJjdW1mbGV4B3VuaTAxMzcMa2dyZWVubGFuZGljBmxhY3V0ZQZsY2Fyb24HdW5pMDEzQwRsZG90Bm5hY3V0ZQtuYXBvc3Ryb3BoZQZuY2Fyb24HdW5pMDE0NgNlbmcGb2JyZXZlDW9odW5nYXJ1bWxhdXQHb21hY3Jvbgtvc2xhc2hhY3V0ZQZyYWN1dGUGcmNhcm9uB3VuaTAxNTcGc2FjdXRlC3NjaXJjdW1mbGV4B3VuaTAyMTkFbG9uZ3MEdGJhcgZ0Y2Fyb24HdW5pMDE2Mwd1bmkwMjFCBnVicmV2ZQ11aHVuZ2FydW1sYXV0B3VtYWNyb24HdW9nb25lawV1cmluZwZ1dGlsZGUGd2FjdXRlC3djaXJjdW1mbGV4CXdkaWVyZXNpcwZ3Z3JhdmULeWNpcmN1bWZsZXgGeWdyYXZlBnphY3V0ZQp6ZG90YWNjZW50CGZfZi5saWdhCmZfZl9pLmxpZ2EKZl9mX2oubGlnYQpmX2ZfbC5saWdhCGZfai5saWdhBGEuc2MJYWFjdXRlLnNjCWFicmV2ZS5zYwp1bmkwMUNFLnNjDmFjaXJjdW1mbGV4LnNjDGFkaWVyZXNpcy5zYwlhZ3JhdmUuc2MKYW1hY3Jvbi5zYwphb2dvbmVrLnNjCGFyaW5nLnNjDWFyaW5nYWN1dGUuc2MJYXRpbGRlLnNjBWFlLnNjCmFlYWN1dGUuc2MEYi5zYwRjLnNjCWNhY3V0ZS5zYwljY2Fyb24uc2MLY2NlZGlsbGEuc2MOY2NpcmN1bWZsZXguc2MNY2RvdGFjY2VudC5zYwRkLnNjBmV0aC5zYwlkY2Fyb24uc2MJZGNyb2F0LnNjBGUuc2MJZWFjdXRlLnNjCWVicmV2ZS5zYwllY2Fyb24uc2MOZWNpcmN1bWZsZXguc2MMZWRpZXJlc2lzLnNjDWVkb3RhY2NlbnQuc2MJZWdyYXZlLnNjCmVtYW
17326Nyb24uc2MKZW9nb25lay5zYwRmLnNjBWZpLnNjBWZsLnNjBGcuc2MJZ2JyZXZlLnNjDmdjaXJjdW1mbGV4LnNjCnVuaTAxMjMuc2MNZ2RvdGFjY2VudC5zYwRoLnNjB2hiYXIuc2MOaGNpcmN1bWZsZXguc2MEaS5zYwtkb3RsZXNzaS5zYwlpYWN1dGUuc2MJaWJyZXZlLnNjDmljaXJjdW1mbGV4LnNjDGlkaWVyZXNpcy5zYwxpLnNjLmxvY2xUUksJaWdyYXZlLnNjBWlqLnNjCmltYWNyb24uc2MKaW9nb25lay5zYwlpdGlsZGUuc2MEai5zYwp1bmkwMjM3LnNjDnVuaTAwNkEwMzAxLnNjDmpjaXJjdW1mbGV4LnNjBGsuc2MKdW5pMDEzNy5zYwRsLnNjCWxhY3V0ZS5zYwlsY2Fyb24uc2MKdW5pMDEzQy5zYwdsZG90LnNjCWxzbGFzaC5zYwRtLnNjBG4uc2MJbmFjdXRlLnNjCW5jYXJvbi5zYwp1bmkwMTQ2LnNjBmVuZy5zYwludGlsZGUuc2MEby5zYwlvYWN1dGUuc2MJb2JyZXZlLnNjDm9jaXJjdW1mbGV4LnNjDG9kaWVyZXNpcy5zYwlvZ3JhdmUuc2MQb2h1bmdhcnVtbGF1dC5zYwpvbWFjcm9uLnNjCW9zbGFzaC5zYw5vc2xhc2hhY3V0ZS5zYwlvdGlsZGUuc2MFb2Uuc2MEcC5zYwh0aG9ybi5zYwRxLnNjBHIuc2MJcmFjdXRlLnNjCXJjYXJvbi5zYwp1bmkwMTU3LnNjBHMuc2MJc2FjdXRlLnNjCXNjYXJvbi5zYwtzY2VkaWxsYS5zYw5zY2lyY3VtZmxleC5zYwp1bmkwMjE5LnNjDWdlcm1hbmRibHMuc2MEdC5zYwd0YmFyLnNjCXRjYXJvbi5zYwp1bmkwMTYzLnNjCnVuaTAyMUIuc2MEdS5zYwl1YWN1dGUuc2MJdWJyZXZlLnNjDnVjaXJjdW1mbGV4LnNjDHVkaWVyZXNpcy5zYwl1Z3JhdmUuc2MQdWh1bmdhcnVtbGF1dC5zYwp1bWFjcm9uLnNjCnVvZ29uZWsuc2MIdXJpbmcuc2MJdXRpbGRlLnNjBHYuc2MEdy5zYwl3YWN1dGUuc2MOd2NpcmN1bWZsZXguc2MMd2RpZXJlc2lzLnNjCXdncmF2ZS5zYwR4LnNjBHkuc2MJeWFjdXRlLnNjDnljaXJjdW1mbGV4LnNjDHlkaWVyZXNpcy5zYwl5Z3JhdmUuc2MEei5zYwl6YWN1dGUuc2MJemNhcm9uLnNjDXpkb3RhY2NlbnQuc2MGYS5zdXBzBmIuc3VwcwZjLnN1cHMGZC5zdXBzBmUuc3VwcwZmLnN1cHMGZy5zdXBzBmguc3VwcwZpLnN1cHMGai5zdXBzBmsuc3VwcwZsLnN1cHMGbS5zdXBzBm4uc3VwcwZvLnN1cHMGcC5zdXBzBnEuc3VwcwZyLnN1cHMGcy5zdXBzBnQuc3VwcwZ1LnN1cHMGdi5zdXBzBncuc3VwcwZ4LnN1cHMGeS5zdXBzBnouc3Vwcwd1bmkwNDEwB3VuaTA0MTEHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MDMHdW5pMDQ5MAd1bmkwNDE0B3VuaTA0MTUHdW5pMDQwMAd1bmkwNDAxB3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MTkHdW5pMDQwRAd1bmkwNDFBB3VuaTA0MEMHdW5pMDQxQgd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjMHdW5pMDQwRQd1bmkwNDI0B3VuaTA0MjUHdW5pMDQyNwd1bmkwNDI2B3VuaTA0MjgHdW5pMDQyOQd1bmkwNDBGB3VuaTA0MkMHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MDkHdW5pMDQwQQd1bmkwNDA1B3VuaTA0MDQHdW5pMDQyRAd1bmkwNDA2B3VuaTA0MDcHdW5pMDQwOAd1bmkwNDBCB3VuaTA0MkUHdW5pMDQyRgd1bmkwNDAyB3VuaTA0NjIHdW5pMDQ3Mgd1bmkwNDc0B3VuaTA0OTIHdW5pMDQ5QQd1bmkwNEEyB3VuaTA0QUUHdW5pMDRCMAd1bmkwNEJBB3VuaTA0RDgHdW5pMDRFOAd1bmkwNDMwB3VuaTA0MzEHdW5pMDQzMgd1bmkwNDMzB3VuaTA0NTMHdW5pMDQ5MQd1bmkwNDM0B3VuaTA0MzUHdW5pMDQ1MAd1bmkwNDUxB3VuaTA0MzYHdW5pMDQzNwd1bmkwNDM4B3VuaTA0MzkHdW5pMDQ1RAd1bmkwNDNBB3VuaTA0NUMHdW5pMDQzQgd1bmkwNDNDB3VuaTA0M0QHdW5pMDQzRQd1bmkwNDNGB3VuaTA0NDAHdW5pMDQ0MQd1bmkwNDQyB3VuaTA0NDMHdW5pMDQ1RQd1bmkwNDQ0B3VuaTA0NDUHdW5pMDQ0Nwd1bmkwNDQ2B3VuaTA0NDgHdW5pMDQ0OQd1bmkwNDVGB3VuaTA0NEMHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDU1B3VuaTA0NTQHdW5pMDQ0RAd1bmkwNDU2B3VuaTA0NTcHdW5pMDQ1OAd1bmkwNDVCB3VuaTA0NEUHdW5pMDQ0Rgd1bmkwNDUyB3VuaTA0NjMHdW5pMDQ3Mwd1bmkwNDc1B3VuaTA0OTMHdW5pMDQ5Qgd1bmkwNEEzB3VuaTA0QUYHdW5pMDRCMQd1bmkwNEJCB3VuaTA0RDkHdW5pMDRFOQ91bmkwNDMzLmxvY2xCR1IPdW5pMDQzNC5sb2NsQkdSD3VuaTA0M0YubG9jbEJHUg91bmkwNDQyLmxvY2xCR1IPdW5pMDQzMS5sb2NsU1JCCnVuaTA0MzAuc2MKdW5pMDQzMS5zYwp1bmkwNDMyLnNjCnVuaTA0MzMuc2MKdW5pMDQ1My5zYwp1bmkwNDkxLnNjCnVuaTA0MzQuc2MKdW5pMDQzNS5zYwp1bmkwNDUwLnNjCnVuaTA0NTEuc2MKdW5pMDQzNi5zYwp1bmkwNDM3LnNjCnVuaTA0Mzguc2MKdW5pMDQzOS5zYwp1bmkwNDVELnNjCnVuaTA0M0Euc2MKdW5pMDQ1Qy5zYwp1bmkwNDNCLnNjCnVuaTA0M0Muc2MKdW5pMDQzRC5zYwp1bmkwNDNFLnNjCnVuaTA0M0Yuc2MKdW5pMDQ0MC5zYwp1bmkwNDQxLnNjCnVuaTA0NDIuc2MKdW5pMDQ0My5zYwp1bmkwNDVFLnNjCnVuaTA0NDQuc2MKdW5pMDQ0NS5zYwp1bmkwNDQ3LnNjCnVuaTA0NDYuc2MKdW5pMDQ0OC5zYwp1bmkwNDQ5LnNjCnVuaTA0NUYuc2MKdW5pMDQ0Qy5zYwp1bmkwNDRBLnNjCnVuaTA0NEIuc2MKdW5pMDQ1OS5zYwp1bmkwNDVBLnNjCnVuaTA0NTUuc2MKdW5pMDQ1NC5zYwp1bmkwNDRELnNjCnVuaTA0NTYuc2MKdW5pMDQ1Ny5zYwp1bmkwNDU4LnNjCnVuaTA0NUIuc2MKdW5pMDQ0RS5zYwp1bmkwNDRGLnNjCnVuaTA0NTIuc2MKdW5pMDQ2My5zYwp1bmkwNDczLnNjCnVuaTA0NzUuc2MKdW5pMDQ5My5zYwp1bmkwNDlCLnNjCnVuaTA0QTMuc2MKdW5pMDRBRi5zYwp1bmkwNEIxLnNjCnVuaTA0QkIuc2MKdW5pMDREOS5zYwp1bmkwNEU5LnNjBUFscGhhBEJldGEFR2FtbWEHdW5pMDM5NAdFcHNpbG9uBFpldGEDRXRhBVRoZXRhBElvdGEFS2FwcGEGTGFtYmRhAk11Ak51AlhpB09taWNyb24CUGkDUmhvBVNpZ21hA1RhdQdVcHNpbG9uA1BoaQNDaGkDUHNpB3VuaTAzQTkKQWxwaGF0b25vcwxFcHNpbG9udG9ub3MIRXRhdG9ub3MJSW90YXRvbm9zDE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcwxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24DcmhvB3VuaTAzQzIFc2lnbWEDdGF1B3Vwc2lsb24DcGhpA2NoaQNwc2kFb21lZ2EJaW90YXRvbm9zDGlvdGFkaWVyZXNpcxFpb3RhZGllcmVzaXN0b25vcwx1cHNpbG9udG9ub3MPdXBzaWxvbmRpZXJlc2lzFHVwc2lsb25kaWVyZXNpc3Rvbm9zDG9taWNyb250b25vcwpvbWVnYXRvbm9zCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWJldGEuc3MwMgp0aGV0YS5zczAyB3hpLnNzMDIIcGhpLnNzMDIIYWxwaGEuc2MHYmV0YS5zYwhnYW1tYS5zYwhkZWx0YS5zYwplcHNpbG9uLnNjB3pldGEuc2MGZXRhLnNjCHRoZXRhLnNjB2lvdGEuc2MIa2FwcGEuc2MJbGFtYmRhLnNjCnVuaTAzQkMuc2MFbnUuc2MFeGkuc2MKb21pY3Jvbi5zYwVwaS5zYwZyaG8uc2MKdW5pMDNDMi5zYwhzaWdtYS5zYwZ0YXUuc2MKdXBzaWxvbi5zYwZwaGkuc2MGY2hpLnNjBnBzaS5zYwhvbWVnYS5zYwxpb3RhdG9ub3Muc2MPaW90YWRpZXJlc2lzLnNjD3Vwc2lsb250b25vcy5zYxJ1cHNpbG9uZGllcmVzaXMuc2MPb21pY3JvbnRvbm9zLnNjDW9tZWdhdG9ub3Muc2MNYWxwaGF0b25vcy5zYw9lcHNpbG9udG9ub3Muc2MLZXRhdG9ub3Muc2MHemVyby5sZgZvbmUubGYGdHdvLmxmCHRocmVlLmxmB2ZvdXIubGYHZml2ZS5sZgZzaXgubGYIc2V2ZW4ubGYIZWlnaHQubGYHbmluZS5sZgx6ZXJvLmxmLnplcm8IemVyby5vc2YHb25lLm9zZgd0d28ub3NmCXRocmVlLm9zZghmb3VyLm9zZghmaXZlLm9zZgdzaXgub3NmCXNldmVuLm9zZgllaWdodC5vc2YIbmluZS5vc2YJemVyby50b3NmCG9uZS50b3NmCHR3by50b3NmCnRocmVlLnRvc2YJZm91ci50b3NmCWZpdmUudG9zZghzaXgudG9zZgpzZXZlbi50b3NmCmVpZ2h0LnRvc2YJbmluZS50b3NmCXplcm8uemVybwd1bmkyMDgwB3VuaTIwODEHdW5pMjA4Mgd1bmkyMDgzB3VuaTIwODQHdW5pMjA4NQd1bmkyMDg2B3VuaTIwODcHdW5pMjA4OAd1bmkyMDg5CXplcm8uZG5vbQhvbmUuZG5vbQh0d28uZG5vbQp0aHJlZS5kbm9tCWZvdXIuZG5vbQlmaXZlLmRub20Ic2l4LmRub20Kc2V2ZW4uZG5vbQplaWdodC5kbm9tCW5pbmUuZG5vbQl6ZXJvLm51bXIIb25lLm51bXIIdHdvLm51bXIKdGhyZWUubnVtcglmb3VyLm51bXIJZml2ZS5udW1yCHNpeC5udW1yCnNldmVuLm51bXIKZWlnaHQubnVtcgluaW5lLm51bXIHdW5pMjA3MAd1bmkwMEI5B3VuaTAwQjIHdW5pMDBCMwd1bmkyMDc0B3VuaTIwNzUHdW5pMjA3Ngd1bmkyMDc3B3VuaTIwNzgHdW5pMjA3OQd1bmkyMTUzB3VuaTIxNTQHdW5pMjE1NQd1bmkyMTU2B3VuaTIxNTcHdW5pMjE1OAd1bmkyMTU5B3VuaTIxNUEJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMPZXhjbGFtZG93bi5jYXNlEXF1ZXN0aW9uZG93bi5jYXNlE3BlcmlvZGNlbnRlcmVkLmNhc2ULYnVsbGV0LmNhc2UNbnVtYmVyc2lnbi5sZg5udW1iZXJzaWduLm9zZg9udW1iZXJzaWduLnRvc2YHdW5pMjA4RAd1bmkyMDhFB3VuaTIwN0QHdW5pMjA3RQ5wYXJlbmxlZnQuY2FzZQ9wYXJlbnJpZ2h0LmNhc2UOYnJhY2VsZWZ0LmNhc2UPYnJhY2VyaWdodC5jYXNlEGJyYWNrZXRsZWZ0LmNhc2URYnJhY2tldHJpZ2h0LmNhc2UHdW5pMDBBRAd1bmkyMDE1C2h5cGhlbi5jYXNlDHVuaTAwQUQuY2FzZQtlbmRhc2guY2FzZQtlbWRhc2guY2FzZQx1bmkyMDE1LmNhc2USZ3VpbGxlbW90bGVmdC5jYXNlE2d1aWxsZW1vd
17326HJpZ2h0LmNhc2USZ3VpbHNpbmdsbGVmdC5jYXNlE2d1aWxzaW5nbHJpZ2h0LmNhc2UOcGFyZW5sZWZ0LmRub20PcGFyZW5yaWdodC5kbm9tC3BlcmlvZC5kbm9tCmNvbW1hLmRub20OcGFyZW5sZWZ0Lm51bXIPcGFyZW5yaWdodC5udW1yC3BlcmlvZC5udW1yCmNvbW1hLm51bXIMcGFyZW5sZWZ0LnNjDXBhcmVucmlnaHQuc2MMYnJhY2VsZWZ0LnNjDWJyYWNlcmlnaHQuc2MOYnJhY2tldGxlZnQuc2MPYnJhY2tldHJpZ2h0LnNjCWV4Y2xhbS5zYw1leGNsYW1kb3duLnNjC3F1ZXN0aW9uLnNjD3F1ZXN0aW9uZG93bi5zYwhzbGFzaC5zYwxiYWNrc2xhc2guc2MJYW5vdGVsZWlhB3VuaTAzN0UHdW5pMjAwMwd1bmkyMDAyB3VuaTIwMEEHdW5pMDBBMAd1bmkyMDA5BEV1cm8HY2VudC5sZglkb2xsYXIubGYHRXVyby5sZglmbG9yaW4ubGYLc3RlcmxpbmcubGYGeWVuLmxmCGNlbnQub3NmCmRvbGxhci5vc2YIRXVyby5vc2YKZmxvcmluLm9zZgxzdGVybGluZy5vc2YHeWVuLm9zZhBzdGVybGluZy5sZi5zczAxEXN0ZXJsaW5nLm9zZi5zczAxDXN0ZXJsaW5nLnNzMDESc3RlcmxpbmcudG9zZi5zczAxCWNlbnQudG9zZgtkb2xsYXIudG9zZglFdXJvLnRvc2YLZmxvcmluLnRvc2YNc3RlcmxpbmcudG9zZgh5ZW4udG9zZgd1bmkyMDhDB3VuaTIwN0MHdW5pMjA4Qgd1bmkyMDdCB3VuaTIxMjYHdW5pMjIwNgd1bmkwMEI1B3VuaTIwOEEHdW5pMjA3QQpwZXJjZW50LmxmDnBlcnRob3VzYW5kLmxmC3BlcmNlbnQub3NmD3BlcnRob3VzYW5kLm9zZgxwZXJjZW50LnRvc2YQcGVydGhvdXNhbmQudG9zZgd1bmlGOEZGB3VuaTIxMTcHdW5pMjExMwllc3RpbWF0ZWQHdW5pMjExNglwbHVzLmRub20KbWludXMuZG5vbQplcXVhbC5kbm9tCXBsdXMubnVtcgptaW51cy5udW1yCmVxdWFsLm51bXIFYXQuc2MMYW1wZXJzYW5kLnNjB3VuaTAzNzQHdW5pMDM3NQd1bmkwMzA4B3VuaTAzMDcJZ3JhdmVjb21iCWFjdXRlY29tYgd1bmkwMzBCB3VuaTAzMDIHdW5pMDMwQwd1bmkwMzA2B3VuaTAzMEEJdGlsZGVjb21iB3VuaTAzMDQHdW5pMDMyNgd1bmkwMzI3B3VuaTAzMjgMdW5pMDMwOC5jYXNlDHVuaTAzMDcuY2FzZQ5ncmF2ZWNvbWIuY2FzZQ5hY3V0ZWNvbWIuY2FzZQx1bmkwMzBCLmNhc2UMdW5pMDMwMi5jYXNlDHVuaTAzMEMuY2FzZQx1bmkwMzA2LmNhc2UMdW5pMDMwQS5jYXNlDnRpbGRlY29tYi5jYXNlDHVuaTAzMDQuY2FzZQphY3V0ZS5jYXNlCmJyZXZlLmNhc2UKY2Fyb24uY2FzZQ9jaXJjdW1mbGV4LmNhc2UNZGllcmVzaXMuY2FzZQ5kb3RhY2NlbnQuY2FzZQpncmF2ZS5jYXNlEWh1bmdhcnVtbGF1dC5jYXNlC21hY3Jvbi5jYXNlCXJpbmcuY2FzZQp0aWxkZS5jYXNlCnVuaTAzMDguc2MKdW5pMDMwNy5zYwxncmF2ZWNvbWIuc2MMYWN1dGVjb21iLnNjCnVuaTAzMEIuc2MKdW5pMDMwMi5zYwp1bmkwMzBDLnNjCnVuaTAzMDYuc2MKdW5pMDMwQS5zYwx0aWxkZWNvbWIuc2MKdW5pMDMwNC5zYwhhY3V0ZS5zYwhicmV2ZS5zYwhjYXJvbi5zYw1jaXJjdW1mbGV4LnNjC2RpZXJlc2lzLnNjDGRvdGFjY2VudC5zYwhncmF2ZS5zYw9odW5nYXJ1bWxhdXQuc2MJbWFjcm9uLnNjB3Jpbmcuc2MIdGlsZGUuc2MFdG9ub3MKdG9ub3MuY2FzZQ1kaWVyZXNpc3Rvbm9zCHRvbm9zLnNjC2JyZXZlY29tYmN5EGJyZXZlY29tYmN5LmNhc2UOYnJldmVjb21iY3kuc2MOcGVyaW9kaW5mZXJpb3INY29tbWFpbmZlcmlvcg5wZXJpb2RzdXBlcmlvcg1jb21tYXN1cGVyaW9yB2JyZXZlY3kMYnJldmVjeS5jYXNlCmJyZXZlY3kuc2MAAQAB//8ADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQARAA1ADUCHQAAAiX/9wBEAEQANQA1Ah0AAP/3AiUAAP/3AEIAQgAwADACrwAAAeIAAP8pArr/9wHs//f/KQBCAEIAMAAwAq//9wLNAeL/9/8pArr/9wLNAez/9/8pADQANAAmACYC2gJmAVcAzQLaAmsBUgDNADQANAAmACYC2gJmAVcAzQLaAmsBUgDNAEIAQgAwADACrwAAAsUB4gAA/yUCuv/3AsUB7P/3/yUAOAA4ACoAKgDs/5MA8v+OAACwACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMjRLIAAQBDYEItsAEssCBgZi2wAiwjISMhLbADLCBkswMUFQBCQ7ATQyBgYEKxAhRDQrElA0OwAkNUeCCwDCOwAkNDYWSwBFB4sgICAkNgQrAhZRwhsAJDQ7IOFQFCHCCwAkMjQrITARNDYEIjsABQWGVZshYBAkNgQi2wBCywAyuwFUNYIyEjIbAWQ0MjsABQWGVZGyBkILDAULAEJlqyKAENQ0VjRbAGRVghsAMlWVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBDUNFY0VhZLAoUFghsQENQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAIlsAxDY7AAUliwAEuwClBYIbAMQxtLsB5QWCGwHkthuBAAY7AMQ2O4BQBiWVlkYVmwAStZWSOwAFBYZVlZIGSwFkMjQlktsAUsIEUgsAQlYWQgsAdDUFiwByNCsAgjQhshIVmwAWAtsAYsIyEjIbADKyBksQdiQiCwCCNCsAZFWBuxAQ1DRWOxAQ1DsAhgRWOwBSohILAIQyCKIIqwASuxMAUlsAQmUVhgUBthUllYI1khWSCwQFNYsAErGyGwQFkjsABQWGVZLbAHLLAJQyuyAAIAQ2BCLbAILLAJI0IjILAAI0JhsAJiZrABY7ABYLAHKi2wCSwgIEUgsA5DY7gEAGIgsABQWLBAYFlmsAFjYESwAWAtsAossgkOAENFQiohsgABAENgQi2wCyywAEMjRLIAAQBDYEItsAwsICBFILABKyOwAEOwBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsA0sICBFILABKyOwAEOwBCVgIEWKI2EgZLAkUFiwABuwQFkjsABQWGVZsAMlI2FERLABYC2wDiwgsAAjQrMNDAADRVBYIRsjIVkqIS2wDyyxAgJFsGRhRC2wECywAWAgILAPQ0qwAFBYILAPI0JZsBBDSrAAUlggsBAjQlktsBEsILAQYmawAWMguAQAY4ojYbARQ2AgimAgsBEjQiMtsBIsS1RYsQRkRFkksA1lI3gtsBMsS1FYS1NYsQRkRFkbIVkksBNlI3gtsBQssQASQ1VYsRISQ7ABYUKwEStZsABDsAIlQrEPAiVCsRACJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsBAqISOwAWEgiiNhsBAqIRuxAQBDYLACJUKwAiVhsBAqIVmwD0NHsBBDR2CwAmIgsABQWLBAYFlmsAFjILAOQ2O4BABiILAAUFiwQGBZZrABY2CxAAATI0SwAUOwAD6yAQEBQ2BCLbAVLACxAAJFVFiwEiNCIEWwDiNCsA0jsAhgQiCwFCNCIGCwAWG3GBgBABEAEwBCQkKKYCCwFENgsBQjQrEUCCuwiysbIlktsBYssQAVKy2wFyyxARUrLbAYLLECFSsts
17326BkssQMVKy2wGiyxBBUrLbAbLLEFFSstsBwssQYVKy2wHSyxBxUrLbAeLLEIFSstsB8ssQkVKy2wKywjILAQYmawAWOwBmBLVFgjIC6wAV0bISFZLbAsLCMgsBBiZrABY7AWYEtUWCMgLrABcRshIVktsC0sIyCwEGJmsAFjsCZgS1RYIyAusAFyGyEhWS2wICwAsA8rsQACRVRYsBIjQiBFsA4jQrANI7AIYEIgYLABYbUYGAEAEQBCQopgsRQIK7CLKxsiWS2wISyxACArLbAiLLEBICstsCMssQIgKy2wJCyxAyArLbAlLLEEICstsCYssQUgKy2wJyyxBiArLbAoLLEHICstsCkssQggKy2wKiyxCSArLbAuLCA8sAFgLbAvLCBgsBhgIEMjsAFgQ7ACJWGwAWCwLiohLbAwLLAvK7AvKi2wMSwgIEcgILAOQ2O4BABiILAAUFiwQGBZZrABY2AjYTgjIIpVWCBHICCwDkNjuAQAYiCwAFBYsEBgWWawAWNgI2E4GyFZLbAyLACxAAJFVFixDgZFQrABFrAxKrEFARVFWDBZGyJZLbAzLACwDyuxAAJFVFixDgZFQrABFrAxKrEFARVFWDBZGyJZLbA0LCA1sAFgLbA1LACxDgZFQrABRWO4BABiILAAUFiwQGBZZrABY7ABK7AOQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixNAEVKiEtsDYsIDwgRyCwDkNjuAQAYiCwAFBYsEBgWWawAWNgsABDYTgtsDcsLhc8LbA4LCA8IEcgsA5DY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2GwAUNjOC2wOSyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsjgBARUUKi2wOiywABawFyNCsAQlsAQlRyNHI2GxDABCsAtDK2WKLiMgIDyKOC2wOyywABawFyNCsAQlsAQlIC5HI0cjYSCwBiNCsQwAQrALQysgsGBQWCCwQFFYswQgBSAbswQmBRpZQkIjILAKQyCKI0cjRyNhI0ZgsAZDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwBENgZCOwBUNhZFBYsARDYRuwBUNgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsApDRrACJbAKQ0cjRyNhYCCwBkOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AGQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDwssAAWsBcjQiAgILAFJiAuRyNHI2EjPDgtsD0ssAAWsBcjQiCwCiNCICAgRiNHsAErI2E4LbA+LLAAFrAXI0KwAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsD8ssAAWsBcjQiCwCkMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wQCwjIC5GsAIlRrAXQ1hQG1JZWCA8WS6xMAEUKy2wQSwjIC5GsAIlRrAXQ1hSG1BZWCA8WS6xMAEUKy2wQiwjIC5GsAIlRrAXQ1hQG1JZWCA8WSMgLkawAiVGsBdDWFIbUFlYIDxZLrEwARQrLbBDLLA6KyMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrLbBELLA7K4ogIDywBiNCijgjIC5GsAIlRrAXQ1hQG1JZWCA8WS6xMAEUK7AGQy6wMCstsEUssAAWsAQlsAQmICAgRiNHYbAMI0IuRyNHI2GwC0MrIyA8IC4jOLEwARQrLbBGLLEKBCVCsAAWsAQlsAQlIC5HI0cjYSCwBiNCsQwAQrALQysgsGBQWCCwQFFYswQgBSAbswQmBRpZQkIjIEewBkOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILAEQ2BkI7AFQ2FkUFiwBENhG7AFQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbEwARQrLbBHLLEAOisusTABFCstsEgssQA7KyEjICA8sAYjQiM4sTABFCuwBkMusDArLbBJLLAAFSBHsAAjQrIAAQEVFBMusDYqLbBKLLAAFSBHsAAjQrIAAQEVFBMusDYqLbBLLLEAARQTsDcqLbBMLLA5Ki2wTSywABZFIyAuIEaKI2E4sTABFCstsE4ssAojQrBNKy2wTyyyAABGKy2wUCyyAAFGKy2wUSyyAQBGKy2wUiyyAQFGKy2wUyyyAABHKy2wVCyyAAFHKy2wVSyyAQBHKy2wViyyAQFHKy2wVyyzAAAAQystsFgsswABAEMrLbBZLLMBAABDKy2wWiyzAQEAQystsFssswAAAUMrLbBcLLMAAQFDKy2wXSyzAQABQystsF4sswEBAUMrLbBfLLIAAEUrLbBgLLIAAUUrLbBhLLIBAEUrLbBiLLIBAUUrLbBjLLIAAEgrLbBkLLIAAUgrLbBlLLIBAEgrLbBmLLIBAUgrLbBnLLMAAABEKy2waCyzAAEARCstsGksswEAAEQrLbBqLLMBAQBEKy2wayyzAAABRCstsGwsswABAUQrLbBtLLMBAAFEKy2wbiyzAQEBRCstsG8ssQA8Ky6xMAEUKy2wcCyxADwrsEArLbBxLLEAPCuwQSstsHIssAAWsQA8K7BCKy2wcyyxATwrsEArLbB0LLEBPCuwQSstsHUssAAWsQE8K7BCKy2wdiyxAD0rLrEwARQrLbB3LLEAPSuwQCstsHgssQA9K7BBKy2weSyxAD0rsEIrLbB6LLEBPSuwQCstsHsssQE9K7BBKy2wfCyxAT0rsEIrLbB9LLEAPisusTABFCstsH4ssQA+K7BAKy2wfyyxAD4rsEErLbCALLEAPiuwQistsIEssQE+K7BAKy2wgiyxAT4rsEErLbCDLLEBPiuwQistsIQssQA/Ky6xMAEUKy2whSyxAD8rsEArLbCGLLEAPyuwQSstsIcssQA/K7BCKy2wiCyxAT8rsEArLbCJLLEBPyuwQSstsIossQE/K7BCKy2wiyyyCwADRVBYsAYbsgQCA0VYIyEbIVlZQiuwCGWwAyRQeLEFARVFWDBZLQAAAABLuADIUlixAQGOWbABuQgACABjcLEAB0JACgB0ZFhMPC4ACAAqsQAHQkASeQRpCF0GUQZBCDMHKQUhBAgKKrEAB0JAEn0CcQZjBFcESQY6BS4DJQIICiqxAA9CQQoegBqAF4AUgBCADQAKgAiAAAgACyqxABdCQQoAQABAAEAAQABAAEAAQABAAAgACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAZERZG7EnAYhRWLoIgAABBECIY1RYuQADAGREWVlZWVlAEnsCawZfBFMEQwY1BSsDIwIIDiq4Af+FsASNsQIARLMFZAYAREQAAAAAAAEAAAAA") format("truetype"); 17327 font-weight: 400; 17328 font-style: normal 17329 } 17330 .feedback-popup-container { 17331 font-family: BMSHumanity; 17332 padding: 20px; 17333 border: 1px solid #d3d3d3; 17334 background-color: #ffffff; 17335 position: relative; 17336 } 17337 .feedback-popup-header { 17338 display: flex; 17339 justify-content: space-between; 17340 align-items: center; 17341 border-bottom: 1px solid #d3d3d3; 17342 padding-bottom: 10px; 17343 margin-bottom: 20px; 17344 } 17345 .feedback-popup-title { 17346 font-size: 18px; 17347 font-weight: bold; 17348 color: #595454; 17349 } 17350 .feedback-popup-content { 17351 font-size: 14px; 17352 color: #595454; 17353 margin-bottom: 20px; 17354 } 17355 </style> 17356 </head> 17357 <body> 17358 <div class="feedback-popup-container"> 17359 <div class="feedback-popup-header"> 17360 <span class="feedback-popup-image"><img src=${surveyHeading} alt=\'${surveyHeadingAlt}\'></span> 17361 </div> 17362 <p class="feedback-popup-content">${thankYouMessage}</p> 17363 </div> 17364 </body> 17365 </html> 17366 `); 17367 17368 // Close document write to ensure it renders properly 17369 thankYouWindow.document.close(); 17370 } else { 17371 // Fallback to modal 17372 modalContent.html(` 17373 <div class="feedback-popup-container"> 17374 <div class="feedback-popup-header">
17375 <span class="feedback-popup-image"><img src=${surveyHeading} alt=\'${surveyHeadingAlt}\'></span> 17376 </div> 17377 <p class="feedback-popup-content">${thankYouMessage}</p> 17378 </div> 17379 `); 17380 } 17381 closeModal(); 17382 } catch (e) { 17383 enableBodyScroll(); 17384 } 17385 }); 17386 17387 $(document).on('click', '#noPopupButton', function() { 17388 try { 17389 localStorage.setItem('consentpopupshown', 'true'); 17390 closeModal(); 17391 $('html').toggleClass('disable-page-scrolling'); 17392 } catch (e) { 17393 enableBodyScroll(); 17394 } 17395 }); 17396 17397 $(document).on('click', '#closePopupButton', function() { 17398 closeModal(); 17399 }); 17400 17401 function handleUnload() { 17402 if (yesClicked && thankYouWindow && !thankYouWindow.closed && yesButtonURL && yesButtonURL !== '#') { 17403 try { 17404 thankYouWindow.location.href = yesButtonURL; 17405 thankYouWindow.focus(); 17406 } catch (e) { 17407 window.open(yesButtonURL, '_blank'); 17408 } 17409 } 17410 } 17411 17412 $(window).on('beforeunload', handleUnload); 17413 17414 } 17415 }, CHECK_INTERVAL); 17416 } else { 17417 console.log("Consent popup already shown"); 17418 } 17419 } catch (e) { 17420 console.error("Error in popup logic:", e); 17421 } 17422} 17423 // to hide all the featured videos initially 17424 // var mode_videos_player=$(".video-player_mode") 17425 // mode_videos_player.hide(); 17426 17427 /*if($('#videotype').val() === 'dynamic' && $('#isdynamic').val() === 'true'){ 17428 var videoIdval = getQueryStringValue("videoid") 17429 if(typeof videoIdval === undefined || videoIdval == ''){ 17430 var videoIdrecentlyadded = $(".video-list-link:first").attr("videoId"); 17431 17432 var videoTitlerecentlyadded = $(".video-list-link:first", this).text(); 17433 17434 loadModeVideo(videoIdrecentlyadded, videoTitlerecentlyadded); 17435 } 17436 }*/ 17437$(document).on("click", ".mode_player .video-list-link, #mode_videos_list .video-list-link, #mode_videos_search_list .video-list-link, #mode_videos_search_list .video-list-link", function(event) { 17438 event.preventDefault(); 17439 17440 var videoId = $(this).attr("videoId"); 17441 17442 var videoTitle = $(".video-list-title", this).text(); 17443 17444 var videoIdurl = getQueryStringValue("videoid"); 17445 17446 var url = window.location.href; 17447 17448 var flag = false; 17449 17450 if(typeof videoIdurl == 'undefined' || videoIdurl ==''){ 17451 17452 if (url.indexOf('?') > -1){ 17453 url += '&videoid='+videoId 17454 }else{ 17455 url += '?videoid='+videoId 17456 } 17457 flag=true; 17458 window.location.href = url; 17459 17460 } 17461 17462 if(!flag){ 17463Â Â Â Â Â Â Â loadModeVideo(videoId, videoTitle); 17464 } 17465 17466 if(typeof $(".video-player-cont-dynamic") !== undefined){ 17467 $('html, body').animate({scrollTop: $(".video-player-cont-dynamic").offset().top-$('.header_fix').height()}, "slow"); 17468 } 17469 if(typeof $(".video-player-cont-static") !== undefined) { 17470 $('html, body').animate({scrollTop: $(".video-player-cont-static").offset().top-$('.header_fix').height()}, "slow");Â Â Â 17471 } 17472}) 17473 17474 if($(".mode_player").length>0){ 17475 var videoId = $(".mode_player .modeVideoID").val(); 17476 var inputs = $(".mode_player .modeVideoID"); 17477 var arrVideosID=[]; 17478 for(var i = 0; i < inputs.length; i++){ 17479 console.log("test",$(inputs[i]).val()); 17480 arrVideosID.push($(inputs[i]).val()); 17481 } 17482 17483 17484 17485 if(typeof videoId == 'undefined' || videoId ==''){ 17486 17487 videoId = getQueryStringValue("videoid"); 17488 17489 } 17490 //var videoId = getQueryStringValue("videoid") 17491 if(inputs.length>0) { 17492 var accountId = $("#accountId").val(); 17493 var websiteId = $("#websiteId").val(); 17494 if(isModeVideoDynamic){ 17495 if(videoId) { 17496 var accountId = $("#accountId").val(); 17497 var websiteId = $("#websiteId").val(); 17498 if($("#hideAction").val() !='true'){
17499 loadModeVideoDetails(videoId,accountId,websiteId,"dynamic"); 17500 } 17501 loadModeVideo(videoId); 17502 } 17503 }else{ 17504 for(let i=0;i<arrVideosID.length;i++){ 17505 if($("#hideAction").val() !='true'){ 17506 loadModeVideoDetails(arrVideosID[i],accountId,websiteId,"dynamic"); 17507 } 17508 loadModeVideo(arrVideosID[i]); 17509 } 17510 } 17511 } 17512 } 17513 /*if(videoId) { 17514 var accountId = $("#accountId").val(); 17515 var websiteId = $("#websiteId").val(); 17516 if($("#hideAction").val() !='true'){ 17517 loadModeVideoDetails(videoId,accountId,websiteId,"dynamic"); 17518 } 17519 loadModeVideo(videoId); 17520 }*/ 17521 if($(".mode_player .video-player-wrap").length) { 17522 videoModeDownload(); 17523 } 17524 17525 17526 17527 $(".mode_player #like_action,.mode_player #dislike_action,.mode_player #favourite_action").on("click", function(event){ 17528Â Â Â Â Â Â Â event.preventDefault(); 17529 console.log(event,"event") 17530 var videoIdUrl = $(".modeVideoID").val(); 17531 if(isModeVideoDynamic){ 17532 if(typeof videoIdUrl == undefined || videoIdUrl ==''){ 17533 videoIdUrl = getQueryStringValue("videoid") 17534 } 17535 }else{ 17536 var videoIdUrl=event.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("value"); 17537 } 17538 var accountId = $("#accountId").val(); 17539 var websiteId = $("#websiteId").val(); 17540 var type = $(this).attr("id"); 17541 var status = this.classList.contains('disabled-link'); 17542 17543 Â loadModeVideoDetails(videoIdUrl,accountId,websiteId,type,status); 17544Â Â Â }); 17545}); 17546 17547function loadModeVideoDetails(videoIdUrl,accountId,websiteId,type,status) { 17548 17549 if(status){ 17550 if(type == 'favourite_action'){ 17551 type = 'video_remove_favourite'; 17552 } 17553 } 17554 17555 var Payload = { 17556 "accountId": accountId, 17557 "videoId": videoIdUrl, 17558 "websiteId": websiteId, 17559 "type": type, 17560 "apiKey": $('#api_key').val(), 17561 "specialty": $('#video_player_specialty_dynamic').attr('specialty'), 17562 "therapeuticarea": $('#video_player_specialty_dynamic').attr('therapeuticarea'), 17563 "currentPage": $("#currentpage").val() 17564 }; 17565 17566 var emailShareValue = $("#emailShare").val() || ""; 17567 if (emailShareValue) { 17568 Payload.emailShare = emailShareValue; 17569 } 17570 17571 $.ajax({ 17572 type:"POST", 17573 url: "/bin/commercial/fetchVideosData", 17574 data: Payload, 17575 headers: { 17576 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 17577 }, 17578 success: function(response) { 17579 17580 console.log(response); 17581 displayModeValue(response); 17582 }, 17583 error: function(result) { 17584 $(".carousel").removeClass("loading"); 17585 //console.log(result); 17586 } 17587 }); 17588} 17589 17590function displayModeValue(response){ 17591 let initialLikeCount = parseInt($("#like_action span").text()) || 0; 17592 arrVideos=$(".mode_video_static_container"); 17593 if(isModeVideoDynamic){ 17594 if(response.type == 'dynamic'){ 17595 $("#like_action, #dislike_action").removeClass('disabled-link disabled'); 17596 if(response.liked == 'true'){ 17597 $("#like_action").addClass('disabled-link disabled'); 17598 } 17599 if(response.disliked == 'true'){ 17600 $("#dislike_action").addClass('disabled-link disabled'); 17601 } 17602 if(response.favourite == 'true'){ 17603 $("#favourite_action").addClass('disabled-link'); 17604 $("#favourite_action span").text($("#titleafteradding").val()); 17605 }else if(response.favourite == 'false'){ 17606 $("#favourite_action span").text($("#favtitle").val()); 17607 $("#favourite_action").removeClass('disabled-link'); 17608 } 17609 if(response.name){ 17610 $("#video_player_title_dynamic").text(response.name); 17611 } 17612 if(response.description){ 17613 $("#video_player_desc_dynamic").text(response.description); 17614 } 17615 if(response.description==""){ 17616 $("#video_player_desc_dynamic").text(""); 17617 } 17618 if(response.specialty){ 17619 /*var videoSpecialty = response.specialty.contains(",") ? response.specialty.split(",") : response.specialty; 17620 if(null != videoSpecialty){ 17621 videoSpecialty.forEach((x, i) => 17622 if($('#specialtyLoggedIn').val().includes(x[i].trim())){ 17623 $(".video-static-specialty").show(); 17624 break; 17625 }); 17626 }*/ 17627 $("#video_player_specialty_dynamic").text( $("#specialtylabel").val().concat(response.specialty)); 17628 $("#video_player_specialty_dynamic").attr('specialty',response.specialty); 17629 $("#video_player_specialty_dynamic").attr('therapeuticarea',response.therapeuticarea); 17630 } 17631 17632 17633 if(inputValue === "manual") { 17634 let videoId = response.videoId; // Assume response contains the video ID 17635 let isLiked = JSON.parse(localStorage.getItem('isLikedArray')) || []; 17636 let disLiked = JSON.parse(localStorage.getItem('isDislikedArray')) || []; 17637 17638 // Check if the video ID exists in the liked array 17639 if (isLiked.indexOf(videoId) !== -1) { 17640 // Add the 'disabled-link' class to the like button 17641 $("#like_action").addClass('disabled-link disabled'); 17642 }else if(disLiked.indexOf(videoId) !== -1) { 17643 $("#dislike_action").addClass('disabled-link disabled'); 17644 17645 } 17646 17647 17648 } 17649 17650 17651 } 17652 17653 17654else if(response.type == 'like_action'){ 17655 $("#like_action").addClass('disabled-link disabled'); 17656 $("#dislike_action").removeClass('disabled-link disabled'); 17657 let videoId = response.videoId; // Assume response contains the video ID 17658 let isLiked = JSON.parse(localStorage.getItem('isLikedArray')) || []; 17659 let isDisliked = JSON.parse(localStorage.getItem('isDislikedArray')) || []; 17660 17661 // Check if the video is in the disliked array, and remove it if it is 17662 if (isDisliked.indexOf(videoId) !== -1) { 17663 const index = isDisliked.indexOf(videoId); 17664 if (index > -1) { // only splice array when item is found 17665 isDisliked.splice(index, 1); // 2nd parameter means remove one item only 17666 } 17667 localStorage.setItem('isDislikedArray', JSON.stringify(isDisliked)); 17668 } 17669 17670 // Check if the video ID is not already in the liked array 17671 if (isLiked.indexOf(videoId) === -1) { 17672 isLiked.push(videoId); 17673 localStorage.setItem('isLikedArray', JSON.stringify(isLiked)); 17674 let currentLikeCount = parseInt($("#like_action span").text()) || initialLikeCount; 17675 $("#like_action").children('span').text(currentLikeCount + 1); 17676 } 17677 17678} 17679 17680else if(response.type == 'dislike_action'){ 17681 $("#dislike_action").addClass('disabled-link disabled'); 17682 $("#like_action").removeClass('disabled-link disabled'); 17683 let videoId = response.videoId; // Assume response contains the video ID 17684 let isLiked = JSON.parse(localStorage.getItem('isLikedArray')) || []; 17685 let isDisliked = JSON.parse(localStorage.getItem('isDislikedArray')) || []; 17686 17687 17688 if (isLiked.indexOf(videoId) !== -1) { 17689 const index = isLiked.indexOf(videoId); 17690 if (index > -1) { // only splice array when item is found 17691 isLiked.splice(index, 1); // 2nd parameter means remove one item only 17692 } 17693 localStorage.setItem('isLikedArray', JSON.stringify(isLiked)); 17694 } 17695 17696 17697 if (isDisliked.indexOf(videoId) === -1) { 17698 isDisliked.push(videoId); 17699 localStorage.setItem('isDislikedArray', JSON.stringify(isDisliked)); 17700 } 17701 17702
17703 let currentLikeCount = parseInt($("#like_action span").text()) || initialLikeCount; 17704 if (currentLikeCount > initialLikeCount) { 17705 response.likecount--; 17706 $("#like_action").children('span').text(response.likecount); 17707 } 17708} 17709 17710 else if(response.type == 'favourite_action'){ 17711 $("#favourite_action").addClass('disabled-link'); 17712 $("#favourite_action span").text($("#titleafteradding").val()); 17713 } 17714 else if(response.type == 'video_remove_favourite'){ 17715 17716 if($("#favourite_action").hasClass('disabled-link')){ 17717 $("#favourite_action").removeClass('disabled-link') 17718 $("#favourite_action span").text($("#favtitle").val()); 17719 } 17720 } 17721 if(response.name) { 17722 var videoidUrl=getQueryStringValue("videoid"); 17723 if(!(videoidUrl == undefined || videoidUrl == '')){ 17724 $(".cmp-breadcrumb__item[index='4'] span").text(response.name); 17725 $(".cmp-breadcrumb__item--active").removeClass("cmp-breadcrumb__item--active"); 17726 $(".cmp-breadcrumb__item[index='4']").removeClass("hide").addClass("cmp-breadcrumb__item--active"); 17727 $(".breadcrumb_mode").show().removeClass("white"); 17728 $(".video-player-title").text(response.name); 17729 } 17730 } 17731 $("#like_action").children('span').text(""); 17732 if(response.likecount > 0){ 17733 $("#like_action").children('span').text(response.likecount); 17734 // if(response.dislikeCount==0){ 17735 // $("#dislike_action").children('span').text(""); 17736 // } 17737 } 17738 if(response.dislikeCount > 0){ 17739 // $("#dislike_action").children('span').text(response.dislikeCount); 17740 if(response.likecount==0){ 17741 $("#like_action").children('span').text(""); 17742 } 17743 } 17744 }else{ 17745 for(let i=0;i<arrVideos.length;i++){ 17746 if(arrVideos[i].getAttribute("value")==response.videoId){ 17747 var like_action=arrVideos[i].querySelector('#like_action'); 17748 var dislike_action=arrVideos[i].querySelector('#dislike_action'); 17749 var favourite_action=arrVideos[i].querySelector('#favourite_action'); 17750 if(response.type == 'dynamic'){ 17751 $(like_action).removeClass('disabled-link disabled'); 17752 $(dislike_action).removeClass('disabled-link disabled'); 17753 17754 // var favourite_action=arrVideos[i].querySelector('#favourite_action'); 17755 17756 if(response.liked == 'true'){ 17757 like_action.classList.add("disabled-link", "disabled"); 17758 } 17759 if(response.disliked == 'true'){ 17760 dislike_action.classList.add("disabled-link", "disabled"); 17761 } 17762 if(response.favourite == 'true'){ 17763 favourite_action.classList.add('disabled-link'); 17764 17765 arrVideos[i].querySelector("#favourite_action span").innerHTML=$("#titleafteradding").val(); 17766 17767 17768 // $("#favourite_action span").text($("#titleafteradding").val()); 17769 }else if(response.favourite == 'false'){ 17770 arrVideos[i].querySelector("#favourite_action span").innerHTML=$("#favtitle").val(); 17771 // $("#favourite_action span").text($("#favtitle").val()); 17772 favourite_action.classList.remove('disabled-link'); 17773 // $("#favourite_action").removeClass('disabled-link'); 17774 } 17775 17776 if(response.name){ 17777 $("#video_player_title_dynamic").text(response.name); 17778 } 17779 if(response.description){ 17780 arrVideos[i].querySelector("#video_player_desc_dynamic").innerHTML=response.description; 17781 // $("#video_player_desc_dynamic").text(response.description); 17782 } 17783 if(response.description==""){ 17784 arrVideos[i].querySelector("#video_player_desc_dynamic").innerHTML=""; 17785 // $("#video_player_desc_dynamic").text(""); 17786 } 17787 if (response.therapeuticarea) { 17788 arrVideos[i].querySelector("#video_player_specialty_dynamic").setAttribute('therapeuticarea', response.therapeuticarea); 17789 } 17790 if(response.specialty){ 17791 // arrVideos[i].querySelector("#video_player_specialty_dynamic").innerHTML=$("#specialtylabel").val().concat(""); 17792 arrVideos[i].querySelector("#video_player_specialty_dynamic").innerHTML=$("#specialtylabel").val().concat(response.specialty); 17793 arrVideos[i].querySelector("#video_player_specialty_dynamic").setAttribute('specialty',response.specialty) 17794 17795 17796 // to hide featured video which doesn't match 17797 // var featured_video_shown_specialty=""; 17798 // var user_specialty=$('.video-player_mode').find("#specialtyLoggedIn").val() 17799 // var featured_video_specialty_list=[]; 17800 // $(".video-player-specialty").map((key,val)=> 17801 // { 17802 // featured_video_specialty_list.push($(val).attr("specialty")) 17803 // }) 17804 17805 // featured_video_specialty_list.sort(function(a, b){ 17806 // return a.length - b.length; 17807 // }); 17808 17809 // var specialtyMatches=false; 17810 // var multi_specialty_check=false; 17811 17812 // featured_video_specialty_list.map((featured_video_single_specialty,key)=>{ 17813 // specialtyMatches=false; 17814 // var featured_video_specialty_single_list=[]; 17815 // var specialty_single_length; 17816 // if(specialtyMatches && multi_specialty_check){ 17817 // return; 17818 // } 17819 // // for multispecialty featured video 17820 // if(featured_video_single_specialty.includes(",")){ 17821 // multi_specialty_check=true; 17822 // featured_video_specialty_single_list=featured_video_single_specialty.split(",").map((item)=>{return item.trim()}) 17823 // specialty_single_length=featured_video_specialty_single_list.length; 17824 17825 // for(var i=0;i<specialty_single_length;i++){ 17826 // if(user_specialty.includes(featured_video_specialty_single_list[i])){ 17827 // specialtyMatches=true; 17828 // if(featured_video_shown_specialty.length==0){ 17829 // featured_video_shown_specialty=featured_video_single_specialty 17830 // } 17831 // } 17832 // else{ 17833 // specialtyMatches=false; 17834 // if(featured_video_shown_specialty.length>0){ 17835 // return; 17836 // } 17837 // } 17838 // } 17839 // }else{ 17840 // if(user_specialty.includes(featured_video_single_specialty) && !multi_specialty_check){ 17841 // specialtyMatches=true; 17842 // } 17843 // } 17844 // if(specialtyMatches){ 17845 // featured_video_shown_specialty=featured_video_single_specialty 17846 // } 17847 // }) 17848 17849 // var mode_videos_player=$(".video-player_mode") 17850 // if($(".mode_video_static").length>0){ 17851 // mode_videos_player.map((index,value)=>{ 17852 // if($(value).find('.video-player-specialty').attr("specialty")===featured_video_shown_specialty){ 17853 // $(value).find('.mode_video_static').show(); 17854 // } 17855 // }) 17856 // } 17857 //$("#video_player_specialty_dynamic").text( $("#specialtylabel").val().concat(response.specialty)); 17858 //$("#video_player_specialty_dynamic").attr('specialty',response.specialty); 17859 } 17860 17861 } 17862 else if(response.type == 'like_action'){ 17863 $(like_action).addClass('disabled-link disabled'); 17864 $(dislike_action).removeClass('disabled-link disabled'); 17865 17866 17867 // $("#like_action").addClass('disabled-link'); 17868 // $("#dislike_action").removeClass('disabled-link'); 17869 } 17870 else if(response.type == 'dislike_action'){ 17871 $(dislike_action).addClass('disabled-link disabled'); 17872 $(like_action).removeClass('disabled-link disabled'); 17873 17874 // $("#dislike_action").addClass('disabled-link'); 17875 // $("#like_action").removeClass('disabled-link'); 17876 } 17877 else if(response.type == 'favourite_action'){ 17878 favourite_action.classList.add('disabled-link'); 17879 // $("#favourite_action").addClass('disabled-link'); 17880 arrVideos[i].querySelector("#favourite_action span").innerHTML=$("#titleafteradding").val(); 17881
17882 // $("#favourite_action span").text($("#titleafteradding").val()); 17883 } 17884 else if(response.type == 'video_remove_favourite'){ 17885 if(favourite_action.classList.contains('disabled-link')){ 17886 favourite_action.classList.remove('disabled-link'); 17887 arrVideos[i].querySelector("#favourite_action span").innerHTML=$("#favtitle").val(); 17888 } 17889 // if($("#favourite_action").hasClass('disabled-link')){ 17890 // $("#favourite_action").removeClass('disabled-link') 17891 // $("#favourite_action span").text($("#favtitle").val()); 17892 // } 17893 } 17894 if(response.name) { 17895 var videoidUrl=getQueryStringValue("videoid"); 17896 if(!(videoidUrl == undefined || videoidUrl == '')){ 17897 $(".cmp-breadcrumb__item[index='4'] span").text(response.name); 17898 $(".cmp-breadcrumb__item--active").removeClass("cmp-breadcrumb__item--active"); 17899 $(".cmp-breadcrumb__item[index='4']").removeClass("hide").addClass("cmp-breadcrumb__item--active"); 17900 $(".breadcrumb_mode").show().removeClass("white"); 17901 $(".video-player-title").text(response.name); 17902 } 17903 } 17904 17905 if(response.likecount > 0){ 17906 arrVideos[i].querySelector("#like_action span").innerHTML=response.likecount; 17907 // $("#like_action").children('span').text(response.likecount); 17908 // if(response.dislikeCount==0){ 17909 // $("#dislike_action").children('span').text(""); 17910 // } 17911 } 17912 if(response.dislikeCount > 0){ 17913 // $("#dislike_action").children('span').text(response.dislikeCount); 17914 if(response.likecount==0){ 17915 arrVideos[i].querySelector("#like_action span").innerHTML=""; 17916 } 17917 } 17918 }} 17919} 17920} 17921if($(".mode_player").length>0){ 17922 $('.mode_player .video-player-actions a').on('keydown',function(event){ 17923 if(event.which===13){ 17924 $(this).click(); 17925 } 17926 }) 17927} 17928 17929// 17930function mode_showSpecialtyVideo(){ 17931 // var featured_video_shown_specialty=""; 17932 // var user_specialty=$('.video-player_mode').find("#specialtyLoggedIn").val() 17933 // var featured_video_specialty_list=[]; 17934 // $(".video-player-specialty").map((key,val)=> 17935 // { 17936 // featured_video_specialty_list.push($(val).attr("specialty")) 17937 // }) 17938 17939 // featured_video_specialty_list.sort(function(a, b){ 17940 // return a.length - b.length; 17941 // }); 17942 17943 // var specialtyMatches=false; 17944 // var multi_specialty_check=false; 17945 17946 // featured_video_specialty_list.map((featured_video_single_specialty,key)=>{ 17947 // specialtyMatches=false; 17948 // var featured_video_specialty_single_list=[]; 17949 // var specialty_single_length; 17950 // if(specialtyMatches && multi_specialty_check){ 17951 // return; 17952 // } 17953 // for multispecialty featured video 17954 // if(featured_video_single_specialty.includes(",")){ 17955 // multi_specialty_check=true; 17956 // featured_video_specialty_single_list=featured_video_single_specialty.split(",").map((item)=>{return item.trim()}) 17957 // specialty_single_length=featured_video_specialty_single_list.length; 17958 17959 // for(var i=0;i<specialty_single_length;i++){ 17960 // if(user_specialty.includes(featured_video_specialty_single_list[i])){ 17961 // specialtyMatches=true; 17962 // if(featured_video_shown_specialty.length==0){ 17963 // featured_video_shown_specialty=featured_video_single_specialty 17964 // } 17965 // } 17966 // else{ 17967 // specialtyMatches=false; 17968 // if(featured_video_shown_specialty.length>0){ 17969 // return; 17970 // } 17971 // } 17972 // } 17973 // }else{ 17974 // if(user_specialty.includes(featured_video_single_specialty) && !multi_specialty_check){ 17975 // specialtyMatches=true; 17976 // } 17977 // } 17978 // if(specialtyMatches){ 17979 // featured_video_shown_specialty=featured_video_single_specialty 17980 // } 17981 // }) 17982 17983 17984 var mode_videos_player=$(".video-player_mode"); 17985 17986 if($(".mode_video_static").length>0){ 17987 let videoPlayerDisplayedCount = 0; 17988 mode_videos_player.map((index,value)=>{ 17989 // if($(value).find('.video-player-specialty').attr("specialty")===featured_video_shown_specialty && featured_video_shown_specialty.length>0){ 17990 // $(value).find('.mode_video_static').show(); 17991 // clearInterval(mode_showSpecialtyVideo); 17992 // } 17993 if(videoPlayerDisplayedCount == 1) { 17994 return; 17995 } 17996 if ($(value).find('.video-player-specialty').attr("therapeuticarea") === $(value).find('#therapeuticareaLoggedIn').val()) { 17997 $(value).find('.mode_video_static').show(); 17998 clearInterval(videoIntervalID); 17999 videoPlayerDisplayedCount++; 18000 return; 18001 } 18002 }) 18003 } 18004}
18004 18005 18006const videoIntervalID = setInterval(mode_showSpecialtyVideo,2000); 18007 18008function getQueryStringValue (key) { 18009 return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); 18010} 18011function loadModeVideo(videoId, videoTitle){ 18012 var player = null; 18013 //var videojs = null; 18014 var accountId = $("#accountId").val(); 18015 var playerId = $("#playerId").val(); 18016 18017 if(videoTitle) { 18018 $(".cmp-breadcrumb__item[index='4'] span").text(videoTitle); 18019 $(".cmp-breadcrumb__item--active").removeClass("cmp-breadcrumb__item--active"); 18020 $(".cmp-breadcrumb__item[index='4']").removeClass("hide").addClass("cmp-breadcrumb__item--active"); 18021 $(".breadcrumb_mode").show().removeClass("white"); 18022 $(".video-player-title").text(videoTitle); 18023 } 18024 $('.video-list-player').empty(); 18025 18026 $('.video-list-player').html('<video id="myPlayerID" style="width: 100%; height: 100%;" data-video-id="'+videoId+'" data-account="'+accountId+'" data-player="'+playerId+'" data-embed="default"data-application-id class="video-js" controls></video><script src="//players.brightcove.net/'+accountId+'/'+playerId+'_default/index.min.js"></script>'); 18027 18028 if(typeof $(".video-player-cont-dynamic") !== undefined){ 18029 $(".video-player-cont-dynamic").show(); 18030 } 18031 $(".mode_player .modeVideoID").each(function(){ 18032 if(!$(this).val()){$(this).val(videoId)} 18033 if(videoId === $(this).val()){ 18034 var shareURL = $(this).parents('.mode_player').find(".share-action").attr("href"); 18035 shareURL = shareURL.substr(0, (shareURL.indexOf("videoid") + 8)); 18036 shareURL = shareURL + videoId; 18037 $(this).parents('.mode_player').find(".share-action").attr("href", shareURL); 18038 } 18039 }) 18040 // var shareURL = $(".share-action").attr("href"); 18041 // shareURL = shareURL.substr(0, (shareURL.indexOf("videoid") + 8)); 18042 // shareURL = shareURL + videoId; 18043 // $(".share-action").attr("href", shareURL); 18044 18045 18046 var websiteId = $("#websiteId").val(); 18047 loadModeVideoDetails(videoId,accountId,websiteId,"dynamic"); 18048 videoModeDownload(); 18049} 18050function videoModeDownload(content) 18051{ 18052 var content = setInterval(function(){ 18053 if(typeof(videojs) != "undefined" && videojs) { 18054 videojs.getPlayer('myPlayerID').ready(function() { 18055 var myPlayer = this, 18056 videoName, 18057 totalRenditions, 18058 mp4Ara = [], 18059 highestQuality, 18060 spacer, 18061 newElement = document.createElement('div'), 18062 newImage = document.createElement('img'); 18063 18064 myPlayer.on('loadstart', function() { 18065 //Reinitialize array of MP4 renditions in case used with playlist 18066 //This prevents the array having a cumulative list for all videos in playlist 18067 mp4Ara = []; 18068 18069 // +++ Get video name and the MP4 renditions +++ 18070 videoName = myPlayer.mediainfo['name']; 18071 videoName = removeSpaces(videoName); 18072 var rendtionsAra = myPlayer.mediainfo.sources; 18073 totalRenditions = rendtionsAra.length; 18074 18075 // +++ Loop over videos and extract only MP4 versions +++ 18076 for (var i = 0; i < totalRenditions; i++) { 18077 if (rendtionsAra[i].container === "MP4" && rendtionsAra[i].hasOwnProperty('src')) { 18078 mp4Ara.push(rendtionsAra[i]); 18079 }; 18080 }; 18081 18082 // +++ Sort the renditions from highest to lowest on size+++ 18083 mp4Ara.sort(function(a, b) { 18084 return b.size - a.size; 18085 }); 18086 18087 // +++ Extract the highest rendition +++ 18088 highestQuality = mp4Ara[0].src; 18089 18090 // +++ On image click call the download function +++ 18091 $(".download-action").off("click").on("click", function(){ 18092 // The download function forces download by the browsers 18093 // NOT opening the video in a new window/tab 18094 var x=new XMLHttpRequest(); 18095 x.open("GET", highestQuality, true); 18096 x.responseType = 'blob'; 18097 x.onload=function(e){doDownload(x.response, videoName, "video/mp4"); } 18098 x.send(); 18099 $(".download-progress-msg").show(); 18100 setTimeout(function(){ 18101 $(".download-progress-msg").hide(); 18102 }, 3000) 18103 }); 18104 }) 18105 18106 myPlayer.trigger('loadstart'); 18107 clearInterval(content); 18108 }, 1000); 18109 } 18110 }); 18111} 18112 18113/* 18114 * remove spaces from a string 18115 * @param {String} str string to process 18116 * @return {String} trimmed string 18117 */ 18118function removeSpaces(str) { 18119 try { 18120 str= str.replace(/\s/g, ''); 18121 return str; 18122 } 18123 catch(e) { 18124 console.log("Stringreplace"); 18125 } 18126 18127} 18128 18129//download.js v4.2, by dandavis; 2008-2016. [CCBY2] see http://danml.com/download.html for tests/usage 18130// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime 18131// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs 18132// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling. 18133// v4 adds AMD/UMD, commonJS, and plain browser support 18134// v4.1 adds url download capability via solo URL argument (same domain/CORS only) 18135// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors 18136// https://github.com/rndme/download 18137 18138(function(root, factory) { 18139if (typeof define === 'function' && define.amd) { 18140 // AMD. Register as an anonymous module. 18141 define([], factory); 18142} else if (typeof exports === 'object') { 18143 // Node. Does not work with strict CommonJS, but 18144 // only CommonJS-like environments that support module.exports, 18145 // like Node. 18146 module.exports = factory(); 18147} else { 18148 // Browser globals (root is window) 18149 root.doDownload = factory(); 18150} 18151}(this, function() { 18152 18153return function doDownload(data, strFileName, strMimeType) { 18154 18155 var self = window, // this script is only for browsers anyway... 18156 defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads 18157 mimeType = strMimeType || defaultMime, 18158 payload = data, 18159 url = !strFileName && !strMimeType && payload, 18160 anchor = document.createElement("a"), 18161 toString = function(a) { 18162 return String(a); 18163 }, 18164 myBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString), 18165 fileName = strFileName || "download", 18166 blob, 18167 reader; 18168 myBlob = myBlob.call ? myBlob.bind(self) : Blob; 18169 18170 if (String(this) === "true") { //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback 18171 payload = [payload, mimeType]; 18172 mimeType = payload[0]; 18173 payload = payload[1]; 18174 } 18175 18176 18177 if (url && url.length < 2048) { // if no filename and no mime, assume a url was passed as the only argument 18178 fileName = url.split("/").pop().split("?")[0]; 18179 anchor.href = url; // assign href prop to temp anchor 18180 if (anchor.href.indexOf(url) !== -1) { // if the browser determines that it's a potentially valid url path: 18181 var ajax = new XMLHttpRequest(); 18182 ajax.open("GET", url, true); 18183 ajax.responseType = 'blob'; 18184 ajax.onload = function(e) { 18185 download(e.target.response, fileName, defaultMime); 18186 }; 18187 setTimeout(function() { 18188 ajax.send(); 18189 }, 0); // allows setting custom ajax headers using the return: 18190 return ajax; 18191 } // end if valid url? 18192 } // end if url? 18193 18194 18195 //go ahead and download dataURLs right away 18196 if (/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)) { 18197 18198 if (payload.length > (1024 * 1024 * 1.999) && myBlob !== toString) { 18199 payload = dataUrlToBlob(payload); 18200 mimeType = payload.type || defaultMime; 18201 } else { 18202 return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs: 18203 navigator.msSaveBlob(dataUrlToBlob(payload), fileName) : 18204 saver(payload); // everyone else can save dataURLs un-processed 18205 } 18206 18207 } //end if dataURL passed? 18208 18209 blob = payload instanceof myBlob ? 18210 payload : 18211 new myBlob([payload], { 18212 type: mimeType 18213 }); 18214 18215 18216 function dataUrlToBlob(strUrl) { 18217 var parts = strUrl.split(/[:;,]/), 18218 type = parts[1], 18219 decoder = parts[2] == "base64" ? atob : decodeURIComponent, 18220 binData = decoder(parts.pop()), 18221 mx = binData.length, 18222 i = 0, 18223 uiArr = new Uint8Array(mx); 18224 18225 for (i; i < mx; ++i) uiArr[i] = binData.charCodeAt(i); 18226 18227 return new myBlob([uiArr], { 18228 type: type 18229 }); 18230 } 18231 18232 function saver(url, winMode) { 18233 18234 if ('download' in anchor) { //html5 A[download] 18235 anchor.href = url; 18236 anchor.setAttribute("download", fileName); 18237 anchor.className = "download-js-link"; 18238 anchor.innerHTML = "downloading..."; 18239 anchor.style.display = "none"; 18240 document.body.appendChild(anchor); 18241 setTimeout(function() { 18242 anchor.click(); 18243 document.body.removeChild(anchor); 18244 if (winMode === true) { 18245 setTimeout(function() { 18246 self.URL.revokeObjectURL(anchor.href); 18247 }, 250); 18248 } 18249 }, 66); 18250 return true; 18251 } 18252 18253 // handle non-a[download] safari as best we can: 18254 if (/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) { 18255 url = url.replace(/^data:([\w\/\-\+]+)/, defaultMime); 18256 if (!window.open(url)) { // popup blocked, offer direct download: 18257 if (confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")) { 18258 location.href = url; 18259 } 18260 } 18261 return true; 18262 } 18263 18264 //do iframe dataURL download (old ch+FF): 18265 var f = document.createElement("iframe"); 18266 document.body.appendChild(f); 18267 18268 if (!winMode) { // force a mime that will download: 18269 url = "data:" + url.replace(/^data:([\w\/\-\+]+)/, defaultMime); 18270 } 18271 f.src = url; 18272 setTimeout(function() { 18273 document.body.removeChild(f); 18274 }, 333); 18275 18276 } //end saver 18277 18278 18279 if (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL) 18280 return navigator.msSaveBlob(blob, fileName); 18281 } 18282 18283 if (self.URL) { // simple fast and modern way using Blob and URL: 18284 saver(self.URL.createObjectURL(blob), true); 18285 } else { 18286 // handle non-Blob()+non-URL browsers: 18287 if (typeof blob === "string" || blob.constructor === toString) { 18288 try { 18289 return saver("data:" + mimeType + ";base64," + self.btoa(blob)); 18290 } catch (y) { 18291 return saver("data:" + mimeType + "," + encodeURIComponent(blob)); 18292 } 18293 } 18294 18295 // Blob but not URL support: 18296 reader = new FileReader(); 18297 reader.onload = function(e) { 18298 saver(this.result); 18299 };
18300 reader.readAsDataURL(blob); 18301 } 18302 return true; 18303}; /* end download() */ 18304})); 18305var carousel_response = {}; 18306var active_carousel_type = ""; 18307var slidesPerPageComp = 4; 18308var slidesPerPageDefault = slidesPerPageComp; 18309$(document).ready(function() { 18310 if(window.matchMedia('(max-width: 550px)').matches){ 18311 $(".mode_featured_videos p.carousel-title,#mode_videos_list p.video-list-title").each(function (i,val) { 18312 if($(val).text().length>36){ 18313 $(val).text($(val).text().substring(0,34)+"...") 18314 } 18315 }); 18316 } 18317 if(window.matchMedia('(min-width: 1024px)').matches) { 18318 $(".mode_featured_videos .video-carousel").each(function(index){ 18319 var id = $(this).attr("id"); 18320 var count = parseInt($("#"+id+"_info").data("count")); 18321 if(count < slidesPerPageDefault) { 18322 slidesPerPageComp = count; 18323 } 18324 else { 18325 slidesPerPageComp = slidesPerPageDefault; 18326 } 18327 var limit = parseInt($("#"+id+"_info").data("limit")); 18328 $(this).attr("slides-per-page", slidesPerPageComp); 18329 $(this).attr("type", $("#"+id+"_info").data("type")); 18330 $(this).attr("totalCount", count); 18331 limit = (count < limit) ? count : limit; 18332Â Â Â Â Â Â Â Â Â Â Â $(this).attr("limit", limit); 18333 $(this).attr("next-offset", $("#"+id+"_info").data("limit")); 18334 $(this).attr("total-slides", (limit-1)); 18335 $(this).attr("account-id", $("#"+id+"_info").data("accountid")); 18336 $(this).attr("websiteid", $("#"+id+"_info").data("websiteid")); 18337 carousel_response[id] = $("#"+id+"_info").data("response"); 18338 }); 18339 $(".mode_featured_videos .video-carousel .carousel-item[index='0']").addClass("active"); 18340 createModeVideoCourasel(); 18341 $(".mode_featured_videos .carousel-control-prev").addClass("disabled"); 18342 } 18343 if($(".mode_featured_videos .video-list-cont,#mode_videos_list .video-list-cont").length) {
18344 var totalCount = parseInt($(".meta-data-span").data("count")); 18345 var limit = parseInt($(".meta-data-span").data("limit")); 18346 if(totalCount > limit ) { 18347 $(".videos-see-more").css('display','flex'); 18348 } 18349 } 18350 $(".mode_featured_videos .videos-see-more,#mode_videos_list .videos-see-more").click(function(){ 18351 var nextOffset = parseInt($(this).attr("next-offset")); 18352 var totalCount = parseInt($(".meta-data-span").data("count")); 18353 if(totalCount > nextOffset) { 18354 var fetchVideoPayload = { 18355 "type": $(".meta-data-span").data("type"), 18356 "accountId": $(".meta-data-span").data("accountid"), 18357 "limit": parseInt($(".meta-data-span").data("limit")), 18358 "offset": parseInt(nextOffset), 18359 "website_id": $(".meta-data-span").data("websiteid"), 18360 "currentPage" : $("#currentpage").val() 18361 } 18362 fetchModeVideo(fetchVideoPayload, true); 18363 nextOffset += parseInt($(".meta-data-span").data("limit")); 18364 if(nextOffset >= totalCount) { 18365 $(".videos-see-more").hide(); 18366 } 18367 else { 18368 $(this).attr("next-offset", nextOffset); 18369 } 18370 } 18371 }); 18372 if (window.matchMedia('(min-width: 1023px)').matches) { 18373 var eqheight = 0; 18374 $(".mode_featured_videos .carousel-item a,#mode_videos_list .video-list-item a").each(function(){ 18375 var tileheight= $(this).find('.tile-img').height()+$(this).find('.tile-cnt').height()+$(this).find('.tile-cnt > div').height()+27; 18376 if (tileheight > eqheight) { eqheight = tileheight; } 18377 }); 18378 $(".mode_featured_videos .carousel-item a,#mode_videos_list .video-list-item a").css('min-height',eqheight); 18379 } 18380 18381 if(window.location.href.search("protected/recently-added") >-1 || window.location.href.search("protected/most-liked") >-1){ 18382 $("#mode_videos_list h1").css("font-size","36px"); 18383 } 18384 18385 $("#mode_videos_list .filter-options li").filter(function(idx) { 18386 if(this.innerHTML.indexOf("All") == 0){ 18387 $(this).toggleClass('active'); 18388 } 18389 }); 18390 $('.modevideos span[aria-label="Scroll video carousel"]').on('keydown',function(event){ 18391 if(event.which===13){ 18392 $(this).click(); 18393 } 18394 }) 18395}); 18396 18397function createModeVideoCourasel() { 18398 if(active_carousel_type) { 18399 $('#'+active_carousel_type+'.video-carousel.carousel .carousel-item').each(function() { 18400 var next = $(this).next(); 18401 if (!next.length) { 18402 next = $(this).siblings(':first'); 18403 } 18404 next.children(':first-child').clone().appendTo($(this)); 18405 var limit = $(this).closest(".carousel").attr("carousel-limit"); 18406 var slidesPerPage = $(this).closest(".carousel").attr("slides-per-page"); 18407 for (var i = 1; i < (slidesPerPage-1); i++) { 18408 next = next.next(); 18409 if (!next.length) { 18410 next = $(this).siblings(':first'); 18411 } 18412 next.children(':first-child').clone().appendTo($(this)); 18413 } 18414 }); 18415 var activeSlide = $("#"+active_carousel_type).attr("active-slide"); 18416 $("#"+active_carousel_type +" .carousel-item[index='"+activeSlide+"']").addClass("active"); 18417 } 18418 else { 18419 18420 $('.mode_featured_videos .video-carousel.carousel .carousel-item').each(function() { 18421 var next = $(this).next(); 18422 if (!next.length) { 18423 next = $(this).siblings(':first'); 18424 } 18425 next.children(':first-child').clone().appendTo($(this)); 18426 var limit = $(this).closest(".carousel").attr("carousel-limit"); 18427 var slidesPerPage = $(this).closest(".carousel").attr("slides-per-page"); 18428 for (var i = 1; i < (slidesPerPage-1); i++) { 18429 next = next.next(); 18430 if (!next.length) { 18431 next = $(this).siblings(':first'); 18432 } 18433 next.children(':first-child').clone().appendTo($(this)); 18434 } 18435 }); 18436 } 18437 $('.mode_featured_videos .video-carousel').carousel({ 18438 interval: false, 18439 wrap: false 18440 }); 18441 $('.mode_featured_videos .video-carousel').off('slide.bs.carousel').on('slide.bs.carousel', function(event) { 18442 console.log(event); 18443 console.log(event.to); 18444 var limit = parseInt($(this).closest(".carousel").attr("limit")); 18445 var totalcount = parseInt($(this).closest(".carousel").attr("totalcount")); 18446 if(slidesPerPageDefault < totalcount){ 18447 $(this).find(".carousel-control-prev").removeClass("disabled"); 18448 $(event.target).attr("active-slide", event.to); 18449 if (!$(".video-carousel.carousel").hasClass("loading")) { 18450 var nextOffset = parseInt($(this).closest(".carousel").attr("next-offset")); 18451 var type = $(this).closest(".carousel").attr("type"); 18452 active_carousel_type = type; 18453 var accountId = $(this).closest(".carousel").attr("account-id"); 18454 var website_id = $(this).closest(".carousel").attr("websiteid"); 18455 var totalSlides = parseInt($(this).closest(".carousel").attr("total-slides")); 18456 if (event.direction == "left") { 18457 if(!($(this).find('.carousel-control-next').hasClass("disabled"))) { 18458 if(event.to == (totalSlides - (slidesPerPageDefault - 1))) { 18459 if (nextOffset < totalcount) { 18460 $(".video-carousel.carousel").addClass("loading"); 18461 var fetchVideoPayload = { 18462 "type": type, 18463 "accountId": accountId, 18464 "limit": parseInt(limit), 18465 "offset": parseInt(nextOffset), 18466 "website_id": website_id 18467 } 18468 fetchModeVideo(fetchVideoPayload); 18469 $(this).find('.carousel-control-next').addClass("disabled"); 18470 } 18471 else { 18472 $(this).find('.carousel-control-next').addClass("disabled"); 18473 } 18474 } 18475 if(event.to == (totalcount - slidesPerPageDefault)) { 18476 $(this).find('.carousel-control-next').addClass("disabled"); 18477 } 18478 else if(event.to > (totalcount - slidesPerPageDefault)) { 18479 return false;
18480 } 18481 } 18482 else { 18483 return false; 18484 } 18485 } 18486 else { 18487 $(".carousel-control-next", event.terget).removeClass("disabled"); 18488 if(event.to == 0 ){ 18489 $(".carousel-control-prev", event.terget).addClass("disabled"); 18490 } 18491 } 18492 } 18493 else { 18494 return false; 18495 } 18496 } 18497 else { 18498 return false; 18499 } 18500 }); 18501} 18502function generateModeVideosHTML(mVideos, isListingPage) { 18503 if(isListingPage) { 18504 if(mVideos.length) { 18505 var innerVideosHTML = ""; 18506 for (var i = 0; i < mVideos.length; i++) { 18507 console.log(mVideos[i]); 18508 innerVideosHTML = innerVideosHTML + '<div class="video-list-item"><a href="" videoid="'+mVideos[i].id+'" class="video-list-link" tabindex="0" role="link"><img src="'+mVideos[i].poster+'" class="video-list-img"><p class="video-list-title">'+(mVideos[i].name)+'</p><p class="video-list-duration">'+mVideos[i].duration+'</p></a></div>'; 18509 } 18510 $("#mode_videos_list .video-list-inner").append(innerVideosHTML) 18511 } 18512 } 18513 else { 18514 if(mVideos.length) { 18515 carousel_response[active_carousel_type] = carousel_response[active_carousel_type].concat(mVideos); 18516 var carouselVideos = carousel_response[active_carousel_type]; 18517 var nextOffset = $("#"+active_carousel_type).attr("next-offset"); 18518 var totalCount = $("#"+active_carousel_type).attr("totalcount"); 18519 var limit = $("#"+active_carousel_type).attr("limit"); 18520 var totalSlides = $("#"+active_carousel_type).attr("total-slides"); 18521 totalSlides = parseInt(totalSlides) + parseInt(limit); 18522 nextOffset = parseInt(nextOffset) + parseInt(limit); 18523 totalSlides = (totalSlides > totalCount) ? totalCount : totalSlides; 18524 $("#"+active_carousel_type).attr("total-slides", totalSlides); 18525 $("#"+active_carousel_type).attr("next-offset", nextOffset); 18526 let innerVideosHTML = ''; 18527 for (var i = 0; i < carouselVideos.length; i++) { 18528 console.log(carouselVideos[i]); 18529 // innerVideosHTML = innerVideosHTML + '<div class="carousel-item" index="'+i+'"><a href="" videoid="'+carouselVideos[i].id+'" class="carousel-link"><img src="'+carouselVideos[i].thumbnail+'" class="carousel-img"><p class="carousel-title">'+(carouselVideos[i].name)+'</p><p class="carousel-duration">'+carouselVideos[i].duration+'</p></a></div>'; 18530 innerVideosHTML = innerVideosHTML +'<div class="carousel-item" index="'+i+'"><a href="" videoid="'+carouselVideos[i].id+'" class="carousel-link" style="min-height: 315.2px;"><div class="tile-img"><img src="'+carouselVideos[i].poster+'" class="carousel-img" alt=""><span class="videoCommonThumbnail"></span><p class="carousel-duration">'+carouselVideos[i].duration+'</p></div><div class="tile-cnt"><p class="carousel-title">'+(carouselVideos[i].name)+'</p><div><p class="video-list-specialty">'+carouselVideos[i].specialty+'</p><p class="btm-icons text-right mb-0"><span class="like-blk"></span></p></div></div></a></div>'; 18531 } 18532 $("#"+active_carousel_type+" .carousel-inner > div").html("").html(innerVideosHTML); 18533 $("#"+active_carousel_type).find('.carousel-control-next').removeClass("disabled"); 18534 createModeVideoCourasel(); 18535 } 18536 } 18537} 18538function fetchModeVideo(fetchVideoPayload, isListingPage) { 18539 18540 $.ajax({ 18541 type: "POST", 18542 url: "/bin/commercial/videoslisting", 18543 data: fetchVideoPayload, 18544 dataType: "json", 18545 headers: new Headers({ 18546 'Content-Type': 'application/json' 18547 }), 18548 success: function(response) { 18549 console.log(response); 18550 $(".mode_featured_videos .video-carousel.carousel").removeClass("loading"); 18551 generateModeVideosHTML(response, isListingPage); 18552 }, 18553 error: function(result) { 18554 console.log(result); 18555 $(".mode_featured_videos .video-carousel.carousel").removeClass("loading"); 18556 } 18557 }); 18558} 18559 18560$("#mode_videos_list .filter-toggle").click(function() { 18561 $(".filter-dropdown").toggleClass('active'); 18562}); 18563 18564var filter_values=["All"] 18565$("#mode_videos_list .filter-options li").click(function(idx) { 18566 $(this).toggleClass('active'); 18567 var filterText=this.innerHTML==="All"?this.innerHTML:this.innerHTML.split("-")[1].trim() 18568 if ($.inArray(filterText, filter_values) > -1){ 18569 filter_values.splice( $.inArray(filterText, filter_values), 1 ); 18570 }else{ 18571 filter_values.push(filterText) 18572 } 18573 let data_therapeuticarea,data_specialty; 18574 $(".video-list-item").map((idx,item) => 18575 { 18576 // data_specialty=$(item).attr("data-specialty")?$(".item").attr("data-therapeuticarea")?"-"+$(item).attr("data-specialty"):$(item).attr("data-specialty"):""; 18577 data_specialty=$(item).attr("data-specialty").includes(",")?$(item).attr("data-specialty").split(","):[$(item).attr("data-specialty")]; 18578 18579 18580 data_specialty.every((val) => 18581 { 18582 18583 if(filter_values.includes("All")){ 18584 $(item).show(); 18585 $(".video-list-item:nth-child(4n+1)").css("padding-left","0") 18586 $(".video-list-item:nth-child(4n)").css("padding-right","0") 18587 }else{ 18588 if($(item).attr("data-specialty").includes(",")){ 18589 var multipleSpecialty=$(item).attr("data-specialty").split(","); 18590 var show; 18591 for(let i=0;i<multipleSpecialty.length;i++){ 18592 if(filter_values.includes(multipleSpecialty[i].trim())) 18593 { 18594 $(item).show(); 18595 show=true; 18596 } 18597 } 18598 if(!show){ 18599 $(item).hide(); 18600 } 18601 }else{ 18602 if(filter_values.includes(val)){ 18603 $(item).show(); 18604 $(".video-list-item:nth-child(4n+1)").css("padding-left","") 18605 $(".video-list-item:nth-child(4n)").css("padding-right","") 18606 }else{ 18607 $(item).hide(); 18608 } 18609 } 18610 } 18611 }) 18612 18613 }) 18614}
18614); 18615var mobMedia = window.matchMedia("(max-width: 1023px)"); 18616var deskMedia = window.matchMedia("(min-width: 1024px)") 18617 18618$(".mode_header .header-desk-toggle-on").click(function() { 18619 $(".header-desk-toggle-on").hide(); 18620 $(".header-desk-toggle-off").show(); 18621 $(".header_dropdown_desk").show(); 18622}); 18623 18624$(".mode_header .header-desk-toggle-off").click(function() { 18625 $(".header-desk-toggle-off").hide(); 18626 $(".header_dropdown_desk").hide(); 18627 $(".header-desk-toggle-on").show(); 18628}); 18629var inputValue = $("#preference-selection").val() || "dynamic"; 18630var sciencePreferences = $.cookie("m_prefs"); 18631 18632 18633$(document).ready(function() { 18634 $(".mode_header .nav-item a").each(function(){ 18635 var href = $(this).attr("href"); 18636 if(location.href.indexOf(href) > -1||($.cookie("apex__gigyaSession") && window.location.pathname==="/" &&$(this).text()=="Home" )) { 18637 $(".mode_header .nav-item a").removeClass("active"); 18638 $(this).addClass("active"); 18639 } 18640 }); 18641 18642 18643 18644 if(location.href.indexOf("email-share") > -1 ){ 18645 $(".mode_header .header-profile-content").removeClass("d-lg-block"); 18646 } 18647 18648 if($(".mode_header").length>0){ 18649 18650 if(!($.cookie("apex__gigyaSession"))){ 18651 $(".header_mode>div:nth-child(1)").css("padding-bottom","75px"); 18652 } 18653 18654 if($.cookie("m_prefs")){ 18655 $(".header_mode>div:nth-child(1)").removeAttr("style"); 18656 } 18657 18658 var sessionCookie = $.cookie("apex__gigyaSession"); 18659 if(!sessionCookie){ 18660 $(".header_mode .search-toggle-mob").hide() 18661 } 18662 if(sessionCookie) { 18663 sessionCookie = JSON.parse(sessionCookie) 18664 if(sessionCookie.UID) { 18665 $(".mode_header .profile-info").show(); 18666 $(".mode_header .sign-in-btn").hide(); 18667 } 18668 $(".secure-nav-item").removeClass('d-none'); 18669 if(location.href.indexOf("site-map") < 0 && location.href.indexOf("email-share") < 0 && location.href.indexOf("protected") == -1) { 18670 // location.href = "/content/commercial/us/mode/en/protected/home.html"; 18671 } 18672 gigya.accounts.getAccountInfo({ 18673 callback: SetProfileInfo 18674 }); 18675 $(".mode_header .header-menu,.mode_header .navbar-toggler").show(); 18676 $("#utilities-menu .nav-item a").each(function(){ 18677 var href = $(this).attr("href"); 18678 if(location.href.indexOf(href) > -1) { 18679 $(this).addClass("active"); 18680 } 18681 }); 18682 } 18683 else if (inputValue == "manual" && sciencePreferences) { 18684 $(".mode_header .profile-info").show(); 18685 $(".header_dropdown_desk > hr").first().hide(); 18686 $(".header_dropdown_desk > div:first-child").attr( 18687 "style", 18688 "display: none !important" 18689 ); 18690 } else { 18691 $(".mode_header .profile-info").hide(); 18692 $(".mode_header .sign-in-btn").css('display', 'flex'); 18693 if(location.href.indexOf("site-map") < 0 && location.href.indexOf("email-share") < 0 && location.href.indexOf("protected") > -1) { 18694 18695 // location.href = "/content/commercial/us/mode/en/home.html"; 18696 } 18697 } 18698 if (sessionCookie) { 18699 $(".mode_header .sign-in-btn").hide(); 18700 } else { 18701 $(".mode_header .sign-in-btn").css("display", "flex"); 18702 } 18703 18704 if(typeof gigya != 'undefined') { 18705 gigya.accounts.showScreenSet({ 18706 screenSet: "Mode_RegistrationLogin", 18707 containerID: "registration-login", 18708 startScreen: "gigya-register-screen" 18709 }); 18710 } 18711 18712 $('.mode_header img[role="button"]').on('keydown',function(event){ 18713 if(event.which===13){ 18714 $(this).click(); 18715 } 18716 }) 18717 } 18718 $(".mode_header .navbar-toggler").on("click", function(event){ 18719 if(!$("body").hasClass("mobile-menu-open")){ 18720 toggleModal('close','click'); 18721 } 18722 $("body").toggleClass("mobile-menu-open"); 18723 }); 18724 if (window.matchMedia('(max-width: 767px)').matches) { 18725 $(".mode_header .profile-info").on("click", function(event){ 18726 $(".profile-info").toggleClass("show-logout"); 18727 }); 18728 } 18729 $(".mode_header #email-id-cont button").on("click", function(event){ 18730 var emailVal = $("#email-id-cont input").val(); 18731 console.log(emailVal); 18732 if(isEmail(emailVal)) { 18733 $(".card-img-container").attr("style", "height: auto !important"); 18734 $(".pre-login-content").attr("style", "display: none !important"); 18735 $("#registration-login").show(); 18736 $('input[name="email"]').val(emailVal); 18737 } 18738 }); 18739 if(window.location.href.search("login")>0 && $(".TeaserComponent_mode").length>0 &&!($.cookie("apex__gigyaSession"))){ setTimeout(() => { 18740 gigya.accounts.showScreenSet({ 18741 screenSet: "Mode_RegistrationLogin", 18742 containerID: "screenset_container", 18743 startScreen: "gigya-login-screen" 18744 }); 18745 $(".card-img-container").attr("style", "height: auto !important"); 18746 $(".pre-login-content").attr("style", "display: none !important"); 18747 $("#screenset_container").show(); 18748 $('.hide-onload').removeClass('d-none'); 18749 }, "1000"); 18750 } 18751 $(".mode_header .header-profile-content a.sign-in-btn").on("click", function(event){ 18752 event.preventDefault(); 18753 gigya.accounts.showScreenSet({ 18754 screenSet: "Mode_RegistrationLogin", 18755 containerID: "screenset_container", 18756 startScreen: "gigya-login-screen" 18757 }); 18758 $(".card-img-container").attr("style", "height: auto !important"); 18759 $(".pre-login-content").attr("style", "display: none !important"); 18760 $("#screenset_container").show(); 18761 $('.hide-onload').removeClass('d-none'); 18762 }); 18763 18764 $(".mode_header .header-profile-content a.sign-out-btn,.mode_header .header_dropdown_desk a.sign-out-btn, .mode_header .header-menu a.sign-out-btn").on("click", function(event){
18765 event.preventDefault(); 18766 var cookie_name = "m_prefs"; 18767 document.cookie = 18768 cookie_name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; 18769 localStorage.removeItem('mmcontent'); 18770 if(typeof gigya != "undefined" && typeof gigya.accounts != "undefined" && $.cookie("apex__gigyaSession")) { 18771 gigya.accounts.logout(); 18772 } else { 18773 location.reload(); 18774 } 18775 }); 18776 18777 const $modal = $(".top-nav-country-modal"); 18778 const $trigger = $(".mode_header .countrybar-toggler, .mode_header .top-nav-location-trigger"); 18779 const $close = $(".top-nav-country-modal .overlay-bar .close"); 18780 const $firstLink = $(".top-nav-country-modal .overlay-bar .country-lang-link:first a"); 18781 18782 function toggleModal(action,type) { 18783 $modal.toggleClass('show', action === 'open'); 18784 $trigger.attr('aria-expanded', action === 'open' ? 'true' : 'false'); 18785 if(type == 'keydown'){ 18786 if (action === 'open') { 18787 $firstLink.focus(); 18788 } else { 18789 $trigger.focus(); 18790 } 18791 } 18792 if($("body").hasClass("mobile-menu-open") && action === 'open'){ 18793 $(".mode_header .navbar-toggler").click(); 18794 } 18795 } 18796 18797 $trigger.on('click keydown', function(e) { 18798 if (e.type === 'click' || e.keyCode === 13 || e.keyCode === 32) { 18799 e.preventDefault(); 18800 toggleModal('open',e.type); 18801 } 18802 $(".mode_header .header-desk-toggle-off").click(); 18803 }); 18804 18805 $close.on('click keydown', function(e) { 18806 if (e.type === 'click' || e.keyCode === 13 || e.keyCode === 32) { 18807 e.preventDefault(); 18808 toggleModal('close',e.type); 18809 } 18810 }); 18811 $(".mode_header .header-desk-toggle-on").click(function() { 18812 toggleModal('close','click'); 18813 }); 18814}); 18815function isEmail(email) { 18816 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 18817 return regex.test(email); 18818} 18819function SetProfileInfo(account) { 18820 console.log(account); 18821 var firstName= (account && account.profile ? account.profile.firstName : ''); 18822 var lastName= (account && account.profile ? account.profile.lastName : ''); 18823 $(".mode_header .profile-info .first-name").text(firstName); 18824 $(".mode_header .profile-info .last-name").text(lastName); 18825} 18826 18827$('.mode_header #searchButtonDesk').click(function(){ 18828 var url=window.location.href; 18829 18830 if($(".header-serach-input-desk").val().length>0){ 18831 window.location.href=$("#searchButtonDesk").attr('href')+"?search="+$(".header-serach-input-desk").val(); 18832 if (url.indexOf('?') > -1){ 18833 url += '&videoid='+videoId 18834 }else{ 18835 url += '?videoid='+videoId 18836 } 18837 } 18838}); 18839 18840$('.mode_header #searchButtonMob').click(function(){ 18841 var url=window.location.href; 18842 18843 if($(".header-serach-input-mob").val().length>0){ 18844 window.location.href=$("#searchButtonMob").attr('href')+"?search="+$(".header-serach-input-mob").val(); 18845 if (url.indexOf('?') > -1){ 18846 url += '&videoid='+videoId 18847 }else{ 18848 url += '?videoid='+videoId 18849 } 18850 } 18851}); 18852 18853$(".mode_header .search-toggle-mob").click(function() { 18854 $(".mode_header .search-toggle-mob").hide(); 18855 $(".mode_header .flex-col").hide(); 18856 $(".mode_header .navbar-toggler").hide(); 18857 $(".mode_header .header-serach-cont-mob").css('display','flex'); 18858}); 18859 18860$(document).ready(function () { 18861 var currentUrl = window.location.href; 18862 var sessionCookie = $.cookie("apex__gigyaSession"); 18863 function loadJsonData(modal = null) { 18864 if (modal) { 18865 $(modal).modal("show"); 18866 if ($(".preference-modals-mode").hasClass("show")) { 18867 $("body").addClass("preference-modal-show"); 18868 } 18869 } 18870 populateDropdown(preferencesJsonData); // Populate dropdown 18871 preselectPreferences(); 18872 } 18873 let displayText; 18874 if (sessionCookie) { 18875 displayText = $(".sign-out-btn.purple").attr("data-logout-text"); 18876 } else { 18877 displayText = $(".sign-out-btn.purple").attr("data-preferences-text"); 18878 } 18879 $(".sign-out-btn.purple span").text(displayText); 18880 18881 // Function to populate dropdown menu 18882 function populateDropdown(data) { 18883 var $dropdown = $("#preference-therapeuticarea"); 18884 var dynamicDefaultText = $(".preference-text").data("text"); 18885 18886 $dropdown.empty(); // Clear existing options 18887 $dropdown.append( 18888 $("<option></option>").attr("value", "").text(dynamicDefaultText) 18889 ); 18890 18891 $.each(data, function (key, value) { 18892 $dropdown.append($("<option></option>").attr("value", key).text(key)); 18893 }); 18894 18895 $dropdown.trigger("change"); 18896 } 18897 function preselectPreferences() { 18898 var encodedData = $.cookie("m_prefs"); 18899 if (encodedData) { 18900 var m_prefs = JSON.parse(encodedData); 18901 $("#preference-therapeuticarea").val(m_prefs.therapeuticarea).change(); 18902 setTimeout(function () { 18903 $('#preference-specialty input[type="checkbox"]').each(function () { 18904 if (m_prefs.specialty.includes($(this).val())) { 18905 $(this).prop("checked", true); 18906 } 18907 }); 18908 }, 100); 18909 $(".preference-modals-mode button.close").show(); 18910 } 18911 } 18912 $("#deleteCookieBtn").on("click", function () { 18913 deleteCookie("cookieName"); 18914 }); 18915 if (inputValue == "manual"){ 18916 enableMenu(); 18917 18918 // Always load the JSON data, even if the cookie exists 18919 loadJsonData(); 18920 } 18921 18922 $(document).on("click", ".update-preference", function (event) { 18923 var $modal = $("#preferenceModal"); 18924 $.ajax({ 18925 url:
18926 $modal.find(".modal-details").data("modalpath") + 18927 "/jcr:content/root.html", 18928 success: function (resp) { 18929 $modal.find(".modal-content").html($(resp)); 18930 loadJsonData($modal); // Load JSON data for the modal 18931 }, 18932 error: function () {}, 18933 }); 18934 }); 18935 18936 $(document).on("click",".save-preference-cookie, .teaser-btn", function (event) { 18937 event.preventDefault(); // Prevent the default action for both buttons 18938 18939 // Common function to collect checked values 18940 function getCheckedValues() { 18941 var checkedValues = []; 18942 $('#preference-specialty input[type="checkbox"]:checked').each(function () { 18943 checkedValues.push($(this).val()); 18944 }); 18945 return checkedValues; 18946 } 18947 18948 // Common function for validation 18949 function validateCheckedValues(checkedValues) { 18950 if (checkedValues.length === 0) { 18951 $(".error-message").show(); 18952 return false; 18953 } else { 18954 $(".error-message").hide(); 18955 return true; 18956 } 18957 } 18958 18959 // Get checked checkboxes 18960 var checkedValues = getCheckedValues(); 18961 18962 // Perform validation 18963 if (!validateCheckedValues(checkedValues)) { 18964 return; // Stop execution if validation fails 18965 } 18966 18967 // Get selected option and prepare data to store 18968 var selectedOption = $("#preference-therapeuticarea").val(); 18969 var dataToStore = { 18970 therapeuticarea: selectedOption, 18971 specialty: checkedValues, 18972 }; 18973 18974 // Store the data in a cookie 18975 var encodedData = JSON.stringify(dataToStore); 18976 $.cookie("m_prefs", encodedData, { path: "/", expires: 90 }); 18977 18978 // updating localStorage MMContent value 18979 mmContentDataCall(true); 18980 18981 // Redirect logic 18982 var returnUrl = new URLSearchParams(window.location.search).get( 18983 "returnurl" 18984 ); 18985 var redirectUrl = 18986 $(this).data("red-url") || $(this).data('redirect-url') || 18987 (returnUrl ? decodeURIComponent(returnUrl) : window.location.href); 18988 18989 // Redirect to the specified URL 18990 window.location.href = redirectUrl; 18991 18992 if (!currentUrl.includes("returnurl")) { 18993 // Redirect to /home.html if 'returnurl' is not found 18994 //window.location.href = "/home.html"; 18995 location.reload(); 18996 } 18997 } 18998 ); 18999 if (!currentUrl.includes("returnurl")) { 19000 $(document).on( 19001 "click", 19002 ".TeaserComponent_mode .teaser-btn, .TeaserComponent_mode .preference-update-btn", 19003 function (event) { 19004 window.location.href = "/home.html"; 19005 } 19006 ); 19007 } 19008 if ($.cookie("m_prefs")) { 19009 $(".preference-update-btn ").show(); 19010 $(".teaser-btn").remove(); 19011 } else { 19012 $(".teaser-btn").show(); 19013 $(".preference-update-btn ").remove(); 19014 } 19015 $(document).on("change", "#preference-therapeuticarea", function () { 19016 var selectedKey = $(this).val(); 19017 var $jsonDataDisplay = $("#preference-specialty"); 19018 $jsonDataDisplay.empty(); 19019 19020 if (preferencesJsonData[selectedKey]) { 19021 let count = 0; 19022 $(".speciality-option").show(); 19023 $.each(preferencesJsonData[selectedKey], function (index, value) { 19024 count = count +1; 19025 $jsonDataDisplay.append( 19026 '<div><input type="checkbox" value="' + 19027 value + 19028 '">' + 19029 value + 19030 "</div>" 19031 ); 19032 }); 19033 if (count === 1) { 19034 const checkbox = document.querySelector("#preference-specialty input[type='checkbox']"); 19035 checkbox.checked = true; 19036 } 19037 } else { 19038 $(".speciality-option").hide(); 19039 } 19040 }); 19041 if (inputValue == "manual"){ 19042 // Initialize the process 19043 loadJsonData(); 19044 } 19045 19046 // This is for Multimedia component, Check if the div with id "mmLinkItem" exists 19047 const $mmLinkItem = $('.mm-link-item'); 19048 19049 if ($mmLinkItem.length > 0) { 19050 mmContentDataCall(); 19051 } else { 19052 console.log('Div with id "mmLinkItem" is not present.'); 19053 } 19054}); 19055 19056function enableMenu() { 19057 var inputValue = $("#preference-selection").val() || "dynamic"; 19058 var sciencePreferences = $.cookie("m_prefs"); 19059 if (inputValue == "manual" && sciencePreferences) { 19060 $(".mode_header .header-menu, .mode_header .navbar-toggler").show(); 19061 $("#favourite_action").hide(); 19062 $(".fav-icon").hide(); 19063 } 19064} 19065 19066 19067function mmContentDataCall(onUpdate=false) { 19068 // The div exists, get the value of the "data-url" attribute 19069 const dataUrl = '/bin/getmmcontent'; 19070 const encodedData = $.cookie("m_prefs") || ''; // Default to empty string if falsy (null, undefined, etc.) 19071 19072 const m_prefs = encodedData ? JSON.parse(encodedData) : {}; // Default to empty object if encodedData is falsy 19073 const therapeuticarea = m_prefs.therapeuticarea || ''; // Default to empty string if therapeuticarea is falsy 19074 19075 const currentPage = $('#currentpage').length ? $('#currentpage').val() || '' : ''; // Check if the element exists, then get the value 19076 19077 // Define your payload 19078 const payload = { 19079 "therapeuticArea": therapeuticarea, 19080 "page": currentPage 19081 }; 19082 19083 const localMMContentKey = 'mmcontent'; 19084 19085 let storedResponse = localStorage.getItem(localMMContentKey); 19086 if (!storedResponse || onUpdate) { 19087 if (therapeuticarea) { 19088 // Make an AJAX request 19089 $.ajax({ 19090 url: dataUrl, // Use the data-url value as the endpoint 19091 type: 'GET', // Set the HTTP method 19092 data: payload, // Send the payload data 19093 success: function(response) { 19094 localStorage.setItem(localMMContentKey, JSON.stringify(response)); 19095 // Optionally, you can trigger an event or call a function from another file 19096 // to notify that the data is ready. 19097 window.dispatchEvent(new Event('ajaxDataReady')); 19098 }, 19099 error: function(xhr, status, error) { 19100 console.log('AJAX request failed:', error); 19101 } 19102 }); 19103 } 19104 } 19105 let updatedResponse = localStorage.getItem(localMMContentKey); 19106 if (updatedResponse) { 19107 const localContent = JSON.parse(updatedResponse); 19108 if (Object.keys(localContent).length > 0) { 19109 if (!localContent.error) { 19110 $(".mm-link-item").show(); 19111 } 19112 } 19113 } 19114} 19115 19116function isValidModeEmail(emailField){ 19117 var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 19118 19119 if (reg.test(emailField.value) == false) 19120 { 19121 $('.mode_teaser .error-msg').css('display','inline-block'); 19122 return false;
19123 }else{ 19124 $('.mode_teaser .error-msg').css('display','none'); 19125 19126 } 19127 19128 return true; 19129 19130} 19131 19132function registerModeEmail(){ 19133 var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 19134 19135 if (reg.test($("#email-id-teaser").val()) == false) 19136 { 19137 $('.mode_teaser .error-msg').css('display','inline-block'); 19138 return false; 19139 }else{ 19140 $('.mode_teaser .error-msg').css('display','none'); 19141 19142 } 19143 19144 return true; 19145} 19146$(document).ready(function(){ 19147 19148 var videoidUrl=getQueryStringValue("videoid"); 19149 19150 if (videoidUrl == undefined || videoidUrl == '') { 19151 19152 $(".mode_breadcrumb").hide(); 19153 19154 } 19155 19156}); 19157 19158function getQueryStringValue (key) { 19159 return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); 19160} 19161$(document).ready(function(){ 19162 var modal=$('.mode_footer #entryModal'); 19163 if(modal.length>0){ 19164 modal.on('keydown',function(event){ 19165 if(event.key==="Escape"||event.keyCode===27){ 19166 event.preventDefault(); 19167 event.stopPropagation(); 19168 event.stopImmediatePropagation(); 19169 } 19170 }); 19171 } 19172 19173}); 19174 19175 19176$(".mode_footer #entryModal .modal-button").click(function() { 19177 $("#entryModal").hide(); 19178 $(".modal-backdrop ").hide(); 19179}); 19180$(document).ready(function () { 19181 init(); 19182 19183 $(document).on('click', 'input.sac-form-input-text', function (event) { 19184 // $(this).removeClass("error"); 19185 removeErrorSAC($(this)); 19186 // $(this).removeClass("success-msg"); 19187 }); 19188 $(document).on('blur', 'input.sac-form-input-text', function (event) { 19189 //$(this).addClass("success-msg"); 19190 if ($(this).val() == "" && $(this).prop("required")) { 19191 displayErrorSAC($(this), "required"); 19192 $(this).addClass("error"); 19193 } else if ($(this).attr("pattern")) { 19194 validatePaternSAC($(this)); 19195 } 19196 }); 19197 $(document).on('focus', 'select#sac-form-date', function (event) { 19198 loadDateDropdownSAC(14); 19199 }) 19200 $(document).on('focus', 'select#sac-form-time', function (event) { 19201 19202 let timeOptions = document.querySelectorAll("#sac-form-time option"); 19203 if (timeOptions.length > 1) { 19204 let timeOptionsValues = []; 19205 let currHours = new Date().getHours(); 19206 for (let i = 1; i < timeOptions.length; i++) { 19207 timeOptionsValues.push(timeOptions[i].value); 19208 } 19209 let dateVal = $('#sac-form-date').find(":selected").val(); 19210 if (dateVal.toLowerCase().includes('please select') || new Date(dateVal).getDate() == new Date().getDate()) { 19211 if (currHours >= 8) { 19212 timeOptions[1].disabled = true; 19213 } 19214 if (currHours >= 12) { 19215 timeOptions[2].disabled = true; 19216 } 19217 if (currHours >= 15) { 19218 timeOptions[3].disabled = true; 19219 } 19220 } else { 19221 timeOptions.forEach(opt => opt.disabled = false); 19222 } 19223 } 19224 }); 19225 19226 $(document).on('change', '.sac-form-input-checkbox, select.sac-form-input-text', function (event) { 19227 let spanElem = $(this).parent().parent().children('.sac-form-error-text'); 19228 if (event.currentTarget.tagName.toLowerCase() == 'select') { 19229 spanElem = $(this).parent().children('.sac-form-error-text'); 19230 if (event.currentTarget.selectedIndex > 0) { 19231 if (event.currentTarget.id === 'sac-form-date') { 19232 $('select#sac-form-time')[0].selectedIndex = 0; 19233 } 19234 spanElem.hide(); 19235 return; 19236 } 19237 } 19238 if (event.target.checked && spanElem) { 19239 spanElem.hide(); 19240 } else { 19241 spanElem.show(); 19242 } 19243 }); 19244 19245 $(document).on('input', 'input.sac-form-input-text[type="number"], input.sac-form-input-text[type="tel"]', function (e) { 19246 // let phoneNum = document.getElementById('sac-form-phone-number');
19247 let $this = $(this); 19248 let maxlength = parseInt($this.attr('maxlength')); 19249 let value = $this.val(); 19250 // if (($this.attr('id') == 'sac-form-phone-number') && (value.length == 3 || value.length == 4 || value.length == 8 || value.length == 7) && e.originalEvent.inputType == 'insertText') { 19251 // if(value.length == 4 || value.length == 8){ 19252 // if(value.charAt(value.length-1) != '-'){ 19253 // let last_char = value.charAt(value.length-1); 19254 // value = value.slice(0,-1) + '-' + last_char; 19255 // phoneNum.value = value; 19256 // } 19257 // }else{ 19258 // let finalVal = value + "-"; 19259 // $this[0].value = finalVal; 19260 // } 19261 19262 // } 19263 if (value && value.length >= maxlength) { 19264 $this.val(value.substr(0, maxlength)); 19265 } 19266 }); 19267 19268 $(document).on('click', '.sac-form-main-container .sac-form-close', function () { 19269 $('.sac-form-main-container-wrapper').hide(); 19270 }); 19271 19272 $(document).on('click', '.sac-modal-close', () => { 19273 $('.sac-form-main-container-wrapper').hide(); 19274 $('.sac-modal-container').hide(); 19275 $('.sac-form-main-container').show(); 19276 document.getElementById('#sac-form').reset(); 19277 } 19278 ); 19279 19280 function validatePaternSAC(input) { 19281 var errorFlag = false; 19282 var $input = $(input); 19283 if ($input.val()) { 19284 try { 19285 var pattern = new RegExp($input.attr("pattern")); 19286 /** 19287 * if the pattern is wrong displaying error 19288 */ 19289 if (pattern.test($input.val())) { 19290 // $input.removeClass("error"); 19291 // $input.addClass("success-msg"); 19292 removeErrorSAC(input); 19293 } else { 19294 errorFlag = true; 19295 // $input.addClass("error"); 19296 displayErrorSAC(input, "pattern"); 19297 } 19298 } catch (e) { 19299 console.error("invaild pattern (Regular Expression )", $input.attr("pattern")); 19300 console.error(e); 19301 } 19302 } else { 19303 displayErrorSAC(input, "required"); 19304 } 19305 return errorFlag; 19306 } 19307 19308 function formatDateSAC(date) { 19309 var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 19310 var dayNames = ["Sun,", "Mon,", "Tue,", "Wed,", "Thu,", "Fri,", "Sat,"]; 19311 var d = new Date(date) 19312 , day = (d.getDay()) 19313 , month = (d.getMonth()) 19314 , date = d.getDate() 19315 daydate = date + ",", 19316 year = d.getFullYear(); 19317 day = dayNames[day]; 19318 month = monthNames[month]; 19319 19320 if (date > 0 && date <= 9) 19321 daydate = '0' + daydate; 19322 19323 return [day, month, daydate, year].join(' '); 19324 } 19325 function loadDateDropdownSAC(count) { 19326 var options = `<option value=${$('#sac-form-date option:first-child').val() || ''}>${$('#sac-form-date option:first-child').text()}</option>`; 19327 var curr = new Date; 19328 var first = curr.getDate() 19329 for (var i = 0; i < count; i++) { 19330 var next = new Date(curr.getTime()); 19331 next.setDate(first + i); 19332 weekendday = next.getDay(); 19333 if ((weekendday != 0) && (weekendday != 6)) { 19334 options += `<option value="${formatDateSAC((next.toString()))}">${formatDateSAC((next.toString()))}</option>`; 19335 } 19336 } 19337 $('#sac-form-date').html(''); 19338 $('#sac-form-date').append(options); 19339 if (curr.getHours() >= 15) { 19340 let dateOptions = document.querySelectorAll("#sac-form-date option"); 19341 dateOptions[1].disabled = true; 19342 } 19343 } 19344 19345 function init() { 19346 $(document).on("click", "#sac-form-submit", function (event) { 19347 //$(event.currentTarget).prop("disabled",true); 19348 19349 if (!submitEventListenerSAC($(event.currentTarget).parents("form"))) { 19350 event.preventDefault(); 19351 } 19352 //formChangeEventListener($(event.currentTarget).parents('form')); 19353 }); 19354 19355 $("#genericLightbox").on('hide.bs.modal', function() { 19356 if ($('.accesssupportform').length > 0) { 19357 resetFormSAC(); 19358 19359 //hide error text//hide captcha border//hide modal//show form 19360 $('.sac-form-error-text').hide(); 19361 $('.sac-form .g-recaptcha').css('border', 'none'); 19362 $('.sac-form-main-container-wrapper .sac-form-main-container').show(); 19363 $('.sac-form-main-container-wrapper .sac-modal-container').hide(); 19364 } 19365 19366 }); 19367 // loadDateDropdownSAC(14); 19368 } 19369 19370 function scrollToFirstInvalidControlSAC() { 19371 // $('html, body').animate({ 19372 // scrollTop: $("form.sac-form .sac-form-error-text:visible").offset().top - 350 19373 // }); 19374 $('.modal-body').animate({ 19375 scrollTop: $("form.sac-form .sac-form-error-text:visible").first().offset().top + 1500 19376 }); 19377 } 19378 19379 function submitEventListenerSAC(selector) { 19380 let $form = $(selector); 19381 let isRequiredValidation = requiredValidationSAC($form); 19382 let isPatternValidation = patternValidationSAC($form); 19383 // if(!isRequiredValidation) { 19384 // validateTimeAndDateSAC($form); 19385 // } 19386 let isValidCaptcha = validateCaptchaSAC(); 19387 let finalFormvalidationState = false;
19388 console.log(isRequiredValidation, ": isRequiredValidation"); 19389 console.log(isPatternValidation, ": isPatternValidation"); 19390 // console.log(istextAreaValidation, ': istextAreaValidation'); 19391 // console.log(isValidCaptcha, ": isValidCaptcha"); 19392 if (isRequiredValidation || isPatternValidation || !isValidCaptcha) { 19393 // if (isRequiredValidation || isPatternValidation) { 19394 finalFormvalidationState = false; 19395 $('.sac-form-global-error-container .sac-form-error-text').css('display', 'block'); 19396 scrollToFirstInvalidControlSAC(); 19397 } else { 19398 finalFormvalidationState = true; 19399 $('.sac-form-global-error-container .sac-form-error-text').css('display', 'none'); 19400 19401 } 19402 19403 if (finalFormvalidationState) { 19404 $form.parent().append('<div class="form-loading"><i class="icon icon-spinner"><svg width="120px" height="120px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-default"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(0 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(45 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.15s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(90 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.3s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(135 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.44999999999999996s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(180 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.6s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(225 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.75s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(270 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="0.8999999999999999s" repeatCount="indefinite"></animate></rect><rect x="40" y="40" width="20" height="20" rx="100%" ry="100%" fill="#FFFFFF" transform="rotate(315 50 50) translate(0 -30)"> <animate attributeName="opacity" from="1" to="0" dur="1.2s" begin="1.05s" repeatCount="indefinite"></animate></rect></svg></i></div>') 19405 19406 $.post($form.find('[type="submit"]').attr("formaction"), $form.serializeArray(), function (res) { 19407 // console.log(res); 19408 if (res.status.trim() == "success") { 19409 $form.parent().find(".form-loading").remove(); 19410 $('.sac-form-main-container').hide(); 19411 $('.sac-modal-container').show(); 19412 $('.sac-modal-success-wrapper').css('display', 'flex'); 19413 $('.sac-modal-failure-wrapper').hide(); 19414 19415 console.log("sac form submit Success"); 19416 19417 resetFormSAC($form); 19418 } else if (res.status.trim() == "failure") { 19419 19420 console.log("sac form submit Failure"); 19421 19422 $form.parent().find(".form-loading").remove(); 19423 $('.sac-form-main-container').hide(); 19424 $('.sac-modal-container').show(); 19425 $('.sac-modal-success-wrapper').hide(); 19426 $('.sac-modal-failure-wrapper').css('display', 'flex'); 19427 resetFormSAC($form); 19428 19429 /** 19430 * if there is server side error then reset captcha if exist 19431 */ 19432 19433 if ($(".g-recaptcha").length) { 19434 grecaptcha.reset(); 19435 } 19436 19437 } else { 19438 //$form.find('[type="submit"]').prop("disabled", false); 19439 console.log("SAC Form"); 19440 } 19441 }).fail(function () { 19442 if ($(".g-recaptcha").length) { 19443 grecaptcha.reset(); 19444 } 19445 // $form.find('[type="submit"]').prop("disabled", false); 19446 }).always(function () { 19447 $form.parent().find(".form-loading:visible").remove(); 19448 }); 19449 19450 } else { 19451 $form.parent().find(".form-loading").remove(); 19452 } 19453 } 19454 19455 // function validateTimeAndDateSAC($form) { 19456 // let date = new Date(); 19457 // let todayDate = date.getDate(); 19458 // let selectedDate = new Date($('#sac-form-date').val()).getDate(); 19459 // if(todayDate == selectedDate) { 19460 // let currentTime = date.getHours(); 19461 // let selectedTime = $('#sac-form-time').val(); 19462 // let selectedOption = $('#sac-form-time').prop('selectedIndex'); 19463 // const timings = { 19464 // 1 : 8, 19465 // 2 : 12, 19466 // 3 : 15 19467 // } 19468 // if(currentTime < timings[`${selectedOption}`]) { 19469 // return console.log(true , '------------------;'); 19470 // } 19471 // return console.log(false , '---------------;'); 19472 19473 // } 19474 // } 19475 19476 function requiredValidationSAC($form) { 19477 var errorFlag = false;
19478 var inputSelector = "input[required]:visible, select[required]:visible"; 19479 19480 $.each($form.find(inputSelector), function (index, input) { 19481 var $input = $(input); 19482 /** 19483 * if the field value is empty displaing error 19484 */ 19485 // console.log($input.prop('type')); 19486 19487 if (!$input.val()) { 19488 errorFlag = true; 19489 displayErrorSAC($input, "required"); 19490 19491 $input.addClass("error"); 19492 } else { 19493 removeErrorSAC($input); 19494 $input.addClass("success-msg"); 19495 } 19496 19497 if ($input.prop('type') == "checkbox") { 19498 19499 if ($input.prop('checked') || $('input:checkbox[name="termsCheckbox"]:checked').length > 0) { 19500 $input.parent().parent().children('.sac-form-error-text').hide(); 19501 } else { 19502 $input.parent().parent().children('.sac-form-error-text').show(); 19503 errorFlag = true; 19504 } 19505 } 19506 19507 if ($input.prop('type') == "select-one") { 19508 19509 if ($input.prop('selectedIndex') > 0 && $input.val()) { 19510 $input.parent().find('.sac-form-error-text').hide(); 19511 } else { 19512 $input.parent().find('.sac-form-error-text').show(); 19513 if (!$input.val()) { 19514 $input.prop('selectedIndex', 0); 19515 } 19516 errorFlag = true; 19517 } 19518 } 19519 19520 }); 19521 return errorFlag; 19522 } 19523 // -----------------------****************************-------------------------- 19524 function patternValidationSAC($form) { 19525 var errorFlag = false; 19526 $.each($form.find("input[pattern]:visible"), function (index, input) { 19527 var $input = $(input); 19528 if ($input.val()) { 19529 try { 19530 var pattern = new RegExp($input.attr("pattern")); 19531 /** 19532 * if the pattern is wrong displaying error 19533 */ 19534 if (pattern.test($input.val())) { 19535 removeErrorSAC($input); 19536 $input.removeClass("error"); 19537 } else { 19538 errorFlag = true; 19539 $input.addClass("error"); 19540 displayErrorSAC($input, "pattern"); 19541 } 19542 } catch (e) { 19543 console.error("invaild pattern (Regular Expression )", $input.attr("pattern")); 19544 console.error(e); 19545 } 19546 } else { 19547 $input.addClass("error"); 19548 displayErrorSAC($input, "required"); 19549 } 19550 }); 19551 return errorFlag; 19552 } 19553 19554 function displayErrorSAC(input, errorType, $form) { 19555 // const $input = $(input); 19556 let errorMessage = ""; 19557 if (errorType === "required") { 19558 errorMessage = input.data("requiredMessage"); 19559 } else if (errorType === "pattern") { 19560 errorMessage = input.data("patternMessage"); 19561 } 19562 // input.next().html(errorMessage); 19563 input.parent().find('.sac-form-error-text').html(errorMessage).show(); 19564 } 19565 19566 function removeErrorSAC(input, $form) { 19567 //$(input).addClass("success-msg"); 19568 // input.siblings('.error-text').hide(); 19569 // const $input = $(input); 19570 // span('class').css('visibility', 'hidden'); 19571 input.parent().find('.sac-form-error-text').hide(); 19572 } 19573 function validateCaptchaSAC() { 19574 if ($(".g-recaptcha").length > 0) { 19575 if (!grecaptcha) 19576 return false; 19577 let captchaResponse; 19578 /** 19579 * if reCaptcha is created dynamically then in widgetId reCaptcha reference will be set. 19580 */ 19581 captchaResponse = grecaptcha.getResponse(); 19582 if (captchaResponse.length == 0) { 19583 $(".g-recaptcha").css("border", "1px Solid #e76468"); 19584 // $('.g-recaptcha + .error-text').show(); 19585 return false;
19586 } else { 19587 $(".g-recaptcha").css("border", "none"); 19588 // $('.g-recaptcha + .error-text').hide(); 19589 return true; 19590 } 19591 } else { 19592 return true; 19593 } 19594 } 19595 19596 // Global recaptchaCallback 19597 recaptchaCallback = function () { 19598 // Specific to iOS 19599 if (navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 19600 // Scroll recaptcha back into view to fix iOS scrolling bug 19601 $(".g-recaptcha").get(0).scrollIntoView(true); 19602 window.scrollBy(0, -50); 19603 } 19604 19605 let captchaResponse = grecaptcha.getResponse(); 19606 19607 if (captchaResponse.length == 0) { 19608 $(".g-recaptcha").css("border", "1px Solid #e76468"); 19609 // $('.g-recaptcha + .error-text').show(); 19610 // return false; 19611 } else { 19612 $(".g-recaptcha").css("border", "none"); 19613 // $('.g-recaptcha + .error-text').hide(); 19614 // return true; 19615 } 19616 }; 19617 19618 function resetFormSAC($form) { 19619 document.getElementById("sac-form").reset(); 19620 grecaptcha.reset(); 19621 } 19622}); 19623$(document).ready(function() { 19624 // Check if the div with id "mmcontent" exists 19625 const $mmContent = $('#mmcontent'); 19626 19627 if ($mmContent.length > 0) { 19628 19629 const localMMContentKey = 'mmcontent'; 19630 19631 let storedResponse = localStorage.getItem(localMMContentKey); 19632 19633 // Sample Test data load directly without ajax call 19634 if (storedResponse) { 19635 renderContent(storedResponse); 19636 } else { 19637 window.addEventListener('ajaxDataReady', function() { 19638 let readyResponse = localStorage.getItem(localMMContentKey); 19639 renderContent(readyResponse); 19640 }); 19641 } 19642 19643 } else { 19644 console.log('Div with id "mmcontent" is not present.'); 19645 } 19646}); 19647 19648 19649function renderContent(items) { 19650 const $mmContent = $('#mmcontent'); 19651 const $loader = $('.bms-mode__multimedia--loader'); 19652 //const dataError = $mmContent.data('errorMsg') || ''; 19653 let htmlContent; 19654 // Assuming the response is an array of objects 19655 // Loop through the response data and use it 19656 items = JSON.parse(items); 19657 if (Object.keys(items).length > 0) { 19658 if (items && items.error) { 19659 //htmlContent = '<div class="bms-mode__multimedia--no-result-container"><h3 class="bms-mode__multimedia--no-result">'+ dataError +'</h3></div>'; 19660 //$mmContent.append(htmlContent); // Append the HTML to the .content div 19661 window.location.href = '/'; 19662 } else { 19663 $(".mm-link-item").show(); 19664 items?.forEach(function(item, index) { 19665 const image = item.image; 19666 const title = item.title; 19667 const pageUrl = item.page_url; 19668 // For example, appending each item to a div with class "content" 19669 htmlContent = '<div class="bms-mode__multimedia--list-item" index="'+ index +'" role="gridcell">'; 19670 htmlContent += '<a class="bms-mode__multimedia--list-link" target="_blank" href="'+ pageUrl +'" aria-label="'+ title +'">'; 19671 htmlContent += '<div class="bms-mode__multimedia--tile-img">'; 19672 htmlContent += '<img src="'+ image +'" class="bms-mode__multimedia--list-img" alt="Thumbnail of '+ title +'">'; 19673 htmlContent += '</div>'; 19674 htmlContent += '<div class="bms-mode__multimedia--tile-cnt">'; 19675 htmlContent += '<p class="bms-mode__multimedia--list-title" role="heading" aria-level="3">'+ title +'</p>'; 19676 htmlContent += '</div>'; 19677 htmlContent += '</a>'; 19678 htmlContent += '</div>'; 19679 $mmContent.append(htmlContent); // Append the HTML to the .content div 19680 }); 19681 } 19682 } else { 19683 //htmlContent = '<div class="bms-mode__multimedia--no-result-container"><h3 class="bms-mode__multimedia--no-result">'+ dataError +'</h3></div>'; 19684 //$mmContent.append(htmlContent); // Append the HTML to the .content div 19685 window.location.href = '/'; 19686 } 19687 19688 // hide loader 19689 $loader?.hide(); 19690} 19691LOREM.devices = { 19692 isDesktop:function(){ 19693 if (screen.width >= 992) { 19694 return true; 19695 } 19696 }, 19697 isTablet:function(){ 19698 if ((screen.width <= 991) && (screen.width >= 768)) { 19699 return true; 19700 } 19701 }, 19702 isMobile:function(){ 19703 if (screen.width <= 767) { 19704 return true; 19705 } 19706 } 19707} 19708 19709var LOREM = window.LOREM = LOREM || {}; 19710var scriptsIconsPath= '/etc.clientlibs/bms-commercial-shared/clientlibs/base/resources'; 19711 19712$(function () { 19713 function _autoload() { 19714 $.each(LOREM, function (fn_key, obj) { 19715 if ($.isArray(obj._autoload)) { 19716 $.each(obj._autoload, function (key, value) { 19717 if ($.isArray(value)) { 19718 if (value[1]) { 19719 LOREM[fn_key][value[0]](); 19720 } else { 19721 if (value[2]) { 19722 LOREM[fn_key][value[2]](); 19723 } 19724 } 19725 } else { 19726 LOREM[fn_key][value](); 19727 } 19728 }); 19729 } 19730 }); 19731 } 19732 _autoload(); 19733}); 19734 19735 19736LOREM.options = {
19737 _autoload: ['_anchorTargetClick'], 19738 bindListMaxHeight: function (element, listSize) { 19739 /* function definition for calculating heights with respect to each row */ 19740 var $list; 19741 var tilesperrow=element.closest('.cmp-tile-wrapper').data('tilesPerRow'); 19742 if(tilesperrow !==undefined && tilesperrow >3) { 19743 var height = 0; 19744 } else { 19745 var height; 19746 } 19747 var maxProducts = function (maxLen, totLen) { 19748 var lastList = totLen % listSize; 19749 var lastIndex = totLen - lastList; 19750 var maxHeight; 19751 $list.each(function (index) { 19752 $(this).outerHeight() > height ? height = $(this).outerHeight() : null; 19753 index > lastIndex ? maxLen = lastList : null; 19754 /* assign max heights to each tile after calculating in last row */ 19755 if ((index + 1) % maxLen === 0 || ((index + 1) % lastList === 1 && (index + 1) === totLen)) { 19756 assignHeightToTile(index); 19757 } 19758 }); 19759 /* max heights function to assign each tile after calculating in each row */ 19760 function assignHeightToTile(index) { 19761 maxHeight = height; 19762 $list.each(function (ind) { 19763 if (ind === index) { 19764 for (var i = ind; i > index - maxLen; i--) { 19765 $list.eq(i).css('height', maxHeight); 19766 } 19767 return false; 19768 } 19769 }); 19770 } 19771 }; 19772 /* function initialization for calculating heights*/ 19773 var calcMaxHeight = function () { 19774 element.css('height', 'auto'); 19775 $list = element; 19776 var $window = $(window); 19777 if ($window.width() > 767) { 19778 $list.length < listSize ? maxProducts($list.length, $list.length) : maxProducts(listSize, $list.length); 19779 } else { 19780 $list.length < 1 ? maxProducts($list.length, $list.length) : maxProducts(1, $list.length); 19781 } 19782 }; 19783 if(element.length > 1) { 19784 calcMaxHeight(); 19785 } 19786 }, 19787 /*below functions takes key and value,generates new URL without disturbing other query parameters*/ 19788 getFormattedUrl : function(key,referenceKey,setNewUrl){ 19789 var currentUrl = window.location.href, 19790 newUrl = ''; 19791 if(setNewUrl !== undefined){ 19792 currentUrl = setNewUrl; 19793 } 19794 if(currentUrl.indexOf('?') >= 0){ 19795 if(currentUrl.indexOf(key + '=') >= 0){ 19796 var urlArray = currentUrl.split(key + '='), 19797 qpArray = urlArray[1].split('&'), 19798 qpString = ''; 19799 for(var i=1;i< qpArray.length;i++){ 19800 qpString += '&' + qpArray[i]; 19801 } 19802 19803 newUrl = urlArray[0] + key + '=' + referenceKey; 19804 newUrl = urlArray[1].indexOf('&') >= 0 ? newUrl + qpString : newUrl; 19805 }else{ 19806 newUrl = currentUrl + '&' + key + '=' + referenceKey; 19807 } 19808 19809 } else { 19810 newUrl = currentUrl + '?' + key + '=' + referenceKey; 19811 } 19812 return newUrl; 19813 }, 19814 getQueryParam: function (name) { 19815 if (location.search.indexOf('?') >= 0) { 19816 var qparam = location.search.split('?')[1], 19817 paramValue = ''; 19818 qparam.split('&').forEach(function (q) { 19819 var r = q.split('='); 19820 if (r[0] === name) { 19821 paramValue = r[1]; 19822 } 19823 }); 19824 return paramValue; 19825 } 19826 return ''; 19827 }, 19828 validateEmail: function(str) { 19829 var emailRegex = /^\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i; 19830 if(str && emailRegex.test(str)) { 19831 return true; 19832 } 19833 return false; 19834 }, 19835 validatePhone: function(str) { 19836 var phoneRegex = /^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/; 19837 if(str && phoneRegex.test(str)) { 19838 return true; 19839 } 19840 return false; 19841 }, 19842 appendErrorElem: function(element, errMsg) { 19843 var $errorElem; 19844 var $highLightElem=element.find('input:not([type="checkbox"]),select,textarea'); 19845 if(!element.find('.hasError').length) { 19846 $errorElem = $('<span class="hasError" />'); 19847 $errorElem.text(errMsg || ''); 19848 element.append($errorElem); 19849 } else { 19850 element.find('.hasError').text(errMsg || ''); 19851 } 19852 if(!$highLightElem.find('.highlightError').length && $('input[name="erroroutline"]').val()) { 19853 $highLightElem.addClass('highlightError'); 19854 } else { 19855 $highLightElem.removeClass('highlightError'); 19856 } 19857 }, 19858 valueTrim:function(selfvalue){ 19859 if(selfvalue!==undefined) { 19860 return $.trim(selfvalue); 19861 } 19862 return; 19863 }, 19864 validateInputRegex: function(str,regex) { 19865 var inputRegex = new RegExp(regex); 19866 if(str!==undefined && regex!==undefined){ 19867 if(str && inputRegex.test(str)) { 19868 return true; 19869 } 19870 return false;
19871 } 19872 }, 19873 validateMin: function(str,min) { 19874 if(str!==undefined && min!==undefined){ 19875 if(str.length > min-1) { 19876 return true; 19877 } 19878 return false; 19879 } 19880 }, 19881 validateFormFields: function($elem) { 19882 var flag; 19883 if ($elem.length) { 19884 $elem.find('.form-group').each(function() { 19885 LOREM.options.validateFormFieldsElement($(this)); 19886 }); 19887 flag = !($elem.find('.hasError').is(':visible')); 19888 } 19889 return flag; 19890 }, 19891 validateFormFieldsElement: function($elem) { 19892 var flag = true; 19893 var errorText; 19894 if ($elem.length) { 19895 if(($elem.find('.hasError').is(':visible')) && ($elem.find('.custom-error').is(':visible'))){ 19896 $elem.find('.custom-error').remove(); 19897 } 19898 var $self = $elem, 19899 $inputReq = $self.find('[required]:visible'), 19900 $input = $self.find("input:not(:hidden),select,textarea"), 19901 selfvalue1 = $inputReq.val(), 19902 selfvalue = $input.val(), 19903 minLength = $input.attr('minlength'), 19904 maxLength = $input.attr('maxlength'), 19905 regexValidation = $input.attr('data-regex'), 19906 isSpecialCase = $inputReq.attr('type') === 'checkbox' || $inputReq.attr('type') === 'radio'; 19907 var isInputType = $input.attr('type') === 'text' || $input.attr('type') === 'password' || $input.attr('type') === 'tel' || $input.attr('type') === 'number' || $input.attr('type') === 'email'; 19908 var isTextArea = $('textarea'); 19909 var formFallBackError = $elem.closest('form').parents().find('.cmp-error-messages-wrapper'); 19910 if (isInputType === true) { 19911 selfvalue = LOREM.options.valueTrim($input.val()); 19912 $input.val(selfvalue); 19913 } 19914 //selfvalue1 is the value when the required is visible for inputs 19915 var $highLightElem=$elem.find('input:not([type="checkbox"]),select,textarea'); 19916 if (!(selfvalue1 === '' || selfvalue1 === null) && isSpecialCase) { 19917 // checkbox and radio button code goes here 19918 if (!$inputReq.is(':checked')) { 19919 errorText = $inputReq.attr('data-cmp-required') || 'Required Field'; 19920 LOREM.options.appendErrorElem($self, errorText); 19921 flag = false; 19922 } else { 19923 $self.find('.hasError').remove(); 19924 $highLightElem.removeClass('highlightError'); 19925 } 19926 } else if (!(selfvalue1 === '' || selfvalue1 === null) && (selfvalue !== "") && isInputType) { 19927 //logic for fallback password validation 19928 var minmaxfallbackflag = false; 19929 if((minLength === undefined) && (maxLength === undefined)){ 19930 minmaxfallbackflag = true; 19931 } 19932 if(minLength === undefined){minLength = 0;} 19933 if ((minLength > 0 && isInputType && !LOREM.options.validateMin(selfvalue, minLength))) { 19934 errorText = $input.attr('data-min-message') || formFallBackError.attr('data-min-length-message') || 'Validation For Minimum Field Length Has Failed.'; 19935 LOREM.options.appendErrorElem($self, errorText); 19936 flag = false; 19937 } else if ($input.attr('name') === 'password'){ 19938 var $password = $input.val(); 19939 if (minmaxfallbackflag && ($password.length < 6 || $password.length > 15)) { 19940 errorText = 'Please Enter a Value Between 6 and 15 Characters.'; 19941 LOREM.options.appendErrorElem($self, errorText); 19942 flag = false; 19943 } else if ((isInputType && (regexValidation !== undefined) && !LOREM.options.validateInputRegex(selfvalue, regexValidation))) { 19944 errorText = $input.attr('data-regex-constraint-message') || formFallBackError.attr('data-regex-message') || 'Validation For Regular Expression Has Failed.'; 19945 LOREM.options.appendErrorElem($self, errorText); 19946 flag = false; 19947 } else { 19948 $self.find('.hasError').remove(); 19949 $highLightElem.removeClass('highlightError'); 19950 } 19951 } else if ((isInputType && (regexValidation !== undefined) && !LOREM.options.validateInputRegex(selfvalue, regexValidation))) { 19952 errorText = $input.attr('data-regex-constraint-message') || formFallBackError.attr('data-regex-message')|| 'Validation For Regular Expression Has Failed.'; 19953 LOREM.options.appendErrorElem($self, errorText); 19954 flag = false;
19955 }else if((regexValidation === undefined) && ((($input.attr('type') === 'email') && !LOREM.options.validateEmail(selfvalue)) || (($input.attr('type') === 'tel') && !LOREM.options.validatePhone(selfvalue)))){ 19956 errorText = $input.attr('data-cmp-constraint') || formFallBackError.attr('data-regex-message') || 'Validation For Regular Expression Has Failed.'; 19957 LOREM.options.appendErrorElem($self, errorText); 19958 } 19959 else { 19960 $self.find('.hasError').remove(); 19961 $highLightElem.removeClass('highlightError'); 19962 } 19963 } else if (!(selfvalue1 === '' || selfvalue1 === null || isInputType) && (isTextArea !== undefined) && ((isTextArea.length) > 0) && (isTextArea.val())!=="") { 19964 var isTextAreaVal= isTextArea.val(); 19965 if ((minLength > 0 && !LOREM.options.validateMin(isTextAreaVal, minLength))) { 19966 errorText = $input.attr('data-min-message') || formFallBackError.attr('data-min-length-message') || 'Validation For Minimum Field Length Has Failed.'; 19967 LOREM.options.appendErrorElem($self, errorText); 19968 flag = false; 19969 } else if ((!isInputType && (regexValidation !== undefined) && (isTextAreaVal > 0) && !LOREM.options.validateInputRegex(isTextAreaVal, regexValidation))) { 19970 errorText = $input.attr('data-regex-constraint-message') || formFallBackError.attr('data-regex-message') || 'Validation For Regular Expression Has Failed.'; 19971 LOREM.options.appendErrorElem($self, errorText); 19972 flag = false; 19973 } else { 19974 $self.find('.hasError').remove(); 19975 $highLightElem.removeClass('highlightError'); 19976 } 19977 } else { 19978 if (selfvalue1 === '' || selfvalue1 === null) { 19979 errorText = $inputReq.attr('data-cmp-required') || 'Required Field'; 19980 LOREM.options.appendErrorElem($self, errorText); 19981 flag = false; 19982 } else { 19983 errorText = $input.attr('data-cmp-constraint') || ''; 19984 if (($input.attr('type') === 'email' && (selfvalue !== "") && !LOREM.options.validateEmail(selfvalue)) || ($input.attr('type') === 'tel' && (selfvalue !== "") && !LOREM.options.validatePhone(selfvalue))) { 19985 LOREM.options.appendErrorElem($self, errorText); 19986 } else { 19987 $self.find('.hasError').remove(); 19988 $highLightElem.removeClass('highlightError'); 19989 } 19990 } 19991 } 19992 } 19993 return flag; 19994 }, 19995 19996 formTextValidateOnBlur: function($elem) { 19997 $elem = $(this); 19998 var el = $('input,select,textarea'), 19999 $hidden = $elem.attr('type') === 'hidden'; 20000 if (!$hidden) { 20001 el.on('blur change', function() { 20002 LOREM.options.validateFormFieldsElement($(this).closest('.form-group')); 20003 20004 }); 20005 return true; 20006 } 20007 return false; 20008 }, 20009 populateValues: function($formel , name, fieldval){ 20010 var $elem = $formel.find("[name='" + name + "']"); 20011 if(!($elem === undefined)){ 20012 var isAttrCheckOrRadio = $elem.attr('type') === 'checkbox' || $elem.attr('type') === 'radio'; 20013 if(!($elem.attr('type') === undefined) && isAttrCheckOrRadio){ 20014 $formel.find("[name='" + name + "'][value='"+fieldval+"']").attr("checked", "checked").triggerHandler("change"); 20015 } 20016 else{ 20017 $elem.val(fieldval).triggerHandler("change"); 20018 } 20019 return true; 20020 } 20021 return false; 20022 }, 20023 _validatePassword: function($elem) { 20024 var $changepwd = $('.changePasswordForm').length; 20025 var isValid = true, 20026 $currentPassword = $elem.find('input[name="current_password"]'), 20027 $password =$elem.find('input[name="password"]'), 20028 $confirmPassword = $elem.find('input[name="confirm_password"]'); 20029 var $passwordField = $password.closest('.form-group'), 20030 $confirmPasswordField = $confirmPassword.closest('.form-group'), 20031 errorText; 20032 if (($changepwd > 0) && ($currentPassword.val() === $password.val())) { 20033 errorText = $password.attr('data-cmp-constraint') || ''; 20034 LOREM.options.appendErrorElem($passwordField, errorText); 20035 isValid = false;
20036 } 20037 if ($password.val() !== $confirmPassword.val()) { 20038 errorText = $confirmPassword.attr('data-cmp-constraint') || ''; 20039 LOREM.options.appendErrorElem($confirmPasswordField, errorText); 20040 isValid = false; 20041 } 20042 return isValid; 20043 }, 20044 scrollToFocusElem: function($elem) { 20045 if($elem.length) { 20046 var $body = $('html, body'), 20047 $headerMainnavWrapper = $('#header-mainnav-wrapper'), 20048 $utilitynavWrapper = $('.cmp-utilitynav-wrapper'), 20049 elemScrollTop; 20050 if($utilitynavWrapper.hasClass('sticky')) { 20051 elemScrollTop = $elem.offset().top - $('.header-utilitynav-wrapper').outerHeight(); 20052 }else{ 20053 elemScrollTop = $elem.offset().top - $('header').outerHeight() + $headerMainnavWrapper.outerHeight(); 20054 } 20055 /* to scroll even top of the page when header has position fixed */ 20056 if($headerMainnavWrapper.hasClass('sticky')) { 20057 elemScrollTop = $elem.offset().top - $headerMainnavWrapper.outerHeight() - 20; 20058 } 20059 $body.stop().animate({ 20060 scrollTop: elemScrollTop 20061 }, 500); 20062 } 20063 }, 20064 /* Show/hide fields conditionally */ 20065 conditionalFunction: function ($elem) { 20066 $.fn.conditionize = function (options) { 20067 var settings = $.extend({ 20068 hideJS: true 20069 }, options); 20070 $.fn.showOrHide = function (listenTo, listenFor, $section) { 20071 var $listenToElem = $(listenTo); 20072 if(typeof listenFor === "boolean"){ 20073 listenFor = listenFor.toString(); 20074 } 20075 if ($listenToElem.is('select, input:not([type="radio"]):not([type="checkbox"])') && $listenToElem.val() === listenFor) { 20076 $section.slideDown(); 20077 }else if ($listenToElem.val() && $listenToElem.val().length) { 20078 var slideFlag = false; 20079 $.each($(listenTo), function() { 20080 if ($(this).val() === listenFor) { 20081 slideFlag = true; 20082 if ($(this).is(':checked')) { 20083 $section.slideDown(); 20084 } else if (!$(this).is(':checked')) { 20085 $section.slideUp(); 20086 } 20087 } 20088 else { 20089 if ($(this).is('select')) { 20090 $section.slideUp(); 20091 } 20092 } 20093 }); 20094 if (!slideFlag && $(listenTo + ":checked").val() === listenFor) { 20095 $section.slideDown(); 20096 } 20097 }else { 20098 $section.slideUp(); 20099 } 20100 } 20101 return this.each(function () { 20102 var $self = $(this), 20103 listenTo = "[name=" + $self.data('cond-option') + "]", 20104 listenFor = $self.data('cond-value'), 20105 $section = $self; 20106 //Set up event listener 20107 $(listenTo).on('change', function () { 20108 $.fn.showOrHide(listenTo, listenFor, $section); 20109 }); 20110 //If setting was chosen, hide everything first... 20111 if (settings.hideJS) { 20112 $self.hide(); 20113 } 20114 //Show based on current value on page load 20115 $.fn.showOrHide(listenTo, listenFor, $section); 20116 }); 20117 } 20118 var $conditionalElem = $elem.find('.conditional'), 20119 isPublishMode; 20120 /* to check whether CQ object is present or not and handle if there is an error */ 20121 try { 20122 isPublishMode = JSON.parse(iswcmModeEditMode) ? false : true; 20123 } catch(error) { 20124 isPublishMode = true; 20125 } 20126 if($conditionalElem.length && isPublishMode) { 20127 $conditionalElem.conditionize(); 20128 } 20129 }, 20130 isInViewport: function($elem) { 20131 var elementTop = $elem.offset().top + $elem.outerHeight(), 20132 elementBottom = elementTop + $elem.outerHeight(), 20133 viewportTop = $(window).scrollTop(), 20134 viewportBottom = viewportTop + $(window).height(); 20135 return elementBottom > viewportTop && elementTop < viewportBottom; 20136 }, 20137 _anchorTargetClick: function() { 20138 $(document).on('click', 'a[href ^= "#"]', function(e) { 20139 var targetLink = $(this).attr('href'); 20140 var anchortagVal = targetLink.replace('#', ''); 20141 var targetElem; 20142 if (anchortagVal.length > 0) { 20143 targetElem = LOREM.options._getTargetElem(anchortagVal); 20144 } 20145 if (targetElem !== undefined && targetElem.length > 0) { 20146 e.preventDefault(); 20147 LOREM.options._calcTargetPosition(targetElem); 20148 } 20149 }); 20150 LOREM.options._deepLinkingElemScroll(); 20151 }, 20152 _calcTargetPosition: function(elem) { 20153 if (elem.length) { 20154 var $bodyHtml = $('body,html'); 20155 var scrollHeight = $(elem).offset().top;
20156 var headerHeightCal = LOREM.options._calStickyHeaderHeight(); 20157 $bodyHtml.stop().animate({ 20158 scrollTop: scrollHeight - headerHeightCal 20159 }, 1000); 20160 } 20161 }, 20162 /*below function is used to scrollto the matched element when the header is sticky*/ 20163 _deepLinkingElemScroll:function(){ 20164 var queryParameterOnLoad = window.location.hash; 20165 if (queryParameterOnLoad !== "") { 20166 var scrollElemAttr = queryParameterOnLoad.replace('#', ''); 20167 var srolledElem ; 20168 var headerHeightCal = LOREM.options._calStickyHeaderHeight(); 20169 if (scrollElemAttr.length > 0) { 20170 srolledElem = LOREM.options._getTargetElem(scrollElemAttr); 20171 } 20172 if(srolledElem !== undefined && srolledElem.length>0 && headerHeightCal!== undefined){ 20173 $('html, body').stop().animate({ 20174 scrollTop: srolledElem.offset().top - headerHeightCal 20175 }, 1000); 20176 } 20177 } 20178 }, 20179 /*below function is used to get the id/name element assosiated with the href value on a page*/ 20180 _getTargetElem:function(elem){ 20181 var targetElem; 20182 var targetElemNameAttr = $("[name= " + elem + "]").parent(); 20183 var targetElemIdAttr = $("[id= " + elem + "]").parent(); 20184 if(targetElemIdAttr.length >0){ 20185 targetElem = targetElemIdAttr; 20186 }else{ 20187 targetElem = targetElemNameAttr; 20188 } 20189 return targetElem; 20190 }, 20191 /*below function is used to calculate the height of header when it is sticky*/ 20192 _calStickyHeaderHeight: function() { 20193 var $mainNavWrapper = $('.header-mainnav-wrapper'); 20194 var $utilityNavWrapper = $('.header-utilitynav-wrapper'); 20195 var $cmpUtilityNavWrapper = $('.cmp-utilitynav-wrapper'); 20196 var $headerSticky = $mainNavWrapper.find('.cmp-main-nav-container').hasClass('sticky-nav') || $('.header').hasClass('sticky-mobile-header'); 20197 var $utilitynavDivSticky = $('.cmp-utilitynav-wrapper').data('sticky-utilitynav'); 20198 var headerHeightCal = 0; 20199 if ($headerSticky || $utilitynavDivSticky) { 20200 if ($headerSticky && $utilitynavDivSticky) { 20201 if (LOREM.devices.isDesktop()) { 20202 headerHeightCal = $mainNavWrapper.height() + $cmpUtilityNavWrapper.height(); 20203 } else { 20204 headerHeightCal = $utilityNavWrapper.height() + $cmpUtilityNavWrapper.height(); 20205 } 20206 } else { 20207 if ($headerSticky && !$utilitynavDivSticky) { 20208 if (LOREM.devices.isDesktop()) { 20209 headerHeightCal = $mainNavWrapper.height(); 20210 } else { 20211 headerHeightCal = $utilityNavWrapper.height(); 20212 } 20213 } 20214 if (!$headerSticky && $utilitynavDivSticky) { 20215 headerHeightCal = $cmpUtilityNavWrapper.height(); 20216 } 20217 } 20218 20219 } 20220 if($('.sticky-list-dropdown .cmp-list-dropdown').length >0){ 20221 var $listSelectorSticky = $('.sticky-list-dropdown').find('.cmp-list-dropdown').first(); 20222 if($listSelectorSticky.length >0){ 20223 headerHeightCal = headerHeightCal + ($listSelectorSticky.height()); 20224 } 20225 } 20226 /*height added if notification banner exists*/ 20227 if ($('.cmp-notification').length > 0) { 20228 if ($('.notification-banner-bg').data('sticky-notification')) { 20229 headerHeightCal = headerHeightCal + $('.cmp-notification').height(); 20230 } 20231 } 20232 return headerHeightCal; 20233 }, 20234 /* generic ajax call implenatation 20235 * formel is the form element, type is get or post for the request, url is the json url which needs to passed 20236 * and data is the form data 20237 * hideloaderflag is need to set by default true and in any scenario if we need to skip it can be passed as false and give in fallback in particular componet 20238 * callbacksucess is fallback sucess fn for form 20239 * callbackfailure is fallback failure fn for any form*/ 20240 ajaxCallHandler:function($formel,type,URL,data,hideLoaderFlag, showSstaticMsg, callbackSucess,callbackFailure){ 20241 $.ajax({ 20242 type: type, 20243 url: URL, 20244 data: data, 20245 success: function(response) { 20246 if(response.error === false){ 20247 $formel.parent().find('.alert-danger').addClass("hidden"); 20248 $formel.parent().find('.alert-success').removeClass("hidden"); 20249 } 20250 else if(response.error === true){ 20251 $formel.parent().find('.alert-success').addClass("hidden"); 20252 $formel.parent().find('.alert-danger').removeClass("hidden"); 20253 LOREM.options.sucessErrorHandling($formel,response, showSstaticMsg); 20254 } 20255 else{ 20256 $formel.parent().find('.alert-success').addClass("hidden"); 20257 $formel.parent().find('.alert-danger').addClass("hidden"); 20258 } 20259 if(hideLoaderFlag !== undefined && hideLoaderFlag === true){ 20260 LOREM.UTILS._hideLoader(); 20261 } 20262 callbackSucess(response,$formel); 20263 }, 20264 error: function(response) { 20265 LOREM.UTILS._hideLoader(); 20266 LOREM.options.failureErrorHandling($formel,response); 20267 $formel.parent().find('.alert-danger').removeClass("hidden"); 20268 callbackFailure(response); 20269 } 20270 }); 20271 }, 20272 sucessErrorHandling: function($formel,response,showSstaticMsg){ 20273 var $appendErrorElem = $formel.parent().find('.alert-danger'); 20274 var $staticErrorMsg = 'Something went wrong!'; 20275 var $errorMsg = response.responseMsg; 20276 if(showSstaticMsg === true){ 20277 $errorMsg = $staticErrorMsg + $errorMsg; 20278 } 20279 if(response.error === true){ 20280 var $defaultMsg = $formel.parents().find('.cmp-error-messages-wrapper').data('default-message') || $errorMsg; 20281 if($defaultMsg !== undefined){ 20282 $appendErrorElem.html($defaultMsg); 20283 } 20284 } 20285 }, 20286 failureErrorHandling: function($formel,response){ 20287 var $appendErrorElem = $formel.parent().find('.alert-danger'); 20288 var $errorEL = $formel.parents().find('.cmp-error-messages-wrapper'); 20289 var $staticErrorMsg = 'Something went wrong!'; 20290 var $defaultMsg = $errorEL.data('default-message') || $staticErrorMsg; 20291 if(response.status === 500){ 20292 var $serviceErrorMsg = $errorEL.data('status-500-message') || $defaultMsg; 20293 if($serviceErrorMsg !== undefined){ 20294 $appendErrorElem.html($serviceErrorMsg); 20295 } 20296 } else if(response.status === 400){ 20297 var $badReqErrorMsg = $errorEL.data('status-400-message') || $defaultMsg; 20298 if($badReqErrorMsg !== undefined){ 20299 $appendErrorElem.html($badReqErrorMsg); 20300 } 20301 } else if(response.status === 401){ 20302 var $unAuthorizedErrorMsg = $errorEL.data('status-401-message') || $defaultMsg; 20303 if($unAuthorizedErrorMsg !== undefined){ 20304 $appendErrorElem.html($unAuthorizedErrorMsg); 20305 } 20306 } else if(response.status === 503){ 20307 var $serviceUnAvilErrorMsg = $errorEL.data('status-503-message') || $defaultMsg; 20308 if($serviceUnAvilErrorMsg !== undefined){ 20309 $appendErrorElem.html($serviceUnAvilErrorMsg); 20310 } 20311 } else if(response.status === 404){ 20312 var $serviceNotFoundErrorMsg = $errorEL.data('status-404-message') || $defaultMsg; 20313 if($serviceNotFoundErrorMsg !== undefined){ 20314 $appendErrorElem.html($serviceNotFoundErrorMsg); 20315 } 20316 } else{ 20317 if($defaultMsg !== undefined){ 20318 $appendErrorElem.html($defaultMsg); 20319 } 20320 } 20321 $appendErrorElem.removeClass("hidden"); 20322 }, 20323 formElemresponseMatch:function(formel,response){ 20324 if(response !== undefined && response !== ''){ 20325 var data = response; 20326 var $formElements = formel.find("input,select"); 20327 $formElements.each(function() { 20328 var inputName = $(this).attr("name"); 20329 var isCheckbox = $(this).attr('type') === 'checkbox';
20330 Object.keys(data).forEach(function(key) { 20331 var populateVal; 20332 if (key === inputName) { 20333 if(isCheckbox === true){ 20334 var checkedVal =data[key]; 20335 if (typeof checkedVal === "boolean" || typeof checkedVal === "string") { 20336 var tempChedVal = "" + checkedVal; 20337 checkedVal = []; 20338 checkedVal.push(tempChedVal); 20339 } 20340 for(var i=0; i<checkedVal.length; i++) { 20341 populateVal = checkedVal[i]; 20342 LOREM.options.populateValues(formel, inputName, populateVal); 20343 } 20344 } 20345 else{ 20346 populateVal =data[key]; 20347 LOREM.options.populateValues(formel, inputName, populateVal); 20348 } 20349 } 20350 }); 20351 }); 20352 } 20353 }, 20354 /*To handle sysnchroous ajax calls*/ 20355 synchronousAjax:function($formel,type,URL,data) { 20356 return new Promise(function(resolve, reject) { 20357 $.ajax({ 20358 type: type, 20359 url: URL, 20360 data:data, 20361 success: function(response) { 20362 resolve(response); // Resolve promise and go to then() 20363 }, 20364 error: function(err) { 20365 reject(err) // Reject the promise and go to catch() 20366 } 20367 }) 20368 }) 20369 }, 20370 filteredValues:function($chkBoxelem,resultsArray,key){ 20371 var chkedElemArray = []; 20372 var allElemArray = []; 20373 $.each($($chkBoxelem.find("input[type=checkbox]")), function() { 20374   allElemArray.push($(this).val()); 20375 if($(this).is(':checked')){ 20376 chkedElemArray.push($(this).val()); 20377 } 20378 }); 20379 var resultsData= []; 20380 var resultsOriginal = resultsArray; 20381 resultsOriginal.filter(function(entry) { 20382 var resultElemArray = []; 20383 if ($.isArray(entry[key])){ 20384 resultElemArray = entry[key]; 20385 } 20386 else{ 20387 resultElemArray.push(entry[key]); 20388 20389 } 20390 var cssClassName = ''; 20391 var allActiveFlag =false; 20392 var addToResults = false; 20393 if(($.inArray( 'BOTH', resultElemArray) !== -1) || ($.inArray('ALL', resultElemArray) !== -1)){ 20394 allActiveFlag = true; 20395 } 20396 allElemArray.forEach(function(item,index){ 20397 if(allActiveFlag || (($.inArray( item, chkedElemArray ) !== -1) && ($.inArray( item, resultElemArray) !== -1 ))){ 20398 if(!addToResults && (chkedElemArray.length>0)){ 20399 addToResults = true; 20400 } 20401 cssClassName += 'icon-checkbox-' + item.toLowerCase().trim().replace(/\s/g, '-') + '-active '; 20402 }else{ 20403 cssClassName += 'icon-checkbox-' +item.toLowerCase().trim().replace(/\s/g, '-') + '-inactive '; 20404 } 20405 20406 }); 20407 entry.cssClass = cssClassName.trim(); 20408 if(addToResults){ 20409 resultsData.push(entry); 20410 } 20411 }); 20412 return resultsData; 20413 }, 20414 _generateHiddenKeys : function(selectedJsonResp) {
20415 var container = $('<div />'); 20416 Object.keys(selectedJsonResp).forEach(function(key) { 20417 $('<input>').attr({ 20418 type : 'hidden', 20419 name : key, 20420 value : selectedJsonResp[key] 20421 }).appendTo(container); 20422 }); 20423 return container; 20424 }, 20425 _entireTileClickable:function($this,clickedElem,dataArticleIdentifier){ 20426 $this.each(function(){ 20427 $(this).hover(function(){ 20428 $(this).toggleClass('hoveredtile'); 20429 }); 20430 $(this).on('click', function(e){ 20431 if(dataArticleIdentifier !== undefined && dataArticleIdentifier.length>0){ 20432 var deepLinkParameter = $(this).data('article-identifier'); 20433 if(deepLinkParameter !== undefined){ 20434 location.href = window.location.href.split('#')[0] + ('#'+deepLinkParameter); 20435 }else{ 20436 window.history.pushState({}, document.title, window.location.pathname); 20437 } 20438 } 20439 20440 var clicked = $(this).find(clickedElem)[0]; 20441 if (clicked === undefined) { 20442 return; 20443 } 20444 $(this).find(clickedElem)[0].click(); 20445 20446 }); 20447 }); 20448 }, 20449 _checkboxAllAndNone: function() { 20450 var allCheckboxFormElem = $('input:checkbox').closest(".form-group").find($(':checkbox')); 20451 var noneVal = "NONE"; 20452 var allVal = "ALL"; 20453 if (allCheckboxFormElem !== undefined && allCheckboxFormElem.length > 0) { 20454 allCheckboxFormElem.each(function() { 20455 var currentNoneEle = $(this).hasClass('icon-checkbox-none'); 20456 var currentAllEle = $(this).hasClass('icon-checkbox-all'); 20457 if(currentNoneEle || currentAllEle) { 20458 var currentFormElem = $(this).closest(".form-group"); 20459 currentFormElem.find('.icon-checkbox-all').click(function() { 20460 if ($(this).prop('checked') === true) { 20461 $(this).closest('.form-group').find($(':checkbox')).each(function() { 20462 if ($(this).val().toLowerCase() !== noneVal.toLowerCase()) { 20463 $(this).prop('checked', true); 20464 } 20465 }) 20466 currentFormElem.find('.icon-checkbox-none').prop('checked', false); 20467 } else { 20468 $(this).closest('.form-group').find($(':checkbox')).each(function() { 20469 if ($(this).val().toLowerCase() !== noneVal.toLowerCase()) { 20470 $(this).prop('checked', false); 20471 } 20472 }) 20473 } 20474 }); 20475 currentFormElem.find('.icon-checkbox-none').click(function() { 20476 if ($(this).prop('checked') === true) { 20477 $(this).closest('.form-group').find($(':checkbox')).each(function() { 20478 $(this).prop('checked', false); 20479 }) 20480 currentFormElem.find('.icon-checkbox-none').prop('checked', true); 20481 } 20482 }); 20483 currentFormElem.find($(':checkbox')).click(function(){ 20484 var checkboxCount; 20485 var currentFormGroup = $(this).closest(".form-group"); 20486 var currentChecBox = currentFormGroup.find($(':checkbox')); 20487 var currentNoneEle = currentFormGroup.find($(':checkbox')).hasClass('icon-checkbox-none'); 20488 var currentAllEle = currentFormGroup.find($(':checkbox')).hasClass('icon-checkbox-all'); 20489 20490 if (currentNoneEle && currentAllEle) { 20491 checkboxCount = 2; 20492 } else if (currentNoneEle || currentAllEle) { 20493 checkboxCount = 1; 20494 } 20495 20496 if ($(this).prop("checked") === false && $(this).val().toLowerCase() !== allVal.toLowerCase()) { 20497 if (currentChecBox.hasClass('icon-checkbox-all')) { 20498 currentFormGroup.find('.icon-checkbox-all').prop('checked', false); 20499 } 20500 if (currentChecBox.hasClass('icon-checkbox-none')) { 20501 currentFormGroup.find('.icon-checkbox-none').prop('checked', false); 20502 } 20503 } else if ($(this).prop("checked") === true && $(this).val().toLowerCase() !== noneVal.toLowerCase()) { 20504 if (currentChecBox.hasClass('icon-checkbox-none')) { 20505 currentFormGroup.find('.icon-checkbox-none').prop('checked', false); 20506 } 20507 } else if (allCheckboxFormElem.find($(':checkbox')).not(':checked').length === 0) { 20508 if (currentChecBox.hasClass('icon-checkbox-all')) { 20509 currentFormGroup.find('.icon-checkbox-all').prop('checked', false); 20510 } 20511 } 20512 if (currentChecBox.length === currentChecBox.filter(':checked').length + checkboxCount && 20513 currentFormGroup.find($(':checkbox')).hasClass('icon-checkbox-all') ) { 20514 currentFormGroup.find('.icon-checkbox-all').prop('checked', true); 20515 } 20516 }) 20517 } 20518 }); 20519 } 20520 }, 20521 _shuffleTiles: function($elem, watchedArticleTilesList) { 20522 $elem.each(function() { 20523 var listTileWrapper = $(this); 20524 listTileWrapper.children().removeClass('showTile make-tile-visible'); 20525 var dataMaxCount = listTileWrapper.attr('data-max-items'); 20526 var allPromoTiles = listTileWrapper.find('.cmp-tile-list.flex-unit'); 20527 var totalTilesLength = listTileWrapper.children().length; 20528 var flexPos = []; 20529 allPromoTiles.each(function() {
20530 var flexPosVal = $(this).data('flex-position'); 20531 flexPos.push(flexPosVal); 20532 }); 20533 var allNonPromoTiles = listTileWrapper.children().not('.cmp-tile-list.flex-unit'); 20534 var shuffleList = []; 20535 if (watchedArticleTilesList) { 20536 var allUnwatchedList; 20537 var allWatchedList ; 20538 if(allNonPromoTiles.find('.cmp-card-tile').hasClass('article-video-played')){ 20539 allUnwatchedList = allNonPromoTiles.find('.cmp-card-tile').not('.article-video-played').parent(); 20540 allWatchedList = allNonPromoTiles.find('.cmp-card-tile.article-video-played').parent(); 20541 }else{ 20542 allUnwatchedList = allNonPromoTiles.find('.cmp-card-tile').not('.article-video-completed').parent(); 20543 allWatchedList = allNonPromoTiles.find('.cmp-card-tile.article-video-completed').parent(); 20544 } 20545 var unWatchedList = []; 20546 var watchedList = []; 20547 while (allUnwatchedList.length) { 20548 unWatchedList.push(allUnwatchedList.splice(Math.floor(Math.random() * allUnwatchedList.length), 1)[0]); 20549 } 20550 while (allWatchedList.length) { 20551 watchedList.push(allWatchedList.splice(Math.floor(Math.random() * allWatchedList.length), 1)[0]); 20552 } 20553 for (var m = 0; m < unWatchedList.length; m++) { 20554 shuffleList.push(unWatchedList[m]); 20555 } 20556 for (var k = 0; k < watchedList.length; k++) { 20557 shuffleList.push(watchedList[k]); 20558 } 20559 } else { 20560 while (allNonPromoTiles.length) { 20561 shuffleList.push(allNonPromoTiles.splice(Math.floor(Math.random() * allNonPromoTiles.length), 1)[0]); 20562 } 20563 } 20564 var arr = []; 20565 var allPromoIndex = 0; 20566 var shuffleListIndex = 0; 20567 for (var i = 0; i < totalTilesLength; i++) { 20568 if ((allPromoTiles.length > 0) && ($.inArray(i, flexPos) !== -1)) { 20569 arr.push(allPromoTiles[allPromoIndex]); 20570 allPromoIndex++; 20571 } else { 20572 arr.push(shuffleList[shuffleListIndex]); 20573 shuffleListIndex++; 20574 } 20575 } 20576 listTileWrapper.children().remove(); 20577 listTileWrapper.append(arr); 20578 for (var j = 0; j < dataMaxCount; j++) { 20579 listTileWrapper.find('.cmp-tile-list').eq(j).addClass('showTile'); 20580 } 20581 if (watchedArticleTilesList) { 20582 listTileWrapper.find('.cmp-tile-list').not('.showTile').hide(); 20583 } 20584 }); 20585 }, 20586 /* This function handles to ignore the form fields from form submit*/ 20587 _ignoreFieldFromSubmit: function(formData, removeField,formName) { 20588 if(formName === true){ 20589 formData = formData.not(function() { 20590 return $(this).hasClass(removeField); 20591 }); 20592 } else { 20593 formData = formData.each(function(){ 20594 $(this).find("[class='" + removeField + "']").remove(); 20595 }); 20596 } 20597 return formData; 20598 }, 20599 /* select converts to custom dropdown specific js*/ 20600 _customDropdown: function($this) { 20601 var customSelectDiv, selElmnt, createSelectedDiv, createItemsDiv, createOptionsDiv; 20602 $this.parent().addClass('custom-select'); 20603 customSelectDiv = document.getElementsByClassName("custom-select"); 20604 for (var i = 0; i < customSelectDiv.length; i++) { 20605 selElmnt = customSelectDiv[i].getElementsByTagName("select")[0]; 20606 createSelectedDiv = document.createElement("DIV"); 20607 createSelectedDiv.setAttribute("class", "select-selected"); 20608 createSelectedDiv.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML; 20609 customSelectDiv[i].appendChild(createSelectedDiv); 20610 createItemsDiv = document.createElement("DIV"); 20611 createItemsDiv.setAttribute("class", "select-items select-hide"); 20612 for (var j = 1; j < selElmnt.length; j++) { 20613 createOptionsDiv = document.createElement("DIV"); 20614 createOptionsDiv.innerHTML = selElmnt.options[j].innerHTML; 20615 LOREM.options._clickSlectedItem(createOptionsDiv); 20616 createItemsDiv.appendChild(createOptionsDiv); 20617 } 20618 customSelectDiv[i].appendChild(createItemsDiv); 20619 LOREM.options._mouseEnterMouseLeave(createSelectedDiv,customSelectDiv[i]); 20620 } 20621 }, 20622 _clickSlectedItem: function(selectDiv) { 20623 selectDiv.addEventListener("click", function() { 20624 var selectedDivReplace, selectItemsParentSelect, selectSiblings; 20625 selectItemsParentSelect = this.parentNode.parentNode.getElementsByTagName("select")[0]; 20626 selectSiblings = this.parentNode.previousSibling; 20627 for (var m = 0; m < selectItemsParentSelect.length; m++) { 20628 if (selectItemsParentSelect.options[m].innerHTML === this.innerHTML) { 20629 selectItemsParentSelect.selectedIndex = m; 20630 selectSiblings.innerHTML = this.innerHTML; 20631 selectedDivReplace = this.parentNode.getElementsByClassName("same-as-selected"); 20632 for (var k = 0; k < selectedDivReplace.length; k++) { 20633 selectedDivReplace[k].removeAttribute("class"); 20634 } 20635 this.setAttribute("class", "same-as-selected"); 20636 break; 20637 } 20638 } 20639 selectSiblings.click(); 20640 LOREM.options._selectedTriggerChange($(selectItemsParentSelect)); 20641 }); 20642 }, 20643 _mouseEnterMouseLeave: function(mouseEnterElem, mouseLeaveElem) { 20644 mouseEnterElem.addEventListener("mouseenter", function(e) { 20645 e.stopPropagation(); 20646 this.nextSibling.classList.toggle("select-hide"); 20647 }); 20648 mouseLeaveElem.addEventListener("mouseleave", function(e) { 20649 e.stopPropagation(); 20650 LOREM.options._closeAllSelect(); 20651 }); 20652 }, 20653 /*a function that will close all select boxes in the document, 20654 except the current select box:*/ 20655 _closeAllSelect: function() { 20656 var selectItems, arrNo = []; 20657 selectItems = document.getElementsByClassName("select-items"); 20658 for (var n = 0; n < selectItems.length; n++) { 20659 if (arrNo.indexOf(n)) { 20660 selectItems[n].classList.add("select-hide"); 20661 } 20662 } 20663 }, 20664 /* matching custom dropdown div text with select option text and trigger change on hover*/ 20665 _selectedTriggerChange: function($this) { 20666 var selectetedText = $this.parent().find('.select-selected').text(); 20667 var triggerFlag = false;
20668 $this.find('option').each(function() { 20669 if ($(this).val() !== "0" && $(this).val() !== null && $(this).text() === selectetedText) { 20670 triggerFlag = true; 20671 $(this).attr('selected', 'selected'); 20672 return false; 20673 } 20674 }); 20675 if(triggerFlag){ 20676 $this.trigger("change"); 20677 LOREM.options._closeAllSelect(this); 20678 } 20679 } 20680}; 20681 20682LOREM.dateUtils = { 20683 _dateminMax: function($elem) { 20684 var $input = $elem.find('input[type="date"]'); 20685 var $inputJqueryDate = $elem.find('input[type="text"][class="jq-datepicker"]'); 20686 var isInputDate = $input.attr('type') === 'date'; 20687 var isJqueryDate = $inputJqueryDate.attr('type') === 'text' && $inputJqueryDate.attr('class') === 'jq-datepicker'; 20688 var minLength = $input.attr('minlength'); 20689 var maxLength = $input.attr('maxlength'); 20690 var minLengthJqueryDate = $inputJqueryDate.attr('minlength'); 20691 var maxLengthJqueryDate = $inputJqueryDate.attr('maxlength'); 20692 var jqueryDateFormat = $inputJqueryDate.attr('data-date-format'); 20693 if ((minLengthJqueryDate !== undefined || maxLengthJqueryDate !== undefined) && isJqueryDate === true) { 20694 $inputJqueryDate.datepicker({ 20695 dateFormat:jqueryDateFormat, 20696 minDate: minLengthJqueryDate, 20697 maxDate: maxLengthJqueryDate 20698 }); 20699 } 20700 else { 20701 if((minLength !== undefined || maxLength !== undefined) && isInputDate === true) { 20702 var futureMin = new Date(); // get today date 20703 futureMin.setDate(futureMin.getDate() + parseInt(minLength)); // add min days 20704 var finalDateMin = futureMin.getFullYear() + '-' + ((futureMin.getMonth() + 1) < 10 ? '0' : '') + (futureMin.getMonth() + 1) + '-' + (futureMin.getDate() < 10 ? '0' : '') + futureMin.getDate(); 20705 var futureMax = new Date(); // get today date 20706 futureMax.setDate(futureMax.getDate() + parseInt(maxLength)); // add max days 20707 var finalDateMax = futureMax.getFullYear() + '-' + ((futureMax.getMonth() + 1) < 10 ? '0' : '') + (futureMax.getMonth() + 1) + '-' + (futureMax.getDate() < 10 ? '0' : '') + futureMax.getDate(); 20708 if (minLength !== undefined) 20709 $input.attr('min', finalDateMin); 20710 if (maxLength !== undefined) 20711 $input.attr('max', finalDateMax); 20712 } 20713 } 20714 } 20715} 20716$(document).ready(function() { 20717 var $this = $(this).find('form.user-form'); 20718 var $formGroupDiv = $this.find('.form-group'); 20719 if($formGroupDiv !== undefined && $formGroupDiv.length >0){ 20720 $formGroupDiv.each(function() { 20721 LOREM.dateUtils._dateminMax($(this).closest('.form-group')); 20722 $(this).find('.jq-datepicker').keypress(function(e) { 20723 e.preventDefault(); 20724 }); 20725 }); 20726 } 20727}); 20728LOREM.UTILS = { 20729 20730 _showLoader: function(){ 20731 var $loaderEl = $('#LOREM-loader'); 20732 $loaderEl.removeClass('d-none'); 20733 }, 20734 _hideLoader: function() { 20735 var $loaderEl = $('#LOREM-loader'); 20736 $loaderEl.addClass('d-none'); 20737 } 20738 20739} 20740!function(e){function t(a,n){return this instanceof t?(e.isPlainObject(a)?n=a:(n=n||{},n.alias=a),this.el=void 0,this.opts=e.extend(!0,{},this.defaults,n),this.maskset=void 0,this.noMasksCache=n&&void 0!==n.definitions,this.userOptions=n||{},this.events={},this.dataAttribute="data-inputmask",this.isRTL=this.opts.numericInput,void i(this.opts.alias,n,this.opts)):new t(a,n)}function i(t,a,n){var r=n.aliases[t];return r?(r.alias&&i(r.alias,void 0,n),e.extend(!0,n,r),e.extend(!0,n,a),!0):(null===n.mask&&(n.mask=t),!1)}function a(i,a){function n(i,n,r){if(null!==i&&""!==i){if(1===i.length&&r.greedy===!1&&0!==r.repeat&&(r.placeholder=""),r.repeat>0||"*"===r.repeat||"+"===r.repeat){var o="*"===r.repeat?0:"+"===r.repeat?1:r.repeat;i=r.groupmarker.start+i+r.groupmarker.end+r.quantifiermarker.start+o+","+r.repeat+r.quantifiermarker.end}var s;return void 0===t.prototype.masksCache[i]||a===!0?(s={mask:i,maskToken:t.prototype.analyseMask(i,r),validPositions:{},_buffer:void 0,buffer:void 0,tests:{},metadata:n,maskLength:void 0},a!==!0&&(t.prototype.masksCache[r.numericInput?i.split("").reverse().join(""):i]=s,s=e.extend(!0,{},t.prototype.masksCache[r.numericInput?i.split("").reverse().join(""):i]))):s=e.extend(!0,{},t.prototype.masksCache[r.numericInput?i.split("").reverse().join(""):i]),s}}var r;
vendor: 25,543 bytes, line 20740
20740if(e.isFunction(i.mask)&&(i.mask=i.mask(i)),e.isArray(i.mask)){if(i.mask.length>1){i.keepStatic=null===i.keepStatic||i.keepStatic;var o=i.groupmarker.start;return e.each(i.numericInput?i.mask.reverse():i.mask,function(t,a){o.length>1&&(o+=i.groupmarker.end+i.alternatormarker+i.groupmarker.start),o+=void 0===a.mask||e.isFunction(a.mask)?a:a.mask}),o+=i.groupmarker.end,n(o,i.mask,i)}i.mask=i.mask.pop()}return i.mask&&(r=void 0===i.mask.mask||e.isFunction(i.mask.mask)?n(i.mask,i.mask,i):n(i.mask.mask,i.mask,i)),r}function n(i,a,r){function c(e,t,i){t=t||0;var a,n,o,s=[],l=0,u=f();V=void 0!==W?W.maxLength:void 0,V===-1&&(V=void 0);do e===!0&&p().validPositions[l]?(o=p().validPositions[l],n=o.match,a=o.locator.slice(),s.push(i===!0?o.input:i===!1?n.nativeDef:_(l,n))):(o=v(l,a,l-1),n=o.match,a=o.locator.slice(),(r.jitMasking===!1||l<u||"number"==typeof r.jitMasking&&isFinite(r.jitMasking)&&r.jitMasking>l)&&s.push(i===!1?n.nativeDef:_(l,n))),l++;while((void 0===V||l<V)&&(null!==n.fn||""!==n.def)||t>l);return""===s[s.length-1]&&s.pop(),p().maskLength=l+1,s}function p(){return a}function d(e){var t=p();t.buffer=void 0,e!==!0&&(t._buffer=void 0,t.validPositions={},t.p=0)}function f(e,t,i){var a=-1,n=-1,r=i||p().validPositions;void 0===e&&(e=-1);for(var o in r){var s=parseInt(o);r[s]&&(t||null!==r[s].match.fn)&&(s<=e&&(a=s),s>=e&&(n=s))}return a!==-1&&e-a>1||n<e?a:n}function m(t,i,a,n){function o(e){var t=p().validPositions[e];if(void 0!==t&&null===t.match.fn){var i=p().validPositions[e-1],a=p().validPositions[e+1];return void 0!==i&&void 0!==a}return!1}var s,l=t,u=e.extend(!0,{},p().validPositions),c=!1;for(p().p=t,s=i-1;s>=l;s--)void 0!==p().validPositions[s]&&(a!==!0&&(!p().validPositions[s].match.optionality&&o(s)||r.canClearPosition(p(),s,f(),n,r)===!1)||delete p().validPositions[s]);for(d(!0),s=l+1;s<=f();){for(;void 0!==p().validPositions[l];)l++;if(s<l&&(s=l+1),void 0===p().validPositions[s]&&E(s))s++;else{var m=v(s);c===!1&&u[l]&&u[l].match.def===m.match.def?(p().validPositions[l]=e.extend(!0,{},u[l]),p().validPositions[l].input=m.input,delete p().validPositions[s],s++):y(l,m.match.def)?A(l,m.input||_(s),!0)!==!1&&(delete p().validPositions[s],s++,c=!0):E(s)||(s++,l--),l++}}d(!0)}function h(e,t){for(var i,a=e,n=f(),o=p().validPositions[n]||k(0)[0],s=void 0!==o.alternation?o.locator[o.alternation].toString().split(","):[],l=0;l<a.length&&(i=a[l],!(i.match&&(r.greedy&&i.match.optionalQuantifier!==!0||(i.match.optionality===!1||i.match.newBlockMarker===!1)&&i.match.optionalQuantifier!==!0)&&(void 0===o.alternation||o.alternation!==i.alternation||void 0!==i.locator[o.alternation]&&S(i.locator[o.alternation].toString().split(","),s)))||t===!0&&(null!==i.match.fn||/[0-9a-bA-Z]/.test(i.match.def)));l++);return i}function v(e,t,i){return p().validPositions[e]||h(k(e,t?t.slice():t,i))}function g(e){return p().validPositions[e]?p().validPositions[e]:k(e)[0]}function y(e,t){for(var i=!1,a=k(e),n=0;n<a.length;n++)if(a[n].match&&a[n].match.def===t){i=!0;break}return i}function k(t,i,a){function n(i,a,o,s){function u(o,s,d){function h(t,i){var a=0===e.inArray(t,i.matches);return a||e.each(i.matches,function(e,n){if(n.isQuantifier===!0&&(a=h(t,i.matches[e-1])))return!1}),a}function g(t,i,a){var n,r;return(p().tests[t]||p().validPositions[t])&&e.each(p().tests[t]||[p().validPositions[t]],function(e,t){var o=void 0!==a?a:t.alternation,s=void 0!==t.locator[o]?t.locator[o].toString().indexOf(i):-1;(void 0===r||s<r)&&s!==-1&&(n=t,r=s)}),n?n.locator.slice((void 0!==a?a:n.alternation)+1):void 0!==a?g(t,i):void 0}function y(e,i){return null===e.match.fn&&null!==i.match.fn&&i.match.fn.test(e.match.def,p(),t,!1,r,!1)}if(c>1e4)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+p().mask;if(c===t&&void 0===o.matches)return f.push({match:o,locator:s.reverse(),cd:v}),!0;if(void 0!==o.matches){if(o.isGroup&&d!==o){if(o=u(i.matches[e.inArray(o,i.matches)+1],s))return!0}else if(o.isOptional){var k=o;if(o=n(o,a,s,d)){if(l=f[f.length-1].match,!h(l,k))return!0;m=!0,c=t}}else if(o.isAlternator){var x,b=o,P=[],w=f.slice(),S=s.length,A=a.length>0?a.shift():-1;if(A===-1||"string"==typeof A){var E,C=c,R=a.slice(),M=[];if("string"==typeof A)M=A.split(",");else for(E=0;E<b.matches.length;E++)M.push(E);for(var O=0;O<M.length;O++){if(E=parseInt(M[O]),f=[],a=g(c,E,S)||R.slice(),o=u(b.matches[E]||i.matches[E],[E].concat(s),d)||o,o!==!0&&void 0!==o&&M[M.length-1]<b.matches.length){var _=e.inArray(o,i.matches)+1;i.matches.length>_&&(o=u(i.matches[_],[_].concat(s.slice(1,s.length)),d),o&&(M.push(_.toString()),e.each(f,function(e,t){t.alternation=s.length-1})))}x=f.slice(),c=C,f=[];for(var I=0;I<x.length;I++){var j=x[I],D=!1;j.alternation=j.alternation||S;for(var F=0;F<P.length;F++){var N=P[F];if(("string"!=typeof A||e.inArray(j.locator[j.alternation].toString(),M)!==-1)&&(j.match.def===N.match.def||y(j,N))){D=j.match.nativeDef===N.match.nativeDef,j.alternation==N.alternation&&N.locator[N.alternation].toString().indexOf(j.locator[j.alternation])===-1&&(N.locator[N.alternation]=N.locator[N.alternation]+","+j.locator[j.alternation],N.alternation=j.alternation,null==j.match.fn&&(N.na=N.na||j.locator[j.alternation].toString(),N.na.indexOf(j.locator[j.alternation])===-1&&(N.na=N.na+","+j.locator[j.alternation])));break}}D||P.push(j)}}"string"==typeof A&&(P=e.map(P,function(t,i){if(isFinite(i)){var a,n=t.alternation,r=t.locator[n].toString().split(",");t.locator[n]=void 0,t.alternation=void 0;for(var o=0;o<r.length;o++)a=e.inArray(r[o],M)!==-1,a&&(void 0!==t.locator[n]?(t.locator[n]+=",",t.locator[n]+=r[o]):t.locator[n]=parseInt(r[o]),t.alternation=n);if(void 0!==t.locator[n])return t}})),f=w.concat(P),c=t,m=f.length>0,a=R.slice()}else o=u(b.matches[A]||i.matches[A],[A].concat(s),d);if(o)return!0}else if(o.isQuantifier&&d!==i.matches[e.inArray(o,i.matches)-1])for(var T=o,G=a.length>0?a.shift():0;G<(isNaN(T.quantifier.max)?G+1:T.quantifier.max)&&c<=t;G++){var B=i.matches[e.inArray(T,i.matches)-1];if(o=u(B,[G].concat(s),B)){if(l=f[f.length-1].match,l.optionalQuantifier=G>T.quantifier.min-1,h(l,B)){if(G>T.quantifier.min-1){m=!0,c=t;break}return!0}return!0}}else if(o=n(o,a,s,d))return!0}else c++}for(var d=a.length>0?a.shift():0;d<i.matches.length;d++)if(i.matches[d].isQuantifier!==!0){var h=u(i.matches[d],[d].concat(o),s);if(h&&c===t)return h;if(c>t)break}}function o(t){var i=[];return e.isArray(t)||(t=[t]),t.length>0&&(void 0===t[0].alternation?(i=h(t.slice()).locator.slice(),0===i.length&&(i=t[0].locator.slice())):e.each(t,function(e,t){if(""!==t.def)if(0===i.length)i=t.locator.slice();else for(var a=0;a<i.length;a++)t.locator[a]&&i[a].toString().indexOf(t.locator[a])===-1&&(i[a]+=","+t.locator[a])})),i}function s(e){return r.keepStatic&&t>0&&e.length>1+(""===e[e.length-1].match.def?1:0)&&e[0].match.optionality!==!0&&e[0].match.optionalQuantifier!==!0&&null===e[0].match.fn&&!/[0-9a-bA-Z]/.test(e[0].match.def)?[h(e)]:e}var l,u=p().maskToken,c=i?a:0,d=i?i.slice():[0],f=[],m=!1,v=i?i.join(""):"";if(t>-1){if(void 0===i){for(var g,y=t-1;void 0===(g=p().validPositions[y]||p().tests[y])&&y>-1;)y--;void 0!==g&&y>-1&&(d=o(g),v=d.join(""),c=y)}if(p().tests[t]&&p().tests[t][0].cd===v)return s(p().tests[t]);for(var k=d.shift();k<u.length;k++){var x=n(u[k],d,[k]);if(x&&c===t||c>t)break}}return(0===f.length||m)&&f.push({match:{fn:null,cardinality:0,optionality:!0,casing:null,def:"",placeholder:""},locator:[],cd:v}),void 0!==i&&p().tests[t]?s(e.extend(!0,[],f)):(p().tests[t]=e.extend(!0,[],f),s(p().tests[t]))}function x(){return void 0===p()._buffer&&(p()._buffer=c(!1,1),void 0===p().buffer&&p()._buffer.slice()),p()._buffer}function b(e){return void 0!==p().buffer&&e!==!0||(p().buffer=c(!0,f(),!0)),p().buffer}function P(e,t,i){var a;if(e===!0)d(),e=0,t=i.length;else for(a=e;a<t;a++)delete p().validPositions[a];for(a=e;a<t;a++)d(!0),i[a]!==r.skipOptionalPartCharacter&&A(a,i[a],!0,!0)}function w(e,i,a){switch(r.casing||i.casing){case"upper":e=e.toUpperCase();break;case"lower":e=e.toLowerCase();break;case"title":var n=p().validPositions[a-1];e=0===a||n&&n.input===String.fromCharCode(t.keyCode.SPACE)?e.toUpperCase():e.toLowerCase()}return e}function S(t,i){for(var a=r.greedy?i:i.slice(0,1),n=!1,o=0;o<t.length;o++)if(e.inArray(t[o],a)!==-1){n=!0;break}return n}function A(i,a,n,o,s){function l(e){var t=q?e.begin-e.end>1||e.begin-e.end===1&&r.insertMode:e.end-e.begin>1||e.end-e.begin===1&&r.insertMode;return t&&0===e.begin&&e.end===p().maskLength?"full":t}function u(t,a,n){var s=!1;return e.each(k(t),function(u,c){for(var h=c.match,v=a?1:0,g="",y=h.cardinality;y>v;y--)g+=M(t-(y-1));if(a&&(g+=a),b(!0),s=null!=h.fn?h.fn.test(g,p(),t,n,r,l(i)):(a===h.def||a===r.skipOptionalPartCharacter)&&""!==h.def&&{c:h.placeholder||h.def,pos:t},s!==!1){var k=void 0!==s.c?s.c:a;k=k===r.skipOptionalPartCharacter&&null===h.fn?h.placeholder||h.def:k;var S=t,E=b();if(void 0!==s.remove&&(e.isArray(s.remove)||(s.remove=[s.remove]),e.each(s.remove.sort(function(e,t){return t-e}),function(e,t){m(t,t+1,!0)})),void 0!==s.insert&&(e.isArray(s.insert)||(s.insert=[s.insert]),e.each(s.insert.sort(function(e,t){return e-t}),function(e,t){A(t.pos,t.c,!0,o)})),s.refreshFromBuffer){var C=s.refreshFromBuffer;if(n=!0,P(C===!0?C:C.start,C.end,E),void 0===s.pos&&void 0===s.c)return s.pos=f(),!1;if(S=void 0!==s.pos?s.pos:t,S!==t)return s=e.extend(s,A(S,k,!0,o)),!1}else if(s!==!0&&void 0!==s.pos&&s.pos!==t&&(S=s.pos,P(t,S,b().slice()),S!==t))return s=e.extend(s,A(S,k,!0)),!1;return(s===!0||void 0!==s.pos||void 0!==s.c)&&(u>0&&d(!0),x(S,e.extend({},c,{input:w(k,h,S)}),o,l(i))||(s=!1),!1)}}),s}function c(t,i,a){var n,s,l,u,c,m,h,v,g=e.extend(!0,{},p().validPositions),y=!1,x=f();for(u=p().validPositions[x];x>=0;x--)if(l=p().validPositions[x],l&&void 0!==l.alternation){if(n=x,s=p().validPositions[n].alternation,u.locator[l.alternation]!==l.locator[l.alternation])break;u=l}if(void 0!==s){v=parseInt(n);var b=void 0!==u.locator[u.alternation||s]?u.locator[u.alternation||s]:h[0];b.length>0&&(b=b.split(",")[0]);var P=p().validPositions[v],w=p().validPositions[v-1];e.each(k(v,w?w.locator:void 0,v-1),function(n,l){h=l.locator[s]?l.locator[s].toString().split(","):[];for(var u=0;u<h.length;u++){var k=[],x=0,w=0,S=!1;if(b<h[u]&&(void 0===l.na||e.inArray(h[u],l.na.split(","))===-1)){p().validPositions[v]=e.extend(!0,{},l);var E=p().validPositions[v].locator;for(p().validPositions[v].locator[s]=parseInt(h[u]),null==l.match.fn?(P.input!==l.match.def&&(S=!0,P.generatedInput!==!0&&k.push(P.input)),w++,p().validPositions[v].generatedInput=!/[0-9a-bA-Z]/.test(l.match.def),p().validPositions[v].input=l.match.def):p().validPositions[v].input=P.input,c=v+1;c<f(void 0,!0)+1;c++)m=p().validPositions[c],m&&m.generatedInput!==!0&&/[0-9a-bA-Z]/.test(m.input)?k.push(m.input):c<t&&x++,delete p().validPositions[c];for(S&&k[0]===l.match.def&&k.shift(),d(!0),y=!0;k.length>0;){var C=k.shift();if(C!==r.skipOptionalPartCharacter&&!(y=A(f(void 0,!0)+1,C,!1,o,!0)))break}if(y){p().validPositions[v].locator=E;var R=f(t)+1;for(c=v+1;c<f()+1;c++)m=p().validPositions[c],(void 0===m||null==m.match.fn)&&c<t+(w-x)&&w++;t+=w-x,y=A(t>R?R:t,i,a,o,!0)}if(y)return!1;d(),p().validPositions=e.extend(!0,{},g)}}})}return y}function g(t,i){var a=p().validPositions[i];if(a)for(var n=a.locator,r=n.length,o=t;o<i;o++)if(void 0===p().validPositions[o]&&!E(o,!0)){var s=k(o),l=s[0],u=-1;e.each(s,function(e,t){for(var i=0;i<r&&void 0!==t.locator[i]&&S(t.locator[i].toString().split(","),n[i].toString().split(","));i++)u<i&&(u=i,l=t)}),x(o,e.extend({},l,{input:l.match.placeholder||l.match.def}),!0)}}function x(t,i,a,n){if(n||r.insertMode&&void 0!==p().validPositions[t]&&void 0===a){var o,s=e.extend(!0,{},p().validPositions),l=f(void 0,!0);for(o=t;o<=l;o++)delete p().validPositions[o];p().validPositions[t]=e.extend(!0,{},i);var u,c=!0,m=p().validPositions,h=!1,v=p().maskLength;for(o=u=t;o<=l;o++){var g=s[o];if(void 0!==g)for(var k=u;k<p().maskLength&&(null===g.match.fn&&m[o]&&(m[o].match.optionalQuantifier===!0||m[o].match.optionality===!0)||null!=g.match.fn);){if(k++,h===!1&&s[k]&&s[k].match.def===g.match.def)p().validPositions[k]=e.extend(!0,{},s[k]),p().validPositions[k].input=g.input,R(k),u=k,c=!0;else if(y(k,g.match.def)){var x=A(k,g.input,!0,!0);c=x!==!1,u=x.caret||x.insert?f():k,h=!0}else c=g.generatedInput===!0;if(p().maskLength<v&&(p().maskLength=v),c)break}if(!c)break}if(!c)return p().validPositions=e.extend(!0,{},s),d(!0),!1}else p().validPositions[t]=e.extend(!0,{},i);return d(!0),!0}function R(t){for(var i=t-1;i>-1&&!p().validPositions[i];i--);var a,n;for(i++;i<t;i++)void 0===p().validPositions[i]&&(r.jitMasking===!1||r.jitMasking>i)&&(n=k(i,v(i-1).locator,i-1).slice(),""===n[n.length-1].match.def&&n.pop(),a=h(n),a&&(a.match.def===r.radixPointDefinitionSymbol||!E(i,!0)||e.inArray(r.radixPoint,b())<i&&a.match.fn&&a.match.fn.test(_(i),p(),i,!1,r))&&(I=u(i,a.match.placeholder||(null==a.match.fn?a.match.def:""!==_(i)?_(i):b()[i]),!0),I!==!1&&(p().validPositions[I.pos||i].generatedInput=!0)))}n=n===!0;var O=i;void 0!==i.begin&&(O=q&&!l(i)?i.end:i.begin);var I=!1,j=e.extend(!0,{},p().validPositions);if(R(O),l(i)&&(G(void 0,t.keyCode.DELETE,i),O=p().p),O<p().maskLength&&(I=u(O,a,n),(!n||o===!0)&&I===!1)){var D=p().validPositions[O];if(!D||null!==D.match.fn||D.match.def!==a&&a!==r.skipOptionalPartCharacter){if((r.insertMode||void 0===p().validPositions[C(O)])&&!E(O,!0)){var F=k(O).slice();""===F[F.length-1].match.def&&F.pop();var N=h(F,!0);N&&null===N.match.fn&&(N=N.match.placeholder||N.match.def,u(O,N,n),p().validPositions[O].generatedInput=!0);for(var T=O+1,B=C(O);T<=B;T++)if(I=u(T,a,n),I!==!1){g(O,void 0!==I.pos?I.pos:T),O=T;break}}}else I={caret:C(O)}}return I===!1&&r.keepStatic&&!n&&s!==!0&&(I=c(O,a,n)),I===!0&&(I={pos:O}),e.isFunction(r.postValidation)&&I!==!1&&!n&&o!==!0&&(I=!!r.postValidation(b(!0),I,r)&&I),void 0===I.pos&&(I.pos=O),I===!1&&(d(!0),p().validPositions=e.extend(!0,{},j)),I}function E(e,t){var i;if(t?(i=v(e).match,""===i.def&&(i=g(e).match)):i=g(e).match,null!=i.fn)return i.fn;if(t!==!0&&e>-1){var a=k(e);return a.length>1+(""===a[a.length-1].match.def?1:0)}return!1}function C(e,t){var i=p().maskLength;if(e>=i)return i;for(var a=e;++a<i&&(t===!0&&(g(a).match.newBlockMarker!==!0||!E(a))||t!==!0&&!E(a)););return a}function R(e,t){var i,a=e;if(a<=0)return 0;for(;--a>0&&(t===!0&&g(a).match.newBlockMarker!==!0||t!==!0&&!E(a)&&(i=k(a),i.length<2||2===i.length&&""===i[1].match.def)););return a}function M(e){return void 0===p().validPositions[e]?_(e):p().validPositions[e].input}function O(t,i,a,n,o){if(n&&e.isFunction(r.onBeforeWrite)){var s=r.onBeforeWrite(n,i,a,r);if(s){if(s.refreshFromBuffer){var l=s.refreshFromBuffer;P(l===!0?l:l.start,l.end,s.buffer||i),i=b(!0)}void 0!==a&&(a=void 0!==s.caret?s.caret:a)}}t.inputmask._valueSet(i.join("")),void 0===a||void 0!==n&&"blur"===n.type?L(t,i,a):D(t,a),o===!0&&(Y=!0,e(t).trigger("input"))}function _(e,t){if(t=t||g(e).match,void 0!==t.placeholder)return t.placeholder;if(null===t.fn){if(e>-1&&void 0===p().validPositions[e]){var i,a=k(e),n=[];if(a.length>1+(""===a[a.length-1].match.def?1:0))for(var o=0;o<a.length;o++)if(a[o].match.optionality!==!0&&a[o].match.optionalQuantifier!==!0&&(null===a[o].match.fn||void 0===i||a[o].match.fn.test(i.match.def,p(),e,!0,r)!==!1)&&(n.push(a[o]),null===a[o].match.fn&&(i=a[o]),n.length>1&&/[0-9a-bA-Z]/.test(n[0].match.def)))return r.placeholder.charAt(e%r.placeholder.length)}return t.def}return r.placeholder.charAt(e%r.placeholder.length)}function I(i,a,n,o,s,l){function u(){var e=!1,t=x().slice(h,C(h)).join("").indexOf(m);if(t!==-1&&!E(h)){e=!0;for(var i=x().slice(h,h+t),a=0;a<i.length;a++)if(" "!==i[a]){e=!1;break}}return e}var c=o.slice(),m="",h=0,g=void 0;if(d(),p().p=C(-1),!n)if(r.autoUnmask!==!0){var y=x().slice(0,C(-1)).join(""),k=c.join("").match(new RegExp("^"+t.escapeRegex(y),"g"));k&&k.length>0&&(c.splice(0,k.length*y.length),h=C(h))}else h=C(h);if(e.each(c,function(t,a){if(void 0!==a){var o=new e.Event("keypress");o.which=a.charCodeAt(0),m+=a;var s=f(void 0,!0),l=p().validPositions[s],c=v(s+1,l?l.locator.slice():void 0,s);if(!u()||n||r.autoUnmask){var y=n?t:null==c.match.fn&&c.match.optionality&&s+1<p().p?s+1:p().p;g=ee.keypressEvent.call(i,o,!0,!1,n,y),h=y+1,m=""}else g=ee.keypressEvent.call(i,o,!0,!1,!0,s+1);if(!n&&e.isFunction(r.onBeforeWrite)&&(g=r.onBeforeWrite(o,b(),g.forwardPosition,r),g&&g.refreshFromBuffer)){var k=g.refreshFromBuffer;P(k===!0?k:k.start,k.end,g.buffer),d(!0),g.caret&&(p().p=g.caret)}}}),a){var w=void 0,S=f();document.activeElement===i&&(s||g)&&(w=D(i).begin,s&&g===!1&&(w=C(f(w))),g&&l!==!0&&(w<S+1||S===-1)&&(w=r.numericInput&&void 0===g.caret?R(g.forwardPosition):g.forwardPosition)),O(i,b(),w,s||new e.Event("checkval"))}}function j(t){if(t&&void 0===t.inputmask)return t.value;var i=[],a=p().validPositions;for(var n in a)a[n].match&&null!=a[n].match.fn&&i.push(a[n].input);var o=0===i.length?"":(q?i.reverse():i).join("");if(e.isFunction(r.onUnMask)){var s=(q?b().slice().reverse():b()).join("");o=r.onUnMask(s,o,r)||o}return o}function D(e,t,i,a){function n(e){if(a!==!0&&q&&"number"==typeof e&&(!r.greedy||""!==r.placeholder)){var t=b().join("").length;e=t-e}return e}var s;if("number"!=typeof t)return e.setSelectionRange?(t=e.selectionStart,i=e.selectionEnd):window.getSelection?(s=window.getSelection().getRangeAt(0),s.commonAncestorContainer.parentNode!==e&&s.commonAncestorContainer!==e||(t=s.startOffset,i=s.endOffset)):document.selection&&document.selection.createRange&&(s=document.selection.createRange(),t=0-s.duplicate().moveStart("character",-e.inputmask._valueGet().length),i=t+s.text.length),{begin:n(t),end:n(i)};t=n(t),i=n(i),i="number"==typeof i?i:t;var l=parseInt(((e.ownerDocument.defaultView||window).getComputedStyle?(e.ownerDocument.defaultView||window).getComputedStyle(e,null):e.currentStyle).fontSize)*i;if(e.scrollLeft=l>e.scrollWidth?l:0,o||r.insertMode!==!1||t!==i||i++,e.setSelectionRange)e.selectionStart=t,e.selectionEnd=i;else if(window.getSelection){if(s=document.createRange(),void 0===e.firstChild||null===e.firstChild){var u=document.createTextNode("");e.appendChild(u)}s.setStart(e.firstChild,t<e.inputmask._valueGet().length?t:e.inputmask._valueGet().length),s.setEnd(e.firstChild,i<e.inputmask._valueGet().length?i:e.inputmask._valueGet().length),s.collapse(!0);var c=window.getSelection();c.removeAllRanges(),c.addRange(s)}else e.createTextRange&&(s=e.createTextRange(),s.collapse(!0),s.moveEnd("character",i),s.moveStart("character",t),s.select());L(e,void 0,{begin:t,end:i})}function F(t){var i,a,n=b(),r=n.length,o=f(),s={},l=p().validPositions[o],u=void 0!==l?l.locator.slice():void 0;for(i=o+1;i<n.length;i++)a=v(i,u,i-1),u=a.locator.slice(),s[i]=e.extend(!0,{},a);var c=l&&void 0!==l.alternation?l.locator[l.alternation]:void 0;for(i=r-1;i>o&&(a=s[i],(a.match.optionality||a.match.optionalQuantifier||c&&(c!==s[i].locator[l.alternation]&&null!=a.match.fn||null===a.match.fn&&a.locator[l.alternation]&&S(a.locator[l.alternation].toString().split(","),c.toString().split(","))&&""!==k(i)[0].def))&&n[i]===_(i,a.match));i--)r--;return t?{l:r,def:s[r]?s[r].match:void 0}:r}function N(e){for(var t=F(),i=e.length-1;i>t&&!E(i);i--);return e.splice(t,i+1-t),e}function T(t){if(e.isFunction(r.isComplete))return r.isComplete(t,r);if("*"!==r.repeat){var i=!1,a=F(!0),n=R(a.l);if(void 0===a.def||a.def.newBlockMarker||a.def.optionality||a.def.optionalQuantifier){i=!0;for(var o=0;o<=n;o++){var s=v(o).match;if(null!==s.fn&&void 0===p().validPositions[o]&&s.optionality!==!0&&s.optionalQuantifier!==!0||null===s.fn&&t[o]!==_(o,s)){i=!1;break}}}return i}}function G(i,a,n,o){function s(){if(r.keepStatic){for(var t=[],a=f(-1,!0),n=e.extend(!0,{},p().validPositions),o=p().validPositions[a];a>=0;a--){var s=p().validPositions[a];if(s){if(s.generatedInput!==!0&&/[0-9a-bA-Z]/.test(s.input)&&t.push(s.input),delete p().validPositions[a],void 0!==s.alternation&&s.locator[s.alternation]!==o.locator[s.alternation])break;o=s}}if(a>-1)for(p().p=C(f(-1,!0));t.length>0;){var l=new e.Event("keypress");l.which=t.pop().charCodeAt(0),ee.keypressEvent.call(i,l,!0,!1,!1,p().p)}else p().validPositions=e.extend(!0,{},n)}}if((r.numericInput||q)&&(a===t.keyCode.BACKSPACE?a=t.keyCode.DELETE:a===t.keyCode.DELETE&&(a=t.keyCode.BACKSPACE),q)){var l=n.end;n.end=n.begin,n.begin=l}a===t.keyCode.BACKSPACE&&(n.end-n.begin<1||r.insertMode===!1)?(n.begin=R(n.begin),void 0===p().validPositions[n.begin]||p().validPositions[n.begin].input!==r.groupSeparator&&p().validPositions[n.begin].input!==r.radixPoint||n.begin--):a===t.keyCode.DELETE&&n.begin===n.end&&(n.end=E(n.end,!0)?n.end+1:C(n.end)+1,void 0===p().validPositions[n.begin]||p().validPositions[n.begin].input!==r.groupSeparator&&p().validPositions[n.begin].input!==r.radixPoint||n.end++),m(n.begin,n.end,!1,o),o!==!0&&s();var u=f(n.begin,!0);u<n.begin?p().p=C(u):o!==!0&&(p().p=n.begin)}function B(t){function i(e){var i,a=document.createElement("span");for(var n in o)isNaN(n)&&n.indexOf("font")!==-1&&(a.style[n]=o[n]);a.style.textTransform=o.textTransform,a.style.letterSpacing=o.letterSpacing,a.style.position="absolute",a.style.height="auto",a.style.width="auto",a.style.visibility="hidden",a.style.whiteSpace="nowrap",document.body.appendChild(a);var r,s=t.inputmask._valueGet(),l=0;for(i=0,r=s.length;i<=r;i++){if(a.innerHTML+=s.charAt(i)||"_",a.offsetWidth>=e){var u=e-l,c=a.offsetWidth-e;a.innerHTML=s.charAt(i),u-=a.offsetWidth/3,i=u<c?i-1:i;break}l=a.offsetWidth}return document.body.removeChild(a),i}function a(){z.style.position="absolute",z.style.top=n.top+"px",z.style.left=n.left+"px",z.style.width=parseInt(t.offsetWidth)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth)+"px",z.style.height=parseInt(t.offsetHeight)-parseInt(o.paddingTop)-parseInt(o.paddingBottom)-parseInt(o.borderTopWidth)-parseInt(o.borderBottomWidth)+"px",z.style.lineHeight=z.style.height,z.style.zIndex=isNaN(o.zIndex)?-1:o.zIndex-1,z.style.webkitAppearance="textfield",z.style.mozAppearance="textfield",z.style.Appearance="textfield"}var n=e(t).position(),o=(t.ownerDocument.defaultView||window).getComputedStyle(t,null);t.parentNode,z=document.createElement("div"),document.body.appendChild(z);for(var s in o)isNaN(s)&&"cssText"!==s&&s.indexOf("webkit")==-1&&(z.style[s]=o[s]);t.style.backgroundColor="transparent",t.style.color="transparent",t.style.webkitAppearance="caret",t.style.mozAppearance="caret",t.style.Appearance="caret",a(),e(window).on("resize",function(i){n=e(t).position(),o=(t.ownerDocument.defaultView||window).getComputedStyle(t,null),a()}),e(t).on("click",function(e){return D(t,i(e.clientX)),ee.clickEvent.call(this,[e])}),e(t).on("keydown",function(e){e.shiftKey||r.insertMode===!1||setTimeout(function(){L(t)},0)})}function L(e,t,i){function a(){o||null!==l.fn&&void 0!==u.input?o&&null!==l.fn&&void 0!==u.input&&(o=!1,n+="</span>"):(o=!0,n+="<span class='im-static''>")}if(void 0!==z){t=t||b(),void 0===i?i=D(e):void 0===i.begin&&(i={begin:i,end:i});var n="",o=!1;if(""!=t){var s,l,u,c=0,d=f();do c===i.begin&&document.activeElement===e&&(n+="<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>"),p().validPositions[c]?(u=p().validPositions[c],l=u.match,s=u.locator.slice(),a(),n+=u.input):(u=v(c,s,c-1),l=u.match,s=u.locator.slice(),(r.jitMasking===!1||c<d||"number"==typeof r.jitMasking&&isFinite(r.jitMasking)&&r.jitMasking>c)&&(a(),n+=_(c,l))),c++;while((void 0===V||c<V)&&(null!==l.fn||""!==l.def)||d>c)}z.innerHTML=n}}function H(t){function i(t,i){function a(t){function a(t){if(e.valHooks&&(void 0===e.valHooks[t]||e.valHooks[t].inputmaskpatch!==!0)){var a=e.valHooks[t]&&e.valHooks[t].get?e.valHooks[t].get:function(e){return e.value},n=e.valHooks[t]&&e.valHooks[t].set?e.valHooks[t].set:function(e,t){return e.value=t,e};e.valHooks[t]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var t=a(e);return f(void 0,void 0,e.inputmask.maskset.validPositions)!==-1||i.nullable!==!0?t:""}return a(e)},set:function(t,i){var a,r=e(t);return a=n(t,i),t.inputmask&&r.trigger("setvalue"),a},inputmaskpatch:!0}}}function n(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():f()!==-1||i.nullable!==!0?document.activeElement===this&&i.clearMaskOnLostFocus?(q?N(b().slice()).reverse():N(b().slice())).join(""):s.call(this):"":s.call(this)}function r(t){l.call(this,t),this.inputmask&&e(this).trigger("setvalue")}function o(t){J.on(t,"mouseenter",function(t){var i=e(this),a=this,n=a.inputmask._valueGet();n!==b().join("")&&i.trigger("setvalue")})}var s,l;if(!t.inputmask.__valueGet){if(i.noValuePatching!==!0){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"==typeof"test".__proto__?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var u=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),"value"):void 0;u&&u.get&&u.set?(s=u.get,l=u.set,Object.defineProperty(t,"value",{get:n,set:r,configurable:!0})):"INPUT"!==t.tagName&&(s=function(){return this.textContent},l=function(e){this.textContent=e},Object.defineProperty(t,"value",{get:n,set:r,configurable:!0}))}else document.__lookupGetter__&&t.__lookupGetter__("value")&&(s=t.__lookupGetter__("value"),l=t.__lookupSetter__("value"),t.__defineGetter__("value",n),t.__defineSetter__("value",r));t.inputmask.__valueGet=s,t.inputmask.__valueSet=l}
vendor: 5,132 bytes, line 20740
20740t.inputmask._valueGet=function(e){return q&&e!==!0?s.call(this.el).split("").reverse().join(""):s.call(this.el)},t.inputmask._valueSet=function(e,t){l.call(this.el,null===e||void 0===e?"":t!==!0&&q?e.split("").reverse().join(""):e)},void 0===s&&(s=function(){return this.value},l=function(e){this.value=e},a(t.type),o(t))}}var n=t.getAttribute("type"),r="INPUT"===t.tagName&&e.inArray(n,i.supportsInputType)!==-1||t.isContentEditable||"TEXTAREA"===t.tagName;if(!r)if("INPUT"===t.tagName){var o=document.createElement("input");o.setAttribute("type",n),r="text"===o.type,o=null}else r="partial";return r!==!1&&a(t),r}var a=i(t,r);if(a!==!1&&(W=t,U=e(W),("rtl"===W.dir||r.rightAlign)&&(W.style.textAlign="right"),("rtl"===W.dir||r.numericInput)&&(W.dir="ltr",W.removeAttribute("dir"),W.inputmask.isRTL=!0,q=!0),r.colorMask===!0&&B(W),u&&(W.hasOwnProperty("inputmode")&&(W.inputmode=r.inputmode,W.setAttribute("inputmode",r.inputmode)),"rtfm"===r.androidHack&&(r.colorMask!==!0&&B(W),W.type="password")),J.off(W),a===!0&&(J.on(W,"submit",ee.submitEvent),J.on(W,"reset",ee.resetEvent),J.on(W,"mouseenter",ee.mouseenterEvent),J.on(W,"blur",ee.blurEvent),J.on(W,"focus",ee.focusEvent),J.on(W,"mouseleave",ee.mouseleaveEvent),r.colorMask!==!0&&J.on(W,"click",ee.clickEvent),J.on(W,"dblclick",ee.dblclickEvent),J.on(W,"paste",ee.pasteEvent),J.on(W,"dragdrop",ee.pasteEvent),J.on(W,"drop",ee.pasteEvent),J.on(W,"cut",ee.cutEvent),J.on(W,"complete",r.oncomplete),J.on(W,"incomplete",r.onincomplete),J.on(W,"cleared",r.oncleared),r.inputEventOnly!==!0&&(J.on(W,"keydown",ee.keydownEvent),J.on(W,"keypress",ee.keypressEvent)),J.on(W,"compositionstart",e.noop),J.on(W,"compositionupdate",e.noop),J.on(W,"compositionend",e.noop),J.on(W,"keyup",e.noop),J.on(W,"input",ee.inputFallBackEvent)),J.on(W,"setvalue",ee.setValueEvent),x(),""!==W.inputmask._valueGet()||r.clearMaskOnLostFocus===!1||document.activeElement===W)){var n=e.isFunction(r.onBeforeMask)?r.onBeforeMask(W.inputmask._valueGet(),r)||W.inputmask._valueGet():W.inputmask._valueGet();I(W,!0,!1,n.split(""));var o=b().slice();K=o.join(""),T(o)===!1&&r.clearIncomplete&&d(),r.clearMaskOnLostFocus&&document.activeElement!==W&&(f()===-1?o=[]:N(o)),O(W,o),document.activeElement===W&&D(W,C(f()))}}a=a||this.maskset,r=r||this.opts;var K,U,V,z,Q,W=this.el,q=this.isRTL,Z=!1,Y=!1,$=!1,X=!1,J={on:function(i,a,n){var o=function(i){if(void 0===this.inputmask&&"FORM"!==this.nodeName){var a=e.data(this,"_inputmask_opts");a?new t(a).mask(this):J.off(this)}else{if("setvalue"===i.type||!(this.disabled||this.readOnly&&!("keydown"===i.type&&i.ctrlKey&&67===i.keyCode||r.tabThrough===!1&&i.keyCode===t.keyCode.TAB))){switch(i.type){case"input":if(Y===!0)return Y=!1,i.preventDefault();break;case"keydown":Z=!1,Y=!1;break;case"keypress":if(Z===!0)return i.preventDefault();Z=!0;break;case"click":if(s||l){var o=this,u=arguments;return setTimeout(function(){n.apply(o,u)},0),!1}}var c=n.apply(this,arguments);return c===!1&&(i.preventDefault(),i.stopPropagation()),c}i.preventDefault()}};i.inputmask.events[a]=i.inputmask.events[a]||[],i.inputmask.events[a].push(o),e.inArray(a,["submit","reset"])!==-1?null!=i.form&&e(i.form).on(a,o):e(i).on(a,o)},off:function(t,i){if(t.inputmask&&t.inputmask.events){var a;i?(a=[],a[i]=t.inputmask.events[i]):a=t.inputmask.events,e.each(a,function(i,a){for(;a.length>0;){var n=a.pop();e.inArray(i,["submit","reset"])!==-1?null!=t.form&&e(t.form).off(i,n):e(t).off(i,n)}delete t.inputmask.events[i]})}}},ee={keydownEvent:function(i){function a(e){var t=document.createElement("input"),i="on"+e,a=i in t;return a||(t.setAttribute(i,"return;"),a="function"==typeof t[i]),t=null,a}var n=this,o=e(n),s=i.keyCode,u=D(n);if(s===t.keyCode.BACKSPACE||s===t.keyCode.DELETE||l&&s===t.keyCode.BACKSPACE_SAFARI||i.ctrlKey&&s===t.keyCode.X&&!a("cut"))i.preventDefault(),G(n,s,u),O(n,b(!0),p().p,i,n.inputmask._valueGet()!==b().join("")),n.inputmask._valueGet()===x().join("")?o.trigger("cleared"):T(b())===!0&&o.trigger("complete");else if(s===t.keyCode.END||s===t.keyCode.PAGE_DOWN){i.preventDefault();var c=C(f());r.insertMode||c!==p().maskLength||i.shiftKey||c--,D(n,i.shiftKey?u.begin:c,c,!0)}else s===t.keyCode.HOME&&!i.shiftKey||s===t.keyCode.PAGE_UP?(i.preventDefault(),D(n,0,i.shiftKey?u.begin:0,!0)):(r.undoOnEscape&&s===t.keyCode.ESCAPE||90===s&&i.ctrlKey)&&i.altKey!==!0?(I(n,!0,!1,K.split("")),o.trigger("click")):s!==t.keyCode.INSERT||i.shiftKey||i.ctrlKey?r.tabThrough===!0&&s===t.keyCode.TAB?(i.shiftKey===!0?(null===g(u.begin).match.fn&&(u.begin=C(u.begin)),u.end=R(u.begin,!0),u.begin=R(u.end,!0)):(u.begin=C(u.begin,!0),u.end=C(u.begin,!0),u.end<p().maskLength&&u.end--),u.begin<p().maskLength&&(i.preventDefault(),D(n,u.begin,u.end))):i.shiftKey||r.insertMode===!1&&(s===t.keyCode.RIGHT?setTimeout(function(){var e=D(n);D(n,e.begin)},0):s===t.keyCode.LEFT&&setTimeout(function(){var e=D(n);D(n,q?e.begin+1:e.begin-1)},0)):(r.insertMode=!r.insertMode,D(n,r.insertMode||u.begin!==p().maskLength?u.begin:u.begin-1));r.onKeyDown.call(this,i,b(),D(n).begin,r),$=e.inArray(s,r.ignorables)!==-1},keypressEvent:function(i,a,n,o,s){var l=this,u=e(l),c=i.which||i.charCo
vendor: 10,896 bytes, lines 20740-20741
20740de||i.keyCode;if(!(a===!0||i.ctrlKey&&i.altKey)&&(i.ctrlKey||i.metaKey||$))return c===t.keyCode.ENTER&&K!==b().join("")&&(K=b().join(""), 20741setTimeout(function(){u.trigger("change")},0)),!0;if(c){46===c&&i.shiftKey===!1&&","===r.radixPoint&&(c=44);var f,m=a?{begin:s,end:s}:D(l),h=String.fromCharCode(c);p().writeOutBuffer=!0;var v=A(m,h,o);if(v!==!1&&(d(!0),f=void 0!==v.caret?v.caret:a?v.pos+1:C(v.pos),p().p=f),n!==!1){var g=this;if(setTimeout(function(){r.onKeyValidation.call(g,c,v,r)},0),p().writeOutBuffer&&v!==!1){var y=b();O(l,y,r.numericInput&&void 0===v.caret?R(f):f,i,a!==!0),a!==!0&&setTimeout(function(){T(y)===!0&&u.trigger("complete")},0)}}if(i.preventDefault(),a)return v.forwardPosition=f,v}},pasteEvent:function(t){var i,a=this,n=t.originalEvent||t,o=e(a),s=a.inputmask._valueGet(!0),l=D(a);q&&(i=l.end,l.end=l.begin,l.begin=i);var u=s.substr(0,l.begin),c=s.substr(l.end,s.length);if(u===(q?x().reverse():x()).slice(0,l.begin).join("")&&(u=""),c===(q?x().reverse():x()).slice(l.end).join("")&&(c=""),q&&(i=u,u=c,c=i),window.clipboardData&&window.clipboardData.getData)s=u+window.clipboardData.getData("Text")+c;else{if(!n.clipboardData||!n.clipboardData.getData)return!0;s=u+n.clipboardData.getData("text/plain")+c}var p=s;if(e.isFunction(r.onBeforePaste)){if(p=r.onBeforePaste(s,r),p===!1)return t.preventDefault();p||(p=s)}return I(a,!1,!1,q?p.split("").reverse():p.toString().split("")),O(a,b(),C(f()),t,K!==b().join("")),T(b())===!0&&o.trigger("complete"),t.preventDefault()},inputFallBackEvent:function(i){var a=this,n=a.inputmask._valueGet();if(b().join("")!==n){var r=D(a);if(n=n.replace(new RegExp("("+t.escapeRegex(x().join(""))+")*"),""),s){var o=n.replace(b().join(""),"");if(1===o.length){var l=new e.Event("keypress");return l.which=o.charCodeAt(0),ee.keypressEvent.call(a,l,!0,!0,!1,p().validPositions[r.begin-1]?r.begin:r.begin-1),!1}}if(r.begin>n.length&&(D(a,n.length),r=D(a)),b().length-n.length!==1||n.charAt(r.begin)===b()[r.begin]||n.charAt(r.begin+1)===b()[r.begin]||E(r.begin)){for(var u=f()+1,c=x().join("");null===n.match(t.escapeRegex(c)+"$");)c=c.slice(1);n=n.replace(c,""),n=n.split(""),I(a,!0,!1,n,i,r.begin<u),T(b())===!0&&e(a).trigger("complete")}else i.keyCode=t.keyCode.BACKSPACE,ee.keydownEvent.call(a,i);i.preventDefault()}},setValueEvent:function(t){var i=this,a=i.inputmask._valueGet();I(i,!0,!1,(e.isFunction(r.onBeforeMask)?r.onBeforeMask(a,r)||a:a).split("")),K=b().join(""),(r.clearMaskOnLostFocus||r.clearIncomplete)&&i.inputmask._valueGet()===x().join("")&&i.inputmask._valueSet("")},focusEvent:function(e){var t=this,i=t.inputmask._valueGet();r.showMaskOnFocus&&(!r.showMaskOnHover||r.showMaskOnHover&&""===i)&&(t.inputmask._valueGet()!==b().join("")?O(t,b(),C(f())):X===!1&&D(t,C(f()))),r.positionCaretOnTab===!0&&ee.clickEvent.apply(t,[e,!0]),K=b().join("")},mouseleaveEvent:function(e){var t=this;if(X=!1,r.clearMaskOnLostFocus&&document.activeElement!==t){var i=b().slice(),a=t.inputmask._valueGet();a!==t.getAttribute("placeholder")&&""!==a&&(f()===-1&&a===x().join("")?i=[]:N(i),O(t,i))}},clickEvent:function(t,i){function a(t){if(""!==r.radixPoint){var i=p().validPositions;if(void 0===i[t]||i[t].input===_(t)){if(t<C(-1))return!0;var a=e.inArray(r.radixPoint,b());if(a!==-1){for(var n in i)if(a<n&&i[n].input!==_(n))return!1;return!0}}}return!1}var n=this;setTimeout(function(){if(document.activeElement===n){var t=D(n);if(i&&(t.begin=t.end),t.begin===t.end)switch(r.positionCaretOnClick){case"none":break;case"radixFocus":if(a(t.begin)){var o=e.inArray(r.radixPoint,b().join(""));D(n,r.numericInput?C(o):o);break}default:var s=t.begin,l=f(s,!0),u=C(l);if(s<u)D(n,E(s)||E(s-1)?s:C(s));else{var c=_(u);(""!==c&&b()[u]!==c&&g(u).match.optionalQuantifier!==!0||!E(u)&&g(u).match.def===c)&&(u=C(u)),D(n,u)}}}},0)},dblclickEvent:function(e){var t=this;setTimeout(function(){D(t,0,C(f()))},0)},cutEvent:function(i){var a=this,n=e(a),r=D(a),o=i.originalEvent||i,s=window.clipboardData||o.clipboardData,l=q?b().slice(r.end,r.begin):b().slice(r.begin,r.end);s.setData("text",q?l.reverse().join(""):l.join("")),document.execCommand&&document.execCommand("copy"),G(a,t.keyCode.DELETE,r),O(a,b(),p().p,i,K!==b().join("")),a.inputmask._valueGet()===x().join("")&&n.trigger("cleared")},blurEvent:function(t){var i=e(this),a=this;if(a.inputmask){var n=a.inputmask._valueGet(),o=b().slice();K!==o.join("")&&setTimeout(function(){i.trigger("change"),K=o.join("")},0),""!==n&&(r.clearMaskOnLostFocus&&(f()===-1&&n===x().join("")?o=[]:N(o)),T(o)===!1&&(setTimeout(function(){i.trigger("incomplete")},0),r.clearIncomplete&&(d(),o=r.clearMaskOnLostFocus?[]:x().slice())),O(a,o,void 0,t))}},mouseenterEvent:function(e){var t=this;X=!0,document.activeElement!==t&&r.showMaskOnHover&&t.inputmask._valueGet()!==b().join("")&&O(t,b())},submitEvent:function(e){K!==b().join("")&&U.trigger("change"),r.clearMaskOnLostFocus&&f()===-1&&W.inputmask._valueGet&&W.inputmask._valueGet()===x().join("")&&W.inputmask._valueSet(""),r.removeMaskOnSubmit&&(W.inputmask._valueSet(W.inputmask.unmaskedvalue(),!0),setTimeout(function(){O(W,b())},0))},resetEvent:function(e){setTimeout(function(){U.trigger("setvalue")},0)}};if(void 0!==i)switch(i.action){case"isComplete":return W=i.el,T(b());case"unmaskedvalue":return void 0!==W&&void 0===i.value||(Q=i.value,Q=(e.isFunction(r.onBeforeMask)?r.onBeforeMask(Q,r)||Q:Q).split(""),I(void 0,!1,!1,q?Q.reverse():Q),e.isFunction(r.onBeforeWrite)&&r.onBeforeWrite(void 0,b(),0,r)),j(W);case"mask":H(W);break;case"format":return Q=(e.isFunction(r.onBeforeMask)?r.onBeforeMask(i.value,r)||i.value:i.value).split(""),I(void 0,!1,!1,q?Q.reverse():Q),e.isFunction(r.onBeforeWrite)&&r.onBeforeWrite(void 0,b(),0,r),i.metadata?{value:q?b().slice().reverse().join(""):b().join(""),metadata:n.call(this,{action:"getmetadata"},a,r)}:q?b().slice().reverse().join(""):b().join("");case"isValid":i.value?(Q=i.value.split(""),I(void 0,!1,!0,q?Q.reverse():Q)):i.value=b().join("");for(var te=b(),ie=F(),ae=te.length-1;ae>ie&&!E(ae);ae--);return te.splice(ie,ae+1-ie),T(te)&&i.value===b().join("");case"getemptymask":return x().join("");case"remove":if(W){U=e(W),W.inputmask._valueSet(j(W)),J.off(W);var ne;Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?(ne=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(W),"value"),ne&&W.inputmask.__valueGet&&Object.defineProperty(W,"value",{get:W.inputmask.__valueGet,set:W.inputmask.__valueSet,configurable:!0})):document.__lookupGetter__&&W.__lookupGetter__("value")&&W.inputmask.__valueGet&&(W.__defineGetter__("value",W.inputmask.__valueGet),W.__defineSetter__("value",W.inputmask.__valueSet)),W.inputmask=void 0}return W;case"getmetadata":if(e.isArray(a.metadata)){var re=c(!0,0,!1).join("");return e.each(a.metadata,function(e,t){if(t.mask===re)return re=t,!1}),re}return a.metadata}}var r=navigator.userAgent,o=/mobile/i.test(r),s=/iemobile/i.test(r),l=/iphone/i.test(r)&&!s,u=/android/i.test(r)&&!s;return t.prototype={defaults:{placeholder:"_",optionalmarker:{start:"[",end:"]"},quantifiermarker:{start:"{",end:"}"},groupmarker:{start:"(",end:")"},alternatormarker:"|",escapeChar:"\\",mask:null,oncomplete:e.noop,onincomplete:e.noop,oncleared:e.noop,repeat:0,greedy:!0,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,aliases:{},alias:null,onKeyDown:e.noop,onBeforeMask:null,onBeforePaste:function(t,i){return e.isFunction(i.onBeforeMask)?i.onBeforeMask(t,i):t},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:e.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",radixPointDefinitionSymbol:void 0,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","password"],definitions:{9:{validator:"[0-9]",cardinality:1,definitionSymbol:"*"},a:{validator:"[A-Za-zÃÂ-ÃÂÃÂÃâÃâ¬-ÿõ]",cardinality:1,definitionSymbol:"*"},"*":{validator:"[0-9A-Za-zÃÂ-ÃÂÃÂÃâÃâ¬-ÿõ]",cardinality:1}},ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123],isComplete:null,canClearPosition:e.noop,postValidation:null,staticDefinitionSymbol:void 0,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"verbatim",colorMask:!1,androidHack:!1},masksCache:{},mask:function(r){function o(t,a,n,r){function o(e,i){i=void 0!==i?i:t.getAttribute(r+"-"+e),null!==i&&("string"==typeof i&&(0===e.indexOf("on")?i=window[i]:"false"===i?i=!1:"true"===i&&(i=!0)),n[e]=i)}var s,l,u,c,p=t.getAttribute(r);if(p&&""!==p&&(p=p.replace(new RegExp("'","g"),'"'),l=JSON.parse("{"+p+"}")),l){u=void 0;for(c in l)if("alias"===c.toLowerCase()){u=l[c];break}}o("alias",u),n.alias&&i(n.alias,n,a);for(s in a){if(l){u=void 0;for(c in l)if(c.toLowerCase()===s.toLowerCase()){u=l[c];break}}o(s,u)}return e.extend(!0,a,n),a}var s=this;return"string"==typeof r&&(r=document.getElementById(r)||document.querySelectorAll(r)),r=r.nodeName?[r]:r,e.each(r,function(i,r){var l=e.extend(!0,{},s.opts);o(r,l,e.extend(!0,{},s.userOptions),s.dataAttribute);var u=a(l,s.noMasksCache);void 0!==u&&(void 0!==r.inputmask&&r.inputmask.remove(),r.inputmask=new t,r.inputmask.opts=l,r.inputmask.noMasksCache=s.noMasksCache,r.inputmask.userOptions=e.extend(!0,{},s.userOptions),r.inputmask.el=r,r.inputmask.maskset=u,e.data(r,"_inputmask_opts",l),n.call(r.inputmask,{action:"mask"}))}),r&&r[0]?r[0].inputmask||this:this},option:function(t,i){return"string"==typeof t?this.opts[t]:"object"==typeof t?(e.extend(this.userOptions,t),this.el&&i!==!0&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return n.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||a(this.opts,this.noMasksCache),n.call(this,{action:"format",value:e,metadata:t})},analyseMask:function(t,i){function a(e,t,i,a){this.matches=[],this.openGroup=e||!1,this.isGroup=e||!1,this.isOptional=t||!1,this.isQuantifier=i||!1,this.isAlternator=a||!1,this.quantifier={min:1,max:1}}function n(t,a,n){var r=i.definitions[a];n=void 0!==n?n:t.matches.length;var o=t.matches[n-1];if(r&&!v){r.placeholder=e.isFunction(r.placeholder)?r.placeholder(i):r.placeholder;
20741for(var s=r.prevalidator,l=s?s.length:0,u=1;u<r.cardinality;u++){var c=l>=u?s[u-1]:[],p=c.validator,d=c.cardinality;t.matches.splice(n++,0,{fn:p?"string"==typeof p?new RegExp(p):new function(){this.test=p}:new RegExp("."),cardinality:d?d:1,optionality:t.isOptional,newBlockMarker:void 0===o||o.def!==(r.definitionSymbol||a),casing:r.casing,def:r.definitionSymbol||a,placeholder:r.placeholder,nativeDef:a}),o=t.matches[n-1]}t.matches.splice(n++,0,{fn:r.validator?"string"==typeof r.validator?new RegExp(r.validator):new function(){this.test=r.validator}:new RegExp("."),cardinality:r.cardinality,optionality:t.isOptional,newBlockMarker:void 0===o||o.def!==(r.definitionSymbol||a),casing:r.casing,def:r.definitionSymbol||a,placeholder:r.placeholder,nativeDef:a})}else t.matches.splice(n++,0,{fn:null,cardinality:0,optionality:t.isOptional,newBlockMarker:void 0===o||o.def!==a,casing:null,def:i.staticDefinitionSymbol||a,placeholder:void 0!==i.staticDefinitionSymbol?a:void 0,nativeDef:a}),v=!1}function r(t){t&&t.matches&&e.each(t.matches,function(e,a){var o=t.matches[e+1];(void 0===o||void 0===o.matches||o.isQuantifier===!1)&&a&&a.isGroup&&(a.isGroup=!1,n(a,i.groupmarker.start,0),a.openGroup!==!0&&n(a,i.groupmarker.end)),r(a)})}function o(){if(y.length>0){if(p=y[y.length-1],n(p,u),p.isAlternator){d=y.pop();for(var e=0;e<d.matches.length;e++)d.matches[e].isGroup=!1;y.length>0?(p=y[y.length-1],p.matches.push(d)):g.matches.push(d)}}else n(g,u)}function s(e){function t(e){return e===i.optionalmarker.start?e=i.optionalmarker.end:e===i.optionalmarker.end?e=i.optionalmarker.start:e===i.groupmarker.start?e=i.groupmarker.end:e===i.groupmarker.end&&(e=i.groupmarker.start),e}e.matches=e.matches.reverse();for(var a in e.matches){var n=parseInt(a);if(e.matches[a].isQuantifier&&e.matches[n+1]&&e.matches[n+1].isGroup){var r=e.matches[a];e.matches.splice(a,1),e.matches.splice(n+1,0,r)}void 0!==e.matches[a].matches?e.matches[a]=s(e.matches[a]):e.matches[a]=t(e.matches[a])}return e}for(var l,u,c,p,d,f,m,h=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g,v=!1,g=new a,y=[],k=[];l=h.exec(t);)if(u=l[0],v)o();else switch(u.charAt(0)){case i.escapeChar:v=!0;break;case i.optionalmarker.end:case i.groupmarker.end:if(c=y.pop(),c.openGroup=!1,void 0!==c)if(y.length>0){if(p=y[y.length-1],p.matches.push(c),p.isAlternator){d=y.pop();for(var x=0;x<d.matches.length;x++)d.matches[x].isGroup=!1;y.length>0?(p=y[y.length-1],p.matches.push(d)):g.matches.push(d)}}else g.matches.push(c);else o();break;case i.optionalmarker.start:y.push(new a(!1,!0));break;case i.groupmarker.start:y.push(new a(!0));break;case i.quantifiermarker.start:var b=new a(!1,!1,!0);u=u.replace(/[{}]/g,"");var P=u.split(","),w=isNaN(P[0])?P[0]:parseInt(P[0]),S=1===P.length?w:isNaN(P[1])?P[1]:parseInt(P[1]);if("*"!==S&&"+"!==S||(w="*"===S?0:1),b.quantifier={min:w,max:S},y.length>0){var A=y[y.length-1].matches;l=A.pop(),l.isGroup||(m=new a(!0),m.matches.push(l),l=m),A.push(l),A.push(b)}else l=g.matches.pop(),l.isGroup||(m=new a(!0),m.matches.push(l),l=m),g.matches.push(l),g.matches.push(b);break;case i.alternatormarker:y.length>0?(p=y[y.length-1],f=p.matches.pop()):f=g.matches.pop(),f.isAlternator?y.push(f):(d=new a(!1,!1,!1,!0),d.matches.push(f),y.push(d));break;default:o()}for(;y.length>0;)c=y.pop(),g.matches.push(c);return g.matches.length>0&&(r(g),k.push(g)),i.numericInput&&s(k[0]),k}},t.extendDefaults=function(i){e.extend(!0,t.prototype.defaults,i)},t.extendDefinitions=function(i){e.extend(!0,t.prototype.defaults.definitions,i)},t.extendAliases=function(i){e.extend(!0,t.prototype.defaults.aliases,i)},t.format=function(e,i,a){return t(i).format(e,a)},t.unmask=function(e,i){return t(i).unmaskedvalue(e)},t.isValid=function(e,i){return t(i).isValid(e)},t.remove=function(t){e.each(t,function(e,t){t.inputmask&&t.inputmask.remove()})},t.escapeRegex=function(e){var t=["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"];return e.replace(new RegExp("(\\"+t.join("|\\")+")","gim"),"\\$1")},t.keyCode={ALT:18,BACKSPACE:8,BACKSPACE_SAFARI:127,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91,X:88},window.Inputmask=t,t}(jQuery),function(e,t){return void 0===e.fn.inputmask&&(e.fn.inputmask=function(i,a){var n,r=this[0];if(void 0===a&&(a={}),"string"==typeof i)switch(i){case"unmaskedvalue":return r&&r.inputmask?r.inputmask.unmaskedvalue():e(r).val();case"remove":return this.each(function(){this.inputmask&&this.inputmask.remove()});case"getemptymask":return r&&r.inputmask?r.inputmask.getemptymask():"";case"hasMaskedValue":return!(!r||!r.inputmask)&&r.inputmask.hasMaskedValue();case"isComplete":return!r||!r.inputmask||r.inputmask.isComplete();case"getmetadata":return r&&r.inputmask?r.inputmask.getmetadata():void 0;case"setvalue":e(r).val(a),r&&void 0===r.inputmask&&e(r).triggerHandler("setvalue");break;case"option":if("string"!=typeof a)return this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(a)});if(r&&void 0!==r.inputmask)return r.inputmask.option(a);break;default:return a.alias=i,n=new t(a),this.each(function(){n.mask(this)})}else{if("object"==typeof i)return n=new t(i),void 0===i.mask&&void 0===i.alias?this.each(function(){return void 0!==this.inputmask?this.inputmask.option(i):void n.mask(this)}):this.each(function(){n.mask(this)});if(void 0===i)return this.each(function(){n=new t(a),n.mask(this)})}}),e.fn.inputmask}(jQuery,Inputmask),function(e,t){}(jQuery,Inputmask),function(e,t){function i(e){return isNaN(e)||29===new Date(e,2,0).getDate()}return t.extendAliases({"dd/mm/yyyy":{mask:"1/2/y",placeholder:"dd/mm/yyyy",regex:{val1pre:new RegExp("[0-3]"),val1:new RegExp("0[
207411-9]|[12][0-9]|3[01]"),val2pre:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|[12][0-9]|3[01])"+i+"[01])")},val2:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|[12][0-9])"+i+"(0[1-9]|1[012]))|(30"+i+"(0[13-9]|1[012]))|(31"+i+"(0[13578]|1[02]))")}},leapday:"29/02/",separator:"/",yearrange:{minyear:1900,maxyear:2099},isInYearRange:function(e,t,i){if(isNaN(e))return!1;var a=parseInt(e.concat(t.toString().slice(e.length))),n=parseInt(e.concat(i.toString().slice(e.length)));return!isNaN(a)&&t<=a&&a<=i||!isNaN(n)&&t<=n&&n<=i},determinebaseyear:function(e,t,i){var a=(new Date).getFullYear();if(e>a)return e;if(t<a){for(var n=t.toString().slice(0,2),r=t.toString().slice(2,4);t<n+i;)n--;var o=n+r;return e>o?e:o}if(e<=a&&a<=t){for(var s=a.toString().slice(0,2);t<s+i;)s--;var l=s+i;return l<e?e:l}return a},onKeyDown:function(i,a,n,r){var o=e(this);if(i.ctrlKey&&i.keyCode===t.keyCode.RIGHT){var s=new Date;o.val(s.getDate().toString()+(s.getMonth()+1).toString()+s.getFullYear().toString()),o.trigger("setvalue")}},getFrontValue:function(e,t,i){for(var a=0,n=0,r=0;r<e.length&&"2"!==e.charAt(r);r++){var o=i.definitions[e.charAt(r)];o?(a+=n,n=o.cardinality):n++}return t.join("").substr(a,n)},postValidation:function(e,t,a){var n,r,o=e.join("");return 0===a.mask.indexOf("y")?(r=o.substr(0,4),n=o.substr(4,11)):(r=o.substr(6,11),n=o.substr(0,6)),t&&(n!==a.leapday||i(r))},definitions:{1:{validator:function(e,t,i,a,n){var r=n.regex.val1.test(e);return a||r||e.charAt(1)!==n.separator&&"-./".indexOf(e.charAt(1))===-1||!(r=n.regex.val1.test("0"+e.charAt(0)))?r:(t.buffer[i-1]="0",{refreshFromBuffer:{start:i-1,end:i},pos:i,c:e.charAt(0)})},cardinality:2,prevalidator:[{validator:function(e,t,i,a,n){var r=e;isNaN(t.buffer[i+1])||(r+=t.buffer[i+1]);var o=1===r.length?n.regex.val1pre.test(r):n.regex.val1.test(r);if(!a&&!o){if(o=n.regex.val1.test(e+"0"))return t.buffer[i]=e,t.buffer[++i]="0",{pos:i,c:"0"};if(o=n.regex.val1.test("0"+e))return t.buffer[i]="0",i++,{pos:i}}return o},cardinality:1}]},2:{validator:function(e,t,i,a,n){var r=n.getFrontValue(t.mask,t.buffer,n);r.indexOf(n.placeholder[0])!==-1&&(r="01"+n.separator);var o=n.regex.val2(n.separator).test(r+e);return a||o||e.charAt(1)!==n.separator&&"-./".indexOf(e.charAt(1))===-1||!(o=n.regex.val2(n.separator).test(r+"0"+e.charAt(0)))?o:(t.buffer[i-1]="0",{refreshFromBuffer:{start:i-1,end:i},pos:i,c:e.charAt(0)})},cardinality:2,prevalidator:[{validator:function(e,t,i,a,n){isNaN(t.buffer[i+1])||(e+=t.buffer[i+1]);var r=n.getFrontValue(t.mask,t.buffer,n);r.indexOf(n.placeholder[0])!==-1&&(r="01"+n.separator);var o=1===e.length?n.regex.val2pre(n.separator).test(r+e):n.regex.val2(n.separator).test(r+e);return a||o||!(o=n.regex.val2(n.separator).test(r+"0"+e))?o:(t.buffer[i]="0",i++,{pos:i})},cardinality:1}]},y:{validator:function(e,t,i,a,n){return n.isInYearRange(e,n.yearrange.minyear,n.yearrange.maxyear)},cardinality:4,prevalidator:[{validator:function(e,t,i,a,n){var r=n.isInYearRange(e,n.yearrange.minyear,n.yearrange.maxyear);if(!a&&!r){var o=n.determinebaseyear(n.yearrange.minyear,n.yearrange.maxyear,e+"0").toString().slice(0,1);if(r=n.isInYearRange(o+e,n.yearrange.minyear,n.yearrange.maxyear))return t.buffer[i++]=o.charAt(0),{pos:i};if(o=n.determinebaseyear(n.yearrange.minyear,n.yearrange.maxyear,e+"0").toString().slice(0,2),r=n.isInYearRange(o+e,n.yearrange.minyear,n.yearrange.maxyear))return t.buffer[i++]=o.charAt(0),t.buffer[i++]=o.charAt(1),{pos:i}}return r},cardinality:1},{validator:function(e,t,i,a,n){var r=n.isInYearRange(e,n.yearrange.minyear,n.yearrange.maxyear);if(!a&&!r){var o=n.determinebaseyear(n.yearrange.minyear,n.yearrange.maxyear,e).toString().slice(0,2);if(r=n.isInYearRange(e[0]+o[1]+e[1],n.yearrange.minyear,n.yearrange.maxyear))return t.buffer[i++]=o.charAt(1),{pos:i};if(o=n.determinebaseyear(n.yearrange.minyear,n.yearrange.maxyear,e).toString().slice(0,2),r=n.isInYearRange(o+e,n.yearrange.minyear,n.yearrange.maxyear))return t.buffer[i-1]=o.charAt(0),t.buffer[i++]=o.charAt(1),t.buffer[i++]=e.charAt(0),{refreshFromBuffer:{start:i-3,end:i},pos:i}}return r},cardinality:2},{validator:function(e,t,i,a,n){return n.isInYearRange(e,n.yearrange.minyear,n.yearrange.maxyear)},cardinality:3}]}},insertMode:!1,autoUnmask:!1},"mm/dd/yyyy":{placeholder:"mm/dd/yyyy",alias:"dd/mm/yyyy",regex:{val2pre:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[13-9]|1[012])"+i+"[0-3])|(02"+i+"[0-2])")},val2:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|1[012])"+i+"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])"+i+"30)|((0[13578]|1[02])"+i+"31)")}
vendor: 4,298 bytes, line 20741
20741,val1pre:new RegExp("[01]"),val1:new RegExp("0[1-9]|1[012]")},leapday:"02/29/",onKeyDown:function(i,a,n,r){var o=e(this);if(i.ctrlKey&&i.keyCode===t.keyCode.RIGHT){var s=new Date;o.val((s.getMonth()+1).toString()+s.getDate().toString()+s.getFullYear().toString()),o.trigger("setvalue")}}},"yyyy/mm/dd":{mask:"y/1/2",placeholder:"yyyy/mm/dd",alias:"mm/dd/yyyy",leapday:"/02/29",onKeyDown:function(i,a,n,r){var o=e(this);if(i.ctrlKey&&i.keyCode===t.keyCode.RIGHT){var s=new Date;o.val(s.getFullYear().toString()+(s.getMonth()+1).toString()+s.getDate().toString()),o.trigger("setvalue")}}},"dd.mm.yyyy":{mask:"1.2.y",placeholder:"dd.mm.yyyy",leapday:"29.02.",separator:".",alias:"dd/mm/yyyy"},"dd-mm-yyyy":{mask:"1-2-y",placeholder:"dd-mm-yyyy",leapday:"29-02-",separator:"-",alias:"dd/mm/yyyy"},"mm.dd.yyyy":{mask:"1.2.y",placeholder:"mm.dd.yyyy",leapday:"02.29.",separator:".",alias:"mm/dd/yyyy"},"mm-dd-yyyy":{mask:"1-2-y",placeholder:"mm-dd-yyyy",leapday:"02-29-",separator:"-",alias:"mm/dd/yyyy"},"yyyy.mm.dd":{mask:"y.1.2",placeholder:"yyyy.mm.dd",leapday:".02.29",separator:".",alias:"yyyy/mm/dd"},"yyyy-mm-dd":{mask:"y-1-2",placeholder:"yyyy-mm-dd",leapday:"-02-29",separator:"-",alias:"yyyy/mm/dd"},datetime:{mask:"1/2/y h:s",placeholder:"dd/mm/yyyy hh:mm",alias:"dd/mm/yyyy",regex:{hrspre:new RegExp("[012]"),hrs24:new RegExp("2[0-4]|1[3-9]"),hrs:new RegExp("[01][0-9]|2[0-4]"),ampm:new RegExp("^[a|p|A|P][m|M]"),mspre:new RegExp("[0-5]"),ms:new RegExp("[0-5][0-9]")},timeseparator:":",hourFormat:"24",definitions:{h:{validator:function(e,t,i,a,n){if("24"===n.hourFormat&&24===parseInt(e,10))return t.buffer[i-1]="0",t.buffer[i]="0",{refreshFromBuffer:{start:i-1,end:i},c:"0"};var r=n.regex.hrs.test(e);if(!a&&!r&&(e.charAt(1)===n.timeseparator||"-.:".indexOf(e.charAt(1))!==-1)&&(r=n.regex.hrs.test("0"+e.charAt(0))))return t.buffer[i-1]="0",t.buffer[i]=e.charAt(0),i++,{refreshFromBuffer:{start:i-2,end:i},pos:i,c:n.timeseparator};if(r&&"24"!==n.hourFormat&&n.regex.hrs24.test(e)){var o=parseInt(e,10);return 24===o?(t.buffer[i+5]="a",t.buffer[i+6]="m"):(t.buffer[i+5]="p",t.buffer[i+6]="m"),o-=12,o<10?(t.buffer[i]=o.toString(),t.buffer[i-1]="0"):(t.buffer[i]=o.toString().charAt(1),t.buffer[i-1]=o.toString().charAt(0)),{refreshFromBuffer:{start:i-1,end:i+6},c:t.buffer[i]}}return r},cardinality:2,prevalidator:[{validator:function(e,t,i,a,n){var r=n.regex.hrspre.test(e);return a||r||!(r=n.regex.hrs.test("0"+e))?r:(t.buffer[i]="0",i++,{pos:i})},cardinality:1}]},s:{validator:"[0-5][0-9]",cardinality:2,prevalidator:[{validator:function(e,t,i,a,n){var r=n.regex.mspre.test(e);return a||r||!(r=n.regex.ms.test("0"+e))?r:(t.buffer[i]="0",i++,{pos:i})},cardinality:1}]},t:{validator:function(e,t,i,a,n){return n.regex.ampm.test(e+"m")},casing:"lower",cardinality:1}},insertMode:!1,autoUnmask:!1},datetime12:{mask:"1/2/y h:s t\\m",placeholder:"dd/mm/yyyy hh:mm xm",alias:"datetime",hourFormat:"12"},"mm/dd/yyyy hh:mm xm":{mask:"1/2/y h:s t\\m",placeholder:"mm/dd/yyyy hh:mm xm",alias:"datetime12",regex:{val2pre:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[13-9]|1[012])"+i+"[0-3])|(02"+i+"[0-2])")},val2:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|1[012])"+i+"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])"+i+"30)|((0[13578]|1[02])"+i+"31)")},val1pre:new RegExp("[01]"),val1:new RegExp("0[1-9]|1[012]")},leapday:"02/29/",onKeyDown:function(i,a,n,r){var o=e(this);if(i.ctrlKey&&i.keyCode===t.keyCode.RIGHT){var s=new Date;o.val((s.getMonth()+1).toString()+s.getDate().toString()+s.getFullYear().toString()),o.trigger("setvalue")}}},"hh:mm t":{mask:"h:s t\\m",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"h:s t":{mask:"h:s t\\m",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"hh:mm:ss":{mask:"h:s:s",placeholder:"hh:mm:ss",alias:"datetime",autoUnmask:!1},"hh:mm":{mask:"h:s",placeholder:"hh:mm",alias:"datetime",autoUnmask:!1},date:{alias:"dd/mm/yyyy"},"mm/yyyy":{mask:"1/y",placeholder:"mm/yyyy",leapday:"donotuse",separator:"/",alias:"mm/dd/yyyy"},shamsi:{regex:{val2pre:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|1[012])"+i+"[0-3])")},val2:function(e){var i=t.escapeRegex.call(this,e);return new RegExp("((0[1-9]|1[012])"+i+"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])"+i+"30)|((0[1-6])"+i+"31)")}
vendor: 4,950 bytes, line 20741
20741,val1pre:new RegExp("[01]"),val1:new RegExp("0[1-9]|1[012]")},yearrange:{minyear:1300,maxyear:1499},mask:"y/1/2",leapday:"/12/30",placeholder:"yyyy/mm/dd",alias:"mm/dd/yyyy",clearIncomplete:!0}}),t}(jQuery,Inputmask),function(e,t){return t.extendDefinitions({A:{validator:"[A-Za-zÃÂ-ÃÂÃÂÃâÃâ¬-ÿõ]",cardinality:1,casing:"upper"},"&":{validator:"[0-9A-Za-zÃÂ-ÃÂÃÂÃâÃâ¬-ÿõ]",cardinality:1,casing:"upper"},"#":{validator:"[0-9A-Fa-f]",cardinality:1,casing:"upper"}}),t.extendAliases({url:{definitions:{i:{validator:".",cardinality:1}},mask:"(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",insertMode:!1,autoUnmask:!1,inputmode:"url"},ip:{mask:"i[i[i]].i[i[i]].i[i[i]].i[i[i]]",definitions:{i:{validator:function(e,t,i,a,n){return i-1>-1&&"."!==t.buffer[i-1]?(e=t.buffer[i-1]+e,e=i-2>-1&&"."!==t.buffer[i-2]?t.buffer[i-2]+e:"0"+e):e="00"+e,new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(e)},cardinality:1}},onUnMask:function(e,t,i){return e},inputmode:"numeric"},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",greedy:!1,onBeforePaste:function(e,t){return e=e.toLowerCase(),e.replace("mailto:","")},definitions:{"*":{validator:"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",cardinality:1,casing:"lower"},"-":{validator:"[0-9A-Za-z-]",cardinality:1,casing:"lower"}},onUnMask:function(e,t,i){return e},inputmode:"email"},mac:{mask:"##:##:##:##:##:##"},vin:{mask:"V{13}9{4}",definitions:{V:{validator:"[A-HJ-NPR-Za-hj-npr-z\\d]",cardinality:1,casing:"upper"}},clearIncomplete:!0,autoUnmask:!0}}),t}(jQuery,Inputmask),function(e,t){return t.extendAliases({numeric:{mask:function(e){function i(t){for(var i="",a=0;a<t.length;a++)i+=e.definitions[t.charAt(a)]||e.optionalmarker.start===t.charAt(a)||e.optionalmarker.end===t.charAt(a)||e.quantifiermarker.start===t.charAt(a)||e.quantifiermarker.end===t.charAt(a)||e.groupmarker.start===t.charAt(a)||e.groupmarker.end===t.charAt(a)||e.alternatormarker===t.charAt(a)?"\\"+t.charAt(a):t.charAt(a);return i}if(0!==e.repeat&&isNaN(e.integerDigits)&&(e.integerDigits=e.repeat),e.repeat=0,e.groupSeparator===e.radixPoint&&("."===e.radixPoint?e.groupSeparator=",":","===e.radixPoint?e.groupSeparator=".":e.groupSeparator="")," "===e.groupSeparator&&(e.skipOptionalPartCharacter=void 0),e.autoGroup=e.autoGroup&&""!==e.groupSeparator,e.autoGroup&&("string"==typeof e.groupSize&&isFinite(e.groupSize)&&(e.groupSize=parseInt(e.groupSize)),isFinite(e.integerDigits))){var a=Math.floor(e.integerDigits/e.groupSize),n=e.integerDigits%e.groupSize;e.integerDigits=parseInt(e.integerDigits)+(0===n?a-1:a),e.integerDigits<1&&(e.integerDigits="*")}e.placeholder.length>1&&(e.placeholder=e.placeholder.charAt(0)),"radixFocus"===e.positionCaretOnClick&&""===e.placeholder&&e.integerOptional===!1&&(e.positionCaretOnClick="lvp"),e.definitions[";"]=e.definitions["~"],e.definitions[";"].definitionSymbol="~",e.numericInput===!0&&(e.positionCaretOnClick="radixFocus"===e.positionCaretOnClick?"lvp":e.positionCaretOnClick,e.digitsOptional=!1,isNaN(e.digits)&&(e.digits=2),e.decimalProtect=!1);var r="[+]";if(r+=i(e.prefix),r+=e.integerOptional===!0?"~{1,"+e.integerDigits+"}":"~{"+e.integerDigits+"}",void 0!==e.digits){e.decimalProtect&&(e.radixPointDefinitionSymbol=":");var o=e.digits.toString().split(",");isFinite(o[0]&&o[1]&&isFinite(o[1]))?r+=(e.decimalProtect?":":e.radixPoint)+";{"+e.digits+"}":(isNaN(e.digits)||parseInt(e.digits)>0)&&(r+=e.digitsOptional?"["+(e.decimalProtect?":":e.radixPoint)+";{1,"+e.digits+"}]":(e.decimalProtect?":":e.radixPoint)+";{"+e.digits+"}")}return r+=i(e.suffix),r+="[-]",e.greedy=!1,null!==e.min&&(e.min=e.min.toString().replace(new RegExp(t.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.min=e.min.replace(e.radixPoint,"."))),null!==e.max&&(e.max=e.max.toString().replace(new RegExp(t.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.max=e.max.replace(e.radixPoint,"."))),r},placeholder:"",greedy:!1,digits:"*",digitsOptional:!0,radixPoint:".",positionCaretOnClick:"radixFocus",groupSize:3,groupSeparator:"",autoGroup:!1,allowPlus:!0,allowMinus:!0,negationSymbol:{front:"-",back:""},integerDigits:"+",integerOptional:!0,prefix:"",suffix:"",rightAlign:!0,decimalProtect:!0,min:null,max:null,step:1,insertMode:!0,autoUnmask:!1,unmaskAsNumber:!1,inputmode:"numeric",postFormat:function(i,a,n){n.numericInput===!0&&(i=i.reverse(),isFinite(a)&&(a=i.join("").length-a-1));var r,o;a=a>=i.length?i.length-1:a<0?0:a;var s=i[a],l=i.slice();s===n.groupSeparator&&(l.splice(a--,1),s=l[a]);var u=l.join("").match(new RegExp("^"+t.escapeRegex(n.negationSymbol.front)));u=null!==u&&1===u.length,a>(u?n.negationSymbol.front.length:0)+n.prefix.length&&a<l.length-n.suffix.length&&(l[a]="!");var c=l.join(""),p=l.join();if(u&&(c=c.replace(new RegExp("^"+t.escapeRegex(n.negationSymbol.front)),""),c=c.replace(new RegExp(t.escapeRegex(n.negationSymbol.back)+"$"),"")),c=c.replace(new RegExp(t.escapeRegex(n.suffix
vendor: 9,024 bytes, lines 20741-20742
20741)+"$"),""),c=c.replace(new RegExp("^"+t.escapeRegex(n.prefix)),""),c.length>0&&n.autoGroup||c.indexOf(n.groupSeparator)!==-1){var d=t.escapeRegex(n.groupSeparator);c=c.replace(new RegExp(d,"g"),"");var f=c.split(s===n.radixPoint?"!":n.radixPoint);if(c=""===n.radixPoint?c:f[0],s!==n.negationSymbol.front&&(c=c.replace("!","?")),c.length>n.groupSize)for(var m=new RegExp("([-+]?[\\d?]+)([\\d?]{"+n.groupSize+"})");m.test(c)&&""!==n.groupSeparator;)c=c.replace(m,"$1"+n.groupSeparator+"$2"),c=c.replace(n.groupSeparator+n.groupSeparator,n.groupSeparator);c=c.replace("?","!"),""!==n.radixPoint&&f.length>1&&(c+=(s===n.radixPoint?"!":n.radixPoint)+f[1])}c=n.prefix+c+n.suffix,u&&(c=n.negationSymbol.front+c+n.negationSymbol.back);var h=p!==c.split("").join(),v=e.inArray("!",c);if(v===-1&&(v=a),h){for(i.length=c.length,r=0,o=c.length;r<o;r++)i[r]=c.charAt(r);i[v]=s}return v=n.numericInput&&isFinite(a)?i.join("").length-v-1:v,n.numericInput&&(i=i.reverse(),e.inArray(n.radixPoint,i)<v&&i.join("").length-n.suffix.length!==v&&(v-=1)),{pos:v,refreshFromBuffer:h,buffer:i,isNegative:u}},onBeforeWrite:function(i,a,n,r){var o;if(i&&("blur"===i.type||"checkval"===i.type||"keydown"===i.type)){var s=r.numericInput?a.slice().reverse().join(""):a.join(""),l=s.replace(r.prefix,"");l=l.replace(r.suffix,""),l=l.replace(new RegExp(t.escapeRegex(r.groupSeparator),"g"),""),","===r.radixPoint&&(l=l.replace(r.radixPoint,"."));var u=l.match(new RegExp("[-"+t.escapeRegex(r.negationSymbol.front)+"]","g"));if(u=null!==u&&1===u.length,l=l.replace(new RegExp("[-"+t.escapeRegex(r.negationSymbol.front)+"]","g"),""), 20742l=l.replace(new RegExp(t.escapeRegex(r.negationSymbol.back)+"$"),""),isNaN(r.placeholder)&&(l=l.replace(new RegExp(t.escapeRegex(r.placeholder),"g"),"")),l=l===r.negationSymbol.front?l+"0":l,""!==l&&isFinite(l)){var c=parseFloat(l),p=u?c*-1:c;if(null!==r.min&&isFinite(r.min)&&p<parseFloat(r.min)?(c=Math.abs(r.min),u=r.min<0,s=void 0):null!==r.max&&isFinite(r.max)&&p>parseFloat(r.max)&&(c=Math.abs(r.max),u=r.max<0,s=void 0),l=c.toString().replace(".",r.radixPoint).split(""),isFinite(r.digits)){var d=e.inArray(r.radixPoint,l),f=e.inArray(r.radixPoint,s);d===-1&&(l.push(r.radixPoint),d=l.length-1);for(var m=1;m<=r.digits;m++)r.digitsOptional||void 0!==l[d+m]&&l[d+m]!==r.placeholder.charAt(0)?f!==-1&&void 0!==s[f+m]&&(l[d+m]=l[d+m]||s[f+m]):l[d+m]="0";l[l.length-1]===r.radixPoint&&delete l[l.length-1]}if(c.toString()!==l&&c.toString()+"."!==l||u)return l=(r.prefix+l.join("")).split(""),!u||0===c&&"blur"===i.type||(l.unshift(r.negationSymbol.front),l.push(r.negationSymbol.back)),r.numericInput&&(l=l.reverse()),o=r.postFormat(l,r.numericInput?n:n-1,r),o.buffer&&(o.refreshFromBuffer=o.buffer.join("")!==a.join("")),o}}if(r.autoGroup)return o=r.postFormat(a,r.numericInput?n:n-1,r),o.caret=n<(o.isNegative?r.negationSymbol.front.length:0)+r.prefix.length||n>o.buffer.length-(o.isNegative?r.negationSymbol.back.length:0)?o.pos:o.pos+1,o},regex:{integerPart:function(e){return new RegExp("["+t.escapeRegex(e.negationSymbol.front)+"+]?\\d+")},integerNPart:function(e){return new RegExp("[\\d"+t.escapeRegex(e.groupSeparator)+t.escapeRegex(e.placeholder.charAt(0))+"]+")}},signHandler:function(e,t,i,a,n){if(!a&&n.allowMinus&&"-"===e||n.allowPlus&&"+"===e){var r=t.buffer.join("").match(n.regex.integerPart(n));if(r&&r[0].length>0)return t.buffer[r.index]===("-"===e?"+":n.negationSymbol.front)?"-"===e?""!==n.negationSymbol.back?{pos:0,c:n.negationSymbol.front,remove:0,caret:i,insert:{pos:t.buffer.length-1,c:n.negationSymbol.back}}:{pos:0,c:n.negationSymbol.front,remove:0,caret:i}:""!==n.negationSymbol.back?{pos:0,c:"+",remove:[0,t.buffer.length-1],caret:i}:{pos:0,c:"+",remove:0,caret:i}:t.buffer[0]===("-"===e?n.negationSymbol.front:"+")?"-"===e&&""!==n.negationSymbol.back?{remove:[0,t.buffer.length-1],caret:i-1}:{remove:0,caret:i-1}:"-"===e?""!==n.negationSymbol.back?{pos:0,c:n.negationSymbol.front,caret:i+1,insert:{pos:t.buffer.length,c:n.negationSymbol.back}}:{pos:0,c:n.negationSymbol.front,caret:i+1}:{pos:0,c:e,caret:i+1}}return!1},radixHandler:function(t,i,a,n,r){if(!n&&r.numericInput!==!0&&t===r.radixPoint&&void 0!==r.digits&&(isNaN(r.digits)||parseInt(r.digits)>0)){var o=e.inArray(r.radixPoint,i.buffer),s=i.buffer.join("").match(r.regex.integerPart(r));if(o!==-1&&i.validPositions[o])return i.validPositions[o-1]?{caret:o+1}:{pos:s.index,c:s[0],caret:o+1};if(!s||"0"===s[0]&&s.index+1!==a)return i.buffer[s?s.index:a]="0",{pos:(s?s.index:a)+1,c:r.radixPoint}}return!1},leadingZeroHandler:function(t,i,a,n,r,o){if(!n){var s=i.buffer.slice("");if(s.splice(0,r.prefix.length),s.splice(s.length-r.suffix.length,r.suffix.length),r.numericInput===!0){var s=s.reverse(),l=s[0];if("0"===l&&void 0===i.validPositions[a-1])return{pos:a,remove:s.length-1}}else{a-=r.prefix.length;var u=e.inArray(r.radixPoint,s),c=s.slice(0,u!==-1?u:void 0).join("").match(r.regex.integerNPart(r));if(c&&(u===-1||a<=u)){var p=u===-1?0:parseInt(s.slice(u+1).join(""));if(0===c[0].indexOf(""!==r.placeholder?r.placeholder.charAt(0):"0")&&(c.index+1===a||o!==!0&&0===p))return i.buffer.splice(c.index+r.prefix.length,1),{pos:c.index+r.prefix.length,remove:c.index+r.prefix.length};if("0"===t&&a<=c.index&&c[0]!==r.groupSeparator)return!1}}}return!0},definitions:{"~":{validator:function(i,a,n,r,o,s){var l=o.signHandler(i,a,n,r,o);if(!l&&(l=o.radixHandler(i,a,n,r,o),!l&&(l=r?new RegExp("[0-9"+t.escapeRegex(o.groupSeparator)+"]").test(i):new RegExp("[0-9]").test(i),l===!0&&(l=o.leadingZeroHandler(i,a,n,r,o,s),l===!0)))){var u=e.inArray(o.radixPoint,a.buffer);l=u!==-1&&(o.digitsOptional===!1||a.validPositions[n])&&o.numericInput!==!0&&n>u&&!r?{pos:n,remove:n}:{pos:n}}return l},cardinality:1},"+":{validator:function(e,t,i,a,n){var r=n.signHandler(e,t,i,a,n);return!r&&(a&&n.allowMinus&&e===n.negationSymbol.front||n.allowMinus&&"-"===e||n.allowPlus&&"+"===e)&&(r=!(!a&&"-"===e)||(""!==n.negationSymbol.back?{pos:i,c:"-"===e?n.negationSymbol.front:"+",caret:i+1,insert:{pos:t.buffer.length,c:n.negationSymbol.back}}:{pos:i,c:"-"===e?n.negationSymbol.front:"+",caret:i+1})),r},cardinality:1,placeholder:""},"-":{validator:function(e,t,i,a,n){var r=n.signHandler(e,t,i,a,n);return!r&&a&&n.allowMinus&&e===n.negationSymbol.back&&(r=!0),r},cardinality:1,placeholder:""},":":{validator:function(e,i,a,n,r){var o=r.signHandler(e,i,a,n,r);if(!o){var s="["+t.escapeRegex(r.radixPoint)+"]";o=new RegExp(s).test(e),o&&i.validPositions[a]&&i.validPositions[a].match.placeholder===r.radixPoint&&(o={caret:a+1})}return o},cardinality:1,placeholder:function(e){return e.radixPoint}}},onUnMask:function(e,i,a){if(""===i&&a.nullable===!0)return i;var n=e.replace(a.prefix,"");return n=n.replace(a.suffix,""),n=n.replace(new RegExp(t.escapeRegex(a.groupSeparator),"g"),""),a.unmaskAsNumber?(""!==a.radixPoint&&n.indexOf(a.radixPoint)!==-1&&(n=n.replace(t.escapeRegex.call(this,a.radixPoint),".")),Number(n)):n},isComplete:function(e,i){var a=e.join(""),n=e.slice();if(i.postFormat(n,0,i),n.join("")!==a)return!1;var r=a.replace(i.prefix,"");return r=r.replace(i.suffix,""),r=r.replace(new RegExp(t.escapeRegex(i.groupSeparator),"g"),""),","===i.radixPoint&&(r=r.replace(t.escapeRegex(i.radixPoint),".")),isFinite(r)},onBeforeMask:function(e,i){if(i.numericInput===!0&&(e=e.split("").reverse().join("")),""!==i.radixPoint&&isFinite(e)){var a=e.split("."),n=""!==i.groupSeparator?parseInt(i.groupSize):0;2===a.length&&(a[0].length>n||a[1].length>n)&&(e=e.toString().replace(".",i.radixPoint))}var r=e.match(/,/g),o=e.match(/\./g);if(o&&r?o.length>r.length?(e=e.replace(/\./g,""),e=e.replace(",",i.radixPoint)):r.length>o.length?(e=e.replace(/,/g,""),e=e.replace(".",i.radixPoint)):e=e.indexOf(".")<e.indexOf(",")?e.replace(/\./g,""):e=e.replace(/,/g,""):e=e.replace(new RegExp(t.escapeRegex(i.groupSeparator),"g"),""),0===i.digits&&(e.indexOf(".")!==-1?e=e.substring(0,e.indexOf(".")):e.indexOf(",")!==-1&&(e=e.substring(0,e.indexOf(",")))),""!==i.radixPoint&&isFinite(i.digits)&&e.indexOf(i.radixPoint)!==-1){var s=e.split(i.radixPoint),l=s[1].match(new RegExp("\\d*"))[0];if(parseInt(i.digits)<l.toString().length){var u=Math.pow(10,parseInt(i.digits));e=e.replace(t.escapeRegex(i.radixPoint),"."),e=Math.round(parseFloat(e)*u)/u,e=e.toString().replace(".",i.radixPoint)}}return i.numericInput===!0&&(e=e.split("").reverse().join("")),e.toString()},canClearPosition:function(e,t,i,a,n){var r=e.validPositions[t].input,o=r!==n.radixPoint||null!==e.validPositions[t].match.fn&&n.decimalProtect===!1||isFinite(r)||t===i||r===n.groupSeparator||r===n.negationSymbol.front||r===n.negationSymbol.back;return o},onKeyDown:function(i,a,n,r){var o=e(this);if(i.ctrlKey)switch(i.keyCode){case t.keyCode.UP:o.val(parseFloat(this.inputmask.unmaskedvalue())+parseInt(r.step)),o.trigger("setvalue");break;case t.keyCode.DOWN:o.val(parseFloat(this.inputmask.unmaskedvalue())-parseInt(r.step)),o.trigger("setvalue")}}},currency:{prefix:"$ ",groupSeparator:",",alias:"numeric",placeholder:"0",autoGroup:!0,digits:2,digitsOptional:!1,clearMaskOnLostFocus:!1}
20742,decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0,radixPoint:""},percentage:{alias:"numeric",digits:2,radixPoint:".",placeholder:"0",autoGroup:!1,min:0,max:100,suffix:" %",allowPlus:!1,allowMinus:!1}}),t}(jQuery,Inputmask),function(e,t){function i(e,t){var i=(e.mask||e).replace(/#/g,"9").replace(/\)/,"9").replace(/[+()#-]/g,""),a=(t.mask||t).replace(/#/g,"9").replace(/\)/,"9").replace(/[+()#-]/g,""),n=(e.mask||e).split("#")[0],r=(t.mask||t).split("#")[0];return 0===r.indexOf(n)?-1:0===n.indexOf(r)?1:i.localeCompare(a)}var a=t.prototype.analyseMask;return t.prototype.analyseMask=function(t,i){function n(e,i,a){i=i||"",a=a||o,""!==i&&(a[i]={});for(var r="",s=a[i]||a,l=e.length-1;l>=0;l--)t=e[l].mask||e[l],r=t.substr(0,1),s[r]=s[r]||[],s[r].unshift(t.substr(1)),e.splice(l,1);for(var u in s)s[u].length>500&&n(s[u].slice(),u,s)}function r(t){var a="",n=[];for(var o in t)e.isArray(t[o])?1===t[o].length?n.push(o+t[o]):n.push(o+i.groupmarker.start+t[o].join(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)+i.groupmarker.end):n.push(o+r(t[o]));return a+=1===n.length?n[0]:i.groupmarker.start+n.join(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)+i.groupmarker.end}var o={};i.phoneCodes&&i.phoneCodes.length>1e3&&(t=t.substr(1,t.length-2),n(t.split(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)),t=r(o));var s=a.call(this,t,i);return s},t.extendAliases({abstractphone:{groupmarker:{start:"<",end:">"},countrycode:"",phoneCodes:[],mask:function(e){return e.definitions={"#":e.definitions[9]},e.phoneCodes.sort(i)},keepStatic:!0,onBeforeMask:function(e,t){var i=e.replace(/^0{1,2}/,"").replace(/[\s]/g,"");return(i.indexOf(t.countrycode)>1||i.indexOf(t.countrycode)===-1)&&(i="+"+t.countrycode+i),i},onUnMask:function(e,t,i){return t},inputmode:"tel"}}),t}(jQuery,Inputmask),function(e,t){return t.extendAliases({Regex:{mask:"r",greedy:!1,repeat:"*",regex:null,regexTokens:null,tokenizer:/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,quantifierFilter:/[0-9]+[^,]/,isComplete:function(e,t){return new RegExp(t.regex).test(e.join(""))},definitions:{r:{validator:function(t,i,a,n,r){function o(e,t){this.matches=[],this.isGroup=e||!1,this.isQuantifier=t||!1,this.quantifier={min:1,max:1},this.repeaterPart=void 0}function s(){var e,t,i=new o,a=[];for(r.regexTokens=[];e=r.tokenizer.exec(r.regex);)switch(t=e[0],t.charAt(0)){case"(":a.push(new o(!0));break;case")":c=a.pop(),a.length>0?a[a.length-1].matches.push(c):i.matches.push(c);break;case"{":case"+":case"*":var n=new o(!1,!0);t=t.replace(/[{}]/g,"");var s=t.split(","),l=isNaN(s[0])?s[0]:parseInt(s[0]),u=1===s.length?l:isNaN(s[1])?s[1]:parseInt(s[1]);if(n.quantifier={min:l,max:u},a.length>0){var p=a[a.length-1].matches;e=p.pop(),e.isGroup||(c=new o(!0),c.matches.push(e),e=c),p.push(e),p.push(n)}else e=i.matches.pop(),e.isGroup||(c=new o(!0),c.matches.push(e),e=c),i.matches.push(e),i.matches.push(n);break;default:a.length>0?a[a.length-1].matches.push(t):i.matches.push(t)}i.matches.length>0&&r.regexTokens.push(i)}function l(t,i){var a=!1;i&&(d+="(",m++);for(var n=0;n<t.matches.length;n++){var r=t.matches[n];if(r.isGroup===!0)a=l(r,!0);else if(r.isQuantifier===!0){var o=e.inArray(r,t.matches),s=t.matches[o-1],c=d;if(isNaN(r.quantifier.max)){for(;r.repeaterPart&&r.repeaterPart!==d&&r.repeaterPart.length>d.length&&!(a=l(s,!0)););a=a||l(s,!0),a&&(r.repeaterPart=d),d=c+r.quantifier.max}else{for(var p=0,f=r.quantifier.max-1;p<f&&!(a=l(s,!0));p++);d=c+"{"+r.quantifier.min+","+r.quantifier.max+"}"}}else if(void 0!==r.matches)for(var h=0;h<r.length&&!(a=l(r[h],i));h++);else{var v;if("["==r.charAt(0)){v=d,v+=r;for(var g=0;g<m;g++)v+=")";var y=new RegExp("^("+v+")$");a=y.test(u)}else for(var k=0,x=r.length;k<x;k++)if("\\"!==r.charAt(k)){v=d,v+=r.substr(0,k+1),v=v.replace(/\|$/,"");for(var g=0;g<m;g++)v+=")";var y=new RegExp("^("+v+")$");if(a=y.test(u))break}d+=r}if(a)break}return i&&(d+=")",m--),a}var u,c,p=i.buffer.slice(),d="",f=!1,m=0;null===r.regexTokens&&s(),p.splice(a,0,t),u=p.join("");for(var h=0;h<r.regexTokens.length;h++){var v=r.regexTokens[h];if(f=l(v,v.isGroup))break}return f},cardinality:1}}}}),t}(jQuery,Inputmask); 20743//# sourceMappingURL=jquery.inputmask.bundle.min.js.map 20744/* 20745 * File: jquery.dataTables.min.js 20746 * Version: 1.9.4 20747 * Author: Allan Jardine (www.sprymedia.co.uk) 20748 * Info: www.datatables.net 20749 * 20750 * Copyright 2008-2012 Allan Jardine, all rights reserved. 20751 * 20752 * This source file is free software, under either the GPL v2 license or a 20753 * BSD style license, available at: 20754 * http://datatables.net/license_gpl2 20755 * http://datatables.net/license_bsd 20756 * 20757 * This source file is distributed in the hope that it will be useful, but 20758 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 20759 * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 20760 */ 20761(function(X,l,n){var L=function(h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===n||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else if(c=a.aoPreSearchCols[d], 20762c.bRegex===n&&(c.bRegex=!0),c.bSmart===n&&(c.bSmart=!0),c.bCaseInsensitive===n)c.bCaseInsensitive=!0;m(a,d,null)}function m(a,b,c){var d=a.aoColumns[b];c!==n&&null!==c&&(c.mDataProp&&!c.mData&&(c.mData=c.mDataProp),c.sType!==n&&(d.sType=c.sType,d._bAutoType=!1),h.extend(d,c),p(d,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(d.aDataSort=[c.iDataSort]),p(d,c,"aDataSort"));var i=d.mRender?Q(d.mRender):null,f=Q(d.mData);d.fnGetData=function(a,b){var c=f(a,b);return d.mRender&&b&&""!==b?i(c,b,a):c};d.fnSetData= 20763L(d.mData);a.oFeatures.bSort||(d.bSortable=!1);
20763!d.bSortable||-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableNone,d.sSortingClassJUI=""):-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortable,d.sSortingClassJUI=a.oClasses.sSortJUI):-1!=h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableAsc,d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed):-1== 20764h.inArray("asc",d.asSorting)&&-1!=h.inArray("desc",d.asSorting)&&(d.sSortingClass=a.oClasses.sSortableDesc,d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed)}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;da(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function G(a,b){var c=r(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function R(a,b){var c=r(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function t(a){return r(a,"bVisible").length} 20765function r(a,b){var c=[];h.map(a.aoColumns,function(a,i){a[b]&&c.push(i)});return c}function B(a){for(var b=j.ext.aTypes,c=b.length,d=0;d<c;d++){var i=b[d](a);if(null!==i)return i}return"string"}function u(a,b){for(var c=b.split(","),d=[],i=0,f=a.aoColumns.length;i<f;i++)for(var g=0;g<f;g++)if(a.aoColumns[i].sName==c[g]){d.push(g);break}return d}function M(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";return b.length==d?"":b.slice(0,-1)}function ta(a,b,c,d){var i,f, 20766g,e,w;if(b)for(i=b.length-1;0<=i;i--){var j=b[i].aTargets;h.isArray(j)||D(a,1,"aTargets must be an array of targets, not a "+typeof j);f=0;for(g=j.length;f<g;f++)if("number"===typeof j[f]&&0<=j[f]){for(;a.aoColumns.length<=j[f];)o(a);d(j[f],b[i])}else if("number"===typeof j[f]&&0>j[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;e<w;e++)("_all"==j[f]||h(a.aoColumns[e].nTh).hasClass(j[f]))&&d(e,b[i])}}if(c){i=0;for(a=c.length;i<a;i++)d(i,c[i])}}function H(a, 20767b){var c;c=h.isArray(b)?b.slice():h.extend(!0,{},b);var d=a.aoData.length,i=h.extend(!0,{},j.models.oRow);i._aData=c;a.aoData.push(i);for(var f,i=0,g=a.aoColumns.length;i<g;i++)c=a.aoColumns[i],"function"===typeof c.fnRender&&c.bUseRendered&&null!==c.mData?F(a,d,i,S(a,d,i)):F(a,d,i,v(a,d,i)),c._bAutoType&&"string"!=c.sType&&(f=v(a,d,i,"type"),null!==f&&""!==f&&(f=B(f),null===c.sType?c.sType=f:c.sType!=f&&"html"!=c.sType&&(c.sType="string")));a.aiDisplayMaster.push(d);a.oFeatures.bDeferRender||ea(a, 20768d);return d}function ua(a){var b,c,d,i,f,g,e;if(a.bDeferLoading||null===a.sAjaxSource)for(b=a.nTBody.firstChild;b;){if("TR"==b.nodeName.toUpperCase()){c=a.aoData.length;b._DT_RowIndex=c;a.aoData.push(h.extend(!0,{},j.models.oRow,{nTr:b}));a.aiDisplayMaster.push(c);f=b.firstChild;for(d=0;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)F(a,c,d,h.trim(f.innerHTML)),d++;f=f.nextSibling}}b=b.nextSibling}i=T(a);d=[];b=0;for(c=i.length;b<c;b++)for(f=i[b].firstChild;f;)g=f.nodeName.toUpperCase(),("TD"== 20769g||"TH"==g)&&d.push(f),f=f.nextSibling;c=0;for(i=a.aoColumns.length;c<i;c++){e=a.aoColumns[c];null===e.sTitle&&(e.sTitle=e.nTh.innerHTML);var w=e._bAutoType,o="function"===typeof e.fnRender,k=null!==e.sClass,n=e.bVisible,m,p;if(w||o||k||!n){g=0;for(b=a.aoData.length;g<b;g++)f=a.aoData[g],m=d[g*i+c],w&&"string"!=e.sType&&(p=v(a,g,c,"type"),""!==p&&(p=B(p),null===e.sType?e.sType=p:e.sType!=p&&"html"!=e.sType&&(e.sType="string"))),e.mRender?m.innerHTML=v(a,g,c,"display"):e.mData!==c&&(m.innerHTML=v(a, 20770g,c,"display")),o&&(p=S(a,g,c),m.innerHTML=p,e.bUseRendered&&F(a,g,c,p)),k&&(m.className+=" "+e.sClass),n?f._anHidden[c]=null:(f._anHidden[c]=m,m.parentNode.removeChild(m)),e.fnCreatedCell&&e.fnCreatedCell.call(a.oInstance,m,v(a,g,c,"display"),f._aData,g,c)}}if(0!==a.aoRowCreatedCallback.length){b=0;for(c=a.aoData.length;b<c;b++)f=a.aoData[b],A(a,"aoRowCreatedCallback",null,[f.nTr,f._aData,b])}}function I(a,b){return b._DT_RowIndex!==n?b._DT_RowIndex:null}function fa(a,b,c){for(var b=J(a,b),d=0,a= 20771a.aoColumns.length;d<a;d++)if(b[d]===c)return d;return-1}function Y(a,b,c,d){for(var i=[],f=0,g=d.length;f<g;f++)i.push(v(a,b,d[f],c));return i}function v(a,b,c,d){var i=a.aoColumns[c];if((c=i.fnGetData(a.aoData[b]._aData,d))===n)return a.iDrawError!=a.iDraw&&null===i.sDefaultContent&&(D(a,0,"Requested unknown parameter "+("function"==typeof i.mData?"{mData function}":"'"+i.mData+"'")+" from the data source for row "+b),a.iDrawError=a.iDraw),i.sDefaultContent;if(null===c&&null!==i.sDefaultContent)c= 20772i.sDefaultContent;else if("function"===typeof c)return c();return"display"==d&&null===c?"":c}function F(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}
20772function Q(a){if(null===a)return function(){return null};if("function"===typeof a)return function(b,d,i){return a(b,d,i)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("["))){var b=function(a,d,i){var f=i.split("."),g;if(""!==i){var e=0;for(g=f.length;e<g;e++){if(i=f[e].match(U)){f[e]=f[e].replace(U,"");""!==f[e]&&(a=a[f[e]]); 20773g=[];f.splice(0,e+1);for(var f=f.join("."),e=0,h=a.length;e<h;e++)g.push(b(a[e],d,f));a=i[0].substring(1,i[0].length-1);a=""===a?g:g.join(a);break}if(null===a||a[f[e]]===n)return n;a=a[f[e]]}}return a};return function(c,d){return b(c,d,a)}}return function(b){return b[a]}}function L(a){if(null===a)return function(){};if("function"===typeof a)return function(b,d){a(b,"set",d)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("["))){var b=function(a,d,i){var i=i.split("."),f,g,e=0;for(g= 20774i.length-1;e<g;e++){if(f=i[e].match(U)){i[e]=i[e].replace(U,"");a[i[e]]=[];f=i.slice();f.splice(0,e+1);g=f.join(".");for(var h=0,j=d.length;h<j;h++)f={},b(f,d[h],g),a[i[e]].push(f);return}if(null===a[i[e]]||a[i[e]]===n)a[i[e]]={};a=a[i[e]]}a[i[i.length-1].replace(U,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Z(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function ga(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0, 20775a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);y(a)}function ha(a,b){for(var c=-1,d=0,i=a.length;d<i;d++)a[d]==b?c=d:a[d]>b&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& 20776(c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i<f;i++){var g=a.aoColumns[i];d=l.createElement(g.sCellType);d.innerHTML="function"===typeof g.fnRender&&(!g.bUseRendered||null===g.mData)?S(a,b,i):v(a,b,i,"display");null!==g.sClass&&(d.className=g.sClass);g.bVisible?(c.nTr.appendChild(d),c._anHidden[i]=null):c._anHidden[i]=d;g.fnCreatedCell&&g.fnCreatedCell.call(a.oInstance,d,v(a,b,i,"display"),c._aData,b,i)}A(a,"aoRowCreatedCallback",null,[c.nTr,c._aData,b])}}function va(a){var b, 20777c,d;if(0!==h("th, td",a.nTHead).length){b=0;for(d=a.aoColumns.length;b<d;b++)if(c=a.aoColumns[b].nTh,c.setAttribute("role","columnheader"),a.aoColumns[b].bSortable&&(c.setAttribute("tabindex",a.iTabIndex),c.setAttribute("aria-controls",a.sTableId)),null!==a.aoColumns[b].sClass&&h(c).addClass(a.aoColumns[b].sClass),a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}else{var i=l.createElement("tr");b=0;for(d=a.aoColumns.length;b<d;b++)c=a.aoColumns[b].nTh,c.innerHTML=a.aoColumns[b].sTitle, 20778c.setAttribute("tabindex","0"),null!==a.aoColumns[b].sClass&&h(c).addClass(a.aoColumns[b].sClass),i.appendChild(c);h(a.nTHead).html("")[0].appendChild(i);V(a.aoHeader,a.nTHead)}h(a.nTHead).children("tr").attr("role","row");if(a.bJUI){b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;i=l.createElement("div");i.className=a.oClasses.sSortJUIWrapper;h(c).contents().appendTo(i);var f=l.createElement("span");f.className=a.oClasses.sSortIcon;i.appendChild(f);c.appendChild(i)}}if(a.oFeatures.bSort)for(b= 207790;b<a.aoColumns.length;b++)!1!==a.aoColumns[b].bSortable?ia(a,a.aoColumns[b].nTh,b):h(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);""!==a.oClasses.sFooterTH&&h(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);if(null!==a.nTFoot){c=N(a,null,a.aoFooter);b=0;for(d=a.aoColumns.length;b<d;b++)c[b]&&(a.aoColumns[b].nTf=c[b],a.aoColumns[b].sClass&&h(c[b]).addClass(a.aoColumns[b].sClass))}}function W(a,b,c){var d,i,f,g=[],e=[],h=a.aoColumns.length,j;c===n&&(c=!1);d=0;for(i= 20780b.length;d<i;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=h-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);e.push([])}d=0;for(i=g.length;d<i;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(j=h=1,e[d][f]===n){a.appendChild(g[d][f].cell);for(e[d][f]=1;g[d+h]!==n&&g[d][f].cell==g[d+h][f].cell;)e[d+h][f]=1,h++;for(;g[d][f+j]!==n&&g[d][f].cell==g[d][f+j].cell;){for(c=0;c<h;c++)e[d+c][f+j]=1;j++}g[d][f].cell.rowSpan=h;g[d][f].cell.colSpan=j}}}function x(a){var b= 20781A(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))E(a,!1);else{var c,d,b=[],i=0,f=a.asStripeClasses.length;c=a.aoOpenRows.length;a.bDrawing=!0;a.iInitDisplayStart!==n&&-1!=a.iInitDisplayStart&&(a._iDisplayStart=a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));
20781if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= 20782a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g<d;g++){var e=a.aoData[a.aiDisplay[g]];null===e.nTr&&ea(a,a.aiDisplay[g]);var j=e.nTr;if(0!==f){var o=a.asStripeClasses[i%f];e._sRowStripe!=o&&(h(j).removeClass(e._sRowStripe).addClass(o),e._sRowStripe=o)}A(a,"aoRowCallback",null,[j,a.aoData[a.aiDisplay[g]]._aData,i,g]);b.push(j);i++;if(0!==c)for(e=0;e<c;e++)if(j==a.aoOpenRows[e].nParent){b.push(a.aoOpenRows[e].nTr);break}}}else b[0]=l.createElement("tr"),a.asStripeClasses[0]&& 20783(b[0].className=a.asStripeClasses[0]),c=a.oLanguage,f=c.sZeroRecords,1==a.iDraw&&null!==a.sAjaxSource&&!a.oFeatures.bServerSide?f=c.sLoadingRecords:c.sEmptyTable&&0===a.fnRecordsTotal()&&(f=c.sEmptyTable),c=l.createElement("td"),c.setAttribute("valign","top"),c.colSpan=t(a),c.className=a.oClasses.sRowEmpty,c.innerHTML=ja(a,f),b[i].appendChild(c);A(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Z(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);A(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0], 20784Z(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);i=l.createDocumentFragment();c=l.createDocumentFragment();if(a.nTBody){f=a.nTBody.parentNode;c.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered)for(;c=a.nTBody.firstChild;)a.nTBody.removeChild(c);c=0;for(d=b.length;c<d;c++)i.appendChild(b[c]);a.nTBody.appendChild(i);null!==f&&f.appendChild(a.nTBody)}A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1;a.oFeatures.bServerSide&&(E(a,!1), 20785a._bInitComplete||$(a))}}function aa(a){a.oFeatures.bSort?O(a,a.oPreviousSearch):a.oFeatures.bFilter?K(a,a.oPreviousSearch):(y(a),x(a))}function xa(a){var b=h("<div></div>")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('<div id="'+a.sTableId+'_wrapper" class="'+a.oClasses.sWrapper+'" role="grid"></div>')[0];
20785a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m<d.length;m++){f=0;g=d[m];if("<"==g){e=h("<div></div>")[0];w=d[m+ 207861];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= 207871;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k<w;k++)if(g==e[k].cFeature){(i=e[k].fnInit(a))&&(f=1);break}}1==f&&null!==i&&("object"!==typeof a.aanFeatures[g]&&(a.aanFeatures[g]=[]),a.aanFeatures[g].push(i),c.appendChild(i))}b.parentNode.replaceChild(a.nTableWrapper,b)}function V(a,b){var c=h(b).children("tr"),d,i,f,g,e,j,o,k,m,p;a.splice(0,a.length); 20788f=0;for(j=c.length;f<j;f++)a.push([]);f=0;for(j=c.length;f<j;f++){d=c[f];for(i=d.firstChild;i;){if("TD"==i.nodeName.toUpperCase()||"TH"==i.nodeName.toUpperCase()){k=1*i.getAttribute("colspan");m=1*i.getAttribute("rowspan");k=!k||0===k||1===k?1:k;m=!m||0===m||1===m?1:m;g=0;for(e=a[f];e[g];)g++;o=g;p=1===k?!0:!1;for(e=0;e<k;e++)for(g=0;g<m;g++)a[f+g][o+e]={cell:i,unique:p},a[f+g].nTr=d}i=i.nextSibling}}}function N(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],V(c,b)));for(var b=0,i=c.length;b<i;b++)for(var f= 207890,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function wa(a){if(a.bAjaxDataGet){a.iDraw++;E(a,!0);var b=Ea(a);ka(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(b){Fa(a,b)},a);return!1}return!0}function Ea(a){var b=a.aoColumns.length,c=[],d,i,f,g;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:M(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength", 20790value:!1!==a.oFeatures.bPaginate?a._iDisplayLength:-1});for(f=0;f<b;f++)d=a.aoColumns[f].mData,c.push({name:"mDataProp_"+f,value:"function"===typeof d?"function":d});if(!1!==a.oFeatures.bFilter){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(f=0;f<b;f++)c.push({name:"sSearch_"+f,value:a.aoPreSearchCols[f].sSearch}),c.push({name:"bRegex_"+f,value:a.aoPreSearchCols[f].bRegex}),c.push({name:"bSearchable_"+f,value:a.aoColumns[f].bSearchable})}if(!1!== 20791a.oFeatures.bSort){var e=0;d=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(f=0;f<d.length;f++){i=a.aoColumns[d[f][0]].aDataSort;for(g=0;g<i.length;g++)c.push({name:"iSortCol_"+e,value:i[g]}),c.push({name:"sSortDir_"+e,value:d[f][1]}),e++}c.push({name:"iSortingCols",value:e});for(f=0;f<b;f++)c.push({name:"bSortable_"+f,value:a.aoColumns[f].bSortable})}return c}function ka(a,b){A(a,"aoServerParams","serverParams",[b])}function Fa(a,b){if(b.sEcho!==n){if(1*b.sEcho< 20792a.iDraw)return;a.iDraw=1*b.sEcho}(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted||a.bFiltered))&&ga(a);a._iRecordsTotal=parseInt(b.iTotalRecords,10);a._iRecordsDisplay=parseInt(b.iTotalDisplayRecords,10);var c=M(a),c=b.sColumns!==n&&""!==c&&b.sColumns!=c,d;c&&(d=u(a,b.sColumns));for(var i=Q(a.sAjaxDataProp)(b),f=0,g=i.length;f<g;f++)if(c){for(var e=[],h=0,j=a.aoColumns.length;h<j;h++)e.push(i[f][d[h]]);H(a,e)}else H(a,i[f]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;x(a);a.bAjaxDataGet= 20793!0;E(a,!1)}function za(a){var b=a.oPreviousSearch,c=a.oLanguage.sSearch,c=-1!==c.indexOf("_INPUT_")?c.replace("_INPUT_",'<input type="text" />'):""===c?'<input type="text" />':c+' <input type="text" />',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="<label>"+c+"</label>";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, 20794g=0,e=c.length;g<e;g++)c[g]!=h(this).parents("div.dataTables_filter")[0]&&h(c[g]._DT_Input).val(d);d!=b.sSearch&&K(a,{sSearch:d,bRegex:b.bRegex,bSmart:b.bSmart,bCaseInsensitive:b.bCaseInsensitive})});c.attr("aria-controls",a.sTableId).bind("keypress.DT",function(a){if
20794(a.keyCode==13)return false});return d}function K(a,b,c){var d=a.oPreviousSearch,i=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};if(a.oFeatures.bServerSide)f(b); 20795else{Ga(a,b.sSearch,c,b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<a.aoPreSearchCols.length;b++)Ha(a,i[b].sSearch,b,i[b].bRegex,i[b].bSmart,i[b].bCaseInsensitive);Ia(a)}a.bFiltered=!0;h(a.oInstance).trigger("filter",a);a._iDisplayStart=0;y(a);x(a);la(a,0)}function Ia(a){for(var b=j.ext.afnFiltering,c=r(a,"bSearchable"),d=0,i=b.length;d<i;d++)for(var f=0,g=0,e=a.aiDisplay.length;g<e;g++){var h=a.aiDisplay[g-f];b[d](a,Y(a,h,"filter",c),h)||(a.aiDisplay.splice(g-f,1),f++)}}function Ha(a,b,c, 20796d,i,f){if(""!==b)for(var g=0,b=ma(b,d,i,f),d=a.aiDisplay.length-1;0<=d;d--)i=Ja(v(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType),b.test(i)||(a.aiDisplay.splice(d,1),g++)}function Ga(a,b,c,d,i,f){d=ma(b,d,i,f);i=a.oPreviousSearch;c||(c=0);0!==j.ext.afnFiltering.length&&(c=1);if(0>=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, 20797a.aiDisplay.length);la(a,1);for(b=0;b<a.aiDisplayMaster.length;b++)d.test(a.asDataSearch[b])&&a.aiDisplay.push(a.aiDisplayMaster[b])}else for(b=c=0;b<a.asDataSearch.length;b++)d.test(a.asDataSearch[b])||(a.aiDisplay.splice(b-c,1),c++)}function la(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch=[];for(var c=r(a,"bSearchable"),d=1===b?a.aiDisplayMaster:a.aiDisplay,i=0,f=d.length;i<f;i++)a.asDataSearch[i]=na(a,Y(a,d[i],"filter",c))}}function na(a,b){var c=b.join(" ");-1!==c.indexOf("&")&&(c=h("<div>").html(c).text()); 20798return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), 20799"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); 20800null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)h(a[b]).html(g)}}function ja(a,b){var c=a.fnFormatNumber(a._iDisplayStart+1),d=a.fnDisplayEnd(),d=a.fnFormatNumber(d),i=a.fnRecordsDisplay(),i=a.fnFormatNumber(i),f=a.fnRecordsTotal(),f=a.fnFormatNumber(f);a.oScroll.bInfinite&&(c=a.fnFormatNumber(1));return b.replace(/_START_/g,c).replace(/_END_/g,d).replace(/_TOTAL_/g,i).replace(/_MAX_/g,f)}function ba(a){var b,c,d=a.iInitDisplayStart; 20801if(!1===a.bInitialised)setTimeout(function(){ba(a)},200);else{xa(a);va(a);W(a,a.aoHeader);a.nTFoot&&W(a,a.aoFooter);E(a,!0);a.oFeatures.bAutoWidth&&da(a);b=0;for(c=a.aoColumns.length;b<c;b++)null!==a.aoColumns[b].sWidth&&(a.aoColumns[b].nTh.style.width=q(a.aoColumns[b].sWidth));a.oFeatures.bSort?O(a):a.oFeatures.bFilter?K(a,a.oPreviousSearch):(a.aiDisplay=a.aiDisplayMaster.slice(),y(a),x(a));null!==a.sAjaxSource&&!a.oFeatures.bServerSide?(c=[],ka(a,c),a.fnServerData.call(a.oInstance,a.sAjaxSource, 20802c,function(c){var f=a.sAjaxDataProp!==""?Q(a.sAjaxDataProp)(c):c;for(b=0;b<f.length;b++)H(a,f[b]);a.iInitDisplayStart=d;if(a.oFeatures.bSort)O(a);else{a.aiDisplay=a.aiDisplayMaster.slice();y(a);x(a)}E(a,false);$(a,c)},a)):a.oFeatures.bServerSide||(E(a,!1),$(a))}}function $(a,b){a._bInitComplete=!0;
20802A(a,"aoInitComplete","init",[a,b])}function pa(a){var b=j.defaults.oLanguage;!a.sEmptyTable&&(a.sZeroRecords&&"No data available in table"===b.sEmptyTable)&&p(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&& 20803(a.sZeroRecords&&"Loading..."===b.sLoadingRecords)&&p(a,a,"sZeroRecords","sLoadingRecords")}function ya(a){if(a.oScroll.bInfinite)return null;var b='<select size="1" '+('name="'+a.sTableId+'_length"')+">",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c<d;c++)b+='<option value="'+i[0][c]+'">'+i[1][c]+"</option>"}else{c=0;for(d=i.length;c<d;c++)b+='<option value="'+i[c]+'">'+i[c]+"</option>"}b+="</select>";i=l.createElement("div");a.aanFeatures.l|| 20804(i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;c<d;c++)i[c]!=this.parentNode&&h("select",i[c]).val(b);a._iDisplayLength=parseInt(b,10);y(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()){a._iDisplayStart=a.fnDisplayEnd()-a._iDisplayLength;if(a._iDisplayStart< 208050)a._iDisplayStart=0}if(a._iDisplayLength==-1)a._iDisplayStart=0;x(a)});h("select",i).attr("aria-controls",a.sTableId);return i}function y(a){a._iDisplayEnd=!1===a.oFeatures.bPaginate?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, 20806b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= 208070);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay()&&(a._iDisplayStart+=a._iDisplayLength):a._iDisplayStart=0;else if("last"==b)if(0<=a._iDisplayLength){var d=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(d-1)*a._iDisplayLength}else a._iDisplayStart=0;else D(a,0,"Unknown paging action: "+b);h(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function Aa(a){var b=l.createElement("div");a.aanFeatures.r||(b.id=a.sTableId+ 20808"_processing");b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b,a.nTable);return b}function E(a,b){if(a.oFeatures.bProcessing)for(var c=a.aanFeatures.r,d=0,i=c.length;d<i;d++)c[d].style.visibility=b?"visible":"hidden";h(a.oInstance).trigger("processing",[a,b])}function Ba(a){if(""===a.oScroll.sX&&""===a.oScroll.sY)return a.nTable;var b=l.createElement("div"),c=l.createElement("div"),d=l.createElement("div"),i=l.createElement("div"),f=l.createElement("div"), 20809g=l.createElement("div"),e=a.nTable.cloneNode(!1),j=a.nTable.cloneNode(!1),o=a.nTable.getElementsByTagName("thead")[0],k=0===a.nTable.getElementsByTagName("tfoot").length?null:a.nTable.getElementsByTagName("tfoot")[0],m=a.oClasses;c.appendChild(d);f.appendChild(g);i.appendChild(a.nTable);b.appendChild(c);b.appendChild(i);d.appendChild(e);e.appendChild(o);null!==k&&(b.appendChild(f),g.appendChild(j),j.appendChild(k));b.className=m.sScrollWrapper;c.className=m.sScrollHead;d.className=m.sScrollHeadInner; 20810i.className=m.sScrollBody;f.className=m.sScrollFoot;g.className=m.sScrollFootInner;a.oScroll.bAutoCss&&(c.style.overflow="hidden",c.style.position="relative",f.style.overflow="hidden",i.style.overflow="auto");c.style.border="0";c.style.width="100%";f.style.border="0";d.style.width=""!==a.oScroll.sXInner?a.oScroll.sXInner:"100%";e.removeAttribute("id");e.style.marginLeft="0";a.nTable.style.marginLeft="0";null!==k&&(j.removeAttribute("id"),j.style.marginLeft="0");d=h(a.nTable).children("caption");0<
20811d.length&&(d=d[0],"top"===d._captionSide?e.appendChild(d):"bottom"===d._captionSide&&k&&j.appendChild(d));""!==a.oScroll.sX&&(c.style.width=q(a.oScroll.sX),i.style.width=q(a.oScroll.sX),null!==k&&(f.style.width=q(a.oScroll.sX)),h(i).scroll(function(){c.scrollLeft=this.scrollLeft;if(k!==null)f.scrollLeft=this.scrollLeft}));""!==a.oScroll.sY&&(i.style.height=q(a.oScroll.sY));a.aoDrawCallback.push({fn:La,sName:"scrolling"});a.oScroll.bInfinite&&h(i).scroll(function(){if(!a.bDrawing&&h(this).scrollTop()!== 208120&&h(this).scrollTop()+h(this).height()>h(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()<a.fnRecordsDisplay()){qa(a,"next");y(a);x(a)}});a.nScrollHead=c;a.nScrollFoot=f;return b}function La(a){var b=a.nScrollHead.getElementsByTagName("div")[0],c=b.getElementsByTagName("table")[0],d=a.nTable.parentNode,i,f,g,e,j,o,k,m,p=[],n=[],l=null!==a.nTFoot?a.nScrollFoot.getElementsByTagName("div")[0]:null,R=null!==a.nTFoot?l.getElementsByTagName("table")[0]:null,r=a.oBrowser.bScrollOversize,s=function(a){k= 20813a.style;k.paddingTop="0";k.paddingBottom="0";k.borderTopWidth="0";k.borderBottomWidth="0";k.height=0};h(a.nTable).children("thead, tfoot").remove();i=h(a.nTHead).clone()[0];a.nTable.insertBefore(i,a.nTable.childNodes[0]);g=a.nTHead.getElementsByTagName("tr");e=i.getElementsByTagName("tr");null!==a.nTFoot&&(j=h(a.nTFoot).clone()[0],a.nTable.insertBefore(j,a.nTable.childNodes[1]),o=a.nTFoot.getElementsByTagName("tr"),j=j.getElementsByTagName("tr"));""===a.oScroll.sX&&(d.style.width="100%",b.parentNode.style.width= 20814"100%");var t=N(a,i);i=0;for(f=t.length;i<f;i++)m=G(a,i),t[i].style.width=a.aoColumns[m].sWidth;null!==a.nTFoot&&C(function(a){a.style.width=""},j);a.oScroll.bCollapse&&""!==a.oScroll.sY&&(d.style.height=d.offsetHeight+a.nTHead.offsetHeight+"px");i=h(a.nTable).outerWidth();if(""===a.oScroll.sX){if(a.nTable.style.width="100%",r&&(h("tbody",d).height()>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= 20815q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()<h(a.nTable).height()?(a.nTable.style.width=q(i-a.oScroll.iBarWidth),h(a.nTable).outerWidth()>i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= 20816"";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()<i){g=d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): 20817""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> 20818d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeight<d.offsetHeight&&(d.style.height=q(a.nTable.offsetHeight+r)));r=h(a.nTable).outerWidth();c.style.width=q(r);b.style.width=q(r);c=h(a.nTable).height()>d.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= 208190,i=0,f=b.length,g,e;i<f;){g=b[i].firstChild;for(e=c?c[i].firstChild:null;g;)1===g.nodeType&&(c?a(g,e,d):a(g,d),d++),g=g.nextSibling,e=c?e.nextSibling:null;i++}}function Ma(a,b){if(!a||null===a||""===a)return 0;b||(b=l.body);var c,d=l.createElement("div");d.style.width=q(a);b.appendChild(d);c=d.offsetWidth;b.removeChild(d);return c}function da(a){var b=0,c,d=0,i=a.aoColumns.length,f,e,j=h("th",a.nTHead),o=a.nTable.getAttribute("width");e=a.nTable.parentNode;for(f=0;f<i;f++)a.aoColumns[f].bVisible&& 20820(d++,null!==a.aoColumns[f].sWidth&&(c=Ma(a.aoColumns[f].sWidthOrig,e),null!==c&&(a.aoColumns[f].sWidth=q(c)),b++));if(i==j.length&&0===b&&d==i&&""===a.oScroll.sX&&""===a.oScroll.sY)for(f=0;f<a.aoColumns.length;f++)c=h(j[f]).width(),null!==c&&(a.aoColumns[f].sWidth=q(c));else{b=a.nTable.cloneNode(!1);f=a.nTHead.cloneNode(!0);d=l.createElement("tbody");c=l.createElement("tr");b.removeAttribute("id");b.appendChild(f);null!==a.nTFoot&&(b.appendChild(a.nTFoot.cloneNode(!0)),C(function(a){a.style.width= 20821""},b.getElementsByTagName("tr")));b.appendChild(d);d.appendChild(c);d=h("thead th",b);0===d.length&&(d=h("tbody tr:eq(0)>td",b));j=N(a,f);for(f=d=0;f<i;f++){var k=a.aoColumns[f];k.bVisible&&null!==k.sWidthOrig&&""!==k.sWidthOrig?j[f-d].style.width=q(k.sWidthOrig):k.bVisible?j[f-d].style.width="":d++}for(f=0;f<i;f++)a.aoColumns[f].bVisible&&(d=Na(a,f),null!==d&&(d=d.cloneNode(!0),""!==a.aoColumns[f].sContentPadding&&(d.innerHTML+=a.aoColumns[f].sContentPadding),c.appendChild(d)));e.appendChild(b); 20822""!==a.oScroll.sX&&""!==a.oScroll.sXInner?b.style.width=q(a.oScroll.sXInner):""!==a.oScroll.sX?(b.style.width="",h(b).width()<e.offsetWidth&&(b.style.width=q(e.offsetWidth))
20822):""!==a.oScroll.sY?b.style.width=q(e.offsetWidth):o&&(b.style.width=q(o));b.style.visibility="hidden";Oa(a,b);i=h("tbody tr:eq(0)",b).children();0===i.length&&(i=N(a,h("thead",b)[0]));if(""!==a.oScroll.sX){for(f=d=e=0;f<a.aoColumns.length;f++)a.aoColumns[f].bVisible&&(e=null===a.aoColumns[f].sWidthOrig?e+h(i[d]).outerWidth(): 20823e+(parseInt(a.aoColumns[f].sWidth.replace("px",""),10)+(h(i[d]).outerWidth()-h(i[d]).width())),d++);b.style.width=q(e);a.nTable.style.width=q(e)}for(f=d=0;f<a.aoColumns.length;f++)a.aoColumns[f].bVisible&&(e=h(i[d]).width(),null!==e&&0<e&&(a.aoColumns[f].sWidth=q(e)),d++);i=h(b).css("width");a.nTable.style.width=-1!==i.indexOf("%")?i:q(h(b).outerWidth());b.parentNode.removeChild(b)}o&&(a.nTable.style.width=q(o))}function Oa(a,b){""===a.oScroll.sX&&""!==a.oScroll.sY?(h(b).width(),b.style.width=q(h(b).outerWidth()- 20824a.oScroll.iBarWidth)):""!==a.oScroll.sX&&(b.style.width=q(h(b).outerWidth()))}function Na(a,b){var c=Pa(a,b);if(0>c)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i<a.aoData.length;i++){var e=v(a,i,b,"display")+"",e=e.replace(/<.*?>/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); 20825return 48>b||57<b?a:a+"px"}function Qa(){var a=l.createElement("p"),b=a.style;b.width="100%";b.height="200px";b.padding="0px";var c=l.createElement("div"),b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.width="200px";b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);l.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";a=a.offsetWidth;b==a&&(a=c.clientWidth);l.body.removeChild(c);return b-a}function O(a,b){var c,d,i,e,g,k,o=[],m=[],p= 20826j.ext.oSort,l=a.aoData,q=a.aoColumns,G=a.oLanguage.oAria;if(!a.oFeatures.bServerSide&&(0!==a.aaSorting.length||null!==a.aaSortingFixed)){o=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<o.length;c++)if(d=o[c][0],i=R(a,d),e=a.aoColumns[d].sSortDataType,j.ext.afnSortData[e])if(g=j.ext.afnSortData[e].call(a.oInstance,a,d,i),g.length===l.length){i=0;for(e=l.length;i<e;i++)F(a,i,d,g[i])}else D(a,0,"Returned data sort array (col "+d+") is the wrong length");c= 208270;for(d=a.aiDisplayMaster.length;c<d;c++)m[a.aiDisplayMaster[c]]=c;var r=o.length,s;c=0;for(d=l.length;c<d;c++)for(i=0;i<r;i++){s=q[o[i][0]].aDataSort;g=0;for(k=s.length;g<k;g++)e=q[s[g]].sType,e=p[(e?e:"string")+"-pre"],l[c]._aSortData[s[g]]=e?e(v(a,c,s[g],"sort")):v(a,c,s[g],"sort")}a.aiDisplayMaster.sort(function(a,b){var c,d,e,i,f;for(c=0;c<r;c++){f=q[o[c][0]].aDataSort;d=0;for(e=f.length;d<e;d++)if(i=q[f[d]].sType,i=p[(i?i:"string")+"-"+o[c][1]](l[a]._aSortData[f[d]],l[b]._aSortData[f[d]]),0!== 20828i)return i}return p["numeric-asc"](m[a],m[b])})}(b===n||b)&&!a.oFeatures.bDeferRender&&P(a);c=0;for(d=a.aoColumns.length;c<d;c++)e=q[c].sTitle.replace(/<.*?>/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0<o.length&&o[0][0]==c?(i.setAttribute("aria-sort","asc"==o[0][1]?"ascending":"descending"),i.setAttribute("aria-label",e+("asc"==(q[c].asSorting[o[0][2]+1]?q[c].asSorting[o[0][2]+1]:q[c].asSorting[0])?G.sSortAscending:G.sSortDescending))):i.setAttribute("aria-label", 20829e+("asc"==q[c].asSorting[0]?G.sSortAscending:G.sSortDescending)):i.setAttribute("aria-label",e);a.bSorted=!0;h(a.oInstance).trigger("sort",a);a.oFeatures.bFilter?K(a,a.oPreviousSearch,1):(a.aiDisplay=a.aiDisplayMaster.slice(),a._iDisplayStart=0,y(a),x(a))}function ia(a,b,c,d){Ra(b,{},function(b){if(!1!==a.aoColumns[c].bSortable){var e=function(){var d,e;if(b.shiftKey){for(var f=!1,h=0;h<a.aaSorting.length;h++)if(a.aaSorting[h][0]==c){f=!0;d=a.aaSorting[h][0];e=a.aaSorting[h][2]+1;a.aoColumns[d].asSorting[e]? 20830(a.aaSorting[h][1]=a.aoColumns[d].asSorting[e],a.aaSorting[h][2]=e):a.aaSorting.splice(h,1);break}!1===f&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}else 1==a.aaSorting.length&&a.aaSorting[0][0]==c?(d=a.aaSorting[0][0],e=a.aaSorting[0][2]+1,a.aoColumns[d].asSorting[e]||(e=0),a.aaSorting[0][1]=a.aoColumns[d].asSorting[e],a.aaSorting[0][2]=e):(a.aaSorting.splice(0,a.aaSorting.length),a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0]));O(a)};a.oFeatures.bProcessing?(E(a,!0),setTimeout(function(){e(); 20831a.oFeatures.bServerSide||E(a,!1)},0)):e();"function"==typeof d&&d(a)}})}function P(a){var b,c,d,e,f,g=a.aoColumns.length,j=a.oClasses;for(b=0;b<g;b++)a.aoColumns[b].bSortable&&h(a.aoColumns[b].nTh).removeClass(j.sSortAsc+" "+j.sSortDesc+" "+a.aoColumns[b].sSortingClass);c=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){f=a.aoColumns[b].sSortingClass;e=-1;for(d=0;d<c.length;d++)if(c[d][0]==b){f="asc"==c[d][1]? 20832j.sSortAsc:j.sSortDesc;e=d;break}h(a.aoColumns[b].nTh).addClass(f);a.bJUI&&(f=h("span."+j.sSortIcon,a.aoColumns[b].nTh),f.removeClass(j.sSortJUIAsc+" "+j.sSortJUIDesc+" "+j.sSortJUI+" "+j.sSortJUIAscAllowed+" "+j.sSortJUIDescAllowed),f.addClass(-1==e?a.aoColumns[b].sSortingClassJUI:"asc"==c[e][1]?j.sSortJUIAsc:j.sSortJUIDesc))}else h(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);f=j.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){a=J(a);e=[];for(b=0;b<g;b++)e.push("");b=0; 20833for(d=1;b<c.length;b++)j=parseInt(c[b][0],10),e[j]=f+d,3>d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b<c;b++)j=b%g,d=a[b].className,o=e[j],j=d.replace(f,o),j!=d?a[b].className=h.trim(j):0<o.length&&-1==d.indexOf(o)&&(a[b].className=d+" "+o)}}function ra(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b,c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart,iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:h.extend(!0,[],a.aaSorting), 20834oSearch:h.extend(!0,{},a.oPreviousSearch),aoSearchCols:h.extend(!0,[],a.aoPreSearchCols),abVisCols:[]};b=0;for(c=a.aoColumns.length;b<c;b++)d.abVisCols.push(a.aoColumns[b].bVisible);A(a,"aoStateSaveParams","stateSaveParams",[a,d]);a.fnStateSave.call(a.oInstance,a,d)}}function Sa(a,b){if(a.oFeatures.bStateSave){var c=a.fnStateLoad.call(a.oInstance,a);if(c){var d=A(a,"aoStateLoadParams","stateLoadParams",[a,c]);if(-1===h.inArray(!1,d)){a.oLoadedState=h.extend(!0,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart= 20835c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();h.extend(a.oPreviousSearch,c.oSearch);h.extend(!0,a.aoPreSearchCols,c.aoSearchCols);b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++)b.saved_aoColumns[d]={},b.saved_aoColumns[d].bVisible=c.abVisCols[d];A(a,"aoStateLoaded","stateLoaded",[a,c])}}}}function s(a){for(var b=0;b<j.settings.length;b++)if(j.settings[b].nTable===a)return j.settings[b];return null}function T(a){for(var b= 20836[],a=a.aoData,c=0,d=a.length;c<d;c++)null!==a[c].nTr&&b.push(a[c].nTr);return b}function J(a,b){var c=[],d,e,f,g,h,j;e=0;var o=a.aoData.length;b!==n&&(e=b,o=b+1);for(f=e;f<o;f++)if(j=a.aoData[f],null!==j.nTr){e=[];for(d=j.nTr.firstChild;d;)g=d.nodeName.toLowerCase(),("td"==g||"th"==g)&&e.push(d),d=d.nextSibling;g=d=0;for(h=a.aoColumns.length;g<h;g++)a.aoColumns[g].bVisible?c.push(e[g-d]):(c.push(j._anHidden[g]),d++)}return c}function D(a,b,c){a=null===a?"DataTables warning: "+c:"DataTables warning (table id = '"+ 20837a.sTableId+"'): "+c;
20837if(0===b)if("alert"==j.ext.sErrMode)alert(a);else throw Error(a);else X.console&&console.log&&console.log(a)}function p(a,b,c,d){d===n&&(d=c);b[c]!==n&&(a[d]=b[c])}function Ta(a,b){var c,d;for(d in b)b.hasOwnProperty(d)&&(c=b[d],"object"===typeof e[d]&&null!==c&&!1===h.isArray(c)?h.extend(!0,a[d],c):a[d]=c);return a}function Ra(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&c(a)}).bind("selectstart.DT",function(){return!1})} 20838function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function A(a,b,c,d){for(var b=a[b],e=[],f=b.length-1;0<=f;f--)e.push(b[f].fn.apply(a.oInstance,d));null!==c&&h(a.oInstance).trigger(c,d);return e}function Ua(a){var b=h('<div style="position:absolute; top:0; left:0; height:1px; width:1px; overflow:hidden"><div style="position:absolute; top:1px; left:1px; width:100px; overflow:scroll;"><div id="DT_BrowserTest" style="width:100%; height:10px;"></div></div></div>')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= 20839100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? 20840"[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c<d;c++)(f=g[o[c]].nTr)&&e.push(f)}else if("current"==b.order&&"none"==b.filter){c=0;for(d=k.length;c<d;c++)(f=g[k[c]].nTr)&&e.push(f)}else if("current"==b.order&&"applied"==b.filter){c=0;for(d=o.length;c<d;c++)(f=g[o[c]].nTr)&&e.push(f)}else if("original"== 20841b.order&&"none"==b.filter){c=0;for(d=g.length;c<d;c++)(f=g[c].nTr)&&e.push(f)}else if("original"==b.order&&"applied"==b.filter){c=0;for(d=g.length;c<d;c++)f=g[c].nTr,-1!==h.inArray(c,o)&&f&&e.push(f)}else D(d,1,"Unknown selection options");e=h(e);c=e.filter(a);e=e.find(a);return h([].concat(h.makeArray(c),h.makeArray(e)))};this._=function(a,b){var c=[],d,e,f=this.$(a,b);d=0;for(e=f.length;d<e;d++)c.push(this.fnGetData(f[d]));return c};this.fnAddData=function(a,b){if(0===a.length)return[];var c=[], 20842d,e=s(this[j.ext.iApiIndex]);if("object"===typeof a[0]&&null!==a[0])for(var f=0;f<a.length;f++){d=H(e,a[f]);if(-1==d)return c;c.push(d)}else{d=H(e,a);if(-1==d)return c;c.push(d)}e.aiDisplay=e.aiDisplayMaster.slice();(b===n||b)&&aa(e);return c};this.fnAdjustColumnSizing=function(a){var b=s(this[j.ext.iApiIndex]);k(b);a===n||a?this.fnDraw(!1):(""!==b.oScroll.sX||""!==b.oScroll.sY)&&this.oApi._fnScrollDraw(b)};this.fnClearTable=function(a){var b=s(this[j.ext.iApiIndex]);ga(b);(a===n||a)&&x(b)};this.fnClose= 20843function(a){for(var b=s(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr),b.aoOpenRows.splice(c,1),0;return 1};this.fnDeleteRow=function(a,b,c){var d=s(this[j.ext.iApiIndex]),e,f,a="object"===typeof a?I(d,a):a,g=d.aoData.splice(a,1);e=0;for(f=d.aoData.length;e<f;e++)null!==d.aoData[e].nTr&&(d.aoData[e].nTr._DT_RowIndex=e);e=h.inArray(a,d.aiDisplay);d.asDataSearch.splice(e,1);ha(d.aiDisplayMaster, 20844a);ha(d.aiDisplay,a);"function"===typeof b&&b.call(this,d,g);d._iDisplayStart>=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;i<f;i++)!1===b.aoColumns[i].bVisible&&this.fnSetColumnVis(i,!0)}h(b.nTableWrapper).find("*").andSelf().unbind(".DT"); 20845h("tbody>tr>
20845td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, 20846b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i<f;i++)null!==b.aoData[i].nTr&&d.appendChild(b.aoData[i].nTr);!0===b.oFeatures.bAutoWidth&& 20847(b.nTable.style.width=q(b.sDestroyWidth));if(f=b.asDestroyStripes.length){a=h(d).children("tr");for(i=0;i<f;i++)a.filter(":nth-child("+f+"n + "+i+")").addClass(b.asDestroyStripes[i])}i=0;for(f=j.settings.length;i<f;i++)j.settings[i]==b&&j.settings.splice(i,1);e=b=null};this.fnDraw=function(a){var b=s(this[j.ext.iApiIndex]);!1===a?(y(b),x(b)):aa(b)};this.fnFilter=function(a,b,c,d,e,f){var g=s(this[j.ext.iApiIndex]);if(g.oFeatures.bFilter){if(c===n||null===c)c=!1;if(d===n||null===d)d=!0;if(e===n||null=== 20848e)e=!0;if(f===n||null===f)f=!0;if(b===n||null===b){if(K(g,{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:f},1),e&&g.aanFeatures.f){b=g.aanFeatures.f;c=0;for(d=b.length;c<d;c++)try{b[c]._DT_Input!=l.activeElement&&h(b[c]._DT_Input).val(a)}catch(o){h(b[c]._DT_Input).val(a)}}}else h.extend(g.aoPreSearchCols[b],{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:f}),K(g,g.oPreviousSearch,1)}};this.fnGetData=function(a,b){var c=s(this[j.ext.iApiIndex]);if(a!==n){var d=a;if("object"===typeof a){var e=a.nodeName.toLowerCase(); 20849"tr"===e?d=I(c,a):"td"===e&&(d=I(c,a.parentNode),b=fa(c,d,a))}return b!==n?v(c,d,b,""):c.aoData[d]!==n?c.aoData[d]._aData:null}return Z(c)};this.fnGetNodes=function(a){var b=s(this[j.ext.iApiIndex]);return a!==n?b.aoData[a]!==n?b.aoData[a].nTr:null:T(b)};this.fnGetPosition=function(a){var b=s(this[j.ext.iApiIndex]),c=a.nodeName.toUpperCase();return"TR"==c?I(b,a):"TD"==c||"TH"==c?(c=I(b,a.parentNode),a=fa(b,c,a),[c,R(b,a),a]):null};this.fnIsOpen=function(a){for(var b=s(this[j.ext.iApiIndex]),c=0;c< 20850b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return!0;return!1};this.fnOpen=function(a,b,c){var d=s(this[j.ext.iApiIndex]),e=T(d);if(-1!==h.inArray(a,e)){this.fnClose(a);var e=l.createElement("tr"),f=l.createElement("td");e.appendChild(f);f.className=c;f.colSpan=t(d);"string"===typeof b?f.innerHTML=b:h(f).html(b);b=h("tr",d.nTBody);-1!=h.inArray(a,b)&&h(e).insertAfter(a);d.aoOpenRows.push({nTr:e,nParent:a});return e}};this.fnPageChange=function(a,b){var c=s(this[j.ext.iApiIndex]);qa(c,a); 20851y(c);(b===n||b)&&x(c)};this.fnSetColumnVis=function(a,b,c){var d=s(this[j.ext.iApiIndex]),e,f,g=d.aoColumns,h=d.aoData,o,m;if(g[a].bVisible!=b){if(b){for(e=f=0;e<a;e++)g[e].bVisible&&f++;m=f>=t(d);if(!m)for(e=a;e<g.length;e++)if(g[e].bVisible){o=e;break}e=0;for(f=h.length;e<f;e++)null!==h[e].nTr&&(m?h[e].nTr.appendChild(h[e]._anHidden[a]):h[e].nTr.insertBefore(h[e]._anHidden[a],J(d,e)[o]))}else{e=0;for(f=h.length;e<f;e++)null!==h[e].nTr&&(o=J(d,e)[a],h[e]._anHidden[a]=o,o.parentNode.removeChild(o))}g[a].bVisible= 20852b;W(d,d.aoHeader);d.nTFoot&&W(d,d.aoFooter);e=0;for(f=d.aoOpenRows.length;e<f;e++)d.aoOpenRows[e].nTr.colSpan=t(d);if(c===n||c)k(d),x(d);ra(d)}};this.fnSettings=function(){return s(this[j.ext.iApiIndex])};this.fnSort=function(a){var b=s(this[j.ext.iApiIndex]);b.aaSorting=a;O(b)};this.fnSortListener=function(a,b,c){ia(s(this[j.ext.iApiIndex]),a,b,c)};this.fnUpdate=function(a,b,c,d,e){var f=s(this[j.ext.iApiIndex]),b="object"===typeof b?I(f,b):b;if(h.isArray(a)&&c===n){f.aoData[b]._aData=a.slice(); 20853for(c=0;c<f.aoColumns.length;c++)this.fnUpdate(v(f,b,c),b,c,!1,!1)}else if(h.isPlainObject(a)&&c===n){f.aoData[b]._aData=h.extend(!0,{},a);for(c=0;c<f.aoColumns.length;c++)this.fnUpdate(v(f,b,c),b,c,!1,!1)}else{F(f,b,c,a);var a=v(f,b,c,"display"),g=f.aoColumns[c];null!==g.fnRender&&(a=S(f,b,c),g.bUseRendered&&F(f,b,c,a));null!==f.aoData[b].nTr&&(J(f,b)[c].innerHTML=a)}c=h.inArray(b,f.aiDisplay);f.asDataSearch[c]=na(f,Y(f,b,"filter",r(f,"bSearchable")));(e===n||e)&&k(f);(d===n||d)&&aa(f);return 0}; 20854this.fnVersionCheck=j.ext.fnVersionCheck;this.oApi={_fnExternApiFunc:Va,_fnInitialise:ba,_fnInitComplete:$,_fnLanguageCompat:pa,_fnAddColumn:o,_fnColumnOptions:m,_fnAddData:H,_fnCreateTr:ea,_fnGatherData:ua,_fnBuildHead:va,_fnDrawHead:W,_fnDraw:x,_fnReDraw:aa,_fnAjaxUpdate:wa,_fnAjaxParameters:Ea,_fnAjaxUpdateDraw:Fa,_fnServerParams:ka,_fnAddOptionsHtml:
20854xa,_fnFeatureHtmlTable:Ba,_fnScrollDraw:La,_fnAdjustColumnSizing:k,_fnFeatureHtmlFilter:za,_fnFilterComplete:K,_fnFilterCustom:Ia,_fnFilterColumn:Ha, 20855_fnFilter:Ga,_fnBuildSearchArray:la,_fnBuildSearchRow:na,_fnFilterCreateSearch:ma,_fnDataToSearch:Ja,_fnSort:O,_fnSortAttachListener:ia,_fnSortingClasses:P,_fnFeatureHtmlPaginate:Da,_fnPageChange:qa,_fnFeatureHtmlInfo:Ca,_fnUpdateInfo:Ka,_fnFeatureHtmlLength:ya,_fnFeatureHtmlProcessing:Aa,_fnProcessingDisplay:E,_fnVisibleToColumnIndex:G,_fnColumnIndexToVisible:R,_fnNodeToDataIndex:I,_fnVisbleColumns:t,_fnCalculateEnd:y,_fnConvertToWidth:Ma,_fnCalculateColumnWidths:da,_fnScrollingWidthAdjust:Oa,_fnGetWidestNode:Na, 20856_fnGetMaxLenString:Pa,_fnStringToCss:q,_fnDetectType:B,_fnSettingsFromNode:s,_fnGetDataMaster:Z,_fnGetTrNodes:T,_fnGetTdNodes:J,_fnEscapeRegex:oa,_fnDeleteIndex:ha,_fnReOrderIndex:u,_fnColumnOrdering:M,_fnLog:D,_fnClearTable:ga,_fnSaveState:ra,_fnLoadState:Sa,_fnCreateCookie:function(a,b,c,d,e){var f=new Date;f.setTime(f.getTime()+1E3*c);var c=X.location.pathname.split("/"),a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase(),g;null!==e?(g="function"===typeof h.parseJSON?h.parseJSON(b):eval("("+b+")"), 20857b=e(a,g,f.toGMTString(),c.join("/")+"/")):b=a+"="+encodeURIComponent(b)+"; expires="+f.toGMTString()+"; path="+c.join("/")+"/";a=l.cookie.split(";");e=b.split(";")[0].length;f=[];if(4096<e+l.cookie.length+10){for(var j=0,o=a.length;j<o;j++)if(-1!=a[j].indexOf(d)){var k=a[j].split("=");try{(g=eval("("+decodeURIComponent(k[1])+")"))&&g.iCreate&&f.push({name:k[0],time:g.iCreate})}catch(m){}}for(f.sort(function(a,b){return b.time-a.time});4096<e+l.cookie.length+10;){if(0===f.length)return;d=f.pop();l.cookie= 20858d.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+c.join("/")+"/"}}l.cookie=b},_fnReadCookie:function(a){for(var b=X.location.pathname.split("/"),a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=",b=l.cookie.split(";"),c=0;c<b.length;c++){for(var d=b[c];" "==d.charAt(0);)d=d.substring(1,d.length);if(0===d.indexOf(a))return decodeURIComponent(d.substring(a.length,d.length))}return null},_fnDetectHeader:V,_fnGetUniqueThs:N,_fnScrollBarWidth:Qa,_fnApplyToChildren:C,_fnMap:p,_fnGetRowData:Y, 20859_fnGetCellData:v,_fnSetCellData:F,_fnGetObjectDataFn:Q,_fnSetObjectDataFn:L,_fnApplyColumnDefs:ta,_fnBindAction:Ra,_fnExtend:Ta,_fnCallbackReg:z,_fnCallbackFire:A,_fnJsonString:Wa,_fnRender:S,_fnNodeToColumnIndex:fa,_fnInfoMacros:ja,_fnBrowserDetect:Ua,_fnGetColumns:r};h.extend(j.ext.oApi,this.oApi);for(var sa in j.ext.oApi)sa&&(this[sa]=Va(sa));var ca=this;this.each(function(){var a=0,b,c,d;c=this.getAttribute("id");var i=!1,f=!1;if("table"!=this.nodeName.toLowerCase())D(null,0,"Attempted to initialise DataTables on a node which is not a table: "+ 20860this.nodeName);else{a=0;for(b=j.settings.length;a<b;a++){if(j.settings[a].nTable==this){if(e===n||e.bRetrieve)return j.settings[a].oInstance;if(e.bDestroy){j.settings[a].oInstance.fnDestroy();break}else{D(j.settings[a],0,"Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy");return}}if(j.settings[a].sTableId==this.id){j.settings.splice(a,1);break}}if(null===c||""===c)this.id=c="DataTables_Table_"+j.ext._oExternConfig.iNextUnique++; 20861var g=h.extend(!0,{},j.models.oSettings,{nTable:this,oApi:ca.oApi,oInit:e,sDestroyWidth:h(this).width(),sInstance:c,sTableId:c});j.settings.push(g);g.oInstance=1===ca.length?ca:h(this).dataTable();e||(e={});e.oLanguage&&pa(e.oLanguage);e=Ta(h.extend(!0,{},j.defaults),e);p(g.oFeatures,e,"bPaginate");p(g.oFeatures,e,"bLengthChange");p(g.oFeatures,e,"bFilter");p(g.oFeatures,e,"bSort");p(g.oFeatures,e,"bInfo");p(g.oFeatures,e,"bProcessing");p(g.oFeatures,e,"bAutoWidth");p(g.oFeatures,e,"bSortClasses"); 20862p(g.oFeatures,e,"bServerSide");p(g.oFeatures,e,"bDeferRender");p(g.oScroll,e,"sScrollX","sX");p(g.oScroll,e,"sScrollXInner","sXInner");p(g.oScroll,e,"sScrollY","sY");
20862p(g.oScroll,e,"bScrollCollapse","bCollapse");p(g.oScroll,e,"bScrollInfinite","bInfinite");p(g.oScroll,e,"iScrollLoadGap","iLoadGap");p(g.oScroll,e,"bScrollAutoCss","bAutoCss");p(g,e,"asStripeClasses");p(g,e,"asStripClasses","asStripeClasses");p(g,e,"fnServerData");p(g,e,"fnFormatNumber");p(g,e,"sServerMethod");p(g,e,"aaSorting");p(g, 20863e,"aaSortingFixed");p(g,e,"aLengthMenu");p(g,e,"sPaginationType");p(g,e,"sAjaxSource");p(g,e,"sAjaxDataProp");p(g,e,"iCookieDuration");p(g,e,"sCookiePrefix");p(g,e,"sDom");p(g,e,"bSortCellsTop");p(g,e,"iTabIndex");p(g,e,"oSearch","oPreviousSearch");p(g,e,"aoSearchCols","aoPreSearchCols");p(g,e,"iDisplayLength","_iDisplayLength");p(g,e,"bJQueryUI","bJUI");p(g,e,"fnCookieCallback");p(g,e,"fnStateLoad");p(g,e,"fnStateSave");p(g.oLanguage,e,"fnInfoCallback");z(g,"aoDrawCallback",e.fnDrawCallback,"user"); 20864z(g,"aoServerParams",e.fnServerParams,"user");z(g,"aoStateSaveParams",e.fnStateSaveParams,"user");z(g,"aoStateLoadParams",e.fnStateLoadParams,"user");z(g,"aoStateLoaded",e.fnStateLoaded,"user");z(g,"aoRowCallback",e.fnRowCallback,"user");z(g,"aoRowCreatedCallback",e.fnCreatedRow,"user");z(g,"aoHeaderCallback",e.fnHeaderCallback,"user");z(g,"aoFooterCallback",e.fnFooterCallback,"user");z(g,"aoInitComplete",e.fnInitComplete,"user");z(g,"aoPreDrawCallback",e.fnPreDrawCallback,"user");g.oFeatures.bServerSide&& 20865g.oFeatures.bSort&&g.oFeatures.bSortClasses?z(g,"aoDrawCallback",P,"server_side_sort_classes"):g.oFeatures.bDeferRender&&z(g,"aoDrawCallback",P,"defer_sort_classes");e.bJQueryUI?(h.extend(g.oClasses,j.ext.oJUIClasses),e.sDom===j.defaults.sDom&&"lfrtip"===j.defaults.sDom&&(g.sDom='<"H"lfr>t<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, 20866g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, 20867g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a<b;a++)d.hasClass(g.asStripeClasses[a])&&(c=!0,g.asDestroyStripes.push(g.asStripeClasses[a]));c&&d.removeClass(g.asStripeClasses.join(" "))}c=[];a=this.getElementsByTagName("thead");0!==a.length&&(V(g.aoHeader,a[0]),c=N(g));if(null===e.aoColumns){d=[];a=0;for(b= 20868c.length;a<b;a++)d.push(null)}else d=e.aoColumns;a=0;for(b=d.length;a<b;a++)e.saved_aoColumns!==n&&e.saved_aoColumns.length==b&&(null===d[a]&&(d[a]={}),d[a].bVisible=e.saved_aoColumns[a].bVisible),o(g,c?c[a]:null);ta(g,e.aoColumnDefs,d,function(a,b){m(g,a,b)});a=0;for(b=g.aaSorting.length;a<b;a++){g.aaSorting[a][0]>=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= 20869k.asSorting[0]);c=0;for(d=k.asSorting.length;c<d;c++)if(g.aaSorting[a][1]==k.asSorting[c]){g.aaSorting[a][2]=c;break}}P(g);Ua(g);a=h(this).children("caption").each(function(){this._captionSide=h(this).css("caption-side")});b=h(this).children("thead");0===b.length&&(b=[l.createElement("thead")],this.appendChild(b[0]));g.nTHead=b[0];b=h(this).children("tbody");0===b.length&&(b=[l.createElement("tbody")],this.appendChild(b[0]));g.nTBody=b[0];g.nTBody.setAttribute("role","alert");g.nTBody.setAttribute("aria-live", 20870"polite");g.nTBody.setAttribute("aria-relevant","all");b=h(this).children("tfoot");if(0===b.length&&0<a.length&&(""!==g.oScroll.sX||""!==g.oScroll.sY))b=[l.createElement("tfoot")],this.appendChild(b[0]);0<b.length&&(g.nTFoot=b[0],V(g.aoFooter,g.nTFoot));if(f)for(a=0;a<e.aaData.length;a++)H(g,e.aaData[a]);else ua(g);g.aiDisplay=g.aiDisplayMaster.slice();g.bInitialised=!0;!1===i&&ba(g)}});ca=null;return this};j.fnVersionCheck=function(e){for(var h=function(e,h){for(;e.length<h;)e+="0";return e},m=j.ext.sVersion.split("."), 20871e=e.split("."),k="",n="",l=0,t=e.length;l<t;l++)k+=h(m[l],3),n+=h(e[l],3);return parseInt(k,10)>=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;m<h.length;m++)if(h[m].nTable===e||h[m].nScrollHead===e||h[m].nScrollFoot===e)return!0;return!1};j.fnTables=function(e){var o=[];jQuery.each(j.settings,function(j,k){(!e||!0===e&&h(k.nTable).is(":visible"))&&o.push(k.nTable)});return o};j.version="1.9.4";j.settings=[];j.models={};j.models.ext={afnFiltering:[],afnSortData:[],aoFeatures:[], 20872aTypes:[],fnVersionCheck:j.fnVersionCheck,iApiIndex:0,ofnSearch:{},oApi:{},oStdClasses:{},oJUIClasses:{},oPagination:{},oSort:{},sVersion:j.version,sErrMode:"alert",_oExternConfig:{iNextUnique:0}};j.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};j.models.oRow={nTr:null,_aData:[],_aSortData:[],_anHidden:[],_sRowStripe:""};j.models.oColumn={aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bUseRendered:null,bVisible:null,_bAutoType:!0,fnCreatedCell:null,fnGetData:null, 20873fnRender:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,
20873sTitle:null,sType:null,sWidth:null,sWidthOrig:null};j.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0, 20874bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollAutoCss:!0,bScrollCollapse:!1,bScrollInfinite:!1,bServerSide:!1,bSort:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){if(1E3>e)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k<h;k++)0===k%3&&0!==k&&(j=this.oLanguage.sInfoThousands+j),j=e[h-k-1]+j;return j},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null, 20875fnRowCallback:null,fnServerData:function(e,j,m,k){k.jqXHR=h.ajax({url:e,data:j,success:function(e){e.sError&&k.oApi._fnLog(k,0,e.sError);h(k.oInstance).trigger("xhr",[k,e]);m(e)},dataType:"json",cache:!1,type:k.sServerMethod,error:function(e,h){"parsererror"==h&&k.oApi._fnLog(k,0,"DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(e){var e=this.oApi._fnReadCookie(e.sCookiePrefix+e.sInstance),j;try{j= 20876"function"===typeof h.parseJSON?h.parseJSON(e):eval("("+e+")")}catch(m){j=null}return j},fnStateLoadParams:null,fnStateLoaded:null,fnStateSave:function(e,h){this.oApi._fnCreateCookie(e.sCookiePrefix+e.sInstance,this.oApi._fnJsonString(h),e.iCookieDuration,e.sCookiePrefix,e.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"}, 20877oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},j.models.oSearch),sAjaxDataProp:"aaData", 20878sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};j.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bUseRendered:!0,bVisible:!0,fnCreatedCell:null,fnRender:null,iDataSort:-1,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};j.models.oSettings={oFeatures:{bAutoWidth:null, 20879bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBarWidth:0,iLoadGap:null,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:null, 20880asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null,aoStateSave:[],aoStateLoad:[], 20881oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iDisplayEnd:10,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasse
20881s:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length}, 20882fnRecordsDisplay:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length},fnDisplayEnd:function(){return this.oFeatures.bServerSide?!1===this.oFeatures.bPaginate||-1==this._iDisplayLength?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null};j.ext=h.extend(!0,{},j.models.ext);h.extend(j.ext.oStdClasses, 20883{sTable:"dataTable",sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty", 20884sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"", 20885sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:"",sJUIHeader:"",sJUIFooter:""});h.extend(j.ext.oJUIClasses,j.ext.oStdClasses,{sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right", 20886sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl",sPageLast:"last ui-corner-tr ui-corner-br",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_", 20887sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon", 20888sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sFooterTH:"ui-state-default",sJUIHeader:"fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",sJUIFooter:"fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"});h.extend(j.ext.oPagination,{two_button:{fnInit:function(e,j,m){var k=e.oLanguage.oPaginate,n=function(h){e.oApi._fnPageChange(e,h.data.action)&&m(e)},k=!e.bJUI?'<a class="'+ 20889e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sPrevious+'</a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sNext+"</a>
20889":'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUIPrev+'"></span></a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUINext+'"></span></a>';h(j).append(k);var l=h("a",j), 20890k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l<n;l++)if(k=j[l].firstChild)k.className=0===e._iDisplayStart?h.sPagePrevDisabled:h.sPagePrevEnabled,k=k.nextSibling, 20891k.className=e.fnDisplayEnd()==e.fnRecordsDisplay()?h.sPageNextDisabled:h.sPageNextEnabled}},iFullNumbersShowPages:5,full_numbers:{fnInit:function(e,j,m){var k=e.oLanguage.oPaginate,l=e.oClasses,n=function(h){e.oApi._fnPageChange(e,h.data.action)&&m(e)};h(j).append('<a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPageFirst+'">'+k.sFirst+'</a><a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPagePrevious+'">'+k.sPrevious+'</a><span></span><a tabindex="'+e.iTabIndex+'" class="'+ 20892l.sPageButton+" "+l.sPageNext+'">'+k.sNext+'</a><a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPageLast+'">'+k.sLast+"</a>");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, 20893fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l<m?(r=1,k=l):n<=k?(r=1,k=m):n>=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= 20894n!==m?'<a tabindex="'+e.iTabIndex+'" class="'+B.sPageButton+'">'+e.fnFormatNumber(m)+"</a>":'<a tabindex="'+e.iTabIndex+'" class="'+B.sPageButtonActive+'">'+e.fnFormatNumber(m)+"</a>";m=0;for(k=M.length;m<k;m++)u=M[m],u.hasChildNodes()&&(h("span:eq(0)",u).html(t).children("a").each(L),u=u.getElementsByTagName("a"),u=[u[0],u[1],u[u.length-2],u[u.length-1]],h(u).removeClass(B.sPageButton+" "+B.sPageButtonActive+" "+B.sPageButtonStaticDisabled),h([u[0],u[1]]).addClass(1==n?B.sPageButtonStaticDisabled: 20895B.sPageButton),h([u[2],u[3]]).addClass(0===l||n===l||-1===e._iDisplayLength?B.sPageButtonStaticDisabled:B.sPageButton))}}}});h.extend(j.ext.oSort,{"string-pre":function(e){"string"!=typeof e&&(e=null!==e&&e.toString?e.toString():"");return e.toLowerCase()},"string-asc":function(e,h){return e<h?-1:e>h?1:0},"string-desc":function(e,h){return e<h?1:e>h?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return e<h?-1:e>h?1:0},"html-desc":function(e,h){return e< 20896h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; 20897for(var k=1;k<e.length;k++){h=e.charAt(k);if(-1=="0123456789.".indexOf(h))return null;if("."==h){if(j)return null;j=!0}}return"numeric"},function(e){var h=Date.parse(e);return null!==h&&!isNaN(h)||"string"===typeof e&&0===e.length?"date":null},function(e){return"string"===typeof e&&-1!=e.indexOf("<")&&-1!=e.indexOf(">")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& 20898L(jQuery)})(window,document); 20899$(document).ready(function () { 20900 var therapeutic_area,specialty; 20901 function getSpecialityData(account){ 20902 if (account && account.data) { 20903 therapeutic_area = account.data.therapeutic_area; 20904 specialty = account.data.specialty; 20905 } else { 20906 var sciencePreferences = $.cookie("m_prefs") ? JSON.parse($.cookie("m_prefs")) : {}; 20907 therapeutic_area = sciencePreferences.therapeuticarea; 20908 specialty = sciencePreferences.specialty; 20909 } 20910 } 20911 20912 if(typeof gigya !== 'undefined' && gigya.accounts && typeof(gigya.accounts.getAccountInfo) == "function"){ 20913 window.gigya.accounts.getAccountInfo({ 20914 callback: getSpecialityData 20915 }); 20916 } 20917 $(document).on('click', "#feedback-survey-form .feedback-submit", function (event) { 20918 event.preventDefault(); 20919 let radioObj = {}; 20920 let checkboxObj = {}; 20921 let surveyForm = document.getElementById('feedback-survey-form'); 20922 let radio = document.querySelectorAll('.feedback-form-options--radio .feedback-form-options__field--radio:checked'); 20923 let radioM = document.querySelectorAll('.feedback-form-options--radio'); 20924 let checkbox = document.querySelectorAll('.feedback-form-options--checkbox .feedback-form-options__field--checkbox:checked'); 20925 let checkboxM = document.querySelectorAll('.feedback-form-options--checkbox'); 20926 let feedBackPage = document.querySelector('input[name=":redirect"]'); 20927 let feedBackPageLink; 20928 if (feedBackPage) { 20929 feedBackPageLink = feedBackPage.value; 20930 } 20931 if (checkboxM.length > 0) { 20932 for (let i = 0; i < checkboxM.length; i++) { 20933 let selected = false;
20934 let checkStr = ""; 20935 let temp = checkboxM[i].children[1].children[0].getAttribute('name'); 20936 checkboxObj[temp] = ""; 20937 for (let j = 0; j < checkbox.length; j++) { 20938 if (temp == checkbox[j].getAttribute('name')) { 20939 checkStr += checkbox[j].value + ";"; 20940 selected = true; 20941 } 20942 } 20943 checkStr = checkStr.slice(0, -1); 20944 if (selected) { 20945 checkboxObj[temp] = checkStr; 20946 } 20947 } 20948 } 20949 20950 if (radioM.length > 0) { 20951 for (let i = 0; i < radioM.length; i++) { 20952 let tempw = radioM[i].children[1].children[0].getAttribute('name'); 20953 radioObj[tempw] = ""; 20954 for (let j = 0; j < radio.length; j++) { 20955 if (tempw == radio[j].getAttribute('name')) { 20956 radioObj[tempw] = radio[j].value; 20957 } 20958 } 20959 } 20960 } 20961 20962 20963 20964 20965 20966 let radioqna = ""; 20967 let checkboxqna = ""; 20968 let radioQuestions = ""; 20969 let checkboxQuestions = ""; 20970 let radioAnswers = ""; 20971 let checkboxAnswers = ""; 20972 let therapyPage = ""; 20973 20974 therapyPage = $('.feedback-btn').attr('data-page'); 20975 therapyPage = therapyPage?therapyPage:"empty"; 20976 20977 for (let prop in radioObj) { 20978 radioQuestions += prop + "|"; 20979 if (radioObj[prop]) { 20980 radioqna += prop + ":" + radioObj[prop] + "|"; 20981 radioAnswers += radioObj[prop] + "|"; 20982 } else { 20983 radioqna += prop + ":" + "empty" + "|"; 20984 radioAnswers += "empty" + "|"; 20985 } 20986 20987 } 20988 for (let prop in checkboxObj) { 20989 checkboxQuestions += prop + "|"; 20990 if (checkboxObj[prop]) { 20991 checkboxqna += prop + ":" + checkboxObj[prop].replaceAll(';', ',') + "|"; 20992 20993 checkboxAnswers += checkboxObj[prop].replaceAll(';', ',') + "|"; 20994 } else { 20995 checkboxqna += prop + ":" + "empty" + "|"; 20996 checkboxAnswers += "empty" + "|"; 20997 } 20998 20999 } 21000 21001 radioQuestions = radioQuestions.slice(0, -1); 21002 checkboxQuestions = checkboxQuestions.slice(0, -1); 21003 radioAnswers = radioAnswers.slice(0, -1); 21004 checkboxAnswers = checkboxAnswers.slice(0, -1); 21005 radioqna = radioqna.slice(0, -1); 21006 checkboxqna = checkboxqna.slice(0, -1); 21007 21008 console.log(radioObj); 21009 console.log(checkboxObj); 21010 console.log(`${checkboxQuestions}`); 21011 console.log(`${radioQuestions}`); 21012 console.log(`${radioAnswers}`); 21013 console.log(`${checkboxAnswers}`); 21014 console.log(`${radioqna}`); 21015 console.log(`${checkboxqna}`); 21016 console.log(`${therapyPage}`); 21017 21018 if(!therapeutic_area) { 21019 getSpecialityData(); 21020 } 21021 const isInModal = $(this).closest('.modal-body').length > 0; 21022 21023 if (typeof _satellite !== 'undefined' && _satellite) { 21024 _satellite.track('ISFeedbackRadio', { qna: radioqna, qnas: checkboxqna}); 21025 if(therapeutic_area && specialty){ 21026 _satellite.track('feedbackSubmit', {"TA": therapeutic_area, "specialty": specialty}); // this code will pass the TA and Speciality fields 21027 } 21028 } 21029 if($('#buildeasylocalepage').length > 0) { 21030 if (typeof _satellite !== 'undefined' && _satellite) { 21031 _satellite.track('health_ques1', { ques: radioQuestions, ans: radioAnswers, qna: radioqna,therapy:therapyPage }); 21032 _satellite.track('health_ques2', { ques: checkboxQuestions, ans: checkboxAnswers, qna: checkboxqna,therapy:therapyPage }); 21033 _satellite.track('formSuccess'); } 21034 document.querySelectorAll('#genericLightbox').forEach(function(el) { 21035 var modal = bootstrap.Modal.getInstance(el) || new bootstrap.Modal(el); 21036 modal.hide(); 21037 }); 21038 } else { 21039 21040 if(isInModal) { if( $('.feedback-success-btn').length > 0) { 21041 $('.feedback-success-btn').trigger('click'); 21042 $('body').addClass('feedback-success-msg'); 21043 } 21044 document.querySelectorAll('#genericLightbox').forEach(function(el) { 21045 var modal = bootstrap.Modal.getInstance(el) || new bootstrap.Modal(el); 21046 modal.hide(); 21047 }); 21048 } else { 21049 window.close(); 21050 } 21051 } 21052 surveyForm.reset(); 21053 /*if(feedBackPageLink && surveyForm != null){ 21054 surveyForm.reset(); 21055 window.location.href = feedBackPageLink; 21056 } 21057 else{ 21058 window.location.replace(window.location); 21059 }*/ 21060 21061 }); $(document).on('click', "#feedback-survey-form .feedback-cancel", function () { 21062 let surveyForm = document.getElementById('feedback-survey-form'); 21063 surveyForm.reset(); 21064 document.querySelectorAll('#genericLightbox').forEach(function(el) { 21065 var modal = bootstrap.Modal.getInstance(el) || new bootstrap.Modal(el); 21066 modal.hide(); 21067 }); 21068 }); 21069 $(document).on('click', "#feedback-survey-form .feedback-close", function () { 21070 let surveyForm = document.getElementById('feedback-survey-form'); 21071 surveyForm.reset(); 21072 document.querySelectorAll('#genericLightbox').forEach(function(el) { 21073 var modal = bootstrap.Modal.getInstance(el) || new bootstrap.Modal(el); 21074 modal.hide(); 21075 }); 21076 }); 21077 $(document).on('change', "#feedback-survey-form .feedback-form-options__field--radio,#feedback-survey-form .feedback-form-options__field--checkbox", function () { 21078 disableSubmitButton(); 21079 }); 21080 function disableSubmitButton() { 21081 let radioChecked = document.querySelectorAll('.feedback-form-options--radio .feedback-form-options__field--radio:checked'); 21082 let checkboxChecked = document.querySelectorAll('.feedback-form-options--checkbox .feedback-form-options__field--checkbox:checked'); 21083 if(radioChecked.length > 0 || checkboxChecked.length > 0){ 21084 21085 $('#feedback-survey-form .feedback-submit').removeAttr('disabled'); 21086 } 21087 else{ 21088 $('#feedback-survey-form .feedback-submit').attr('disabled','true'); 21089 } 21090 21091 } 21092 $('#genericLightbox').on('show.bs.modal', function (e) { 21093 if($(this).find('#feedback-survey-form')){ 21094 disableSubmitButton(); 21095 } 21096 }); 21097 $(document).on("click", '.feedback-btn', function () { 21098 $('body').addClass('feedback-modal-open'); 21099 21100 }); 21101 21102}); 21103 21104
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.