{"version":3,"names":[],"mappings":"","sources":["main.js"],"sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o');\n } else {\n alert('Max 3 cards');\n }\n }\n // deselect a card\n else {\n $(this).removeClass('selected');\n $('.selected-cards .card-selected img[title=\"' + clickedCardName + '\"]').parent().fadeOut(300, function () {\n $(this).remove();\n });\n\n $('.selected-cards .card-counter span, .card-counter-badge').html($('.js-compared-item-group .selected').length);\n\n if ($('.js-compared-item-group .selected').length <= 0) {\n $('.m-top-nav, .m-top-nav-placeholder').addClass('closed');\n _this.zeroSelection();\n }\n }\n });\n\n // click card image to remove item\n $('body').on('click', '.js-remove-selected', function () {\n clickedCardName = $(this).attr('title');\n $(this).parent().fadeOut(300, function () {\n $(this).remove();\n });\n\n $('.js-compared-item-group .selected').each(function () {\n if ($(this).parents('.js-compared-item').find('.product-label').html() == clickedCardName) {\n $(this).removeClass('selected');\n }\n });\n\n $('.selected-cards .card-counter span, .card-counter-badge').html($('.js-compared-item-group .selected').length);\n\n if ($('.js-compared-item-group .selected').length <= 0) {\n $('.m-top-nav, .m-top-nav-placeholder').addClass('closed');\n _this.zeroSelection();\n }\n });\n\n // clear all button\n $('body').on('click', '.js-clear-compare', function () {\n $('.m-top-nav, .m-top-nav-placeholder').addClass('closed');\n $('.selected-cards .card-counter span, .card-counter-badge').html('0');\n $('.selected-cards .card-selected').fadeOut(300, function () {\n $(this).remove();\n });\n $('.js-compared-item-group .selected').removeClass('selected');\n _this.zeroSelection();\n });\n\n // compare page link button\n $('body').on('click', '.js-apply-compare', function () {\n if ($('.js-compared-item-group .selected').length <= 1) {\n return false;\n }\n });\n }\n }]);\n\n return hiddenScrollbar;\n}();\n\nexports.default = hiddenScrollbar;\n\n},{}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CenterImage = function () {\n function CenterImage() {\n _classCallCheck(this, CenterImage);\n\n this.winW = $(window).width();\n this.winH = $(window).height();\n this.imgW;\n this.imgH;\n this.img;\n this.src;\n this.boxW;\n this.boxH;\n }\n\n _createClass(CenterImage, [{\n key: 'initEvent',\n value: function initEvent(selector, container, imageClass) {\n var _this = this;\n // based on parent container size\n $(selector).each(function () {\n $(this).find(container).each(function () {\n if (!imageClass || imageClass == '') {\n _this.img = $(this).find('> img');\n } else {\n _this.img = $(this).find('> img.' + imageClass);\n }\n _this.src = _this.img.attr('src');\n _this.img.attr('src', '');\n _this.img.attr('src', _this.src);\n\n _this.img.on('load', function () {\n _this.img.css({ 'width': 'auto', 'height': 'auto', 'min-width': 'initial', 'max-width': 'none', 'min-height': 'initial', 'max-height': 'none' });\n _this.imgW = _this.img.width();\n _this.imgH = _this.img.height();\n _this.boxW = $(this).parents(container).width();\n _this.boxH = $(this).parents(container).height();\n if (_this.imgW / _this.imgH > _this.boxW / _this.boxH) {\n _this.img.css({ 'height': '100%', 'width': 'auto' });\n _this.imgW = _this.img.width();\n _this.img.css({ 'margin-top': 0, 'margin-left': (_this.boxW - _this.imgW) / 2 });\n } else {\n _this.img.css({ 'width': '100%', 'height': 'auto' });\n _this.imgH = _this.img.height();\n _this.img.css({ 'margin-left': 0, 'margin-top': (_this.boxH - _this.imgH) / 2 });\n }\n }).each(function () {\n if (this.complete) $(this).trigger('load');\n });\n });\n });\n }\n }]);\n\n return CenterImage;\n}();\n\nexports.default = CenterImage;\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CheckCheckBox = function () {\n\tfunction CheckCheckBox() {\n\t\t_classCallCheck(this, CheckCheckBox);\n\n\t\tthis.checkboxClass = $('.checkbox, .radio, .reply-buttons.multiple .badge-button');\n\t\tthis.clickedElement;\n\t}\n\n\t_createClass(CheckCheckBox, [{\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent(element) {\n\t\t\tif (element) {\n\t\t\t\tthis.clickedElement = element;\n\t\t\t} else {\n\t\t\t\tthis.clickedElement = this.checkboxClass;\n\t\t\t}\n\t\t\tthis.clickedElement.each(function () {\n\t\t\t\tif ($(this).find('input').prop('checked') == true) {\n\t\t\t\t\t$(this).addClass('checked');\n\n\t\t\t\t\t// extra action for home chat card choice - add selected class to keep overlay visible\n\t\t\t\t\tif ($(this).parents('.card-choice').length) {\n\t\t\t\t\t\t$(this).parents('.card-item').addClass('selected');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$(this).removeClass('checked');\n\n\t\t\t\t\t// extra action for home chat card choice - remove selected class to hide overlay\n\t\t\t\t\tif ($(this).parents('.card-choice').length) {\n\t\t\t\t\t\t$(this).parents('.card-item').removeClass('selected');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn CheckCheckBox;\n}();\n\nexports.default = CheckCheckBox;\n\n},{}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _checkCheckbox = require('./check-checkbox');\n\nvar _checkCheckbox2 = _interopRequireDefault(_checkCheckbox);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar checkCheckbox = new _checkCheckbox2.default();\n\nvar CustomCheckbox = function () {\n\tfunction CustomCheckbox() {\n\t\t_classCallCheck(this, CustomCheckbox);\n\n\t\tthis.checkbox = $('input[type=\"checkbox\"]');\n\t\tthis.radio = $('input[type=\"radio\"]');\n\t\tthis.resetContainers = $('.card-choice, .reply-buttons.multiple');\n\t}\n\n\t_createClass(CustomCheckbox, [{\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent() {\n\t\t\tvar _this = this;\n\n\t\t\t// add custom styling classes\n\t\t\tthis.checkbox.each(function () {\n\t\t\t\tif ($(this).parent().hasClass('custom') == true) {\n\t\t\t\t\t$(this).parent().addClass('checkbox');\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.radio.each(function () {\n\t\t\t\tif ($(this).parent().hasClass('custom') == true) {\n\t\t\t\t\t$(this).parent().addClass('radio');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// reset checkbox/radio 'checked value' for these containers\n\t\t\tthis.resetContainers.find('input[type=\"checkbox\"], input[type=\"radio\"]').prop('checked', false);\n\n\t\t\t// refresh custom classes on page load\n\t\t\tcheckCheckbox.initEvent();\n\n\t\t\t$('body').on('click', '.checkbox, .radio, .reply-buttons.multiple .badge-button', function () {\n\n\t\t\t\t// extra action for home chat card choicemultiple reply button - limit based on data-limit\n\t\t\t\tif ($(this).parents('.reply-buttons.multiple').length && $(this).parents('.reply-buttons.multiple').find('input:checked').length > $(this).parents('.reply-buttons.multiple').attr('data-limit')) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// extra action for home chat card choice - allow only 2 choice\n\t\t\t\tif ($(this).parents('.card-choice').length && $(this).parents('.card-choice').find('input:checked').length > 2) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tcheckCheckbox.initEvent($(this));\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn CustomCheckbox;\n}();\n\nexports.default = CustomCheckbox;\n\n},{\"./check-checkbox\":5}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hiddenScrollbar = function () {\n function hiddenScrollbar() {\n _classCallCheck(this, hiddenScrollbar);\n }\n\n _createClass(hiddenScrollbar, [{\n key: 'initEvent',\n value: function initEvent(selector) {\n var scrollContainer;\n var contents;\n var pLeft;\n var pRight;\n var pTop;\n var pBottom;\n $(selector).each(function () {\n scrollContainer = $(this);\n\n pLeft = scrollContainer.css('padding-left');\n pRight = parseInt(scrollContainer.css('padding-right'));\n pTop = scrollContainer.css('padding-top');\n pBottom = scrollContainer.css('padding-bottom');\n\n scrollContainer.css({ 'position': 'relative', 'overflow': 'hidden', 'padding': '0' });\n\n contents = scrollContainer.find('> *');\n contents.wrapAll('
');\n scrollContainer.find('.hidden-scrollbar-frame').css({ 'position': 'absolute', 'left': '0px', 'right': '-20px', 'top': '0', 'bottom': '0', 'padding-left': pLeft, 'padding-right': pRight + 20 + 'px', 'padding-top': pTop, 'padding-bottom': pBottom, 'overflow-x': 'hidden', 'overflow-y': 'scroll' });\n });\n }\n }]);\n\n return hiddenScrollbar;\n}();\n\nexports.default = hiddenScrollbar;\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// TODO: make this the default controller for Forms\nvar MaybankForm = function () {\n function MaybankForm() {\n _classCallCheck(this, MaybankForm);\n\n this.intro = $('.js-form-intro');\n this.startBtn = $('.js-form-start');\n this.form = $('.js-form');\n this.step = $('.js-form-step');\n this.gotoStepBtn = $('.js-gotostep');\n this.barCompletion = $('.js-bar-completion');\n\n this.config = {\n currentStep: 1,\n totalStep: this.calculateStep(),\n barWidth: '0%',\n interval: 0\n };\n\n this.handleFocus();\n }\n\n _createClass(MaybankForm, [{\n key: 'handleFocus',\n value: function handleFocus() {\n\n // check if input already has value and activate the input\n $.each($('input[type=\"text\"], input[type=\"number\"]'), function (i, e) {\n // console.log($(e));\n\n if ($(e).val().length) $(e).prev('label').css({\n 'top': '0',\n 'opacity': '1',\n 'font-size': '14px'\n });\n });\n\n // activate the input when label is click or focus\n $('form label').on('click focus', function (e) {\n var _this = e.currentTarget;\n $(_this).css({\n 'top': '0',\n 'opacity': '1',\n 'font-size': '14px'\n }).next('input').focus();\n });\n\n // activate the input on focus\n $('form input').on('focus', function (e) {\n var _this = e.currentTarget;\n $(_this).prev('label').css({\n 'top': '0',\n 'opacity': '1',\n 'font-size': '14px'\n });\n });\n }\n }, {\n key: 'calculateStep',\n value: function calculateStep() {\n return this.form.find('.step').length;\n }\n }, {\n key: 'goToStep',\n value: function goToStep(currentStep) {\n $('.step-' + currentStep).delay(this.config.interval).fadeIn('fast').siblings('.step').fadeOut('fast');\n }\n }, {\n key: 'stepState',\n value: function stepState(step, currentStep) {\n if (step == currentStep) {\n return 'current';\n } else if (step <= currentStep) {\n return 'is-done';\n } else {\n return '';\n }\n }\n }, {\n key: 'appendStep',\n value: function appendStep() {\n var _this2 = this;\n\n var currentStep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.config.currentStep;\n\n\n this.goToStep(currentStep);\n\n if (this.step) {\n\n // $('.js-bar-completion').css('width', this.config.barWidth);\n\n this.step.html('').append('\\n
\\n
\\n
\\n ' + Array(this.config.totalStep).join(0).split(0).map(function (item, i) {\n return '\\n
\\n
\\n
\\n ' + (_this2.stepState(i + 1, currentStep) === 'is-done' ? '' : '' + (i + 1)) + ' \\n
\\n
\\n
\\n ';\n }).join('') + ' \\n
\\n ');\n }\n }\n\n /**\n * Set the progress bar width dynamically depending on the current step\n */\n\n }, {\n key: 'stepCompletion',\n value: function stepCompletion() {\n var isDone = $('.form-step-indicator.is-done').length;\n this.config.barWidth = isDone / (this.config.totalStep - 1) * 100 + '%';\n $('.js-bar-completion').css('width', this.config.barWidth);\n }\n }, {\n key: 'startForm',\n value: function startForm() {\n var _this3 = this;\n\n this.startBtn.on('click', function (e) {\n e.preventDefault();\n var _this = e.currentTarget;\n _this3.intro.fadeOut('fast');\n _this3.form.delay(_this3.config.interval).fadeIn('fast');\n\n _this3.appendStep();\n\n // start form in step 1\n // this.goToStep(this.config.currentStep);\n });\n }\n\n // get all visible AND required fields\n\n }, {\n key: 'getAllRequiredFields',\n value: function getAllRequiredFields() {\n var activeStep = void 0;\n $('.step').each(function () {\n if ($(this).css('display') != 'none') {\n activeStep = $(this);\n return false;\n }\n });\n\n var fields = activeStep.find('input[required]:visible, select[required]:visible, .radio-required');\n var arr = [];\n fields.map(function (i, e) {\n arr.push(e);\n });\n\n return arr;\n }\n }, {\n key: 'fieldValidation',\n value: function fieldValidation() {\n var requiredFields = this.getAllRequiredFields();\n\n requiredFields.map(function (e) {\n\n // validation for .card-box radio/checkbox\n if ($(e).hasClass('radio-required')) {\n\n var formMssg = $(e).find('.form-error-message');\n var errorText = $(e).attr('data-error');\n if ($(e).find('input[type=\"radio\"]:checked').length > 0) {\n $(e).removeClass('has-error');\n if (formMssg) formMssg.remove();\n } else {\n $(e).addClass('has-error');\n if (formMssg) formMssg.remove();\n $(e).prepend('
' + errorText + '
');\n }\n }\n\n // validation for standard input\n else {\n\n var _formMssg = $(e).next('.form-error-message');\n if (e.value.length > 0) {\n $(e).removeClass('has-error');\n if (_formMssg) _formMssg.remove();\n } else {\n $(e).addClass('has-error');\n if (_formMssg) _formMssg.remove();\n\n $(e).after('
This cannot be empty!
');\n }\n\n // validation for custom checkbox\n if ($(e).attr('type') == 'checkbox') {\n var _formMssg2 = $(e).closest('.form-check').find('.form-error-message');\n if (e.checked) {\n $(e).removeClass('has-error');\n if (_formMssg2) _formMssg2.remove();\n } else {\n $(e).addClass('has-error');\n if (_formMssg2) _formMssg2.remove();\n\n $(e).next('label').after('
This cannot be empty!
');\n }\n }\n }\n });\n }\n\n /**\n * Count how many input and select that has class has-error\n */\n\n }, {\n key: 'totalInvalidFields',\n value: function totalInvalidFields() {\n var invalidFields = $('input.form-control.has-error, select.form-control.has-error, .radio-required.has-error').length;\n return invalidFields;\n }\n }, {\n key: 'submitForm',\n value: function submitForm() {\n var _this4 = this;\n\n this.gotoStepBtn.on('click', function (e) {\n\n if (e.target.tagName.toLowerCase() === 'a') {\n e.preventDefault();\n }\n\n _this4.fieldValidation();\n\n if (_this4.totalInvalidFields() == 0) {\n var nextHref = $(e.currentTarget).attr('href');\n\n if (nextHref.substr(0, 1) == '#') {\n var nextStep = $(e.currentTarget).attr('to-step');\n if (nextStep) {\n _this4.config.currentStep = nextStep;\n if (_this4.step) {\n _this4.appendStep();\n _this4.stepCompletion();\n // this.goToStep(nextStep);\n }\n } else {\n\n // hide step on the success/error page\n _this4.step.hide();\n\n // show success or error page with fade effect\n $('' + nextHref).delay(_this4.config.interval).removeClass('hide').fadeIn('fast').siblings('.step').fadeOut('fast');\n }\n } else {\n window.location.href = nextHref;\n }\n }\n });\n }\n\n // typing suggeestion on input type text\n\n }, {\n key: 'checkMatchedOption',\n value: function checkMatchedOption(option, input) {\n option.find('li').each(function () {\n if ($(this).text().toLowerCase().indexOf(input.toLowerCase()) > -1) {\n $(this).show();\n } else {\n $(this).hide();\n }\n });\n }\n }, {\n key: 'inputSuggestion',\n value: function inputSuggestion() {\n var _this = this;\n var input;\n var selected;\n // show/hide suggestion\n $('body').on('keyup', '.js-type-ahead', function () {\n input = $(this);\n if (input.val().length >= 2) {\n _this.checkMatchedOption(input.siblings('.custom-list'), input.val());\n input.siblings('.custom-list').show();\n } else {\n input.siblings('.custom-list').hide();\n }\n });\n // select an option\n $('body').on('click', '.custom-list li', function () {\n selected = $(this).text();\n $(this).parent('.custom-list').hide().siblings('.js-type-ahead').val(selected);\n });\n // global close\n $(document).on('click', function (e) {\n e.stopPropagation();\n if (!$(this).parent('.custom-list').length) {\n $('.custom-list').hide();\n }\n });\n }\n\n // changing input value from radio selection inside popup\n\n }, {\n key: 'tableRadioInput',\n value: function tableRadioInput() {\n var _this = this;\n var targetName;\n var target;\n var radio;\n var value;\n $('.js-table-radio-input-target').attr('readonly', 'readonly');\n $('body').on('click', '.js-table-radio-input td', function (e) {\n targetName = $(this).parents('.js-table-radio-input').attr('data-target');\n target = $('input.js-table-radio-input-target[name=\"' + targetName + '\"]');\n radio = $(this).parents('tr').find('input[type=\"radio\"]');\n radio.prop('checked', true);\n value = radio.val();\n target.val(value);\n // auto close the modal\n $(this).parents('.modal').fadeOut('fast').toggleClass('in out');\n $('body').removeClass('modal-open');\n });\n }\n }, {\n key: 'initEvent',\n value: function initEvent() {\n\n var hasIntro = $('.js-form-intro').length;\n var hasStep = $('.js-form-step').length;\n\n // if has intro hide the form and only show once the start button is clicked\n if (hasIntro != 0) {\n\n this.form.hide();\n this.startForm();\n } else {\n\n // ..else show the form and append the step\n\n this.form.delay(this.config.interval).fadeIn('fast');\n this.appendStep();\n // this.goToStep(this.config.currentStep); // start form in step 1\n }\n\n this.submitForm();\n this.inputSuggestion();\n this.tableRadioInput();\n\n /** \n * Promo Code Validation (simulation)\n */\n $('.js-promo-code').on('keyup', function (e) {\n var getLength = e.currentTarget.value.length;\n\n // lets assume..\n var promoMaxLength = 6;\n\n if (getLength >= promoMaxLength) {\n $(e.currentTarget).closest('.form-group').addClass('has-preloader');\n }\n\n setTimeout(function () {\n $(e.currentTarget).closest('.form-group').removeClass('has-preloader').addClass('is-success');\n\n $('.form-message').removeClass('d-none');\n }, 5000);\n });\n }\n }]);\n\n return MaybankForm;\n}();\n\nexports.default = MaybankForm;\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Modal = function () {\n function Modal() {\n _classCallCheck(this, Modal);\n\n this.trigger = $('.js-modal-trigger');\n this.triggerClose = $('.js-modal-trigger-close');\n this.keyEscape = 27;\n\n $('.modal').addClass('out');\n }\n\n _createClass(Modal, [{\n key: 'getModalName',\n value: function getModalName(selected) {\n return selected.attr('modal');\n }\n }, {\n key: 'showModal',\n value: function showModal(modalName) {\n $('.modal[modal-name=\"' + modalName + '\"]').fadeIn('fast').toggleClass('out in');\n $('input[tabindex=\"1\"]').focus(); // once open, focus on the first tab index\n $('body').addClass('modal-open');\n }\n }, {\n key: 'closeModal',\n value: function closeModal(selected) {\n selected.closest('.modal').fadeOut('fast').toggleClass('in out');\n $('body').removeClass('modal-open');\n }\n }, {\n key: 'initEvent',\n value: function initEvent() {\n var _this2 = this;\n\n this.trigger.on('click', function (e) {\n e.preventDefault();\n var _this = e.currentTarget;\n var modalName = _this2.getModalName($(_this));\n _this2.showModal(modalName);\n });\n\n this.triggerClose.on('click', function (e) {\n var _this = e.currentTarget;\n _this2.closeModal($(_this));\n });\n\n // close modal on esc key\n $('.modal').on('keypress keydown', function (e) {\n if (e.which === _this2.keyEscape) $('.modal').fadeOut('fast').toggleClass('in out');\n });\n }\n }]);\n\n return Modal;\n}();\n\nexports.default = Modal;\n\n},{}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _maybankForm = require('./maybank-form');\n\nvar _maybankForm2 = _interopRequireDefault(_maybankForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar casa = new _maybankForm2.default();\n\nvar OTP = function () {\n function OTP() {\n _classCallCheck(this, OTP);\n\n this.container = $('.js-otp');\n this.input = this.container.find('.js-otp-input');\n this.preloader = $('.js-preloader');\n this.keyBackspace = 8;\n this.keyLeftArrow = 37;\n this.keyRightArrow = 39;\n\n this.state = {\n isValid: false,\n otpLength: 0,\n maxOtpLength: 5\n };\n }\n\n _createClass(OTP, [{\n key: 'initEvent',\n value: function initEvent() {\n var _this = this;\n\n this.input.on('keyup', function (e) {\n\n var currentVal = $(e.currentTarget).val();\n\n if (currentVal) {\n\n if (e.which >= 48 && e.which <= 90) $(e.currentTarget).val(e.key.toUpperCase());\n\n if (e.currentTarget.nextElementSibling) e.currentTarget.nextElementSibling.focus();\n }\n\n if (e.which === _this.keyBackspace) {\n if (!currentVal && e.currentTarget.previousElementSibling) {\n e.currentTarget.previousElementSibling.focus();\n }\n }\n\n if (e.which === _this.keyLeftArrow) e.currentTarget.previousElementSibling.focus();\n\n if (e.which === _this.keyRightArrow) e.currentTarget.nextElementSibling.focus();\n\n _this.checkOtpLength(e);\n _this.validateOtp();\n });\n }\n }, {\n key: 'validateOtp',\n value: function validateOtp() {\n if (this.state.otpLength == 5) {\n this.preloader.removeClass('invisible');\n\n // simulate ajax post and move to step 3\n setTimeout(function () {\n $('.modal').fadeOut('fast').toggleClass('in out');\n\n // get next step number\n var nextStep = parseInt($('.form-step-indicator.current').next('.form-step-indicator').find('.form-step-indicator__inner').text());\n\n casa.appendStep(nextStep);\n casa.stepCompletion();\n // casa.goToStep(nextStep);\n }, 1000);\n } else {\n this.preloader.addClass('invisible');\n }\n\n // move to next page\n }\n }, {\n key: 'checkOtpLength',\n value: function checkOtpLength(e) {\n var eVal = $(e.currentTarget).val();\n if (eVal) {\n if (this.state.otpLength <= this.state.maxOtpLength) this.state.otpLength++;\n } else {\n if (e.which == this.keyBackspace) this.state.otpLength--;\n }\n\n if (this.state.otpLength >= this.state.maxOtpLength) {\n this.state.otpLength = this.state.maxOtpLength;\n }\n\n if (this.state.otpLength === -1) {\n this.state.otpLength = 0;\n }\n }\n }]);\n\n return OTP;\n}();\n\nexports.default = OTP;\n\n},{\"./maybank-form\":8}],11:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _owlCarousel = require(\"../libs/owl.carousel.min\");\n\nvar _owlCarousel2 = _interopRequireDefault(_owlCarousel);\n\nvar _centerImage = require(\"./center-image\");\n\nvar _centerImage2 = _interopRequireDefault(_centerImage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar centerImage = new _centerImage2.default();\n\nvar Rcarousel = function () {\n function Rcarousel() {\n _classCallCheck(this, Rcarousel);\n\n this.initEvent = this.initEvent.bind(this);\n this.watchWindow = this.watchWindow.bind(this);\n this.state = {\n width: $(window).width(),\n ipadWidth: 769,\n iphoneWidth: 417\n };\n }\n\n _createClass(Rcarousel, [{\n key: \"watchWindow\",\n value: function watchWindow() {\n var _this = this;\n\n window.addEventListener(\"orientationchange\", function () {\n setTimeout(function () {\n if (_this.state.width != $(window).width()) {\n _this.state.width = $(window).width();\n\n if ($(window).width() <= _this.state.iphoneWidth) {\n console.log($(window).width() + '<=' + _this.state.iphoneWidth);\n setTimeout(function () {\n _this.removeCarousel();\n _this.generateCarousel(1);\n }, 100);\n } else if ($(window).width() <= _this.state.ipadWidth) {\n console.log($(window).width() + '<==' + _this.state.ipadWidth);\n setTimeout(function () {\n _this.removeCarousel();\n _this.generateCarousel(2);\n }, 100);\n } else if ($(window).width() > _this.state.ipadWidth) {\n console.log($(window).width() + '>' + _this.state.ipadWidth);\n setTimeout(function () {\n _this.removeCarousel();\n }, 100);\n }\n }\n }, 100);\n }, false);\n }\n }, {\n key: \"initEvent\",\n value: function initEvent() {\n if ($(window).width() < this.state.iphoneWidth) {\n this.generateCarousel(1);\n } else if ($(window).width() < this.state.ipadWidth) {\n this.generateCarousel(2);\n } else if ($(window).width() > this.state.ipadWidth) {\n // remove carousel\n this.removeCarousel();\n }\n\n this.watchWindow();\n }\n }, {\n key: \"removeCarousel\",\n value: function removeCarousel() {\n $('.js-mobile-to-carousel').removeClass('owl-carousel owl-theme');\n $('.js-mobile-to-carousel').owlCarousel('destroy');\n centerImage.initEvent('.js-mobile-to-carousel', '.image');\n /* safely trigger all existing centerImage function\n to ensure all image get centered again */\n setTimeout(function () {\n $(window).resize();\n }, 10);\n }\n }, {\n key: \"generateCarousel\",\n value: function generateCarousel() {\n var howMany = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n if ($('.js-mobile-to-carousel').length) {\n $('.js-mobile-to-carousel').addClass('owl-carousel owl-theme');\n setTimeout(function () {\n $('.js-mobile-to-carousel').owlCarousel({\n nav: false,\n dots: true,\n margin: 15,\n loop: false,\n items: howMany,\n stagePadding: 15\n });\n\n centerImage.initEvent('.js-mobile-to-carousel', '.image');\n /* safely trigger all existing centerImage function\n to ensure all image get centered again */\n setTimeout(function () {\n $(window).resize();\n }, 10);\n\n /* change stagePadding option on card-list to enlarge the item width */\n $('.card-list .js-mobile-to-carousel').data('owl.carousel').options.stagePadding = 0;\n $('.card-list .js-mobile-to-carousel').data('owl.carousel').settings.stagePadding = 0;\n $('.card-list .js-mobile-to-carousel').trigger('refresh.owl.carousel');\n }, 10);\n }\n }\n }]);\n\n return Rcarousel;\n}();\n\nexports.default = Rcarousel;\n\n},{\"../libs/owl.carousel.min\":21,\"./center-image\":4}],12:[function(require,module,exports){\n'use strict';\n\nvar _scrollreveal = require('scrollreveal');\n\nvar _scrollreveal2 = _interopRequireDefault(_scrollreveal);\n\nvar _userAgent = require('./user-agent');\n\nvar _userAgent2 = _interopRequireDefault(_userAgent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Opera 8.0+\nvar isOpera = !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;\n\n// Firefox 1.0+\nvar isFirefox = typeof InstallTrigger !== 'undefined';\n\n// Safari 3.0+ \"[object HTMLElementConstructor]\" \nvar isSafari = /constructor/i.test(window.HTMLElement) || function (p) {\n return p.toString() === \"[object SafariRemoteNotification]\";\n}(!window['safari'] || typeof safari !== 'undefined' && safari.pushNotification);\n\n// Internet Explorer 6-11\nvar isIE = /*@cc_on!@*/false || !!document.documentMode;\n\n// Edge 20+\nvar isEdge = !isIE && !!window.StyleMedia;\n\n// Chrome 1+\nvar isChrome = !!window.chrome && !!window.chrome.webstore;\n\n// Blink engine detection\nvar isBlink = (isChrome || isOpera) && !!window.CSS;\n\nwindow.sr = (0, _scrollreveal2.default)({\n mobile: false\n});\n\n/** IMPORTANT\n * make sure you add visibility hidden on each class that you want to reveal\n * otherwise you will see the element appear and disappear on load.\n * sass file => animation.scss\n */\n\n// add scroll reveal\nif ($('.promotion-area')) sr.reveal('.promotion-area');\n\n// you must specify a different class name if you want them to appear in order\nif ($('.card-list .card-item')) sr.reveal('.card-list .card-item', { duration: 500 }, 100);\n\nif ($('.story-card')) sr.reveal('.story-card', { duration: 500 }, 100);\n\nmodule.export = sr;\n\n},{\"./user-agent\":17,\"scrollreveal\":29}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SelectBox = function () {\n\tfunction SelectBox() {\n\t\t_classCallCheck(this, SelectBox);\n\n\t\tthis.trigger = $('.js-m2u-select');\n\t\tthis.breakpoint = 768;\n\t}\n\n\t_createClass(SelectBox, [{\n\t\tkey: 'createCustomSelectBox',\n\t\tvalue: function createCustomSelectBox(config) {\n\t\t\tif ($(window).width() >= this.breakpoint) {\n\n\t\t\t\t// set the real select box to visibility hidden and remove the height and padding\n\t\t\t\tconfig.select.addClass('invisible').css({\n\t\t\t\t\t'height': '0',\n\t\t\t\t\t'padding': '0'\n\t\t\t\t});\n\n\t\t\t\tvar initVal = '';\n\t\t\t\tconfig.options.each(function () {\n\t\t\t\t\tif ($(this).attr('selected')) {\n\t\t\t\t\t\tinitVal = $(this).attr('value');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (config.trigger.find('.select-custom').length == 0) {\n\t\t\t\t\tvar temp = '
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
' + config.label + '
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t' + initVal + '\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
');\n\t\t\t\t}\n\n\t\t\t\tif (initVal) {\n\t\t\t\t\tconfig.select.prev('.select-custom').find('.title').css({\n\t\t\t\t\t\t'top': '0',\n\t\t\t\t\t\t'opacity': '1',\n\t\t\t\t\t\t'font-size': '.9em'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.showSelectBoxLists(config.trigger);\n\t\t\t\tthis.onSelectOption(config.trigger);\n\t\t\t\tthis.closeSelectGlobally();\n\t\t\t} else {\n\t\t\t\tif (config.trigger.hasClass('js-content-change')) {\n\t\t\t\t\tconfig.trigger.on('change', 'select', function (e) {\n\t\t\t\t\t\tvar selectRoot = void 0;\n\t\t\t\t\t\tvar targetClass = void 0;\n\t\t\t\t\t\tvar targetID = void 0;\n\t\t\t\t\t\tif ($(e.currentTarget).parents('.m2u-select').hasClass('js-content-change')) {\n\t\t\t\t\t\t\tselectRoot = $(e.currentTarget).parents('.m2u-select.js-content-change');\n\t\t\t\t\t\t\ttargetClass = selectRoot.attr('data-target-class');\n\t\t\t\t\t\t\ttargetID = selectRoot.find('select').val();\n\n\t\t\t\t\t\t\t$('.js-content-change-target.' + targetClass).hide();\n\t\t\t\t\t\t\t$('.js-content-change-target#' + targetID).show();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'showSelectBoxLists',\n\t\tvalue: function showSelectBoxLists(trigger) {\n\t\t\ttrigger.on('click', '.select-custom__header', function (e) {\n\t\t\t\t$('.select-custom__lists').removeClass('visible').addClass('invisible');\n\t\t\t\tvar currentList = $(e.currentTarget).closest('.select-custom').find('.select-custom__lists');\n\t\t\t\tcurrentList.toggleClass('invisible visible');\n\t\t\t});\n\t\t}\n\n\t\t/**\n * When document is clicked, all opened custom select lists are closed.\n */\n\n\t}, {\n\t\tkey: 'closeSelectGlobally',\n\t\tvalue: function closeSelectGlobally() {\n\t\t\t$(document).on('click', function (e) {\n\t\t\t\tvar isOpen = $('.select-custom__lists').hasClass('visible');\n\t\t\t\tif (isOpen) $('.select-custom__lists').removeClass('visible').addClass('invisible');\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'onSelectOption',\n\t\tvalue: function onSelectOption(trigger) {\n\t\t\ttrigger.on('click', '.select-custom__lists li', function (e) {\n\n\t\t\t\tvar currentList = $(e.currentTarget).closest('.select-custom').find('.select-custom__lists');\n\t\t\t\tcurrentList.toggleClass('visible invisible');\n\n\t\t\t\t// push the label to the top\n\t\t\t\t$(e.currentTarget).closest('.select-custom').find('.title').css({\n\t\t\t\t\t'top': '0',\n\t\t\t\t\t'opacity': '1',\n\t\t\t\t\t'font-size': '.9em'\n\t\t\t\t});\n\n\t\t\t\t// assigned the value\n\t\t\t\tvar selectedVal = $(e.currentTarget).attr('data-value');\n\t\t\t\tvar selected = $(e.currentTarget).text();\n\n\t\t\t\t$(e.currentTarget).closest('.select-custom').find('.select-custom__header .value').text(selected);\n\t\t\t\t$(e.currentTarget).closest('.js-m2u-select').find('select').val(selectedVal);\n\n\t\t\t\t// for content change\n\t\t\t\tvar selectRoot = void 0;\n\t\t\t\tvar targetClass = void 0;\n\t\t\t\tvar targetID = void 0;\n\t\t\t\tif ($(e.currentTarget).parents('.m2u-select').hasClass('js-content-change')) {\n\t\t\t\t\tselectRoot = $(e.currentTarget).parents('.m2u-select.js-content-change');\n\t\t\t\t\ttargetClass = selectRoot.attr('data-target-class');\n\t\t\t\t\ttargetID = selectRoot.find('select').val();\n\n\t\t\t\t\t$('.js-content-change-target.' + targetClass).hide();\n\t\t\t\t\t$('.js-content-change-target#' + targetID).show();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent() {\n\t\t\tvar _this = this;\n\n\t\t\tif (this.trigger.length) {\n\t\t\t\t// attach click event on select header and stop event bubble\n\t\t\t\tthis.trigger.on('click', function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\n\t\t\t\tthis.trigger.each(function (i, e) {\n\t\t\t\t\tvar sel = $(e).find('select');\n\t\t\t\t\t_this.createCustomSelectBox({\n\t\t\t\t\t\tselect: $(e).find('select'),\n\t\t\t\t\t\ttrigger: sel.closest('.js-m2u-select'),\n\t\t\t\t\t\tname: sel.attr('name'),\n\t\t\t\t\t\tlabel: sel.attr('data-label'),\n\t\t\t\t\t\toptions: sel.find('option'),\n\t\t\t\t\t\trequired: sel.attr('required')\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// -------------------------------------------------------\n\t\t\t// function for content tabs (class name : .content-tabs)\n\t\t\t// -------------------------------------------------------\n\t\t\tvar selOptTemp;\n\t\t\tvar cTabsClass;\n\t\t\tvar cTabsID;\n\t\t\tvar cTabsText;\n\t\t\tvar current;\n\t\t\tvar target;\n\t\t\t$('.content-tabs').each(function () {\n\t\t\t\t// set active on first content\n\t\t\t\tcTabsClass = $(this).attr('data-targetClass');\n\t\t\t\tcTabsID = $(this).find('.tab-handle:first-child').attr('data-targetID');\n\t\t\t\ttarget = $('.content-tabs-target.' + cTabsClass + '#' + cTabsID);\n\n\t\t\t\t$(this).find('.tab-handle:first-child').addClass('active').siblings().removeClass('active');\n\t\t\t\ttarget.show().siblings('.content-tabs-target').hide();\n\n\t\t\t\t// append i and select for mobile version\n\t\t\t\t$(this).append('');\n\t\t\t\tselOptTemp = '';\n\t\t\t\t$(this).append(selOptTemp);\n\t\t\t});\n\t\t\t// change content on handle click (desktop)\n\t\t\t$('body').on('click', '.tab-handle', function () {\n\t\t\t\tif ($(window).width() >= 992 && !$(this).hasClass('active')) {\n\t\t\t\t\tcTabsClass = $(this).parent('.content-tabs').attr('data-targetClass');\n\t\t\t\t\tcTabsID = $(this).siblings('.active').attr('data-targetID');\n\t\t\t\t\tcurrent = $('.content-tabs-target.' + cTabsClass + '#' + cTabsID);\n\n\t\t\t\t\t$(this).addClass('active').siblings().removeClass('active');\n\t\t\t\t\tcTabsID = $(this).attr('data-targetID');\n\t\t\t\t\ttarget = $('.content-tabs-target.' + cTabsClass + '#' + cTabsID);\n\n\t\t\t\t\tcurrent.fadeOut(300, function () {\n\t\t\t\t\t\ttarget.fadeIn(300);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\t// change content on select change (mobile)\n\t\t\t$('body').on('change', '.content-tabs select', function () {\n\t\t\t\tif ($(window).width() < 992) {\n\t\t\t\t\tcTabsClass = $(this).attr('data-targetClass');\n\t\t\t\t\tcTabsID = $(this).siblings('.active').attr('data-targetID');\n\t\t\t\t\tcurrent = $('.content-tabs-target.' + cTabsClass + '#' + cTabsID);\n\n\t\t\t\t\tcTabsID = $(this).val();\n\t\t\t\t\ttarget = $('.content-tabs-target.' + cTabsClass + '#' + cTabsID);\n\t\t\t\t\t$('.tab-handle[data-targetID=\"' + cTabsID + '\"]').addClass('active').siblings().removeClass('active');\n\n\t\t\t\t\tcurrent.fadeOut(300, function () {\n\t\t\t\t\t\ttarget.fadeIn(300);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn SelectBox;\n}();\n\nexports.default = SelectBox;\n\n},{}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ToggleCardCompare = function () {\n\tfunction ToggleCardCompare() {\n\t\t_classCallCheck(this, ToggleCardCompare);\n\n\t\tthis.cardNames = [];\n\t\tthis.i;\n\t\tthis.n;\n\t}\n\n\t_createClass(ToggleCardCompare, [{\n\t\tkey: 'showCompare',\n\t\tvalue: function showCompare(cards) {\n\t\t\tvar _this = this;\n\t\t\t_this.i = 0;\n\n\t\t\t$('.compare-area > div').each(function () {\n\t\t\t\t$(this).find('.compared-features').attr('data-cardname', cards[_this.i]);\n\t\t\t\t_this.i++;\n\t\t\t});\n\t\t\t$('.card-compare').addClass('show');\n\t\t}\n\t}, {\n\t\tkey: 'hideCompare',\n\t\tvalue: function hideCompare() {\n\t\t\t$('.card-compare').removeClass('show').find('.compare-area > div').each(function () {\n\t\t\t\t$(this).find('.compared-features').attr('data-cardname', '');\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent() {\n\t\t\tvar _this = this;\n\n\t\t\t$('.home-chat').on('click', '.compare-button .button', function () {\n\t\t\t\t_this.n = 0;\n\t\t\t\t$('.card-choice .list .card-display').each(function () {\n\t\t\t\t\tif ($(this).find('input').prop('checked')) {\n\t\t\t\t\t\t_this.n++;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (_this.n == 0) {\n\t\t\t\t\t$('.card-choice .sub').html('Select 2 cards to compare');\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (_this.n == 1) {\n\t\t\t\t\t$('.card-choice .sub').html('Select 1 more cards to compare');\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\t$('.card-choice .sub').html('Select 2 cards to compare');\n\t\t\t\t\t_this.cardNames.length = 0;\n\t\t\t\t\t$('.card-choice .list .card-display').each(function () {\n\t\t\t\t\t\tif ($(this).find('input:checked').length) {\n\t\t\t\t\t\t\t_this.cardNames.push($(this).find('.card-item').attr('data-cardname'));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t_this.showCompare(_this.cardNames);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$('.card-compare').on('click', '.close', function () {\n\t\t\t\t_this.hideCompare();\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn ToggleCardCompare;\n}();\n\nexports.default = ToggleCardCompare;\n\n},{}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ToggleChatCardDetail = function () {\n\tfunction ToggleChatCardDetail() {\n\t\t_classCallCheck(this, ToggleChatCardDetail);\n\n\t\tthis.cardName;\n\t}\n\n\t_createClass(ToggleChatCardDetail, [{\n\t\tkey: 'showCardDetail',\n\t\tvalue: function showCardDetail(cardName) {\n\t\t\t$('.chat-card-detail .features').scrollTop(0);\n\t\t\t$('.chat-card-detail').addClass('show').find('.heading .card-data').attr('data-cardname', cardName);\n\t\t}\n\t}, {\n\t\tkey: 'hideCardDetail',\n\t\tvalue: function hideCardDetail() {\n\t\t\t$('.chat-card-detail').removeClass('show').find('.heading .card-data').attr('data-cardname', '');\n\t\t}\n\t}, {\n\t\tkey: 'selectCardCheckbox',\n\t\tvalue: function selectCardCheckbox(cardName) {\n\t\t\t$('.card-choice .list .card-display').each(function () {\n\t\t\t\tif ($(this).find('.card-item').attr('data-cardname') == cardName) {\n\t\t\t\t\t$(this).find('input').prop('checked', true).parent().addClass('checked').parents('.card-item').addClass('selected');\n\t\t\t\t} else {\n\t\t\t\t\t$(this).find('input').prop('checked', false).parent().removeClass('checked').parents('.card-item').removeClass('selected');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent() {\n\t\t\tvar _this = this;\n\n\t\t\t// open detail popup from list\n\t\t\t$('.home-chat').on('click', '.card-choice .card-item .button', function () {\n\t\t\t\t_this.cardName = $(this).parents('.card-item').attr('data-cardname');\n\t\t\t\t_this.showCardDetail(_this.cardName);\n\t\t\t});\n\n\t\t\t// open detail popup from compare popup\n\t\t\t$('.home-chat').on('click', '.compared-features .more span', function () {\n\t\t\t\t_this.cardName = $(this).parents('.compared-features').attr('data-cardname');\n\t\t\t\t_this.showCardDetail(_this.cardName);\n\t\t\t});\n\n\t\t\t// close detail popup\n\t\t\t$('.chat-card-detail').on('click', '.close', function () {\n\t\t\t\t_this.hideCardDetail();\n\t\t\t});\n\n\t\t\t// compare button inside card detail page :\n\t\t\t// close popups and select card checkbox in list\n\t\t\t$('.chat-card-detail').on('click', '.button.compare', function () {\n\t\t\t\t_this.cardName = $(this).parents('.card-data').attr('data-cardname');\n\t\t\t\t_this.selectCardCheckbox(_this.cardName);\n\t\t\t\t_this.hideCardDetail();\n\t\t\t\t// also close compare popup\n\t\t\t\t$('.card-compare').removeClass('show').find('.compare-area > div').each(function () {\n\t\t\t\t\t$(this).find('.compared-features').attr('data-cardname', '');\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn ToggleChatCardDetail;\n}();\n\nexports.default = ToggleChatCardDetail;\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TopNavLink = function () {\n function TopNavLink() {\n _classCallCheck(this, TopNavLink);\n\n this.elem = $('.top-nav-link');\n }\n\n _createClass(TopNavLink, [{\n key: 'initEvent',\n value: function initEvent() {\n this.elem.click(function () {\n $(this).hasClass('active') ? $(this).removeClass('active') : $(this).addClass('active');\n });\n\n var defaultText = this.elem.find('a.active').text();\n this.elem.find('.selected-text').text(defaultText);\n\n this.elem.find('a').click(function () {\n $(this).parents('.top-nav-link').find('.selected-text').text($(this).text());\n });\n }\n }]);\n\n return TopNavLink;\n}();\n\nexports.default = TopNavLink;\n\n},{}],17:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar userAgent = function userAgent() {\n return window.navigator.userAgent;\n};\n\nexports.default = userAgent;\n\n},{}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _centerImage = require('../components/center-image');\n\nvar _centerImage2 = _interopRequireDefault(_centerImage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar centerImage = new _centerImage2.default();\n\nvar Header = function () {\n function Header() {\n _classCallCheck(this, Header);\n }\n\n _createClass(Header, [{\n key: 'initEvent',\n value: function initEvent() {\n\n $('.js-menu-hamburger').on('mouseenter', function (e) {\n var _this = $(e.currentTarget);\n\n _this.addClass('is-hover');\n\n setTimeout(function () {\n _this.removeClass('is-hover');\n }, 2000);\n }).on('click', function (e) {\n $(e.currentTarget).removeClass('is-hover');\n });\n\n $('.site-header').on('click', '.js-site-menu', function (e) {\n e.preventDefault();\n $('.header-menu').removeClass('hidden');\n $('.header-menu .menu-overlay').fadeIn(500);\n });\n $('.header-menu').on('click', '.menu-overlay, .close', function () {\n $('.header-menu').addClass('hidden');\n $('.header-menu .menu-overlay').fadeOut(500);\n });\n centerImage.initEvent('.header-menu .side .banner-item', 'a');\n\n // homepage only\n if ($('.site-header').hasClass('js-dynamic-header')) {\n var scrollOffset;\n $(window).on('scroll', function () {\n scrollOffset = $('.js-d-header-offset').outerHeight() - 75;\n if ($(window).scrollTop() >= scrollOffset) {\n $('.site-header').removeClass('absolute').addClass('fixed').addClass('show');\n $('.site-nav').css({\n \"right\": \"0\"\n });\n } else if ($(window).scrollTop() >= scrollOffset / 2) {\n $('.site-header').removeClass('show').addClass('absolute');\n $('.site-nav').css({\n \"right\": \"-999px\"\n });\n } else {\n $('.site-header').removeClass('show').removeClass('fixed').addClass('absolute');\n $('.site-nav').css({\n \"right\": \"0\"\n });\n }\n });\n }\n\n // these codes are for footer mobile version\n // yes, footer. you read it right :p\n var animRun = 0;\n var group;\n $('.footer-mid').on('click', 'h4 label', function () {\n if ($(window).width() < 768) {\n if (animRun == 0) {\n animRun = 1;\n group = $(this).parents('.group');\n if (group.hasClass('active')) {\n group.removeClass('active');\n group.find('.links').slideUp(400, function () {\n animRun = 0;\n });\n } else {\n group.addClass('active');\n group.find('.links').slideDown(400, function () {\n animRun = 0;\n });\n }\n }\n }\n });\n }\n }]);\n\n return Header;\n}();\n\nexports.default = Header;\n\n},{\"../components/center-image\":4}],19:[function(require,module,exports){\n\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! Drum.JS - v0.1dev - 2014-01-09\n * http://mb.aquarius.uberspace.de/drum.js\n *\n * Copyright (c) 2013 Marcel Bretschneider ;\n * Licensed under the MIT license */\n\n(function ($) {\n\t\"use strict\";\n\n\tvar DrumIcon = function () {\n\t\tvar svgelem = function svgelem(tagName) {\n\t\t\treturn document.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n\t\t};\n\t\tvar svgcanvas = function svgcanvas(width, height) {\n\t\t\tvar svg = $(svgelem(\"svg\"));\n\t\t\t$(svg).attr(\"width\", width);\n\t\t\t$(svg).attr(\"height\", height);\n\n\t\t\tvar g = $(svgelem(\"g\"));\n\t\t\t$(svg).append(g);\n\n\t\t\treturn svg;\n\t\t};\n\t\tvar container = function container(className) {\n\t\t\tvar container = document.createElement(\"div\");\n\t\t\t$(container).attr(\"class\", className);\n\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t$(container).append(inner);\n\t\t\treturn container;\n\t\t};\n\t\tvar path = function path(settings) {\n\t\t\tvar p = $(svgelem(\"path\"));\n\t\t\tvar styles = {\n\t\t\t\t\"fill\": \"none\",\n\t\t\t\t\"stroke\": settings.dail_stroke_color,\n\t\t\t\t\"stroke-width\": settings.dail_stroke_width + \"px\",\n\t\t\t\t\"stroke-linecap\": \"butt\",\n\t\t\t\t\"stroke-linejoin\": \"miter\",\n\t\t\t\t\"stroke-opacity\": \"1\"\n\t\t\t};\n\t\t\tvar style = \"\";\n\t\t\tfor (var i in styles) {\n\t\t\t\t$(p).attr(i, styles[i]);\n\t\t\t}\n\t\t\treturn p;\n\t\t};\n\t\treturn {\n\t\t\tup: function up(settings) {\n\t\t\t\tvar width = settings.dail_w;\n\t\t\t\tvar height = settings.dail_h;\n\n\t\t\t\tvar svg = svgcanvas(width, height);\n\t\t\t\tvar p = path(settings);\n\n\t\t\t\t$(p).attr(\"d\", \"m0,\" + (height + settings.dail_stroke_width) + \"l\" + width / 2 + \",-\" + height + \"l\" + width / 2 + \",\" + height);\n\t\t\t\t$(svg).find(\"g\").append(p);\n\n\t\t\t\tvar cont = container(\"dial up\");\n\t\t\t\t$(cont).find(\"div\").append(svg);\n\t\t\t\treturn cont;\n\t\t\t},\n\t\t\tdown: function down(settings) {\n\t\t\t\tvar width = settings.dail_w;\n\t\t\t\tvar height = settings.dail_h;\n\n\t\t\t\tvar svg = svgcanvas(width, height);\n\t\t\t\tvar p = path(settings);\n\n\t\t\t\t$(p).attr(\"d\", \"m0,-\" + settings.dail_stroke_width + \"l\" + width / 2 + \",\" + height + \"l\" + width / 2 + \",-\" + height);\n\t\t\t\t$(svg).find(\"g\").append(p);\n\n\t\t\t\tvar cont = container(\"dial down\");\n\t\t\t\t$(cont).find(\"div\").append(svg);\n\t\t\t\treturn cont;\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar PanelModel = function PanelModel(index, data_index, settings) {\n\t\tthis.index = index;\n\t\tthis.dataModel = new function (data, i) {\n\t\t\tthis.data = data;\n\t\t\tthis.index = i;\n\t\t\tthis.getText = function () {\n\t\t\t\treturn this.data[this.index];\n\t\t\t};\n\t\t}(settings.data, data_index);\n\n\t\tthis.init = function () {\n\t\t\tthis.angle = settings.theta * index;\n\t\t\tthis.elem = document.createElement('figure');\n\t\t\t$(this.elem).addClass('a' + this.angle * 100);\n\t\t\t$(this.elem).css('opacity', '0.5');\n\t\t\t$(this.elem).css(settings.transformProp, settings.rotateFn + '(' + -this.angle + 'deg) translateZ(' + settings.radius + 'px)');\n\t\t\tthis.setText();\n\t\t};\n\t\tthis.setText = function () {\n\t\t\t$(this.elem).text(this.dataModel.getText());\n\t\t};\n\t\tthis.update = function (data_index) {\n\t\t\tif (this.dataModel.index != data_index) {\n\t\t\t\tthis.dataModel.index = data_index;\n\t\t\t\tthis.setText();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar Drum = function Drum(element, options, transformProp) {\n\t\tvar HTMLselect = $(element)[0];\n\t\tvar obj = this;\n\t\tvar settings = $.extend({\n\t\t\tpanelCount: 16,\n\t\t\trotateFn: 'rotateX',\n\t\t\tinteractive: true,\n\t\t\tdail_w: 20,\n\t\t\tdail_h: 5,\n\t\t\tdail_stroke_color: '#999999',\n\t\t\tdail_stroke_width: 1\n\t\t}, options || {});\n\n\t\tsettings.transformProp = transformProp;\n\t\tsettings.rotation = 0;\n\t\tsettings.distance = 0;\n\t\tsettings.last_angle = 0;\n\t\tsettings.theta = 360 / settings.panelCount;\n\n\t\tsettings.initselect = HTMLselect.selectedIndex;\n\n\t\tif (settings.transformProp) {\n\t\t\tsettings.data = [];\n\t\t\tfor (var i = 0; i < HTMLselect.children.length; i++) {\n\t\t\t\tsettings.data.push($(HTMLselect.children[i]).text());\n\t\t\t}\n\n\t\t\t$(element).hide();\n\n\t\t\tvar wrapper = document.createElement(\"div\");\n\t\t\t$(wrapper).addClass(\"drum-wrapper\");\n\n\t\t\tif (settings.id) $(wrapper).attr('id', settings.id);else if (HTMLselect.id) $(wrapper).attr('id', 'drum_' + HTMLselect.id);else if ($(HTMLselect).attr('name')) $(wrapper).attr('id', 'drum_' + $(HTMLselect).attr('name'));\n\n\t\t\t$(HTMLselect).after(wrapper);\n\n\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t$(inner).addClass(\"inner\");\n\t\t\t$(inner).appendTo(wrapper);\n\n\t\t\tvar container = document.createElement(\"div\");\n\t\t\t$(container).addClass(\"container\");\n\t\t\t$(container).appendTo(inner);\n\n\t\t\tvar drum = document.createElement(\"div\");\n\t\t\t$(drum).addClass(\"drum\");\n\t\t\t$(drum).appendTo(container);\n\n\t\t\tif (settings.interactive === true) {\n\t\t\t\tvar dialUp = DrumIcon.up(settings);\n\t\t\t\t$(wrapper).append(dialUp);\n\n\t\t\t\tvar dialDown = DrumIcon.down(settings);\n\t\t\t\t$(wrapper).append(dialDown);\n\n\t\t\t\t$(wrapper).hover(function () {\n\t\t\t\t\t$(this).find(\".up\").show();\n\t\t\t\t\t$(this).find(\".down\").show();\n\t\t\t\t}, function () {\n\t\t\t\t\t$(this).find(\".up\").hide();\n\t\t\t\t\t$(this).find(\".down\").hide();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsettings.radius = Math.round($(drum).height() / 2 / Math.tan(Math.PI / settings.panelCount));\n\t\t\tsettings.mapping = [];\n\t\t\tvar c = 0;\n\t\t\tfor (var i = 0; i < settings.panelCount; i++) {\n\t\t\t\tif (settings.data.length == i) break;\n\t\t\t\tvar j = c;\n\t\t\t\tif (c >= settings.panelCount / 2) {\n\t\t\t\t\tj = settings.data.length - (settings.panelCount - c);\n\t\t\t\t}\n\t\t\t\tc++;\n\n\t\t\t\tvar panel = new PanelModel(i, j, settings);\n\t\t\t\tpanel.init();\n\t\t\t\tsettings.mapping.push(panel);\n\n\t\t\t\t$(drum).append(panel.elem);\n\t\t\t}\n\n\t\t\tvar getNearest = function getNearest(deg) {\n\t\t\t\tdeg = deg || settings.rotation;\n\t\t\t\tvar th = settings.theta / 2;\n\t\t\t\tvar n = 360;\n\t\t\t\tvar angle = ((deg + th) % n + n) % n;\n\t\t\t\tangle = angle - angle % settings.theta;\n\t\t\t\tvar l = (settings.data.length - 1) * settings.theta;\n\t\t\t\tif (angle > l) {\n\t\t\t\t\tif (deg > 0) return l;else return 0;\n\t\t\t\t}\n\t\t\t\treturn angle;\n\t\t\t};\n\t\t\tvar getSelected = function getSelected() {\n\t\t\t\tvar nearest = getNearest();\n\t\t\t\tfor (var i in settings.mapping) {\n\t\t\t\t\tif (settings.mapping[i].angle == nearest) {\n\t\t\t\t\t\treturn settings.mapping[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar update = function update(selected) {\n\t\t\t\tvar c,\n\t\t\t\t list = [],\n\t\t\t\t pc = settings.panelCount,\n\t\t\t\t ph = settings.panelCount / 2,\n\t\t\t\t l = settings.data.length;\n\t\t\t\tvar i = selected.index;\n\t\t\t\tvar j = selected.dataModel.index;\n\t\t\t\tfor (var k = j - ph; k <= j + ph - 1; k++) {\n\t\t\t\t\tc = k;\n\t\t\t\t\tif (k < 0) c = l + k;\n\t\t\t\t\tif (k > l - 1) c = k - l;\n\t\t\t\t\tlist.push(c);\n\t\t\t\t}\n\t\t\t\tvar t = list.slice(ph - i);\n\t\t\t\tlist = t.concat(list.slice(0, pc - t.length));\n\t\t\t\tfor (var i = 0; i < settings.mapping.length; i++) {\n\t\t\t\t\tsettings.mapping[i].update(list[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar transform = function transform(fire_event) {\n\t\t\t\t$(drum).css(settings.transformProp, 'translateZ(-' + settings.radius + 'px) ' + settings.rotateFn + '(' + settings.rotation + 'deg)');\n\n\t\t\t\tvar selected = getSelected();\n\t\t\t\tif (selected) {\n\t\t\t\t\tvar data = selected.dataModel;\n\n\t\t\t\t\tvar last_index = HTMLselect.selectedIndex;\n\t\t\t\t\tHTMLselect.selectedIndex = data.index;\n\n\t\t\t\t\tif (fire_event && last_index != data.index && settings.onChange) settings.onChange(HTMLselect);\n\n\t\t\t\t\t$(selected.elem).css(\"opacity\", 1);\n\t\t\t\t\t$(\"figure:not(.a\" + selected.angle * 100 + \", .hidden)\", drum).css(\"opacity\", \"0.5\");\n\t\t\t\t\tif (selected.angle != settings.last_angle && [0, 90, 180, 270].indexOf(selected.angle) >= 0) {\n\t\t\t\t\t\tsettings.last_angle = selected.angle;\n\t\t\t\t\t\tupdate(selected);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.setIndex = function (dataindex) {\n\t\t\t\tvar page = Math.floor(dataindex / settings.panelCount);\n\t\t\t\tvar index = dataindex - page * settings.panelCount;\n\t\t\t\tvar selected = new PanelModel(index, dataindex, settings);\n\t\t\t\tupdate(selected);\n\t\t\t\tsettings.rotation = index * settings.theta;\n\t\t\t\ttransform(false);\n\t\t\t};\n\t\t} else {\n\t\t\tthis.setIndex = function (dataindex) {\n\t\t\t\tHTMLselect.selectedIndex = dataindex;\n\t\t\t};\n\t\t}\n\n\t\tthis.setIndex(settings.initselect);\n\n\t\tthis.getIndex = function () {\n\t\t\treturn getSelected().dataModel.index;\n\t\t};\n\n\t\tif (settings.transformProp) {\n\t\t\tif (typeof Hammer != \"undefined\") {\n\t\t\t\tsettings.touch = new Hammer(wrapper, {\n\t\t\t\t\tprevent_default: true,\n\t\t\t\t\tno_mouseevents: true\n\t\t\t\t});\n\n\t\t\t\tsettings.touch.on(\"dragstart\", function (e) {\n\t\t\t\t\tsettings.distance = 0;\n\t\t\t\t});\n\n\t\t\t\tsettings.touch.on(\"drag\", function (e) {\n\t\t\t\t\tvar evt = [\"up\", \"down\"];\n\t\t\t\t\tif (evt.indexOf(e.gesture.direction) >= 0) {\n\t\t\t\t\t\tsettings.rotation += Math.round(e.gesture.deltaY - settings.distance) * -1;\n\t\t\t\t\t\ttransform(true);\n\t\t\t\t\t\tsettings.distance = e.gesture.deltaY;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsettings.touch.on(\"dragend\", function (e) {\n\t\t\t\t\tsettings.rotation = getNearest();\n\t\t\t\t\ttransform(true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (settings.interactive) {\n\t\t\t\t$(dialUp).click(function (e) {\n\t\t\t\t\tvar deg = settings.rotation + settings.theta + 1;\n\t\t\t\t\tsettings.rotation = getNearest(deg);\n\t\t\t\t\ttransform(true);\n\t\t\t\t});\n\t\t\t\t$(dialDown).click(function (e) {\n\t\t\t\t\tvar deg = settings.rotation - settings.theta - 1;\n\t\t\t\t\tsettings.rotation = getNearest(deg);\n\t\t\t\t\ttransform(true);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tvar methods = {\n\t\tgetIndex: function getIndex() {\n\t\t\tif ($(this).data('drum')) return $(this).data('drum').getIndex();\n\t\t\treturn false;\n\t\t},\n\t\tsetIndex: function setIndex(index) {\n\t\t\tif ($(this).data('drum')) $(this).data('drum').setIndex(index);\n\t\t},\n\t\tinit: function init(options) {\n\t\t\tvar transformProp = false;\n\t\t\tif (!navigator.userAgent.match(/Trident/i) && !navigator.userAgent.match(/MSIE/i)) {\n\t\t\t\tvar prefixes = 'transform WebkitTransform MozTransform OTransform msTransform'.split(' ');\n\t\t\t\tfor (var i = 0; i < prefixes.length; i++) {\n\t\t\t\t\tif (document.createElement('div').style[prefixes[i]] !== undefined) {\n\t\t\t\t\t\ttransformProp = prefixes[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar element = $(this);\n\t\t\tif (!element.data('drum')) {\n\t\t\t\tvar drum = new Drum(element, options, transformProp);\n\t\t\t\telement.data('drum', drum);\n\t\t\t}\n\t\t}\n\t};\n\n\t$.fn.drum = function (methodOrOptions) {\n\t\tvar _arguments = arguments;\n\t\treturn this.each(function () {\n\t\t\tif (methods[methodOrOptions]) {\n\t\t\t\treturn methods[methodOrOptions].apply(this, Array.prototype.slice.call(_arguments, 1));\n\t\t\t} else if ((typeof methodOrOptions === \"undefined\" ? \"undefined\" : _typeof(methodOrOptions)) === 'object' || !methodOrOptions) {\n\t\t\t\treturn methods.init.apply(this, _arguments);\n\t\t\t} else {\n\t\t\t\t$.error('Method ' + methodOrOptions + ' does not exist on jQuery.drum');\n\t\t\t}\n\t\t});\n\t};\n})(jQuery);\n\n},{}],20:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! Hammer.JS - v1.0.6 - 2014-01-02\n * http://eightmedia.github.com/hammer.js\n *\n * Copyright (c) 2014 Jorik Tangelder ;\n * Licensed under the MIT license */\n\n(function (window, undefined) {\n 'use strict';\n\n /**\n * Hammer\n * use this to create instances\n * @param {HTMLElement} element\n * @param {Object} options\n * @returns {Hammer.Instance}\n * @constructor\n */\n\n var Hammer = function Hammer(element, options) {\n return new Hammer.Instance(element, options || {});\n };\n\n // default settings\n Hammer.defaults = {\n // add styles and attributes to the element to prevent the browser from doing\n // its native behavior. this doesnt prevent the scrolling, but cancels\n // the contextmenu, tap highlighting etc\n // set to false to disable this\n stop_browser_behavior: {\n // this also triggers onselectstart=false for IE\n userSelect: 'none',\n // this makes the element blocking in IE10 >, you could experiment with the value\n // see for more options this issue; https://github.com/EightMedia/hammer.js/issues/241\n touchAction: 'none',\n touchCallout: 'none',\n contentZooming: 'none',\n userDrag: 'none',\n tapHighlightColor: 'rgba(0,0,0,0)'\n\n //\n // more settings are defined per gesture at gestures.js\n //\n } };\n\n // detect touchevents\n Hammer.HAS_POINTEREVENTS = window.navigator.pointerEnabled || window.navigator.msPointerEnabled;\n Hammer.HAS_TOUCHEVENTS = 'ontouchstart' in window;\n\n // dont use mouseevents on mobile devices\n Hammer.MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android|silk/i;\n Hammer.NO_MOUSEEVENTS = Hammer.HAS_TOUCHEVENTS && window.navigator.userAgent.match(Hammer.MOBILE_REGEX);\n\n // eventtypes per touchevent (start, move, end)\n // are filled by Hammer.event.determineEventTypes on setup\n Hammer.EVENT_TYPES = {};\n\n // direction defines\n Hammer.DIRECTION_DOWN = 'down';\n Hammer.DIRECTION_LEFT = 'left';\n Hammer.DIRECTION_UP = 'up';\n Hammer.DIRECTION_RIGHT = 'right';\n\n // pointer type\n Hammer.POINTER_MOUSE = 'mouse';\n Hammer.POINTER_TOUCH = 'touch';\n Hammer.POINTER_PEN = 'pen';\n\n // touch event defines\n Hammer.EVENT_START = 'start';\n Hammer.EVENT_MOVE = 'move';\n Hammer.EVENT_END = 'end';\n\n // hammer document where the base events are added at\n Hammer.DOCUMENT = window.document;\n\n // plugins and gestures namespaces\n Hammer.plugins = Hammer.plugins || {};\n Hammer.gestures = Hammer.gestures || {};\n\n // if the window events are set...\n Hammer.READY = false;\n\n /**\n * setup events to detect gestures on the document\n */\n function setup() {\n if (Hammer.READY) {\n return;\n }\n\n // find what eventtypes we add listeners to\n Hammer.event.determineEventTypes();\n\n // Register all gestures inside Hammer.gestures\n Hammer.utils.each(Hammer.gestures, function (gesture) {\n Hammer.detection.register(gesture);\n });\n\n // Add touch events on the document\n Hammer.event.onTouch(Hammer.DOCUMENT, Hammer.EVENT_MOVE, Hammer.detection.detect);\n Hammer.event.onTouch(Hammer.DOCUMENT, Hammer.EVENT_END, Hammer.detection.detect);\n\n // Hammer is ready...!\n Hammer.READY = true;\n }\n\n Hammer.utils = {\n /**\n * extend method,\n * also used for cloning when dest is an empty object\n * @param {Object} dest\n * @param {Object} src\n * @parm {Boolean} merge do a merge\n * @returns {Object} dest\n */\n extend: function extend(dest, src, merge) {\n for (var key in src) {\n if (dest[key] !== undefined && merge) {\n continue;\n }\n dest[key] = src[key];\n }\n return dest;\n },\n\n /**\n * for each\n * @param obj\n * @param iterator\n */\n each: function each(obj, iterator, context) {\n var i, length;\n // native forEach on arrays\n if ('forEach' in obj) {\n obj.forEach(iterator, context);\n }\n // arrays\n else if (obj.length !== undefined) {\n for (i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === false) {\n return;\n }\n }\n }\n // objects\n else {\n for (i in obj) {\n if (obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj) === false) {\n return;\n }\n }\n }\n },\n\n /**\n * find if a node is in the given parent\n * used for event delegation tricks\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @returns {boolean} has_parent\n */\n hasParent: function hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n },\n\n /**\n * get the center of all the touches\n * @param {Array} touches\n * @returns {Object} center\n */\n getCenter: function getCenter(touches) {\n var valuesX = [],\n valuesY = [];\n\n Hammer.utils.each(touches, function (touch) {\n // I prefer clientX because it ignore the scrolling position\n valuesX.push(typeof touch.clientX !== 'undefined' ? touch.clientX : touch.pageX);\n valuesY.push(typeof touch.clientY !== 'undefined' ? touch.clientY : touch.pageY);\n });\n\n return {\n pageX: (Math.min.apply(Math, valuesX) + Math.max.apply(Math, valuesX)) / 2,\n pageY: (Math.min.apply(Math, valuesY) + Math.max.apply(Math, valuesY)) / 2\n };\n },\n\n /**\n * calculate the velocity between two points\n * @param {Number} delta_time\n * @param {Number} delta_x\n * @param {Number} delta_y\n * @returns {Object} velocity\n */\n getVelocity: function getVelocity(delta_time, delta_x, delta_y) {\n return {\n x: Math.abs(delta_x / delta_time) || 0,\n y: Math.abs(delta_y / delta_time) || 0\n };\n },\n\n /**\n * calculate the angle between two coordinates\n * @param {Touch} touch1\n * @param {Touch} touch2\n * @returns {Number} angle\n */\n getAngle: function getAngle(touch1, touch2) {\n var y = touch2.pageY - touch1.pageY,\n x = touch2.pageX - touch1.pageX;\n return Math.atan2(y, x) * 180 / Math.PI;\n },\n\n /**\n * angle to direction define\n * @param {Touch} touch1\n * @param {Touch} touch2\n * @returns {String} direction constant, like Hammer.DIRECTION_LEFT\n */\n getDirection: function getDirection(touch1, touch2) {\n var x = Math.abs(touch1.pageX - touch2.pageX),\n y = Math.abs(touch1.pageY - touch2.pageY);\n\n if (x >= y) {\n return touch1.pageX - touch2.pageX > 0 ? Hammer.DIRECTION_LEFT : Hammer.DIRECTION_RIGHT;\n } else {\n return touch1.pageY - touch2.pageY > 0 ? Hammer.DIRECTION_UP : Hammer.DIRECTION_DOWN;\n }\n },\n\n /**\n * calculate the distance between two touches\n * @param {Touch} touch1\n * @param {Touch} touch2\n * @returns {Number} distance\n */\n getDistance: function getDistance(touch1, touch2) {\n var x = touch2.pageX - touch1.pageX,\n y = touch2.pageY - touch1.pageY;\n return Math.sqrt(x * x + y * y);\n },\n\n /**\n * calculate the scale factor between two touchLists (fingers)\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start\n * @param {Array} end\n * @returns {Number} scale\n */\n getScale: function getScale(start, end) {\n // need two fingers...\n if (start.length >= 2 && end.length >= 2) {\n return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]);\n }\n return 1;\n },\n\n /**\n * calculate the rotation degrees between two touchLists (fingers)\n * @param {Array} start\n * @param {Array} end\n * @returns {Number} rotation\n */\n getRotation: function getRotation(start, end) {\n // need two fingers\n if (start.length >= 2 && end.length >= 2) {\n return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]);\n }\n return 0;\n },\n\n /**\n * boolean if the direction is vertical\n * @param {String} direction\n * @returns {Boolean} is_vertical\n */\n isVertical: function isVertical(direction) {\n return direction == Hammer.DIRECTION_UP || direction == Hammer.DIRECTION_DOWN;\n },\n\n /**\n * stop browser default behavior with css props\n * @param {HtmlElement} element\n * @param {Object} css_props\n */\n stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_props) {\n if (!css_props || !element || !element.style) {\n return;\n }\n\n // with css properties for modern browsers\n Hammer.utils.each(['webkit', 'khtml', 'moz', 'Moz', 'ms', 'o', ''], function (vendor) {\n Hammer.utils.each(css_props, function (prop) {\n // vender prefix at the property\n if (vendor) {\n prop = vendor + prop.substring(0, 1).toUpperCase() + prop.substring(1);\n }\n // set the style\n if (prop in element.style) {\n element.style[prop] = prop;\n }\n });\n });\n\n // also the disable onselectstart\n if (css_props.userSelect == 'none') {\n element.onselectstart = function () {\n return false;\n };\n }\n\n // and disable ondragstart\n if (css_props.userDrag == 'none') {\n element.ondragstart = function () {\n return false;\n };\n }\n }\n };\n\n /**\n * create new hammer instance\n * all methods should return the instance itself, so it is chainable.\n * @param {HTMLElement} element\n * @param {Object} [options={}]\n * @returns {Hammer.Instance}\n * @constructor\n */\n Hammer.Instance = function (element, options) {\n var self = this;\n\n // setup HammerJS window events and register all gestures\n // this also sets up the default options\n setup();\n\n this.element = element;\n\n // start/stop detection option\n this.enabled = true;\n\n // merge options\n this.options = Hammer.utils.extend(Hammer.utils.extend({}, Hammer.defaults), options || {});\n\n // add some css to the element to prevent the browser from doing its native behavoir\n if (this.options.stop_browser_behavior) {\n Hammer.utils.stopDefaultBrowserBehavior(this.element, this.options.stop_browser_behavior);\n }\n\n // start detection on touchstart\n Hammer.event.onTouch(element, Hammer.EVENT_START, function (ev) {\n if (self.enabled) {\n Hammer.detection.startDetect(self, ev);\n }\n });\n\n // return instance\n return this;\n };\n\n Hammer.Instance.prototype = {\n /**\n * bind events to the instance\n * @param {String} gesture\n * @param {Function} handler\n * @returns {Hammer.Instance}\n */\n on: function onEvent(gesture, handler) {\n var gestures = gesture.split(' ');\n Hammer.utils.each(gestures, function (gesture) {\n this.element.addEventListener(gesture, handler, false);\n }, this);\n return this;\n },\n\n /**\n * unbind events to the instance\n * @param {String} gesture\n * @param {Function} handler\n * @returns {Hammer.Instance}\n */\n off: function offEvent(gesture, handler) {\n var gestures = gesture.split(' ');\n Hammer.utils.each(gestures, function (gesture) {\n this.element.removeEventListener(gesture, handler, false);\n }, this);\n return this;\n },\n\n /**\n * trigger gesture event\n * @param {String} gesture\n * @param {Object} [eventData]\n * @returns {Hammer.Instance}\n */\n trigger: function triggerEvent(gesture, eventData) {\n // optional\n if (!eventData) {\n eventData = {};\n }\n\n // create DOM event\n var event = Hammer.DOCUMENT.createEvent('Event');\n event.initEvent(gesture, true, true);\n event.gesture = eventData;\n\n // trigger on the target if it is in the instance element,\n // this is for event delegation tricks\n var element = this.element;\n if (Hammer.utils.hasParent(eventData.target, element)) {\n element = eventData.target;\n }\n\n element.dispatchEvent(event);\n return this;\n },\n\n /**\n * enable of disable hammer.js detection\n * @param {Boolean} state\n * @returns {Hammer.Instance}\n */\n enable: function enable(state) {\n this.enabled = state;\n return this;\n }\n };\n\n /**\n * this holds the last move event,\n * used to fix empty touchend issue\n * see the onTouch event for an explanation\n * @type {Object}\n */\n var last_move_event = null;\n\n /**\n * when the mouse is hold down, this is true\n * @type {Boolean}\n */\n var enable_detect = false;\n\n /**\n * when touch events have been fired, this is true\n * @type {Boolean}\n */\n var touch_triggered = false;\n\n Hammer.event = {\n /**\n * simple addEventListener\n * @param {HTMLElement} element\n * @param {String} type\n * @param {Function} handler\n */\n bindDom: function bindDom(element, type, handler) {\n var types = type.split(' ');\n Hammer.utils.each(types, function (type) {\n element.addEventListener(type, handler, false);\n });\n },\n\n /**\n * touch events with mouse fallback\n * @param {HTMLElement} element\n * @param {String} eventType like Hammer.EVENT_MOVE\n * @param {Function} handler\n */\n onTouch: function onTouch(element, eventType, handler) {\n var self = this;\n\n this.bindDom(element, Hammer.EVENT_TYPES[eventType], function bindDomOnTouch(ev) {\n var sourceEventType = ev.type.toLowerCase();\n\n // onmouseup, but when touchend has been fired we do nothing.\n // this is for touchdevices which also fire a mouseup on touchend\n if (sourceEventType.match(/mouse/) && touch_triggered) {\n return;\n }\n\n // mousebutton must be down or a touch event\n else if (sourceEventType.match(/touch/) || // touch events are always on screen\n sourceEventType.match(/pointerdown/) || // pointerevents touch\n sourceEventType.match(/mouse/) && ev.which === 1 // mouse is pressed\n ) {\n enable_detect = true;\n }\n\n // mouse isn't pressed\n else if (sourceEventType.match(/mouse/) && !ev.which) {\n enable_detect = false;\n }\n\n // we are in a touch event, set the touch triggered bool to true,\n // this for the conflicts that may occur on ios and android\n if (sourceEventType.match(/touch|pointer/)) {\n touch_triggered = true;\n }\n\n // count the total touches on the screen\n var count_touches = 0;\n\n // when touch has been triggered in this detection session\n // and we are now handling a mouse event, we stop that to prevent conflicts\n if (enable_detect) {\n // update pointerevent\n if (Hammer.HAS_POINTEREVENTS && eventType != Hammer.EVENT_END) {\n count_touches = Hammer.PointerEvent.updatePointer(eventType, ev);\n }\n // touch\n else if (sourceEventType.match(/touch/)) {\n count_touches = ev.touches.length;\n }\n // mouse\n else if (!touch_triggered) {\n count_touches = sourceEventType.match(/up/) ? 0 : 1;\n }\n\n // if we are in a end event, but when we remove one touch and\n // we still have enough, set eventType to move\n if (count_touches > 0 && eventType == Hammer.EVENT_END) {\n eventType = Hammer.EVENT_MOVE;\n }\n // no touches, force the end event\n else if (!count_touches) {\n eventType = Hammer.EVENT_END;\n }\n\n // store the last move event\n if (count_touches || last_move_event === null) {\n last_move_event = ev;\n }\n\n // trigger the handler\n handler.call(Hammer.detection, self.collectEventData(element, eventType, self.getTouchList(last_move_event, eventType), ev));\n\n // remove pointerevent from list\n if (Hammer.HAS_POINTEREVENTS && eventType == Hammer.EVENT_END) {\n count_touches = Hammer.PointerEvent.updatePointer(eventType, ev);\n }\n }\n\n // on the end we reset everything\n if (!count_touches) {\n last_move_event = null;\n enable_detect = false;\n touch_triggered = false;\n Hammer.PointerEvent.reset();\n }\n });\n },\n\n /**\n * we have different events for each device/browser\n * determine what we need and set them in the Hammer.EVENT_TYPES constant\n */\n determineEventTypes: function determineEventTypes() {\n // determine the eventtype we want to set\n var types;\n\n // pointerEvents magic\n if (Hammer.HAS_POINTEREVENTS) {\n types = Hammer.PointerEvent.getEvents();\n }\n // on Android, iOS, blackberry, windows mobile we dont want any mouseevents\n else if (Hammer.NO_MOUSEEVENTS) {\n types = ['touchstart', 'touchmove', 'touchend touchcancel'];\n }\n // for non pointer events browsers and mixed browsers,\n // like chrome on windows8 touch laptop\n else {\n types = ['touchstart mousedown', 'touchmove mousemove', 'touchend touchcancel mouseup'];\n }\n\n Hammer.EVENT_TYPES[Hammer.EVENT_START] = types[0];\n Hammer.EVENT_TYPES[Hammer.EVENT_MOVE] = types[1];\n Hammer.EVENT_TYPES[Hammer.EVENT_END] = types[2];\n },\n\n /**\n * create touchlist depending on the event\n * @param {Object} ev\n * @param {String} eventType used by the fakemultitouch plugin\n */\n getTouchList: function getTouchList(ev /*, eventType*/) {\n // get the fake pointerEvent touchlist\n if (Hammer.HAS_POINTEREVENTS) {\n return Hammer.PointerEvent.getTouchList();\n }\n // get the touchlist\n else if (ev.touches) {\n return ev.touches;\n }\n // make fake touchlist from mouse position\n else {\n ev.identifier = 1;\n return [ev];\n }\n },\n\n /**\n * collect event data for Hammer js\n * @param {HTMLElement} element\n * @param {String} eventType like Hammer.EVENT_MOVE\n * @param {Object} eventData\n */\n collectEventData: function collectEventData(element, eventType, touches, ev) {\n // find out pointerType\n var pointerType = Hammer.POINTER_TOUCH;\n if (ev.type.match(/mouse/) || Hammer.PointerEvent.matchType(Hammer.POINTER_MOUSE, ev)) {\n pointerType = Hammer.POINTER_MOUSE;\n }\n\n return {\n center: Hammer.utils.getCenter(touches),\n timeStamp: new Date().getTime(),\n target: ev.target,\n touches: touches,\n eventType: eventType,\n pointerType: pointerType,\n srcEvent: ev,\n\n /**\n * prevent the browser default actions\n * mostly used to disable scrolling of the browser\n */\n preventDefault: function preventDefault() {\n if (this.srcEvent.preventManipulation) {\n this.srcEvent.preventManipulation();\n }\n\n if (this.srcEvent.preventDefault) {\n this.srcEvent.preventDefault();\n }\n },\n\n /**\n * stop bubbling the event up to its parents\n */\n stopPropagation: function stopPropagation() {\n this.srcEvent.stopPropagation();\n },\n\n /**\n * immediately stop gesture detection\n * might be useful after a swipe was detected\n * @return {*}\n */\n stopDetect: function stopDetect() {\n return Hammer.detection.stopDetect();\n }\n };\n }\n };\n\n Hammer.PointerEvent = {\n /**\n * holds all pointers\n * @type {Object}\n */\n pointers: {},\n\n /**\n * get a list of pointers\n * @returns {Array} touchlist\n */\n getTouchList: function getTouchList() {\n var self = this;\n var touchlist = [];\n\n // we can use forEach since pointerEvents only is in IE10\n Hammer.utils.each(self.pointers, function (pointer) {\n touchlist.push(pointer);\n });\n\n return touchlist;\n },\n\n /**\n * update the position of a pointer\n * @param {String} type Hammer.EVENT_END\n * @param {Object} pointerEvent\n */\n updatePointer: function updatePointer(type, pointerEvent) {\n if (type == Hammer.EVENT_END) {\n this.pointers = {};\n } else {\n pointerEvent.identifier = pointerEvent.pointerId;\n this.pointers[pointerEvent.pointerId] = pointerEvent;\n }\n\n return Object.keys(this.pointers).length;\n },\n\n /**\n * check if ev matches pointertype\n * @param {String} pointerType Hammer.POINTER_MOUSE\n * @param {PointerEvent} ev\n */\n matchType: function matchType(pointerType, ev) {\n if (!ev.pointerType) {\n return false;\n }\n\n var pt = ev.pointerType,\n types = {};\n types[Hammer.POINTER_MOUSE] = pt === ev.MSPOINTER_TYPE_MOUSE || pt === Hammer.POINTER_MOUSE;\n types[Hammer.POINTER_TOUCH] = pt === ev.MSPOINTER_TYPE_TOUCH || pt === Hammer.POINTER_TOUCH;\n types[Hammer.POINTER_PEN] = pt === ev.MSPOINTER_TYPE_PEN || pt === Hammer.POINTER_PEN;\n return types[pointerType];\n },\n\n /**\n * get events\n */\n getEvents: function getEvents() {\n return ['pointerdown MSPointerDown', 'pointermove MSPointerMove', 'pointerup pointercancel MSPointerUp MSPointerCancel'];\n },\n\n /**\n * reset the list\n */\n reset: function reset() {\n this.pointers = {};\n }\n };\n\n Hammer.detection = {\n // contains all registred Hammer.gestures in the correct order\n gestures: [],\n\n // data of the current Hammer.gesture detection session\n current: null,\n\n // the previous Hammer.gesture session data\n // is a full clone of the previous gesture.current object\n previous: null,\n\n // when this becomes true, no gestures are fired\n stopped: false,\n\n /**\n * start Hammer.gesture detection\n * @param {Hammer.Instance} inst\n * @param {Object} eventData\n */\n startDetect: function startDetect(inst, eventData) {\n // already busy with a Hammer.gesture detection on an element\n if (this.current) {\n return;\n }\n\n this.stopped = false;\n\n this.current = {\n inst: inst, // reference to HammerInstance we're working for\n startEvent: Hammer.utils.extend({}, eventData), // start eventData for distances, timing etc\n lastEvent: false, // last eventData\n name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc\n };\n\n this.detect(eventData);\n },\n\n /**\n * Hammer.gesture detection\n * @param {Object} eventData\n */\n detect: function detect(eventData) {\n if (!this.current || this.stopped) {\n return;\n }\n\n // extend event data with calculations about scale, distance etc\n eventData = this.extendEventData(eventData);\n\n // instance options\n var inst_options = this.current.inst.options;\n\n // call Hammer.gesture handlers\n Hammer.utils.each(this.gestures, function (gesture) {\n // only when the instance options have enabled this gesture\n if (!this.stopped && inst_options[gesture.name] !== false) {\n // if a handler returns false, we stop with the detection\n if (gesture.handler.call(gesture, eventData, this.current.inst) === false) {\n this.stopDetect();\n return false;\n }\n }\n }, this);\n\n // store as previous event event\n if (this.current) {\n this.current.lastEvent = eventData;\n }\n\n // endevent, but not the last touch, so dont stop\n if (eventData.eventType == Hammer.EVENT_END && !eventData.touches.length - 1) {\n this.stopDetect();\n }\n\n return eventData;\n },\n\n /**\n * clear the Hammer.gesture vars\n * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected\n * to stop other Hammer.gestures from being fired\n */\n stopDetect: function stopDetect() {\n // clone current data to the store as the previous gesture\n // used for the double tap gesture, since this is an other gesture detect session\n this.previous = Hammer.utils.extend({}, this.current);\n\n // reset the current\n this.current = null;\n\n // stopped!\n this.stopped = true;\n },\n\n /**\n * extend eventData for Hammer.gestures\n * @param {Object} ev\n * @returns {Object} ev\n */\n extendEventData: function extendEventData(ev) {\n var startEv = this.current.startEvent;\n\n // if the touches change, set the new touches over the startEvent touches\n // this because touchevents don't have all the touches on touchstart, or the\n // user must place his fingers at the EXACT same time on the screen, which is not realistic\n // but, sometimes it happens that both fingers are touching at the EXACT same time\n if (startEv && (ev.touches.length != startEv.touches.length || ev.touches === startEv.touches)) {\n // extend 1 level deep to get the touchlist with the touch objects\n startEv.touches = [];\n Hammer.utils.each(ev.touches, function (touch) {\n startEv.touches.push(Hammer.utils.extend({}, touch));\n });\n }\n\n var delta_time = ev.timeStamp - startEv.timeStamp,\n delta_x = ev.center.pageX - startEv.center.pageX,\n delta_y = ev.center.pageY - startEv.center.pageY,\n velocity = Hammer.utils.getVelocity(delta_time, delta_x, delta_y),\n interimAngle,\n interimDirection;\n\n // end events (e.g. dragend) don't have useful values for interimDirection & interimAngle\n // because the previous event has exactly the same coordinates\n // so for end events, take the previous values of interimDirection & interimAngle\n // instead of recalculating them and getting a spurious '0'\n if (ev.eventType === 'end') {\n interimAngle = this.current.lastEvent && this.current.lastEvent.interimAngle;\n interimDirection = this.current.lastEvent && this.current.lastEvent.interimDirection;\n } else {\n interimAngle = this.current.lastEvent && Hammer.utils.getAngle(this.current.lastEvent.center, ev.center);\n interimDirection = this.current.lastEvent && Hammer.utils.getDirection(this.current.lastEvent.center, ev.center);\n }\n\n Hammer.utils.extend(ev, {\n deltaTime: delta_time,\n\n deltaX: delta_x,\n deltaY: delta_y,\n\n velocityX: velocity.x,\n velocityY: velocity.y,\n\n distance: Hammer.utils.getDistance(startEv.center, ev.center),\n\n angle: Hammer.utils.getAngle(startEv.center, ev.center),\n interimAngle: interimAngle,\n\n direction: Hammer.utils.getDirection(startEv.center, ev.center),\n interimDirection: interimDirection,\n\n scale: Hammer.utils.getScale(startEv.touches, ev.touches),\n rotation: Hammer.utils.getRotation(startEv.touches, ev.touches),\n\n startEvent: startEv\n });\n\n return ev;\n },\n\n /**\n * register new gesture\n * @param {Object} gesture object, see gestures.js for documentation\n * @returns {Array} gestures\n */\n register: function register(gesture) {\n // add an enable gesture options if there is no given\n var options = gesture.defaults || {};\n if (options[gesture.name] === undefined) {\n options[gesture.name] = true;\n }\n\n // extend Hammer default options with the Hammer.gesture options\n Hammer.utils.extend(Hammer.defaults, options, true);\n\n // set its index\n gesture.index = gesture.index || 1000;\n\n // add Hammer.gesture to the list\n this.gestures.push(gesture);\n\n // sort the list by index\n this.gestures.sort(function (a, b) {\n if (a.index < b.index) {\n return -1;\n }\n if (a.index > b.index) {\n return 1;\n }\n return 0;\n });\n\n return this.gestures;\n }\n };\n\n /**\n * Drag\n * Move with x fingers (default 1) around on the page. Blocking the scrolling when\n * moving left and right is a good practice. When all the drag events are blocking\n * you disable scrolling on that area.\n * @events drag, drapleft, dragright, dragup, dragdown\n */\n Hammer.gestures.Drag = {\n name: 'drag',\n index: 50,\n defaults: {\n drag_min_distance: 10,\n\n // Set correct_for_drag_min_distance to true to make the starting point of the drag\n // be calculated from where the drag was triggered, not from where the touch started.\n // Useful to avoid a jerk-starting drag, which can make fine-adjustments\n // through dragging difficult, and be visually unappealing.\n correct_for_drag_min_distance: true,\n\n // set 0 for unlimited, but this can conflict with transform\n drag_max_touches: 1,\n\n // prevent default browser behavior when dragging occurs\n // be careful with it, it makes the element a blocking element\n // when you are using the drag gesture, it is a good practice to set this true\n drag_block_horizontal: false,\n drag_block_vertical: false,\n\n // drag_lock_to_axis keeps the drag gesture on the axis that it started on,\n // It disallows vertical directions if the initial direction was horizontal, and vice versa.\n drag_lock_to_axis: false,\n\n // drag lock only kicks in when distance > drag_lock_min_distance\n // This way, locking occurs only when the distance has become large enough to reliably determine the direction\n drag_lock_min_distance: 25\n },\n\n triggered: false,\n handler: function dragGesture(ev, inst) {\n // current gesture isnt drag, but dragged is true\n // this means an other gesture is busy. now call dragend\n if (Hammer.detection.current.name != this.name && this.triggered) {\n inst.trigger(this.name + 'end', ev);\n this.triggered = false;\n return;\n }\n\n // max touches\n if (inst.options.drag_max_touches > 0 && ev.touches.length > inst.options.drag_max_touches) {\n return;\n }\n\n switch (ev.eventType) {\n case Hammer.EVENT_START:\n this.triggered = false;\n break;\n\n case Hammer.EVENT_MOVE:\n // when the distance we moved is too small we skip this gesture\n // or we can be already in dragging\n if (ev.distance < inst.options.drag_min_distance && Hammer.detection.current.name != this.name) {\n return;\n }\n\n // we are dragging!\n if (Hammer.detection.current.name != this.name) {\n Hammer.detection.current.name = this.name;\n if (inst.options.correct_for_drag_min_distance && ev.distance > 0) {\n // When a drag is triggered, set the event center to drag_min_distance pixels from the original event center.\n // Without this correction, the dragged distance would jumpstart at drag_min_distance pixels instead of at 0.\n // It might be useful to save the original start point somewhere\n var factor = Math.abs(inst.options.drag_min_distance / ev.distance);\n Hammer.detection.current.startEvent.center.pageX += ev.deltaX * factor;\n Hammer.detection.current.startEvent.center.pageY += ev.deltaY * factor;\n\n // recalculate event data using new start point\n ev = Hammer.detection.extendEventData(ev);\n }\n }\n\n // lock drag to axis?\n if (Hammer.detection.current.lastEvent.drag_locked_to_axis || inst.options.drag_lock_to_axis && inst.options.drag_lock_min_distance <= ev.distance) {\n ev.drag_locked_to_axis = true;\n }\n var last_direction = Hammer.detection.current.lastEvent.direction;\n if (ev.drag_locked_to_axis && last_direction !== ev.direction) {\n // keep direction on the axis that the drag gesture started on\n if (Hammer.utils.isVertical(last_direction)) {\n ev.direction = ev.deltaY < 0 ? Hammer.DIRECTION_UP : Hammer.DIRECTION_DOWN;\n } else {\n ev.direction = ev.deltaX < 0 ? Hammer.DIRECTION_LEFT : Hammer.DIRECTION_RIGHT;\n }\n }\n\n // first time, trigger dragstart event\n if (!this.triggered) {\n inst.trigger(this.name + 'start', ev);\n this.triggered = true;\n }\n\n // trigger normal event\n inst.trigger(this.name, ev);\n\n // direction event, like dragdown\n inst.trigger(this.name + ev.direction, ev);\n\n // block the browser events\n if (inst.options.drag_block_vertical && Hammer.utils.isVertical(ev.direction) || inst.options.drag_block_horizontal && !Hammer.utils.isVertical(ev.direction)) {\n ev.preventDefault();\n }\n break;\n\n case Hammer.EVENT_END:\n // trigger dragend\n if (this.triggered) {\n inst.trigger(this.name + 'end', ev);\n }\n\n this.triggered = false;\n break;\n }\n }\n };\n\n /**\n * Hold\n * Touch stays at the same place for x time\n * @events hold\n */\n Hammer.gestures.Hold = {\n name: 'hold',\n index: 10,\n defaults: {\n hold_timeout: 500,\n hold_threshold: 1\n },\n timer: null,\n handler: function holdGesture(ev, inst) {\n switch (ev.eventType) {\n case Hammer.EVENT_START:\n // clear any running timers\n clearTimeout(this.timer);\n\n // set the gesture so we can check in the timeout if it still is\n Hammer.detection.current.name = this.name;\n\n // set timer and if after the timeout it still is hold,\n // we trigger the hold event\n this.timer = setTimeout(function () {\n if (Hammer.detection.current.name == 'hold') {\n inst.trigger('hold', ev);\n }\n }, inst.options.hold_timeout);\n break;\n\n // when you move or end we clear the timer\n case Hammer.EVENT_MOVE:\n if (ev.distance > inst.options.hold_threshold) {\n clearTimeout(this.timer);\n }\n break;\n\n case Hammer.EVENT_END:\n clearTimeout(this.timer);\n break;\n }\n }\n };\n\n /**\n * Release\n * Called as last, tells the user has released the screen\n * @events release\n */\n Hammer.gestures.Release = {\n name: 'release',\n index: Infinity,\n handler: function releaseGesture(ev, inst) {\n if (ev.eventType == Hammer.EVENT_END) {\n inst.trigger(this.name, ev);\n }\n }\n };\n\n /**\n * Swipe\n * triggers swipe events when the end velocity is above the threshold\n * @events swipe, swipeleft, swiperight, swipeup, swipedown\n */\n Hammer.gestures.Swipe = {\n name: 'swipe',\n index: 40,\n defaults: {\n // set 0 for unlimited, but this can conflict with transform\n swipe_min_touches: 1,\n swipe_max_touches: 1,\n swipe_velocity: 0.7\n },\n handler: function swipeGesture(ev, inst) {\n if (ev.eventType == Hammer.EVENT_END) {\n // max touches\n if (inst.options.swipe_max_touches > 0 && ev.touches.length < inst.options.swipe_min_touches && ev.touches.length > inst.options.swipe_max_touches) {\n return;\n }\n\n // when the distance we moved is too small we skip this gesture\n // or we can be already in dragging\n if (ev.velocityX > inst.options.swipe_velocity || ev.velocityY > inst.options.swipe_velocity) {\n // trigger swipe events\n inst.trigger(this.name, ev);\n inst.trigger(this.name + ev.direction, ev);\n }\n }\n }\n };\n\n /**\n * Tap/DoubleTap\n * Quick touch at a place or double at the same place\n * @events tap, doubletap\n */\n Hammer.gestures.Tap = {\n name: 'tap',\n index: 100,\n defaults: {\n tap_max_touchtime: 250,\n tap_max_distance: 10,\n tap_always: true,\n doubletap_distance: 20,\n doubletap_interval: 300\n },\n handler: function tapGesture(ev, inst) {\n if (ev.eventType == Hammer.EVENT_END && ev.srcEvent.type != 'touchcancel') {\n // previous gesture, for the double tap since these are two different gesture detections\n var prev = Hammer.detection.previous,\n did_doubletap = false;\n\n // when the touchtime is higher then the max touch time\n // or when the moving distance is too much\n if (ev.deltaTime > inst.options.tap_max_touchtime || ev.distance > inst.options.tap_max_distance) {\n return;\n }\n\n // check if double tap\n if (prev && prev.name == 'tap' && ev.timeStamp - prev.lastEvent.timeStamp < inst.options.doubletap_interval && ev.distance < inst.options.doubletap_distance) {\n inst.trigger('doubletap', ev);\n did_doubletap = true;\n }\n\n // do a single tap\n if (!did_doubletap || inst.options.tap_always) {\n Hammer.detection.current.name = 'tap';\n inst.trigger(Hammer.detection.current.name, ev);\n }\n }\n }\n };\n\n /**\n * Touch\n * Called as first, tells the user has touched the screen\n * @events touch\n */\n Hammer.gestures.Touch = {\n name: 'touch',\n index: -Infinity,\n defaults: {\n // call preventDefault at touchstart, and makes the element blocking by\n // disabling the scrolling of the page, but it improves gestures like\n // transforming and dragging.\n // be careful with using this, it can be very annoying for users to be stuck\n // on the page\n prevent_default: false,\n\n // disable mouse events, so only touch (or pen!) input triggers events\n prevent_mouseevents: false\n },\n handler: function touchGesture(ev, inst) {\n if (inst.options.prevent_mouseevents && ev.pointerType == Hammer.POINTER_MOUSE) {\n ev.stopDetect();\n return;\n }\n\n if (inst.options.prevent_default) {\n ev.preventDefault();\n }\n\n if (ev.eventType == Hammer.EVENT_START) {\n inst.trigger(this.name, ev);\n }\n }\n };\n\n /**\n * Transform\n * User want to scale or rotate with 2 fingers\n * @events transform, pinch, pinchin, pinchout, rotate\n */\n Hammer.gestures.Transform = {\n name: 'transform',\n index: 45,\n defaults: {\n // factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\n transform_min_scale: 0.01,\n // rotation in degrees\n transform_min_rotation: 1,\n // prevent default browser behavior when two touches are on the screen\n // but it makes the element a blocking element\n // when you are using the transform gesture, it is a good practice to set this true\n transform_always_block: false\n },\n triggered: false,\n handler: function transformGesture(ev, inst) {\n // current gesture isnt drag, but dragged is true\n // this means an other gesture is busy. now call dragend\n if (Hammer.detection.current.name != this.name && this.triggered) {\n inst.trigger(this.name + 'end', ev);\n this.triggered = false;\n return;\n }\n\n // atleast multitouch\n if (ev.touches.length < 2) {\n return;\n }\n\n // prevent default when two fingers are on the screen\n if (inst.options.transform_always_block) {\n ev.preventDefault();\n }\n\n switch (ev.eventType) {\n case Hammer.EVENT_START:\n this.triggered = false;\n break;\n\n case Hammer.EVENT_MOVE:\n var scale_threshold = Math.abs(1 - ev.scale);\n var rotation_threshold = Math.abs(ev.rotation);\n\n // when the distance we moved is too small we skip this gesture\n // or we can be already in dragging\n if (scale_threshold < inst.options.transform_min_scale && rotation_threshold < inst.options.transform_min_rotation) {\n return;\n }\n\n // we are transforming!\n Hammer.detection.current.name = this.name;\n\n // first time, trigger dragstart event\n if (!this.triggered) {\n inst.trigger(this.name + 'start', ev);\n this.triggered = true;\n }\n\n inst.trigger(this.name, ev); // basic transform event\n\n // trigger rotate event\n if (rotation_threshold > inst.options.transform_min_rotation) {\n inst.trigger('rotate', ev);\n }\n\n // trigger pinch event\n if (scale_threshold > inst.options.transform_min_scale) {\n inst.trigger('pinch', ev);\n inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev);\n }\n break;\n\n case Hammer.EVENT_END:\n // trigger dragend\n if (this.triggered) {\n inst.trigger(this.name + 'end', ev);\n }\n\n this.triggered = false;\n break;\n }\n }\n };\n\n /**\n * enable multitouch on the desktop by pressing the shiftkey\n * the other touch goes in the opposite direction so the center keeps at its place\n * it's recommended to enable Hammer.debug.showTouches for this one\n */\n Hammer.plugins.fakeMultitouch = function () {\n // keeps the start position to keep it centered\n var start_pos = false;\n\n // test for msMaxTouchPoints to enable this for IE10 with only one pointer (a mouse in all/most cases)\n Hammer.HAS_POINTEREVENTS = navigator.msPointerEnabled && navigator.msMaxTouchPoints && navigator.msMaxTouchPoints >= 1;\n\n /**\n * overwrites Hammer.event.getTouchList.\n * @param {Event} ev\n * @param TOUCHTYPE type\n * @return {Array} Touches\n */\n Hammer.event.getTouchList = function (ev, eventType) {\n // get the fake pointerEvent touchlist\n if (Hammer.HAS_POINTEREVENTS) {\n return Hammer.PointerEvent.getTouchList();\n }\n // get the touchlist\n else if (ev.touches) {\n return ev.touches;\n }\n\n // reset on start of a new touch\n if (eventType == Hammer.EVENT_START) {\n start_pos = false;\n }\n\n // when the shift key is pressed, multitouch is possible on desktop\n // why shift? because ctrl and alt are taken by osx and linux\n if (ev.shiftKey) {\n // on touchstart we store the position of the mouse for multitouch\n if (!start_pos) {\n start_pos = {\n pageX: ev.pageX,\n pageY: ev.pageY\n };\n }\n\n var distance_x = start_pos.pageX - ev.pageX;\n var distance_y = start_pos.pageY - ev.pageY;\n\n // fake second touch in the opposite direction\n return [{\n identifier: 1,\n pageX: start_pos.pageX - distance_x - 50,\n pageY: start_pos.pageY - distance_y - -50,\n target: ev.target\n }, {\n identifier: 2,\n pageX: start_pos.pageX + distance_x - -50,\n pageY: start_pos.pageY + distance_y - 50,\n target: ev.target\n }];\n }\n // normal single touch\n else {\n start_pos = false;\n return [{\n identifier: 1,\n pageX: ev.pageX,\n pageY: ev.pageY,\n target: ev.target\n }];\n }\n };\n };\n\n // Based off Lo-Dash's excellent UMD wrapper (slightly modified) - https://github.com/bestiejs/lodash/blob/master/lodash.js#L5515-L5543\n // some AMD build optimizers, like r.js, check for specific condition patterns like the following:\n if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n // define as an anonymous module\n define(function () {\n return Hammer;\n });\n // check for `exports` after `define` in case a build optimizer adds an `exports` object\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {\n module.exports = Hammer;\n } else {\n window.Hammer = Hammer;\n }\n})(window, undefined);\n\n},{}],21:[function(require,module,exports){\n\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under ()\n */\n!function (a, b, c, d) {\n function e(b, c) {\n this.settings = null, this.options = a.extend({}, e.Defaults, c), this.$element = a(b), this._handlers = {}, this._plugins = {}, this._supress = {}, this._current = null, this._speed = null, this._coordinates = [], this._breakpoint = null, this._width = null, this._items = [], this._clones = [], this._mergers = [], this._widths = [], this._invalidated = {}, this._pipe = [], this._drag = { time: null, target: null, pointer: null, stage: { start: null, current: null }, direction: null }, this._states = { current: {}, tags: { initializing: [\"busy\"], animating: [\"busy\"], dragging: [\"interacting\"] } }, a.each([\"onResize\", \"onThrottledResize\"], a.proxy(function (b, c) {\n this._handlers[c] = a.proxy(this[c], this);\n }, this)), a.each(e.Plugins, a.proxy(function (a, b) {\n this._plugins[a.charAt(0).toLowerCase() + a.slice(1)] = new b(this);\n }, this)), a.each(e.Workers, a.proxy(function (b, c) {\n this._pipe.push({ filter: c.filter, run: a.proxy(c.run, this) });\n }, this)), this.setup(), this.initialize();\n }e.Defaults = { items: 3, loop: !1, center: !1, rewind: !1, mouseDrag: !0, touchDrag: !0, pullDrag: !0, freeDrag: !1, margin: 0, stagePadding: 0, merge: !1, mergeFit: !0, autoWidth: !1, startPosition: 0, rtl: !1, smartSpeed: 250, fluidSpeed: !1, dragEndSpeed: !1, responsive: {}, responsiveRefreshRate: 200, responsiveBaseElement: b, fallbackEasing: \"swing\", info: !1, nestedItemSelector: !1, itemElement: \"div\", stageElement: \"div\", refreshClass: \"owl-refresh\", loadedClass: \"owl-loaded\", loadingClass: \"owl-loading\", rtlClass: \"owl-rtl\", responsiveClass: \"owl-responsive\", dragClass: \"owl-drag\", itemClass: \"owl-item\", stageClass: \"owl-stage\", stageOuterClass: \"owl-stage-outer\", grabClass: \"owl-grab\" }, e.Width = { Default: \"default\", Inner: \"inner\", Outer: \"outer\" }, e.Type = { Event: \"event\", State: \"state\" }, e.Plugins = {}, e.Workers = [{ filter: [\"width\", \"settings\"], run: function run() {\n this._width = this.$element.width();\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run(a) {\n a.current = this._items && this._items[this.relative(this._current)];\n } }, { filter: [\"items\", \"settings\"], run: function run() {\n this.$stage.children(\".cloned\").remove();\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run(a) {\n var b = this.settings.margin || \"\",\n c = !this.settings.autoWidth,\n d = this.settings.rtl,\n e = { width: \"auto\", \"margin-left\": d ? b : \"\", \"margin-right\": d ? \"\" : b };!c && this.$stage.children().css(e), a.css = e;\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run(a) {\n var b = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n c = null,\n d = this._items.length,\n e = !this.settings.autoWidth,\n f = [];for (a.items = { merge: !1, width: b }; d--;) {\n c = this._mergers[d], c = this.settings.mergeFit && Math.min(c, this.settings.items) || c, a.items.merge = c > 1 || a.items.merge, f[d] = e ? b * c : this._items[d].width();\n }this._widths = f;\n } }, { filter: [\"items\", \"settings\"], run: function run() {\n var b = [],\n c = this._items,\n d = this.settings,\n e = Math.max(2 * d.items, 4),\n f = 2 * Math.ceil(c.length / 2),\n g = d.loop && c.length ? d.rewind ? e : Math.max(e, f) : 0,\n h = \"\",\n i = \"\";for (g /= 2; g--;) {\n b.push(this.normalize(b.length / 2, !0)), h += c[b[b.length - 1]][0].outerHTML, b.push(this.normalize(c.length - 1 - (b.length - 1) / 2, !0)), i = c[b[b.length - 1]][0].outerHTML + i;\n }this._clones = b, a(h).addClass(\"cloned\").appendTo(this.$stage), a(i).addClass(\"cloned\").prependTo(this.$stage);\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run() {\n for (var a = this.settings.rtl ? 1 : -1, b = this._clones.length + this._items.length, c = -1, d = 0, e = 0, f = []; ++c < b;) {\n d = f[c - 1] || 0, e = this._widths[this.relative(c)] + this.settings.margin, f.push(d + e * a);\n }this._coordinates = f;\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run() {\n var a = this.settings.stagePadding,\n b = this._coordinates,\n c = { width: Math.ceil(Math.abs(b[b.length - 1])) + 2 * a, \"padding-left\": a || \"\", \"padding-right\": a || \"\" };this.$stage.css(c);\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run(a) {\n var b = this._coordinates.length,\n c = !this.settings.autoWidth,\n d = this.$stage.children();if (c && a.items.merge) for (; b--;) {\n a.css.width = this._widths[this.relative(b)], d.eq(b).css(a.css);\n } else c && (a.css.width = a.items.width, d.css(a.css));\n } }, { filter: [\"items\"], run: function run() {\n this._coordinates.length < 1 && this.$stage.removeAttr(\"style\");\n } }, { filter: [\"width\", \"items\", \"settings\"], run: function run(a) {\n a.current = a.current ? this.$stage.children().index(a.current) : 0, a.current = Math.max(this.minimum(), Math.min(this.maximum(), a.current)), this.reset(a.current);\n } }, { filter: [\"position\"], run: function run() {\n this.animate(this.coordinates(this._current));\n } }, { filter: [\"width\", \"position\", \"items\", \"settings\"], run: function run() {\n var a,\n b,\n c,\n d,\n e = this.settings.rtl ? 1 : -1,\n f = 2 * this.settings.stagePadding,\n g = this.coordinates(this.current()) + f,\n h = g + this.width() * e,\n i = [];for (c = 0, d = this._coordinates.length; c < d; c++) {\n a = this._coordinates[c - 1] || 0, b = Math.abs(this._coordinates[c]) + f * e, (this.op(a, \"<=\", g) && this.op(a, \">\", h) || this.op(b, \"<\", g) && this.op(b, \">\", h)) && i.push(c);\n }this.$stage.children(\".active\").removeClass(\"active\"), this.$stage.children(\":eq(\" + i.join(\"), :eq(\") + \")\").addClass(\"active\"), this.settings.center && (this.$stage.children(\".center\").removeClass(\"center\"), this.$stage.children().eq(this.current()).addClass(\"center\"));\n } }], e.prototype.initialize = function () {\n if (this.enter(\"initializing\"), this.trigger(\"initialize\"), this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl), this.settings.autoWidth && !this.is(\"pre-loading\")) {\n var b, c, e;b = this.$element.find(\"img\"), c = this.settings.nestedItemSelector ? \".\" + this.settings.nestedItemSelector : d, e = this.$element.children(c).width(), b.length && e <= 0 && this.preloadAutoWidthImages(b);\n }this.$element.addClass(this.options.loadingClass), this.$stage = a(\"<\" + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>').wrap('
'), this.$element.append(this.$stage.parent()), this.replace(this.$element.children().not(this.$stage.parent())), this.$element.is(\":visible\") ? this.refresh() : this.invalidate(\"width\"), this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass), this.registerEventHandlers(), this.leave(\"initializing\"), this.trigger(\"initialized\");\n }, e.prototype.setup = function () {\n var b = this.viewport(),\n c = this.options.responsive,\n d = -1,\n e = null;c ? (a.each(c, function (a) {\n a <= b && a > d && (d = Number(a));\n }), e = a.extend({}, this.options, c[d]), \"function\" == typeof e.stagePadding && (e.stagePadding = e.stagePadding()), delete e.responsive, e.responsiveClass && this.$element.attr(\"class\", this.$element.attr(\"class\").replace(new RegExp(\"(\" + this.options.responsiveClass + \"-)\\\\S+\\\\s\", \"g\"), \"$1\" + d))) : e = a.extend({}, this.options), this.trigger(\"change\", { property: { name: \"settings\", value: e } }), this._breakpoint = d, this.settings = e, this.invalidate(\"settings\"), this.trigger(\"changed\", { property: { name: \"settings\", value: this.settings } });\n }, e.prototype.optionsLogic = function () {\n this.settings.autoWidth && (this.settings.stagePadding = !1, this.settings.merge = !1);\n }, e.prototype.prepare = function (b) {\n var c = this.trigger(\"prepare\", { content: b });return c.data || (c.data = a(\"<\" + this.settings.itemElement + \"/>\").addClass(this.options.itemClass).append(b)), this.trigger(\"prepared\", { content: c.data }), c.data;\n }, e.prototype.update = function () {\n for (var b = 0, c = this._pipe.length, d = a.proxy(function (a) {\n return this[a];\n }, this._invalidated), e = {}; b < c;) {\n (this._invalidated.all || a.grep(this._pipe[b].filter, d).length > 0) && this._pipe[b].run(e), b++;\n }this._invalidated = {}, !this.is(\"valid\") && this.enter(\"valid\");\n }, e.prototype.width = function (a) {\n switch (a = a || e.Width.Default) {case e.Width.Inner:case e.Width.Outer:\n return this._width;default:\n return this._width - 2 * this.settings.stagePadding + this.settings.margin;}\n }, e.prototype.refresh = function () {\n this.enter(\"refreshing\"), this.trigger(\"refresh\"), this.setup(), this.optionsLogic(), this.$element.addClass(this.options.refreshClass), this.update(), this.$element.removeClass(this.options.refreshClass), this.leave(\"refreshing\"), this.trigger(\"refreshed\");\n }, e.prototype.onThrottledResize = function () {\n b.clearTimeout(this.resizeTimer), this.resizeTimer = b.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n }, e.prototype.onResize = function () {\n return !!this._items.length && this._width !== this.$element.width() && !!this.$element.is(\":visible\") && (this.enter(\"resizing\"), this.trigger(\"resize\").isDefaultPrevented() ? (this.leave(\"resizing\"), !1) : (this.invalidate(\"width\"), this.refresh(), this.leave(\"resizing\"), void this.trigger(\"resized\")));\n }, e.prototype.registerEventHandlers = function () {\n a.support.transition && this.$stage.on(a.support.transition.end + \".owl.core\", a.proxy(this.onTransitionEnd, this)), this.settings.responsive !== !1 && this.on(b, \"resize\", this._handlers.onThrottledResize), this.settings.mouseDrag && (this.$element.addClass(this.options.dragClass), this.$stage.on(\"mousedown.owl.core\", a.proxy(this.onDragStart, this)), this.$stage.on(\"dragstart.owl.core selectstart.owl.core\", function () {\n return !1;\n })), this.settings.touchDrag && (this.$stage.on(\"touchstart.owl.core\", a.proxy(this.onDragStart, this)), this.$stage.on(\"touchcancel.owl.core\", a.proxy(this.onDragEnd, this)));\n }, e.prototype.onDragStart = function (b) {\n var d = null;3 !== b.which && (a.support.transform ? (d = this.$stage.css(\"transform\").replace(/.*\\(|\\)| /g, \"\").split(\",\"), d = { x: d[16 === d.length ? 12 : 4], y: d[16 === d.length ? 13 : 5] }) : (d = this.$stage.position(), d = { x: this.settings.rtl ? d.left + this.$stage.width() - this.width() + this.settings.margin : d.left, y: d.top }), this.is(\"animating\") && (a.support.transform ? this.animate(d.x) : this.$stage.stop(), this.invalidate(\"position\")), this.$element.toggleClass(this.options.grabClass, \"mousedown\" === b.type), this.speed(0), this._drag.time = new Date().getTime(), this._drag.target = a(b.target), this._drag.stage.start = d, this._drag.stage.current = d, this._drag.pointer = this.pointer(b), a(c).on(\"mouseup.owl.core touchend.owl.core\", a.proxy(this.onDragEnd, this)), a(c).one(\"mousemove.owl.core touchmove.owl.core\", a.proxy(function (b) {\n var d = this.difference(this._drag.pointer, this.pointer(b));a(c).on(\"mousemove.owl.core touchmove.owl.core\", a.proxy(this.onDragMove, this)), Math.abs(d.x) < Math.abs(d.y) && this.is(\"valid\") || (b.preventDefault(), this.enter(\"dragging\"), this.trigger(\"drag\"));\n }, this)));\n }, e.prototype.onDragMove = function (a) {\n var b = null,\n c = null,\n d = null,\n e = this.difference(this._drag.pointer, this.pointer(a)),\n f = this.difference(this._drag.stage.start, e);this.is(\"dragging\") && (a.preventDefault(), this.settings.loop ? (b = this.coordinates(this.minimum()), c = this.coordinates(this.maximum() + 1) - b, f.x = ((f.x - b) % c + c) % c + b) : (b = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()), c = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()), d = this.settings.pullDrag ? -1 * e.x / 5 : 0, f.x = Math.max(Math.min(f.x, b + d), c + d)), this._drag.stage.current = f, this.animate(f.x));\n }, e.prototype.onDragEnd = function (b) {\n var d = this.difference(this._drag.pointer, this.pointer(b)),\n e = this._drag.stage.current,\n f = d.x > 0 ^ this.settings.rtl ? \"left\" : \"right\";a(c).off(\".owl.core\"), this.$element.removeClass(this.options.grabClass), (0 !== d.x && this.is(\"dragging\") || !this.is(\"valid\")) && (this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed), this.current(this.closest(e.x, 0 !== d.x ? f : this._drag.direction)), this.invalidate(\"position\"), this.update(), this._drag.direction = f, (Math.abs(d.x) > 3 || new Date().getTime() - this._drag.time > 300) && this._drag.target.one(\"click.owl.core\", function () {\n return !1;\n })), this.is(\"dragging\") && (this.leave(\"dragging\"), this.trigger(\"dragged\"));\n }, e.prototype.closest = function (b, c) {\n var d = -1,\n e = 30,\n f = this.width(),\n g = this.coordinates();return this.settings.freeDrag || a.each(g, a.proxy(function (a, h) {\n return \"left\" === c && b > h - e && b < h + e ? d = a : \"right\" === c && b > h - f - e && b < h - f + e ? d = a + 1 : this.op(b, \"<\", h) && this.op(b, \">\", g[a + 1] || h - f) && (d = \"left\" === c ? a + 1 : a), d === -1;\n }, this)), this.settings.loop || (this.op(b, \">\", g[this.minimum()]) ? d = b = this.minimum() : this.op(b, \"<\", g[this.maximum()]) && (d = b = this.maximum())), d;\n }, e.prototype.animate = function (b) {\n var c = this.speed() > 0;this.is(\"animating\") && this.onTransitionEnd(), c && (this.enter(\"animating\"), this.trigger(\"translate\")), a.support.transform3d && a.support.transition ? this.$stage.css({ transform: \"translate3d(\" + b + \"px,0px,0px)\", transition: this.speed() / 1e3 + \"s\" }) : c ? this.$stage.animate({ left: b + \"px\" }, this.speed(), this.settings.fallbackEasing, a.proxy(this.onTransitionEnd, this)) : this.$stage.css({ left: b + \"px\" });\n }, e.prototype.is = function (a) {\n return this._states.current[a] && this._states.current[a] > 0;\n }, e.prototype.current = function (a) {\n if (a === d) return this._current;if (0 === this._items.length) return d;if (a = this.normalize(a), this._current !== a) {\n var b = this.trigger(\"change\", { property: { name: \"position\", value: a } });b.data !== d && (a = this.normalize(b.data)), this._current = a, this.invalidate(\"position\"), this.trigger(\"changed\", { property: { name: \"position\", value: this._current } });\n }return this._current;\n }, e.prototype.invalidate = function (b) {\n return \"string\" === a.type(b) && (this._invalidated[b] = !0, this.is(\"valid\") && this.leave(\"valid\")), a.map(this._invalidated, function (a, b) {\n return b;\n });\n }, e.prototype.reset = function (a) {\n a = this.normalize(a), a !== d && (this._speed = 0, this._current = a, this.suppress([\"translate\", \"translated\"]), this.animate(this.coordinates(a)), this.release([\"translate\", \"translated\"]));\n }, e.prototype.normalize = function (a, b) {\n var c = this._items.length,\n e = b ? 0 : this._clones.length;return !this.isNumeric(a) || c < 1 ? a = d : (a < 0 || a >= c + e) && (a = ((a - e / 2) % c + c) % c + e / 2), a;\n }, e.prototype.relative = function (a) {\n return a -= this._clones.length / 2, this.normalize(a, !0);\n }, e.prototype.maximum = function (a) {\n var b,\n c,\n d,\n e = this.settings,\n f = this._coordinates.length;if (e.loop) f = this._clones.length / 2 + this._items.length - 1;else if (e.autoWidth || e.merge) {\n for (b = this._items.length, c = this._items[--b].width(), d = this.$element.width(); b-- && (c += this._items[b].width() + this.settings.margin, !(c > d));) {}f = b + 1;\n } else f = e.center ? this._items.length - 1 : this._items.length - e.items;return a && (f -= this._clones.length / 2), Math.max(f, 0);\n }, e.prototype.minimum = function (a) {\n return a ? 0 : this._clones.length / 2;\n }, e.prototype.items = function (a) {\n return a === d ? this._items.slice() : (a = this.normalize(a, !0), this._items[a]);\n }, e.prototype.mergers = function (a) {\n return a === d ? this._mergers.slice() : (a = this.normalize(a, !0), this._mergers[a]);\n }, e.prototype.clones = function (b) {\n var c = this._clones.length / 2,\n e = c + this._items.length,\n f = function f(a) {\n return a % 2 === 0 ? e + a / 2 : c - (a + 1) / 2;\n };return b === d ? a.map(this._clones, function (a, b) {\n return f(b);\n }) : a.map(this._clones, function (a, c) {\n return a === b ? f(c) : null;\n });\n }, e.prototype.speed = function (a) {\n return a !== d && (this._speed = a), this._speed;\n }, e.prototype.coordinates = function (b) {\n var c,\n e = 1,\n f = b - 1;return b === d ? a.map(this._coordinates, a.proxy(function (a, b) {\n return this.coordinates(b);\n }, this)) : (this.settings.center ? (this.settings.rtl && (e = -1, f = b + 1), c = this._coordinates[b], c += (this.width() - c + (this._coordinates[f] || 0)) / 2 * e) : c = this._coordinates[f] || 0, c = Math.ceil(c));\n }, e.prototype.duration = function (a, b, c) {\n return 0 === c ? 0 : Math.min(Math.max(Math.abs(b - a), 1), 6) * Math.abs(c || this.settings.smartSpeed);\n }, e.prototype.to = function (a, b) {\n var c = this.current(),\n d = null,\n e = a - this.relative(c),\n f = (e > 0) - (e < 0),\n g = this._items.length,\n h = this.minimum(),\n i = this.maximum();this.settings.loop ? (!this.settings.rewind && Math.abs(e) > g / 2 && (e += f * -1 * g), a = c + e, d = ((a - h) % g + g) % g + h, d !== a && d - e <= i && d - e > 0 && (c = d - e, a = d, this.reset(c))) : this.settings.rewind ? (i += 1, a = (a % i + i) % i) : a = Math.max(h, Math.min(i, a)), this.speed(this.duration(c, a, b)), this.current(a), this.$element.is(\":visible\") && this.update();\n }, e.prototype.next = function (a) {\n a = a || !1, this.to(this.relative(this.current()) + 1, a);\n }, e.prototype.prev = function (a) {\n a = a || !1, this.to(this.relative(this.current()) - 1, a);\n }, e.prototype.onTransitionEnd = function (a) {\n if (a !== d && (a.stopPropagation(), (a.target || a.srcElement || a.originalTarget) !== this.$stage.get(0))) return !1;this.leave(\"animating\"), this.trigger(\"translated\");\n }, e.prototype.viewport = function () {\n var d;return this.options.responsiveBaseElement !== b ? d = a(this.options.responsiveBaseElement).width() : b.innerWidth ? d = b.innerWidth : c.documentElement && c.documentElement.clientWidth ? d = c.documentElement.clientWidth : console.warn(\"Can not detect viewport width.\"), d;\n }, e.prototype.replace = function (b) {\n this.$stage.empty(), this._items = [], b && (b = b instanceof jQuery ? b : a(b)), this.settings.nestedItemSelector && (b = b.find(\".\" + this.settings.nestedItemSelector)), b.filter(function () {\n return 1 === this.nodeType;\n }).each(a.proxy(function (a, b) {\n b = this.prepare(b), this.$stage.append(b), this._items.push(b), this._mergers.push(1 * b.find(\"[data-merge]\").addBack(\"[data-merge]\").attr(\"data-merge\") || 1);\n }, this)), this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0), this.invalidate(\"items\");\n }, e.prototype.add = function (b, c) {\n var e = this.relative(this._current);c = c === d ? this._items.length : this.normalize(c, !0), b = b instanceof jQuery ? b : a(b), this.trigger(\"add\", { content: b, position: c }), b = this.prepare(b), 0 === this._items.length || c === this._items.length ? (0 === this._items.length && this.$stage.append(b), 0 !== this._items.length && this._items[c - 1].after(b), this._items.push(b), this._mergers.push(1 * b.find(\"[data-merge]\").addBack(\"[data-merge]\").attr(\"data-merge\") || 1)) : (this._items[c].before(b), this._items.splice(c, 0, b), this._mergers.splice(c, 0, 1 * b.find(\"[data-merge]\").addBack(\"[data-merge]\").attr(\"data-merge\") || 1)), this._items[e] && this.reset(this._items[e].index()), this.invalidate(\"items\"), this.trigger(\"added\", { content: b, position: c });\n }, e.prototype.remove = function (a) {\n a = this.normalize(a, !0), a !== d && (this.trigger(\"remove\", { content: this._items[a], position: a }), this._items[a].remove(), this._items.splice(a, 1), this._mergers.splice(a, 1), this.invalidate(\"items\"), this.trigger(\"removed\", { content: null, position: a }));\n }, e.prototype.preloadAutoWidthImages = function (b) {\n b.each(a.proxy(function (b, c) {\n this.enter(\"pre-loading\"), c = a(c), a(new Image()).one(\"load\", a.proxy(function (a) {\n c.attr(\"src\", a.target.src), c.css(\"opacity\", 1), this.leave(\"pre-loading\"), !this.is(\"pre-loading\") && !this.is(\"initializing\") && this.refresh();\n }, this)).attr(\"src\", c.attr(\"src\") || c.attr(\"data-src\") || c.attr(\"data-src-retina\"));\n }, this));\n }, e.prototype.destroy = function () {\n this.$element.off(\".owl.core\"), this.$stage.off(\".owl.core\"), a(c).off(\".owl.core\"), this.settings.responsive !== !1 && (b.clearTimeout(this.resizeTimer), this.off(b, \"resize\", this._handlers.onThrottledResize));for (var d in this._plugins) {\n this._plugins[d].destroy();\n }this.$stage.children(\".cloned\").remove(), this.$stage.unwrap(), this.$stage.children().contents().unwrap(), this.$stage.children().unwrap(), this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr(\"class\", this.$element.attr(\"class\").replace(new RegExp(this.options.responsiveClass + \"-\\\\S+\\\\s\", \"g\"), \"\")).removeData(\"owl.carousel\");\n }, e.prototype.op = function (a, b, c) {\n var d = this.settings.rtl;switch (b) {case \"<\":\n return d ? a > c : a < c;case \">\":\n return d ? a < c : a > c;case \">=\":\n return d ? a <= c : a >= c;case \"<=\":\n return d ? a >= c : a <= c;}\n }, e.prototype.on = function (a, b, c, d) {\n a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent(\"on\" + b, c);\n }, e.prototype.off = function (a, b, c, d) {\n a.removeEventListener ? a.removeEventListener(b, c, d) : a.detachEvent && a.detachEvent(\"on\" + b, c);\n }, e.prototype.trigger = function (b, c, d, f, g) {\n var h = { item: { count: this._items.length, index: this.current() } },\n i = a.camelCase(a.grep([\"on\", b, d], function (a) {\n return a;\n }).join(\"-\").toLowerCase()),\n j = a.Event([b, \"owl\", d || \"carousel\"].join(\".\").toLowerCase(), a.extend({ relatedTarget: this }, h, c));return this._supress[b] || (a.each(this._plugins, function (a, b) {\n b.onTrigger && b.onTrigger(j);\n }), this.register({ type: e.Type.Event, name: b }), this.$element.trigger(j), this.settings && \"function\" == typeof this.settings[i] && this.settings[i].call(this, j)), j;\n }, e.prototype.enter = function (b) {\n a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) {\n this._states.current[b] === d && (this._states.current[b] = 0), this._states.current[b]++;\n }, this));\n }, e.prototype.leave = function (b) {\n a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) {\n this._states.current[b]--;\n }, this));\n }, e.prototype.register = function (b) {\n if (b.type === e.Type.Event) {\n if (a.event.special[b.name] || (a.event.special[b.name] = {}), !a.event.special[b.name].owl) {\n var c = a.event.special[b.name]._default;a.event.special[b.name]._default = function (a) {\n return !c || !c.apply || a.namespace && a.namespace.indexOf(\"owl\") !== -1 ? a.namespace && a.namespace.indexOf(\"owl\") > -1 : c.apply(this, arguments);\n }, a.event.special[b.name].owl = !0;\n }\n } else b.type === e.Type.State && (this._states.tags[b.name] ? this._states.tags[b.name] = this._states.tags[b.name].concat(b.tags) : this._states.tags[b.name] = b.tags, this._states.tags[b.name] = a.grep(this._states.tags[b.name], a.proxy(function (c, d) {\n return a.inArray(c, this._states.tags[b.name]) === d;\n }, this)));\n }, e.prototype.suppress = function (b) {\n a.each(b, a.proxy(function (a, b) {\n this._supress[b] = !0;\n }, this));\n }, e.prototype.release = function (b) {\n a.each(b, a.proxy(function (a, b) {\n delete this._supress[b];\n }, this));\n }, e.prototype.pointer = function (a) {\n var c = { x: null, y: null };return a = a.originalEvent || a || b.event, a = a.touches && a.touches.length ? a.touches[0] : a.changedTouches && a.changedTouches.length ? a.changedTouches[0] : a, a.pageX ? (c.x = a.pageX, c.y = a.pageY) : (c.x = a.clientX, c.y = a.clientY), c;\n }, e.prototype.isNumeric = function (a) {\n return !isNaN(parseFloat(a));\n }, e.prototype.difference = function (a, b) {\n return { x: a.x - b.x, y: a.y - b.y };\n }, a.fn.owlCarousel = function (b) {\n var c = Array.prototype.slice.call(arguments, 1);return this.each(function () {\n var d = a(this),\n f = d.data(\"owl.carousel\");f || (f = new e(this, \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b), d.data(\"owl.carousel\", f), a.each([\"next\", \"prev\", \"to\", \"destroy\", \"refresh\", \"replace\", \"add\", \"remove\"], function (b, c) {\n f.register({ type: e.Type.Event, name: c }), f.$element.on(c + \".owl.carousel.core\", a.proxy(function (a) {\n a.namespace && a.relatedTarget !== this && (this.suppress([c]), f[c].apply(this, [].slice.call(arguments, 1)), this.release([c]));\n }, f));\n })), \"string\" == typeof b && \"_\" !== b.charAt(0) && f[b].apply(f, c);\n });\n }, a.fn.owlCarousel.Constructor = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this._core = b, this._interval = null, this._visible = null, this._handlers = { \"initialized.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.autoRefresh && this.watch();\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);\n };e.Defaults = { autoRefresh: !0, autoRefreshInterval: 500 }, e.prototype.watch = function () {\n this._interval || (this._visible = this._core.$element.is(\":visible\"), this._interval = b.setInterval(a.proxy(this.refresh, this), this._core.settings.autoRefreshInterval));\n }, e.prototype.refresh = function () {\n this._core.$element.is(\":visible\") !== this._visible && (this._visible = !this._visible, this._core.$element.toggleClass(\"owl-hidden\", !this._visible), this._visible && this._core.invalidate(\"width\") && this._core.refresh());\n }, e.prototype.destroy = function () {\n var a, c;b.clearInterval(this._interval);for (a in this._handlers) {\n this._core.$element.off(a, this._handlers[a]);\n }for (c in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[c] && (this[c] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.AutoRefresh = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this._core = b, this._loaded = [], this._handlers = { \"initialized.owl.carousel change.owl.carousel resized.owl.carousel\": a.proxy(function (b) {\n if (b.namespace && this._core.settings && this._core.settings.lazyLoad && (b.property && \"position\" == b.property.name || \"initialized\" == b.type)) for (var c = this._core.settings, e = c.center && Math.ceil(c.items / 2) || c.items, f = c.center && e * -1 || 0, g = (b.property && b.property.value !== d ? b.property.value : this._core.current()) + f, h = this._core.clones().length, i = a.proxy(function (a, b) {\n this.load(b);\n }, this); f++ < e;) {\n this.load(h / 2 + this._core.relative(g)), h && a.each(this._core.clones(this._core.relative(g)), i), g++;\n }\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);\n };e.Defaults = { lazyLoad: !1 }, e.prototype.load = function (c) {\n var d = this._core.$stage.children().eq(c),\n e = d && d.find(\".owl-lazy\");!e || a.inArray(d.get(0), this._loaded) > -1 || (e.each(a.proxy(function (c, d) {\n var e,\n f = a(d),\n g = b.devicePixelRatio > 1 && f.attr(\"data-src-retina\") || f.attr(\"data-src\");this._core.trigger(\"load\", { element: f, url: g }, \"lazy\"), f.is(\"img\") ? f.one(\"load.owl.lazy\", a.proxy(function () {\n f.css(\"opacity\", 1), this._core.trigger(\"loaded\", { element: f, url: g }, \"lazy\");\n }, this)).attr(\"src\", g) : (e = new Image(), e.onload = a.proxy(function () {\n f.css({ \"background-image\": 'url(\"' + g + '\")', opacity: \"1\" }), this._core.trigger(\"loaded\", { element: f, url: g }, \"lazy\");\n }, this), e.src = g);\n }, this)), this._loaded.push(d.get(0)));\n }, e.prototype.destroy = function () {\n var a, b;for (a in this.handlers) {\n this._core.$element.off(a, this.handlers[a]);\n }for (b in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[b] && (this[b] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.Lazy = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this._core = b, this._handlers = { \"initialized.owl.carousel refreshed.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.autoHeight && this.update();\n }, this), \"changed.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.autoHeight && \"position\" == a.property.name && this.update();\n }, this), \"loaded.owl.lazy\": a.proxy(function (a) {\n a.namespace && this._core.settings.autoHeight && a.element.closest(\".\" + this._core.settings.itemClass).index() === this._core.current() && this.update();\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);\n };e.Defaults = { autoHeight: !1, autoHeightClass: \"owl-height\" }, e.prototype.update = function () {\n var b = this._core._current,\n c = b + this._core.settings.items,\n d = this._core.$stage.children().toArray().slice(b, c),\n e = [],\n f = 0;a.each(d, function (b, c) {\n e.push(a(c).height());\n }), f = Math.max.apply(null, e), this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass);\n }, e.prototype.destroy = function () {\n var a, b;for (a in this._handlers) {\n this._core.$element.off(a, this._handlers[a]);\n }for (b in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[b] && (this[b] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.AutoHeight = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this._core = b, this._videos = {}, this._playing = null, this._handlers = { \"initialized.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.register({ type: \"state\", name: \"playing\", tags: [\"interacting\"] });\n }, this), \"resize.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.video && this.isInFullScreen() && a.preventDefault();\n }, this), \"refreshed.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.is(\"resizing\") && this._core.$stage.find(\".cloned .owl-video-frame\").remove();\n }, this), \"changed.owl.carousel\": a.proxy(function (a) {\n a.namespace && \"position\" === a.property.name && this._playing && this.stop();\n }, this), \"prepared.owl.carousel\": a.proxy(function (b) {\n if (b.namespace) {\n var c = a(b.content).find(\".owl-video\");c.length && (c.css(\"display\", \"none\"), this.fetch(c, a(b.content)));\n }\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers), this._core.$element.on(\"click.owl.video\", \".owl-video-play-icon\", a.proxy(function (a) {\n this.play(a);\n }, this));\n };e.Defaults = { video: !1, videoHeight: !1, videoWidth: !1 }, e.prototype.fetch = function (a, b) {\n var c = function () {\n return a.attr(\"data-vimeo-id\") ? \"vimeo\" : a.attr(\"data-vzaar-id\") ? \"vzaar\" : \"youtube\";\n }(),\n d = a.attr(\"data-vimeo-id\") || a.attr(\"data-youtube-id\") || a.attr(\"data-vzaar-id\"),\n e = a.attr(\"data-width\") || this._core.settings.videoWidth,\n f = a.attr(\"data-height\") || this._core.settings.videoHeight,\n g = a.attr(\"href\");if (!g) throw new Error(\"Missing video URL.\");if (d = g.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/), d[3].indexOf(\"youtu\") > -1) c = \"youtube\";else if (d[3].indexOf(\"vimeo\") > -1) c = \"vimeo\";else {\n if (!(d[3].indexOf(\"vzaar\") > -1)) throw new Error(\"Video URL not supported.\");c = \"vzaar\";\n }d = d[6], this._videos[g] = { type: c, id: d, width: e, height: f }, b.attr(\"data-video\", g), this.thumbnail(a, this._videos[g]);\n }, e.prototype.thumbnail = function (b, c) {\n var d,\n e,\n f,\n g = c.width && c.height ? 'style=\"width:' + c.width + \"px;height:\" + c.height + 'px;\"' : \"\",\n h = b.find(\"img\"),\n i = \"src\",\n j = \"\",\n k = this._core.settings,\n l = function l(a) {\n e = '
', d = k.lazyLoad ? '
' : '
', b.after(d), b.after(e);\n };if (b.wrap('
\"), this._core.settings.lazyLoad && (i = \"data-src\", j = \"owl-lazy\"), h.length) return l(h.attr(i)), h.remove(), !1;\"youtube\" === c.type ? (f = \"//img.youtube.com/vi/\" + c.id + \"/hqdefault.jpg\", l(f)) : \"vimeo\" === c.type ? a.ajax({ type: \"GET\", url: \"//vimeo.com/api/v2/video/\" + c.id + \".json\", jsonp: \"callback\", dataType: \"jsonp\", success: function success(a) {\n f = a[0].thumbnail_large, l(f);\n } }) : \"vzaar\" === c.type && a.ajax({ type: \"GET\", url: \"//vzaar.com/api/videos/\" + c.id + \".json\", jsonp: \"callback\", dataType: \"jsonp\", success: function success(a) {\n f = a.framegrab_url, l(f);\n } });\n }, e.prototype.stop = function () {\n this._core.trigger(\"stop\", null, \"video\"), this._playing.find(\".owl-video-frame\").remove(), this._playing.removeClass(\"owl-video-playing\"), this._playing = null, this._core.leave(\"playing\"), this._core.trigger(\"stopped\", null, \"video\");\n }, e.prototype.play = function (b) {\n var c,\n d = a(b.target),\n e = d.closest(\".\" + this._core.settings.itemClass),\n f = this._videos[e.attr(\"data-video\")],\n g = f.width || \"100%\",\n h = f.height || this._core.$stage.height();this._playing || (this._core.enter(\"playing\"), this._core.trigger(\"play\", null, \"video\"), e = this._core.items(this._core.relative(e.index())), this._core.reset(e.index()), \"youtube\" === f.type ? c = '' : \"vimeo\" === f.type ? c = '' : \"vzaar\" === f.type && (c = ''), a('
' + c + \"
\").insertAfter(e.find(\".owl-video\")), this._playing = e.addClass(\"owl-video-playing\"));\n }, e.prototype.isInFullScreen = function () {\n var b = c.fullscreenElement || c.mozFullScreenElement || c.webkitFullscreenElement;return b && a(b).parent().hasClass(\"owl-video-frame\");\n }, e.prototype.destroy = function () {\n var a, b;this._core.$element.off(\"click.owl.video\");for (a in this._handlers) {\n this._core.$element.off(a, this._handlers[a]);\n }for (b in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[b] && (this[b] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.Video = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this.core = b, this.core.options = a.extend({}, e.Defaults, this.core.options), this.swapping = !0, this.previous = d, this.next = d, this.handlers = { \"change.owl.carousel\": a.proxy(function (a) {\n a.namespace && \"position\" == a.property.name && (this.previous = this.core.current(), this.next = a.property.value);\n }, this), \"drag.owl.carousel dragged.owl.carousel translated.owl.carousel\": a.proxy(function (a) {\n a.namespace && (this.swapping = \"translated\" == a.type);\n }, this), \"translate.owl.carousel\": a.proxy(function (a) {\n a.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn) && this.swap();\n }, this) }, this.core.$element.on(this.handlers);\n };e.Defaults = { animateOut: !1, animateIn: !1 }, e.prototype.swap = function () {\n if (1 === this.core.settings.items && a.support.animation && a.support.transition) {\n this.core.speed(0);var b,\n c = a.proxy(this.clear, this),\n d = this.core.$stage.children().eq(this.previous),\n e = this.core.$stage.children().eq(this.next),\n f = this.core.settings.animateIn,\n g = this.core.settings.animateOut;this.core.current() !== this.previous && (g && (b = this.core.coordinates(this.previous) - this.core.coordinates(this.next), d.one(a.support.animation.end, c).css({ left: b + \"px\" }).addClass(\"animated owl-animated-out\").addClass(g)), f && e.one(a.support.animation.end, c).addClass(\"animated owl-animated-in\").addClass(f));\n }\n }, e.prototype.clear = function (b) {\n a(b.target).css({ left: \"\" }).removeClass(\"animated owl-animated-out owl-animated-in\").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut), this.core.onTransitionEnd();\n }, e.prototype.destroy = function () {\n var a, b;for (a in this.handlers) {\n this.core.$element.off(a, this.handlers[a]);\n }for (b in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[b] && (this[b] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.Animate = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n var e = function e(b) {\n this._core = b, this._timeout = null, this._paused = !1, this._handlers = { \"changed.owl.carousel\": a.proxy(function (a) {\n a.namespace && \"settings\" === a.property.name ? this._core.settings.autoplay ? this.play() : this.stop() : a.namespace && \"position\" === a.property.name && this._core.settings.autoplay && this._setAutoPlayInterval();\n }, this), \"initialized.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.autoplay && this.play();\n }, this), \"play.owl.autoplay\": a.proxy(function (a, b, c) {\n a.namespace && this.play(b, c);\n }, this), \"stop.owl.autoplay\": a.proxy(function (a) {\n a.namespace && this.stop();\n }, this), \"mouseover.owl.autoplay\": a.proxy(function () {\n this._core.settings.autoplayHoverPause && this._core.is(\"rotating\") && this.pause();\n }, this), \"mouseleave.owl.autoplay\": a.proxy(function () {\n this._core.settings.autoplayHoverPause && this._core.is(\"rotating\") && this.play();\n }, this), \"touchstart.owl.core\": a.proxy(function () {\n this._core.settings.autoplayHoverPause && this._core.is(\"rotating\") && this.pause();\n }, this), \"touchend.owl.core\": a.proxy(function () {\n this._core.settings.autoplayHoverPause && this.play();\n }, this) }, this._core.$element.on(this._handlers), this._core.options = a.extend({}, e.Defaults, this._core.options);\n };e.Defaults = { autoplay: !1, autoplayTimeout: 5e3, autoplayHoverPause: !1, autoplaySpeed: !1 }, e.prototype.play = function (a, b) {\n this._paused = !1, this._core.is(\"rotating\") || (this._core.enter(\"rotating\"), this._setAutoPlayInterval());\n }, e.prototype._getNextTimeout = function (d, e) {\n return this._timeout && b.clearTimeout(this._timeout), b.setTimeout(a.proxy(function () {\n this._paused || this._core.is(\"busy\") || this._core.is(\"interacting\") || c.hidden || this._core.next(e || this._core.settings.autoplaySpeed);\n }, this), d || this._core.settings.autoplayTimeout);\n }, e.prototype._setAutoPlayInterval = function () {\n this._timeout = this._getNextTimeout();\n }, e.prototype.stop = function () {\n this._core.is(\"rotating\") && (b.clearTimeout(this._timeout), this._core.leave(\"rotating\"));\n }, e.prototype.pause = function () {\n this._core.is(\"rotating\") && (this._paused = !0);\n }, e.prototype.destroy = function () {\n var a, b;this.stop();for (a in this._handlers) {\n this._core.$element.off(a, this._handlers[a]);\n }for (b in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[b] && (this[b] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.autoplay = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n \"use strict\";\n var e = function e(b) {\n this._core = b, this._initialized = !1, this._pages = [], this._controls = {}, this._templates = [], this.$element = this._core.$element, this._overrides = { next: this._core.next, prev: this._core.prev, to: this._core.to }, this._handlers = { \"prepared.owl.carousel\": a.proxy(function (b) {\n b.namespace && this._core.settings.dotsData && this._templates.push('
' + a(b.content).find(\"[data-dot]\").addBack(\"[data-dot]\").attr(\"data-dot\") + \"
\");\n }, this), \"added.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 0, this._templates.pop());\n }, this), \"remove.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 1);\n }, this), \"changed.owl.carousel\": a.proxy(function (a) {\n a.namespace && \"position\" == a.property.name && this.draw();\n }, this), \"initialized.owl.carousel\": a.proxy(function (a) {\n a.namespace && !this._initialized && (this._core.trigger(\"initialize\", null, \"navigation\"), this.initialize(), this.update(), this.draw(), this._initialized = !0, this._core.trigger(\"initialized\", null, \"navigation\"));\n }, this), \"refreshed.owl.carousel\": a.proxy(function (a) {\n a.namespace && this._initialized && (this._core.trigger(\"refresh\", null, \"navigation\"), this.update(), this.draw(), this._core.trigger(\"refreshed\", null, \"navigation\"));\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers);\n };e.Defaults = { nav: !1, navText: [\"prev\", \"next\"], navSpeed: !1, navElement: \"div\", navContainer: !1, navContainerClass: \"owl-nav\", navClass: [\"owl-prev\", \"owl-next\"], slideBy: 1, dotClass: \"owl-dot\", dotsClass: \"owl-dots\", dots: !0, dotsEach: !1, dotsData: !1, dotsSpeed: !1, dotsContainer: !1 }, e.prototype.initialize = function () {\n var b,\n c = this._core.settings;this._controls.$relative = (c.navContainer ? a(c.navContainer) : a(\"
\").addClass(c.navContainerClass).appendTo(this.$element)).addClass(\"disabled\"), this._controls.$previous = a(\"<\" + c.navElement + \">\").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on(\"click\", a.proxy(function (a) {\n this.prev(c.navSpeed);\n }, this)), this._controls.$next = a(\"<\" + c.navElement + \">\").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on(\"click\", a.proxy(function (a) {\n this.next(c.navSpeed);\n }, this)), c.dotsData || (this._templates = [a(\"
\").addClass(c.dotClass).append(a(\"\")).prop(\"outerHTML\")]), this._controls.$absolute = (c.dotsContainer ? a(c.dotsContainer) : a(\"
\").addClass(c.dotsClass).appendTo(this.$element)).addClass(\"disabled\"), this._controls.$absolute.on(\"click\", \"div\", a.proxy(function (b) {\n var d = a(b.target).parent().is(this._controls.$absolute) ? a(b.target).index() : a(b.target).parent().index();b.preventDefault(), this.to(d, c.dotsSpeed);\n }, this));for (b in this._overrides) {\n this._core[b] = a.proxy(this[b], this);\n }\n }, e.prototype.destroy = function () {\n var a, b, c, d;for (a in this._handlers) {\n this.$element.off(a, this._handlers[a]);\n }for (b in this._controls) {\n this._controls[b].remove();\n }for (d in this.overides) {\n this._core[d] = this._overrides[d];\n }for (c in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[c] && (this[c] = null);\n }\n }, e.prototype.update = function () {\n var a,\n b,\n c,\n d = this._core.clones().length / 2,\n e = d + this._core.items().length,\n f = this._core.maximum(!0),\n g = this._core.settings,\n h = g.center || g.autoWidth || g.dotsData ? 1 : g.dotsEach || g.items;if (\"page\" !== g.slideBy && (g.slideBy = Math.min(g.slideBy, g.items)), g.dots || \"page\" == g.slideBy) for (this._pages = [], a = d, b = 0, c = 0; a < e; a++) {\n if (b >= h || 0 === b) {\n if (this._pages.push({ start: Math.min(f, a - d), end: a - d + h - 1 }), Math.min(f, a - d) === f) break;b = 0, ++c;\n }b += this._core.mergers(this._core.relative(a));\n }\n }, e.prototype.draw = function () {\n var b,\n c = this._core.settings,\n d = this._core.items().length <= c.items,\n e = this._core.relative(this._core.current()),\n f = c.loop || c.rewind;this._controls.$relative.toggleClass(\"disabled\", !c.nav || d), c.nav && (this._controls.$previous.toggleClass(\"disabled\", !f && e <= this._core.minimum(!0)), this._controls.$next.toggleClass(\"disabled\", !f && e >= this._core.maximum(!0))), this._controls.$absolute.toggleClass(\"disabled\", !c.dots || d), c.dots && (b = this._pages.length - this._controls.$absolute.children().length, c.dotsData && 0 !== b ? this._controls.$absolute.html(this._templates.join(\"\")) : b > 0 ? this._controls.$absolute.append(new Array(b + 1).join(this._templates[0])) : b < 0 && this._controls.$absolute.children().slice(b).remove(), this._controls.$absolute.find(\".active\").removeClass(\"active\"), this._controls.$absolute.children().eq(a.inArray(this.current(), this._pages)).addClass(\"active\"));\n }, e.prototype.onTrigger = function (b) {\n var c = this._core.settings;b.page = { index: a.inArray(this.current(), this._pages), count: this._pages.length, size: c && (c.center || c.autoWidth || c.dotsData ? 1 : c.dotsEach || c.items) };\n }, e.prototype.current = function () {\n var b = this._core.relative(this._core.current());return a.grep(this._pages, a.proxy(function (a, c) {\n return a.start <= b && a.end >= b;\n }, this)).pop();\n }, e.prototype.getPosition = function (b) {\n var c,\n d,\n e = this._core.settings;return \"page\" == e.slideBy ? (c = a.inArray(this.current(), this._pages), d = this._pages.length, b ? ++c : --c, c = this._pages[(c % d + d) % d].start) : (c = this._core.relative(this._core.current()), d = this._core.items().length, b ? c += e.slideBy : c -= e.slideBy), c;\n }, e.prototype.next = function (b) {\n a.proxy(this._overrides.to, this._core)(this.getPosition(!0), b);\n }, e.prototype.prev = function (b) {\n a.proxy(this._overrides.to, this._core)(this.getPosition(!1), b);\n }, e.prototype.to = function (b, c, d) {\n var e;!d && this._pages.length ? (e = this._pages.length, a.proxy(this._overrides.to, this._core)(this._pages[(b % e + e) % e].start, c)) : a.proxy(this._overrides.to, this._core)(b, c);\n }, a.fn.owlCarousel.Constructor.Plugins.Navigation = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n \"use strict\";\n var e = function e(c) {\n this._core = c, this._hashes = {}, this.$element = this._core.$element, this._handlers = { \"initialized.owl.carousel\": a.proxy(function (c) {\n c.namespace && \"URLHash\" === this._core.settings.startPosition && a(b).trigger(\"hashchange.owl.navigation\");\n }, this), \"prepared.owl.carousel\": a.proxy(function (b) {\n if (b.namespace) {\n var c = a(b.content).find(\"[data-hash]\").addBack(\"[data-hash]\").attr(\"data-hash\");if (!c) return;this._hashes[c] = b.content;\n }\n }, this), \"changed.owl.carousel\": a.proxy(function (c) {\n if (c.namespace && \"position\" === c.property.name) {\n var d = this._core.items(this._core.relative(this._core.current())),\n e = a.map(this._hashes, function (a, b) {\n return a === d ? b : null;\n }).join();if (!e || b.location.hash.slice(1) === e) return;b.location.hash = e;\n }\n }, this) }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers), a(b).on(\"hashchange.owl.navigation\", a.proxy(function (a) {\n var c = b.location.hash.substring(1),\n e = this._core.$stage.children(),\n f = this._hashes[c] && e.index(this._hashes[c]);f !== d && f !== this._core.current() && this._core.to(this._core.relative(f), !1, !0);\n }, this));\n };e.Defaults = { URLhashListener: !1 }, e.prototype.destroy = function () {\n var c, d;a(b).off(\"hashchange.owl.navigation\");for (c in this._handlers) {\n this._core.$element.off(c, this._handlers[c]);\n }for (d in Object.getOwnPropertyNames(this)) {\n \"function\" != typeof this[d] && (this[d] = null);\n }\n }, a.fn.owlCarousel.Constructor.Plugins.Hash = e;\n}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {\n function e(b, c) {\n var e = !1,\n f = b.charAt(0).toUpperCase() + b.slice(1);return a.each((b + \" \" + h.join(f + \" \") + f).split(\" \"), function (a, b) {\n if (g[b] !== d) return e = !c || b, !1;\n }), e;\n }function f(a) {\n return e(a, !0);\n }var g = a(\"\").get(0).style,\n h = \"Webkit Moz O ms\".split(\" \"),\n i = { transition: { end: { WebkitTransition: \"webkitTransitionEnd\", MozTransition: \"transitionend\", OTransition: \"oTransitionEnd\", transition: \"transitionend\" } }, animation: { end: { WebkitAnimation: \"webkitAnimationEnd\", MozAnimation: \"animationend\", OAnimation: \"oAnimationEnd\", animation: \"animationend\" } } },\n j = { csstransforms: function csstransforms() {\n return !!e(\"transform\");\n }, csstransforms3d: function csstransforms3d() {\n return !!e(\"perspective\");\n }, csstransitions: function csstransitions() {\n return !!e(\"transition\");\n }, cssanimations: function cssanimations() {\n return !!e(\"animation\");\n } };j.csstransitions() && (a.support.transition = new String(f(\"transition\")), a.support.transition.end = i.transition.end[a.support.transition]), j.cssanimations() && (a.support.animation = new String(f(\"animation\")), a.support.animation.end = i.animation.end[a.support.animation]), j.csstransforms() && (a.support.transform = new String(f(\"transform\")), a.support.transform3d = j.csstransforms3d());\n}(window.Zepto || window.jQuery, window, document);\n\n},{}],22:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! rangeslider.js - v2.3.0 | (c) 2016 @andreruffert | MIT license | https://github.com/andreruffert/rangeslider.js */\n(function (factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n // CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n})(function ($) {\n 'use strict';\n\n // Polyfill Number.isNaN(value)\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n\n Number.isNaN = Number.isNaN || function (value) {\n return typeof value === 'number' && value !== value;\n };\n\n /**\n * Range feature detection\n * @return {Boolean}\n */\n function supportsRange() {\n var input = document.createElement('input');\n input.setAttribute('type', 'range');\n return input.type !== 'text';\n }\n\n var pluginName = 'rangeslider',\n pluginIdentifier = 0,\n hasInputRangeSupport = supportsRange(),\n defaults = {\n polyfill: true,\n orientation: 'horizontal',\n rangeClass: 'rangeslider',\n disabledClass: 'rangeslider--disabled',\n activeClass: 'rangeslider--active',\n horizontalClass: 'rangeslider--horizontal',\n verticalClass: 'rangeslider--vertical',\n fillClass: 'rangeslider__fill',\n handleClass: 'rangeslider__handle',\n startEvent: ['mousedown', 'touchstart', 'pointerdown'],\n moveEvent: ['mousemove', 'touchmove', 'pointermove'],\n endEvent: ['mouseup', 'touchend', 'pointerup']\n },\n constants = {\n orientation: {\n horizontal: {\n dimension: 'width',\n direction: 'left',\n directionStyle: 'left',\n coordinate: 'x'\n },\n vertical: {\n dimension: 'height',\n direction: 'top',\n directionStyle: 'bottom',\n coordinate: 'y'\n }\n }\n };\n\n /**\n * Delays a function for the given number of milliseconds, and then calls\n * it with the arguments supplied.\n *\n * @param {Function} fn [description]\n * @param {Number} wait [description]\n * @return {Function}\n */\n function delay(fn, wait) {\n var args = Array.prototype.slice.call(arguments, 2);\n return setTimeout(function () {\n return fn.apply(null, args);\n }, wait);\n }\n\n /**\n * Returns a debounced function that will make sure the given\n * function is not triggered too much.\n *\n * @param {Function} fn Function to debounce.\n * @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the function. (defaults to 100ms)\n * @return {Function}\n */\n function debounce(fn, debounceDuration) {\n debounceDuration = debounceDuration || 100;\n return function () {\n if (!fn.debouncing) {\n var args = Array.prototype.slice.apply(arguments);\n fn.lastReturnVal = fn.apply(window, args);\n fn.debouncing = true;\n }\n clearTimeout(fn.debounceTimeout);\n fn.debounceTimeout = setTimeout(function () {\n fn.debouncing = false;\n }, debounceDuration);\n return fn.lastReturnVal;\n };\n }\n\n /**\n * Check if a `element` is visible in the DOM\n *\n * @param {Element} element\n * @return {Boolean}\n */\n function isHidden(element) {\n return element && (element.offsetWidth === 0 || element.offsetHeight === 0 ||\n // Also Consider native `
` elements.\n element.open === false);\n }\n\n /**\n * Get hidden parentNodes of an `element`\n *\n * @param {Element} element\n * @return {[type]}\n */\n function getHiddenParentNodes(element) {\n var parents = [],\n node = element.parentNode;\n\n while (isHidden(node)) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n }\n\n /**\n * Returns dimensions for an element even if it is not visible in the DOM.\n *\n * @param {Element} element\n * @param {String} key (e.g. offsetWidth …)\n * @return {Number}\n */\n function getDimension(element, key) {\n var hiddenParentNodes = getHiddenParentNodes(element),\n hiddenParentNodesLength = hiddenParentNodes.length,\n inlineStyle = [],\n dimension = element[key];\n\n // Used for native `
` elements\n function toggleOpenProperty(element) {\n if (typeof element.open !== 'undefined') {\n element.open = element.open ? false : true;\n }\n }\n\n if (hiddenParentNodesLength) {\n for (var i = 0; i < hiddenParentNodesLength; i++) {\n\n // Cache style attribute to restore it later.\n inlineStyle[i] = hiddenParentNodes[i].style.cssText;\n\n // visually hide\n if (hiddenParentNodes[i].style.setProperty) {\n hiddenParentNodes[i].style.setProperty('display', 'block', 'important');\n } else {\n hiddenParentNodes[i].style.cssText += ';display: block !important';\n }\n hiddenParentNodes[i].style.height = '0';\n hiddenParentNodes[i].style.overflow = 'hidden';\n hiddenParentNodes[i].style.visibility = 'hidden';\n toggleOpenProperty(hiddenParentNodes[i]);\n }\n\n // Update dimension\n dimension = element[key];\n\n for (var j = 0; j < hiddenParentNodesLength; j++) {\n\n // Restore the style attribute\n hiddenParentNodes[j].style.cssText = inlineStyle[j];\n toggleOpenProperty(hiddenParentNodes[j]);\n }\n }\n return dimension;\n }\n\n /**\n * Returns the parsed float or the default if it failed.\n *\n * @param {String} str\n * @param {Number} defaultValue\n * @return {Number}\n */\n function tryParseFloat(str, defaultValue) {\n var value = parseFloat(str);\n return Number.isNaN(value) ? defaultValue : value;\n }\n\n /**\n * Capitalize the first letter of string\n *\n * @param {String} str\n * @return {String}\n */\n function ucfirst(str) {\n return str.charAt(0).toUpperCase() + str.substr(1);\n }\n\n /**\n * Plugin\n * @param {String} element\n * @param {Object} options\n */\n function Plugin(element, options) {\n this.$window = $(window);\n this.$document = $(document);\n this.$element = $(element);\n this.options = $.extend({}, defaults, options);\n this.polyfill = this.options.polyfill;\n this.orientation = this.$element[0].getAttribute('data-orientation') || this.options.orientation;\n this.onInit = this.options.onInit;\n this.onSlide = this.options.onSlide;\n this.onSlideEnd = this.options.onSlideEnd;\n this.DIMENSION = constants.orientation[this.orientation].dimension;\n this.DIRECTION = constants.orientation[this.orientation].direction;\n this.DIRECTION_STYLE = constants.orientation[this.orientation].directionStyle;\n this.COORDINATE = constants.orientation[this.orientation].coordinate;\n\n // Plugin should only be used as a polyfill\n if (this.polyfill) {\n // Input range support?\n if (hasInputRangeSupport) {\n return false;\n }\n }\n\n this.identifier = 'js-' + pluginName + '-' + pluginIdentifier++;\n this.startEvent = this.options.startEvent.join('.' + this.identifier + ' ') + '.' + this.identifier;\n this.moveEvent = this.options.moveEvent.join('.' + this.identifier + ' ') + '.' + this.identifier;\n this.endEvent = this.options.endEvent.join('.' + this.identifier + ' ') + '.' + this.identifier;\n this.toFixed = (this.step + '').replace('.', '').length - 1;\n this.$fill = $('
');\n this.$handle = $('
');\n this.$range = $('
').insertAfter(this.$element).prepend(this.$fill, this.$handle);\n\n // visually hide the input\n this.$element.css({\n 'position': 'absolute',\n 'width': '1px',\n 'height': '1px',\n 'overflow': 'hidden',\n 'opacity': '0'\n });\n\n // Store context\n this.handleDown = $.proxy(this.handleDown, this);\n this.handleMove = $.proxy(this.handleMove, this);\n this.handleEnd = $.proxy(this.handleEnd, this);\n\n this.init();\n\n // Attach Events\n var _this = this;\n this.$window.on('resize.' + this.identifier, debounce(function () {\n // Simulate resizeEnd event.\n delay(function () {\n _this.update(false, false);\n }, 300);\n }, 20));\n\n this.$document.on(this.startEvent, '#' + this.identifier + ':not(.' + this.options.disabledClass + ')', this.handleDown);\n\n // Listen to programmatic value changes\n this.$element.on('change.' + this.identifier, function (e, data) {\n if (data && data.origin === _this.identifier) {\n return;\n }\n\n var value = e.target.value,\n pos = _this.getPositionFromValue(value);\n _this.setPosition(pos);\n });\n }\n\n Plugin.prototype.init = function () {\n this.update(true, false);\n\n if (this.onInit && typeof this.onInit === 'function') {\n this.onInit();\n }\n };\n\n Plugin.prototype.update = function (updateAttributes, triggerSlide) {\n updateAttributes = updateAttributes || false;\n\n if (updateAttributes) {\n this.min = tryParseFloat(this.$element[0].getAttribute('min'), 0);\n this.max = tryParseFloat(this.$element[0].getAttribute('max'), 100);\n this.value = tryParseFloat(this.$element[0].value, Math.round(this.min + (this.max - this.min) / 2));\n this.step = tryParseFloat(this.$element[0].getAttribute('step'), 1);\n }\n\n this.handleDimension = getDimension(this.$handle[0], 'offset' + ucfirst(this.DIMENSION));\n this.rangeDimension = getDimension(this.$range[0], 'offset' + ucfirst(this.DIMENSION));\n this.maxHandlePos = this.rangeDimension - this.handleDimension;\n this.grabPos = this.handleDimension / 2;\n this.position = this.getPositionFromValue(this.value);\n\n // Consider disabled state\n if (this.$element[0].disabled) {\n this.$range.addClass(this.options.disabledClass);\n } else {\n this.$range.removeClass(this.options.disabledClass);\n }\n\n this.setPosition(this.position, triggerSlide);\n };\n\n Plugin.prototype.handleDown = function (e) {\n e.preventDefault();\n this.$document.on(this.moveEvent, this.handleMove);\n this.$document.on(this.endEvent, this.handleEnd);\n\n // add active class because Firefox is ignoring\n // the handle:active pseudo selector because of `e.preventDefault();`\n this.$range.addClass(this.options.activeClass);\n\n // If we click on the handle don't set the new position\n if ((' ' + e.target.className + ' ').replace(/[\\n\\t]/g, ' ').indexOf(this.options.handleClass) > -1) {\n return;\n }\n\n var pos = this.getRelativePosition(e),\n rangePos = this.$range[0].getBoundingClientRect()[this.DIRECTION],\n handlePos = this.getPositionFromNode(this.$handle[0]) - rangePos,\n setPos = this.orientation === 'vertical' ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n\n this.setPosition(setPos);\n\n if (pos >= handlePos && pos < handlePos + this.handleDimension) {\n this.grabPos = pos - handlePos;\n }\n };\n\n Plugin.prototype.handleMove = function (e) {\n e.preventDefault();\n var pos = this.getRelativePosition(e);\n var setPos = this.orientation === 'vertical' ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n this.setPosition(setPos);\n };\n\n Plugin.prototype.handleEnd = function (e) {\n e.preventDefault();\n this.$document.off(this.moveEvent, this.handleMove);\n this.$document.off(this.endEvent, this.handleEnd);\n\n this.$range.removeClass(this.options.activeClass);\n\n // Ok we're done fire the change event\n this.$element.trigger('change', { origin: this.identifier });\n\n if (this.onSlideEnd && typeof this.onSlideEnd === 'function') {\n this.onSlideEnd(this.position, this.value);\n }\n };\n\n Plugin.prototype.cap = function (pos, min, max) {\n if (pos < min) {\n return min;\n }\n if (pos > max) {\n return max;\n }\n return pos;\n };\n\n Plugin.prototype.setPosition = function (pos, triggerSlide) {\n var value, newPos;\n\n if (triggerSlide === undefined) {\n triggerSlide = true;\n }\n\n // Snapping steps\n value = this.getValueFromPosition(this.cap(pos, 0, this.maxHandlePos));\n newPos = this.getPositionFromValue(value);\n\n // Update ui\n this.$fill[0].style[this.DIMENSION] = newPos + this.grabPos + 'px';\n this.$handle[0].style[this.DIRECTION_STYLE] = newPos + 'px';\n this.setValue(value);\n\n // Update globals\n this.position = newPos;\n this.value = value;\n\n if (triggerSlide && this.onSlide && typeof this.onSlide === 'function') {\n this.onSlide(newPos, value);\n }\n };\n\n // Returns element position relative to the parent\n Plugin.prototype.getPositionFromNode = function (node) {\n var i = 0;\n while (node !== null) {\n i += node.offsetLeft;\n node = node.offsetParent;\n }\n return i;\n };\n\n Plugin.prototype.getRelativePosition = function (e) {\n // Get the offset DIRECTION relative to the viewport\n var ucCoordinate = ucfirst(this.COORDINATE),\n rangePos = this.$range[0].getBoundingClientRect()[this.DIRECTION],\n pageCoordinate = 0;\n\n if (typeof e.originalEvent['client' + ucCoordinate] !== 'undefined') {\n pageCoordinate = e.originalEvent['client' + ucCoordinate];\n } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0]['client' + ucCoordinate] !== 'undefined') {\n pageCoordinate = e.originalEvent.touches[0]['client' + ucCoordinate];\n } else if (e.currentPoint && typeof e.currentPoint[this.COORDINATE] !== 'undefined') {\n pageCoordinate = e.currentPoint[this.COORDINATE];\n }\n\n return pageCoordinate - rangePos;\n };\n\n Plugin.prototype.getPositionFromValue = function (value) {\n var percentage, pos;\n percentage = (value - this.min) / (this.max - this.min);\n pos = !Number.isNaN(percentage) ? percentage * this.maxHandlePos : 0;\n return pos;\n };\n\n Plugin.prototype.getValueFromPosition = function (pos) {\n var percentage, value;\n percentage = pos / (this.maxHandlePos || 1);\n value = this.step * Math.round(percentage * (this.max - this.min) / this.step) + this.min;\n return Number(value.toFixed(this.toFixed));\n };\n\n Plugin.prototype.setValue = function (value) {\n if (value === this.value && this.$element[0].value !== '') {\n return;\n }\n\n // Set the new value and fire the `input` event\n this.$element.val(value).trigger('input', { origin: this.identifier });\n };\n\n Plugin.prototype.destroy = function () {\n this.$document.off('.' + this.identifier);\n this.$window.off('.' + this.identifier);\n\n this.$element.off('.' + this.identifier).removeAttr('style').removeData('plugin_' + pluginName);\n\n // Remove the generated markup\n if (this.$range && this.$range.length) {\n this.$range[0].parentNode.removeChild(this.$range[0]);\n }\n };\n\n // A really lightweight plugin wrapper around the constructor,\n // preventing against multiple instantiations\n $.fn[pluginName] = function (options) {\n var args = Array.prototype.slice.call(arguments, 1);\n\n return this.each(function () {\n var $this = $(this),\n data = $this.data('plugin_' + pluginName);\n\n // Create a new instance.\n if (!data) {\n $this.data('plugin_' + pluginName, data = new Plugin(this, options));\n }\n\n // Make it possible to access methods from public.\n // e.g `$element.rangeslider('method');`\n if (typeof options === 'string') {\n data[options].apply(data, args);\n }\n });\n };\n\n return 'rangeslider.js is available in jQuery context e.g $(selector).rangeslider(options);';\n});\n\n},{\"jquery\":27}],23:[function(require,module,exports){\n'use strict';\n\nrequire('./_jquery');\n\nvar _hammer = require('./libs/hammer');\n\nvar _hammer2 = _interopRequireDefault(_hammer);\n\nvar _rangeslider = require('./libs/rangeslider');\n\nvar _rangeslider2 = _interopRequireDefault(_rangeslider);\n\nvar _drum = require('./libs/drum');\n\nvar _drum2 = _interopRequireDefault(_drum);\n\nvar _slickCarousel = require('slick-carousel');\n\nvar _slickCarousel2 = _interopRequireDefault(_slickCarousel);\n\nvar _reveal = require('./components/reveal');\n\nvar _reveal2 = _interopRequireDefault(_reveal);\n\nvar _header = require('./layout/header');\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _banner = require('./components/banner');\n\nvar _banner2 = _interopRequireDefault(_banner);\n\nvar _customCheckbox = require('./components/checkbox/custom-checkbox');\n\nvar _customCheckbox2 = _interopRequireDefault(_customCheckbox);\n\nvar _centerImage = require('./components/center-image');\n\nvar _centerImage2 = _interopRequireDefault(_centerImage);\n\nvar _runChatslider = require('./page/home/run-chatslider');\n\nvar _runChatslider2 = _interopRequireDefault(_runChatslider);\n\nvar _sliderSet = require('./page/home/slider-set');\n\nvar _sliderSet2 = _interopRequireDefault(_sliderSet);\n\nvar _homePagechat = require('./page/home/chats/home-pagechat');\n\nvar _homePagechat2 = _interopRequireDefault(_homePagechat);\n\nvar _toggleCardcompare = require('./components/toggle/toggle-cardcompare');\n\nvar _toggleCardcompare2 = _interopRequireDefault(_toggleCardcompare);\n\nvar _toggleChatcarddetail = require('./components/toggle/toggle-chatcarddetail');\n\nvar _toggleChatcarddetail2 = _interopRequireDefault(_toggleChatcarddetail);\n\nvar _modal = require('./components/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _otp = require('./components/otp');\n\nvar _otp2 = _interopRequireDefault(_otp);\n\nvar _maybankForm = require('./components/maybank-form');\n\nvar _maybankForm2 = _interopRequireDefault(_maybankForm);\n\nvar _rcarousel = require('./components/rcarousel');\n\nvar _rcarousel2 = _interopRequireDefault(_rcarousel);\n\nvar _topNavLink = require('./components/top-nav-link');\n\nvar _topNavLink2 = _interopRequireDefault(_topNavLink);\n\nvar _selectBox = require('./components/select-box');\n\nvar _selectBox2 = _interopRequireDefault(_selectBox);\n\nvar _hiddenScrollbar = require('./components/hiddenScrollbar');\n\nvar _hiddenScrollbar2 = _interopRequireDefault(_hiddenScrollbar);\n\nvar _cardCompare = require('./components/card-compare');\n\nvar _cardCompare2 = _interopRequireDefault(_cardCompare);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// import $ from 'jquery';\n\n// owl.carousel uses require as it doesnt seem to work with import atm\nrequire('owl.carousel');\n\n// import HammerJs to handle the touch events for the sliders\n//libs\n\n// import jquery\n\nwindow.Hammer = _hammer2.default;\n\n// import slick carousel\n\n\n// import ScrollReveal\n\n\n//components\n\n\n// instantiate classes\nvar header = new _header2.default();\nvar banner = new _banner2.default();\nvar customCheckbox = new _customCheckbox2.default();\nvar centerImage = new _centerImage2.default();\nvar chatSlider = new _runChatslider2.default();\nvar promotionSliderSet = new _sliderSet2.default();\nvar homePageChat = new _homePagechat2.default();\nvar toggleCardCompare = new _toggleCardcompare2.default();\nvar toggleChatCardDetail = new _toggleChatcarddetail2.default();\nvar form = new _maybankForm2.default();\nvar modal = new _modal2.default();\nvar otp = new _otp2.default();\nvar selectBox = new _selectBox2.default();\nvar rCarousel = new _rcarousel2.default();\nvar topNavLink = new _topNavLink2.default();\nvar hiddenScrollbar = new _hiddenScrollbar2.default();\nvar cardCompare = new _cardCompare2.default();\n\nfunction valueSlider() {\n\t$('.input.range input[type=\"range\"]').rangeslider({\n\t\tpolyfill: false,\n\t\tonInit: function onInit() {\n\t\t\tvar $rangeEl = this.$range;\n\n\t\t\t// add value label to handle\n\t\t\tvar $handle = $rangeEl.find('.rangeslider__handle');\n\t\t\tvar labeltext = '';\n\t\t\tif (this.$element.attr('data-labeltext') && this.$element.attr('data-labeltext') != '') {\n\t\t\t\tlabeltext = ' ' + this.$element.attr('data-labeltext');\n\t\t\t}\n\t\t\tvar handleValue = '
' + this.value + labeltext + '
';\n\t\t\t$handle.append(handleValue);\n\n\t\t\t// get range index labels \n\t\t\tvar rangeLabels = this.$element.attr('labels');\n\t\t\trangeLabels = rangeLabels.split(', ');\n\n\t\t\t// add labels\n\t\t\t$rangeEl.append('
');\n\t\t\t$(rangeLabels).each(function (index, value) {\n\t\t\t\t$rangeEl.find('.rangeslider__labels').append('' + value + labeltext + '');\n\t\t\t});\n\n\t\t\t$rangeEl.parents('.form-group').find('.js-range-value').text(this.value);\n\t\t},\n\t\tonSlide: function onSlide(position, value) {\n\t\t\tvar $handle = this.$range.find('.rangeslider__handle__value');\n\t\t\tvar labeltext = '';\n\t\t\tif (this.$element.attr('data-labeltext') && this.$element.attr('data-labeltext') != '') {\n\t\t\t\tlabeltext = ' ' + this.$element.attr('data-labeltext');\n\t\t\t}\n\n\t\t\t$handle.html(this.value + labeltext);\n\n\t\t\tthis.$range.parents('.form-group').find('.js-range-value').text(this.value);\n\t\t}\n\t});\n}\n\nfunction drumSelector() {\n\t$('.input.select-drum select').drum({\n\t\tpanelCount: 24,\n\t\tdail_w: 40,\n\t\tdail_h: 10,\n\t\tdail_stroke_color: '#000',\n\t\tdail_stroke_width: 3\n\t});\n\t// toggle transition class to prevent drum lagged when dragged\n\t$('body').on('mousedown', '.input.select-drum .drum-wrapper', function () {\n\t\t$(this).find('.drum').addClass('no-trans');\n\t});\n\t$('body').on('mouseup', '*', function () {\n\t\t$('.input.select-drum .drum-wrapper .drum').removeClass('no-trans');\n\t});\n}\n\nfunction chatActionSliders(sliderElement) {\n\tsliderElement.addClass('owl-carousel owl-theme');\n\tsetTimeout(function () {\n\t\tsliderElement.owlCarousel({\n\t\t\tnav: true,\n\t\t\tdots: false,\n\t\t\tmargin: 12,\n\t\t\tautoWidth: true,\n\t\t\tloop: false,\n\t\t\titems: 1\n\t\t});\n\t\tsliderElement.parents('.chat-action').find('> div').addClass('ready');\n\t}, 10);\n}\n\n$(document).ready(function () {\n\n\t/* ------ GLOBAL/GENERAL ------ */\n\tcustomCheckbox.initEvent();\n\tbanner.initEvent();\n\theader.initEvent();\n\tmodal.initEvent();\n\totp.initEvent();\n\tselectBox.initEvent();\n\trCarousel.initEvent();\n\ttopNavLink.initEvent();\n\thiddenScrollbar.initEvent('.js-hidden-scrollbar');\n\tcardCompare.initEvent();\n\n\tvalueSlider();\n\tdrumSelector();\n\n\t// run center image function for these elements\n\tcenterImage.initEvent('.story-list .list', '.story-card .image');\n\tcenterImage.initEvent('.content-panels-2:not(.icon-image)', '.frame .bg');\n\tcenterImage.initEvent('.m-cards-giro', '.image');\n\tvar windowWidth = $(window).width();\n\t$(window).resize(function () {\n\t\tif ($(window).width() != windowWidth) {\n\t\t\tcenterImage.initEvent('.story-list .list', '.story-card .image');\n\t\t\tcenterImage.initEvent('.content-panels-2:not(.icon-image)', '.frame .bg');\n\t\t\tcenterImage.initEvent('.m-cards-giro-card', '.image');\n\t\t\twindowWidth = $(window).width();\n\t\t}\n\t});\n\tsetTimeout(function () {\n\t\t$(window).resize();\n\t}, 10);\n\n\t// Forms\n\tform.initEvent();\n\n\t// .m-top-nav fixed on scroll\n\tif ($('.m-top-nav.js-scroll-fixed').length) {\n\t\tvar mTopNavOffset = $('.m-top-nav.js-scroll-fixed').offset();\n\n\t\t$('
').insertBefore('.m-top-nav');\n\t\tif ($('.m-top-nav.js-scroll-fixed').hasClass('closed')) {\n\t\t\t$('.m-top-nav-placeholder').addClass('closed');\n\t\t}\n\t\tif ($('.m-top-nav.js-scroll-fixed').hasClass('persistent')) {\n\t\t\t$('.m-top-nav-placeholder').addClass('persistent');\n\t\t}\n\n\t\t$(window).scroll(function () {\n\t\t\tif ($(window).scrollTop() > mTopNavOffset.top) {\n\t\t\t\t$('.m-top-nav.js-scroll-fixed').addClass('fixed');\n\t\t\t\t$('.m-top-nav-placeholder').addClass('shown');\n\t\t\t} else {\n\t\t\t\t$('.m-top-nav.js-scroll-fixed').removeClass('fixed');\n\t\t\t\t$('.m-top-nav-placeholder').removeClass('shown');\n\t\t\t}\n\t\t});\n\t}\n\n\t/* ------ HOMEPAGE CHAT BANNER ------ */\n\tvar sampleBannerContent = [{\n\t\tbanner: 'assets/img/dummy-banner.jpg',\n\t\timage: 'assets/img/dummy-banner-image.png',\n\t\ttag: 'Tag',\n\t\ttitle: 'Pengalaman layanan Perbankan Dimulai dari Sini.',\n\t\ttext: 'Update 1 lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna.'\n\t}, {\n\t\tbanner: 'assets/img/dummy-banner.jpg',\n\t\timage: '',\n\t\ttag: '',\n\t\ttitle: 'Pengalaman layanan Perbankan Dimulai dari Sini.',\n\t\ttext: 'Update 2 lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna.'\n\t}, {\n\t\tbanner: 'assets/img/dummy-banner.jpg',\n\t\timage: 'assets/img/dummy-banner-image.png',\n\t\ttag: 'Promo',\n\t\ttitle: 'Pengalaman layanan Perbankan Dimulai dari Sini.',\n\t\ttext: 'Update 3 lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna.'\n\t}];\n\n\t/** \n *@desc slider controller (Object) for homechat and promotion slider \n */\n\tvar m2uSlider = {\n\t\tpause: function pause() {\n\t\t\tchatSlider.pauseSlider(); //pause home chat slider\n\t\t\tpromotionSliderSet.pauseSlider(); //pause promotion slider\n\t\t\t$('.banner-slide').addClass('pause-banner'); //add class to indicate that this banner is paused\n\t\t},\n\t\tplay: function play() {\n\t\t\tchatSlider.resumeSlider(); //resume home chat slider\n\t\t\tpromotionSliderSet.resumeSlider(); //resume promotion slider\n\t\t\t$('.banner-slide').removeClass('pause-banner'); //remove the class once its resumed\n\t\t}\n\t};\n\n\t// attach the controller to window, so we can call this in browser.\n\twindow.m2uSlider = m2uSlider;\n\n\tif ($('.section.home-chat .chat-banner').length) {\n\t\t// remove parameter 'true' to use slider without transition animation\n\t\tchatSlider.initEvent($('.js-chat-banner'), true);\n\n\t\t// example resetting chat banner with new contents\n\t\t$('.home-chat .chat-area').on('click', '.bubble.cs.with-icon', function () {\n\t\t\tchatSlider.resetSlider(sampleBannerContent);\n\t\t});\n\t}\n\n\t/* ------ HOMEPAGE CHAT AREA ------ */\n\tvar sampleChatContent = {\n\t\tsender: 'user', // either 'user' or 'cs', used as class\n\t\tcontents: [{\n\t\t\timage: '/assets/img/dummy-chat-image.png', // if this present, type will be image\n\t\t\ticon: '', // if this present AND image empty, type will be icon\n\t\t\ttext: 'This is chat with image' // the text, what do you expect? :p\n\t\t}, {\n\t\t\timage: '',\n\t\t\ticon: '',\n\t\t\ttext: 'This is default chat text'\n\t\t}],\n\t\treplyAPI: 'url/to/get/reply' // leave as empty string if not needed\n\t};\n\n\tif ($('.section.home-chat .chat-area').length) {\n\t\thomePageChat.initEvent();\n\n\t\t// example pushing user chat (cs reply pushed via api callback)\n\t\t/*\n setTimeout(function () {\n \thomePageChat.pushChat(sampleChatContent);\n }, 3000);\n */\n\n\t\t// push user chat on button click\n\t\t/*\n $('body').on('click', '.badge-button.solution', function () {\n \thomePageChat.pushChat(sampleChatContent);\n });\n */\n\n\t\t// card compare & card detail\n\t\ttoggleCardCompare.initEvent();\n\t\ttoggleChatCardDetail.initEvent();\n\n\t\t// generate slider for chat action list\n\t\tchatActionSliders($('.chat-action .reply-buttons .list'));\n\t\tchatActionSliders($('.chat-action .card-choice .list'));\n\t\tchatActionSliders($('.chat-action .reply-texts .list'));\n\t}\n\n\twindow.homechat = homePageChat;\n\n\t/* ------ HOMEPAGE LATEST OFFER ------ */\n\n\tif ($('.page-home .section.promotions').length || $('.page-treats-points .section.promotions').length) {\n\t\tpromotionSliderSet.initEvent($('.js-banner-set-list'));\n\t}\n\n\tvar theSlider = $('.js-slick-card');\n\tif (theSlider) {\n\n\t\tvar totalItem = theSlider.find('.js-slick-item').length;\n\t\tvar itemToShow = void 0;\n\n\t\tif (totalItem >= 4) {\n\t\t\titemToShow = 4;\n\t\t} else if (totalItem <= 2) {\n\t\t\titemToShow = 2;\n\t\t} else {\n\t\t\titemToShow = totalItem;\n\t\t}\n\n\t\t$('.js-slick-card').slick({\n\t\t\tslidesToShow: 4,\n\t\t\tslidesToScroll: 4,\n\t\t\tvariableWidth: true,\n\t\t\tinfinite: false,\n\t\t\tresponsive: [{\n\t\t\t\tbreakpoint: 1280,\n\t\t\t\tsettings: {\n\t\t\t\t\tslidesToShow: 3,\n\t\t\t\t\tslidesToScroll: 3\n\t\t\t\t\t// variableWidth: false,\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tbreakpoint: 480,\n\t\t\t\tsettings: {\n\t\t\t\t\tslidesToShow: 2,\n\t\t\t\t\tslidesToScroll: 2\n\t\t\t\t\t// variableWidth: true,\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tbreakpoint: 0,\n\t\t\t\tsettings: {\n\t\t\t\t\tslidesToShow: 1,\n\t\t\t\t\tslidesToScroll: 1\n\t\t\t\t\t// variableWidth: true,\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t}\n\n\t$('.js-form .owl-carousel.filter').wrap('
').owlCarousel({\n\t\t// loop: true,\n\t\tnav: false,\n\t\tresponsiveClass: true,\n\t\tresponsive: {\n\t\t\t0: {\n\t\t\t\titems: 1,\n\t\t\t\tcenter: true\n\t\t\t},\n\t\t\t767: {\n\t\t\t\titems: 3,\n\t\t\t\tstagePadding: 50\n\t\t\t},\n\t\t\t992: {\n\t\t\t\titems: 4\n\t\t\t},\n\t\t\t1600: {\n\t\t\t\titems: 6\n\t\t\t}\n\t\t}\n\t});\n});\n\n},{\"./_jquery\":1,\"./components/banner\":2,\"./components/card-compare\":3,\"./components/center-image\":4,\"./components/checkbox/custom-checkbox\":6,\"./components/hiddenScrollbar\":7,\"./components/maybank-form\":8,\"./components/modal\":9,\"./components/otp\":10,\"./components/rcarousel\":11,\"./components/reveal\":12,\"./components/select-box\":13,\"./components/toggle/toggle-cardcompare\":14,\"./components/toggle/toggle-chatcarddetail\":15,\"./components/top-nav-link\":16,\"./layout/header\":18,\"./libs/drum\":19,\"./libs/hammer\":20,\"./libs/rangeslider\":22,\"./page/home/chats/home-pagechat\":24,\"./page/home/run-chatslider\":25,\"./page/home/slider-set\":26,\"owl.carousel\":28,\"slick-carousel\":30}],24:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HomePageChat = function () {\n\tfunction HomePageChat() {\n\t\t_classCallCheck(this, HomePageChat);\n\n\t\tthis.chatArea = $('.chat-area .chat-wrapper');\n\t\tthis.chatLock = 0;\n\n\t\tthis.bubbleTemplate = '
' + '
' + '
\"\"
' + '[_TEXT_]' + '
' + '
';\n\n\t\tthis.firstNewBubble;\n\t\tthis.scrollDistance;\n\t\tthis.animTime = 200; // make sure to match this with defined time in css\n\n\t\tthis.sampleChatReply = { // same structure as \"sampleChatContent\" (in main.js)\n\t\t\tsender: 'cs',\n\t\t\tcontents: [{\n\t\t\t\timage: '',\n\t\t\t\ticon: '/assets/img/dummy-chat-icon.png',\n\t\t\t\ttext: 'This is chat with icon'\n\t\t\t}, {\n\t\t\t\timage: '',\n\t\t\t\ticon: '',\n\t\t\t\ttext: 'This is default chat text'\n\t\t\t}],\n\t\t\treplyAPI: ''\n\t\t};\n\t}\n\n\t_createClass(HomePageChat, [{\n\t\tkey: 'scrollToLastChat',\n\t\tvalue: function scrollToLastChat() {\n\t\t\tif (this.chatArea.parents('.chat-log').hasClass('js-hidden-scrollbar')) {\n\t\t\t\tthis.scrollDistance = this.chatArea.outerHeight() - this.chatArea.parents('.chat-log').find('.hidden-scrollbar-frame').outerHeight();\n\t\t\t\tthis.chatArea.parents('.chat-log').find('.hidden-scrollbar-frame').animate({ 'scrollTop': this.scrollDistance }, this.animTime);\n\t\t\t} else {\n\t\t\t\tthis.scrollDistance = this.chatArea.outerHeight() - this.chatArea.parents('.chat-log').outerHeight();\n\t\t\t\tthis.chatArea.parents('.chat-log').animate({ 'scrollTop': this.scrollDistance }, this.animTime);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'showNewBubble',\n\t\tvalue: function showNewBubble(bubble, reply) {\n\t\t\tvar _this = this;\n\n\t\t\tbubble.removeClass('hidden');\n\t\t\tthis.scrollToLastChat();\n\n\t\t\t// check if there still any new bubble ahead\n\t\t\tif (bubble.next('.bubble.hidden').length && !bubble.next('.bubble.hidden').hasClass('cs-typing')) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this.showNewBubble(bubble.next('.bubble.hidden'), reply);\n\t\t\t\t}, this.animTime + 200);\n\t\t\t}\n\n\t\t\t// check if cs reply is needed after showing last bubble\n\t\t\telse if (reply != '') {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t_this.chatArea.find('.bubble.cs-typing').removeClass('hidden');\n\t\t\t\t\t\t_this.scrollToLastChat();\n\n\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\t\turl: reply,\n\t\t\t\t\t\t\tsuccess: function success(ajaxData) {\n\t\t\t\t\t\t\t\t_this.chatArea.find('.bubble.cs-typing').addClass('hidden');\n\t\t\t\t\t\t\t\t_this.pushChat(ajaxData);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terror: function error(XMLHttpRequest, textStatus, errorThrown) {\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t_this.chatArea.find('.bubble.cs-typing').addClass('hidden');\n\t\t\t\t\t\t\t\t\t_this.pushChat(_this.sampleChatReply);\n\t\t\t\t\t\t\t\t}, 1200);\n\t\t\t\t\t\t\t\tconsole.log('ok');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, this.animTime + 600);\n\t\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'pushChat',\n\t\tvalue: function pushChat(chatData) {\n\t\t\tvar _this = this;\n\t\t\tvar $firstNewBubble = this.chatArea;\n\n\t\t\tif (this.chatLock == 0) {\n\t\t\t\tif (chatData && chatData != null && chatData != '' && chatData.contents.length > 0) {\n\t\t\t\t\tthis.chatLock = 1;\n\n\t\t\t\t\t// append all chat bubble\n\t\t\t\t\tfor (var i = 0; i < chatData.contents.length; i++) {\n\t\t\t\t\t\tvar chatTemplate = '';\n\t\t\t\t\t\tvar type = '';\n\t\t\t\t\t\tvar src = '';\n\n\t\t\t\t\t\t// determine bubble template type\n\t\t\t\t\t\tif (chatData.contents[i].image != '') {\n\t\t\t\t\t\t\tvar type = 'with-img';\n\t\t\t\t\t\t\tvar src = chatData.contents[i].image;\n\t\t\t\t\t\t} else if (chatData.contents[i].icon != '') {\n\t\t\t\t\t\t\tvar type = 'with-icon';\n\t\t\t\t\t\t\tvar src = chatData.contents[i].icon;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchatTemplate = this.bubbleTemplate.replace('[_SENDER_]', chatData.sender).replace('[_IMG_TYPE_]', type).replace('[_IMG_SRC_]', src).replace('[_TEXT_]', chatData.contents[i].text);\n\t\t\t\t\t\t$(chatTemplate).insertBefore(this.chatArea.find('.bubble.cs-typing'));\n\t\t\t\t\t}\n\n\t\t\t\t\t// start showing new chat bubbles\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t_this.firstNewBubble = $firstNewBubble.find('.bubble.hidden').not('.cs-typing').first();\n\t\t\t\t\t\t_this.showNewBubble(_this.firstNewBubble, chatData.replyAPI);\n\t\t\t\t\t}, 10);\n\n\t\t\t\t\tthis.chatLock = 0;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('=== chat data is undefined/null/empty ===');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log('=== chat loading in process, try again later ===');\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent() {\n\t\t\tif (this.chatArea.parents('.chat-log').hasClass('js-hidden-scrollbar')) {\n\t\t\t\tthis.chatArea.parents('.chat-log').find('.hidden-scrollbar-frame').scrollTop(0);\n\t\t\t} else {\n\t\t\t\tthis.chatArea.parents('.chat-log').scrollTop(0);\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn HomePageChat;\n}();\n\nexports.default = HomePageChat;\n\n},{}],25:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _centerImage = require('../../components/center-image');\n\nvar _centerImage2 = _interopRequireDefault(_centerImage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar centerImage = new _centerImage2.default();\n\nvar RunChatSlider = function () {\n function RunChatSlider() {\n _classCallCheck(this, RunChatSlider);\n\n this.slideItems = 1;\n this.slideSpeed = 700;\n this.autoSlideTimer = 7000;\n\n this.slider;\n this.chatBanner;\n this.currentDot;\n this.timeLeft;\n\n this.slideTransition = false;\n\n // reset & change slider content\n this.bannerTemplate = '
' + '
' + '\"\"' + '
' + '
' + '\"\"' + '

[_TAG_]

' + '

[_TITLE_]

' + '

[_TEXT_]

' + '
' + '
';\n }\n\n _createClass(RunChatSlider, [{\n key: 'playSlider',\n value: function playSlider(activeTimer) {\n var _this = this;\n this.currentDot = this.slider.find('.owl-dots .owl-dot.active span');\n this.currentDot.animate({\n 'width': '100%'\n }, activeTimer, 'linear', function () {\n _this.slider.trigger('next.owl.carousel');\n _this.playSlider(_this.autoSlideTimer);\n });\n }\n }, {\n key: 'pauseSlider',\n value: function pauseSlider() {\n this.currentDot.stop(true, false);\n this.timeLeft = (this.currentDot.parent().width() - this.currentDot.width()) / this.currentDot.parent().width() * this.autoSlideTimer;\n }\n }, {\n key: 'resumeSlider',\n value: function resumeSlider() {\n this.playSlider(this.timeLeft);\n }\n }, {\n key: 'watchResize',\n value: function watchResize() {\n var _this = this;\n $(window).resize(function () {\n setTimeout(function () {\n _this.resizeChatBanner();\n }, 500);\n });\n }\n }, {\n key: 'resizeChatBanner',\n value: function resizeChatBanner() {\n var height = $(window).height();\n var width = $(window).width();\n var get_started_height = 60;\n var banner_height = height - get_started_height;\n\n var orientation = void 0;\n if (window.matchMedia(\"(orientation: portrait)\").matches) {\n orientation = 1;\n }\n\n if (window.matchMedia(\"(orientation: landscape)\").matches) {\n orientation = 0;\n }\n\n if (width <= 768 && orientation == 1) {\n this.chatBanner.height(banner_height);\n $('.home-chat .chat-banner .banner-page').height(banner_height);\n $('.home-chat .get-started').show();\n } else {\n this.chatBanner.height('inherit');\n $('.home-chat .chat-banner .banner-page').removeAttr('style');\n $('.home-chat .get-started').hide();\n }\n\n centerImage.initEvent('.home-chat .chat-banner', '.banner-img');\n }\n }, {\n key: 'initSlider',\n value: function initSlider() {\n var _this = this;\n var transIn, transOut;\n this.chatBanner.addClass('owl-carousel owl-theme');\n // transition\n if (this.slideTransition == true) {\n transIn = 'fadeIn';\n transOut = 'fadeOut';\n this.chatBanner.addClass('use-transition');\n } else {\n transIn = '';\n transOut = '';\n }\n // slider settings\n this.slider = this.chatBanner.owlCarousel({\n nav: false,\n dots: true,\n items: this.slideItems,\n loop: true,\n navSpeed: this.slideSpeed,\n dotsSpeed: this.slideSpeed,\n autoplaySpeed: this.slideSpeed,\n dragEndSpeed: this.slideSpeed,\n smartSpeed: this.slideSpeed,\n mouseDrag: false,\n touchDrag: false,\n pullDrag: false,\n freeDrag: false,\n animateIn: transIn,\n animateOut: transOut\n });\n // set event listener to reset timer and\n // progress bar on slide change\n this.slider.on('changed.owl.carousel', function () {\n _this.currentDot.removeAttr('style');\n _this.timeLeft = _this.autoSlideTimer;\n });\n // run autoplay\n this.playSlider(this.autoSlideTimer);\n\n this.resizeChatBanner();\n this.watchResize();\n\n $('.get-started a').click(function () {\n $(\"html, body\").animate({\n scrollTop: $('#chat').offset().top\n }, 1000, function () {\n $('.chat-banner, .get-started').remove();\n $(\"html, body\").scrollTop(0);\n $('.home-chat').addClass('no-banner');\n });\n return false;\n });\n }\n }, {\n key: 'destroySlider',\n value: function destroySlider() {\n this.currentDot.stop(true, false);\n this.slider.off('changed.owl.carousel');\n this.slider.trigger('destroy.owl.carousel');\n }\n }, {\n key: 'resetSlider',\n value: function resetSlider(contents) {\n if (contents && contents != null && contents != '' && contents.length > 0) {\n var newTemplate = '';\n // destroy current slider\n this.destroySlider();\n // change contents\n this.chatBanner.html('');\n for (var i = 0; i < contents.length; i++) {\n newTemplate = this.bannerTemplate.replace('[_BANNER_]', contents[i].banner).replace('[_IMAGE_]', contents[i].image).replace('[_TAG_]', contents[i].tag).replace('[_TITLE_]', contents[i].title).replace('[_TEXT_]', contents[i].text);\n this.chatBanner.append(newTemplate);\n }\n // re-initiate slider\n this.initSlider(this.chatBanner, this.slideTransition);\n } else {\n console.log('=== chat banner new contents is undefined/null/empty ===');\n }\n }\n }, {\n key: 'initEvent',\n value: function initEvent(element, transition) {\n var _this = this;\n\n if (transition) {\n this.slideTransition = transition;\n }\n\n this.chatBanner = element;\n this.initSlider(this.chatBanner);\n\n // set pause & resume event\n this.chatBanner.off('mouseenter');\n this.chatBanner.on('mouseenter', function () {\n _this.pauseSlider();\n });\n\n this.chatBanner.off('mouseleave');\n this.chatBanner.on('mouseleave', function () {\n\n // check if banner-slide has class pause banner and trigger resume func if it doesnt have it\n var isPaused = $(this).hasClass('pause-banner');\n if (!isPaused) _this.resumeSlider();\n });\n }\n }]);\n\n return RunChatSlider;\n}();\n\nexports.default = RunChatSlider;\n\n},{\"../../components/center-image\":4}],26:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _runChatslider = require('../home/run-chatslider');\n\nvar _runChatslider2 = _interopRequireDefault(_runChatslider);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar promotionSlider = new _runChatslider2.default();\n\nvar RunSliderSet = function () {\n\tfunction RunSliderSet() {\n\t\t_classCallCheck(this, RunSliderSet);\n\n\t\tthis.itemsList;\n\t\tthis.currentActive;\n\t\tthis.sliderElement;\n\t\tthis.fadeTime = 300; // match with css transition for .promotion-banner\n\t}\n\n\t_createClass(RunSliderSet, [{\n\t\tkey: 'pauseSlider',\n\t\tvalue: function pauseSlider() {\n\t\t\tpromotionSlider.pauseSlider();\n\t\t}\n\t}, {\n\t\tkey: 'resumeSlider',\n\t\tvalue: function resumeSlider() {\n\t\t\tpromotionSlider.resumeSlider();\n\t\t}\n\t}, {\n\t\tkey: 'runActiveBanner',\n\t\tvalue: function runActiveBanner() {\n\t\t\tvar _this = this;\n\n\t\t\t// get active item's target banner\n\t\t\tthis.currentActive = $('#' + this.itemsList.find('.js-banner-set-item.active').attr('data-banner'));\n\t\t\t// show target banner & hide the others\n\t\t\tthis.currentActive.parent('.js-banner-set-slider').addClass('active').removeClass('inactive').siblings('.js-banner-set-slider').removeClass('active').addClass('inactive').addClass('faded');\n\t\t\t// run slider on target banner\n\t\t\tif ($(window).width() >= 992) {\n\t\t\t\tpromotionSlider.initEvent(this.currentActive);\n\t\t\t} else {\n\t\t\t\tthis.sliderElement = this.currentActive;\n\t\t\t\tthis.sliderElement.addClass('owl-carousel owl-theme');\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this.sliderElement.owlCarousel({\n\t\t\t\t\t\tnav: false,\n\t\t\t\t\t\tdots: false,\n\t\t\t\t\t\tmargin: 20,\n\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\titems: 1\n\t\t\t\t\t});\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t\tsetTimeout(function () {\n\t\t\t\t_this.currentActive.parent('.js-banner-set-slider').removeClass('faded');\n\t\t\t}, 10);\n\t\t}\n\t}, {\n\t\tkey: 'initEvent',\n\t\tvalue: function initEvent(element) {\n\t\t\tvar _this = this;\n\t\t\tthis.itemsList = element;\n\n\t\t\t// set active class to first item by default\n\t\t\tthis.itemsList.find('.js-banner-set-item:first-child').addClass('active').siblings().removeClass('active');\n\n\t\t\t// append select-option for mobile version\n\t\t\tvar selOptItems = '';\n\t\t\telement.append('');\n\t\t\telement.find('.js-banner-set-item').each(function () {\n\t\t\t\tselOptItems = '