{"version":3,"sources":["icon.js","button.js","collapse.js","collapse-trigger.js","form-triggers.js","conditional-data-validator.js","datepicker.js","dropdown.js","select.js","textfield.js","validation.js","weekdatepicker.js","header.js","overlay.js","load.js","modal.js","progress.js","tooltip.js","helper.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACztDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACz0DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC53BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"telia.js","sourcesContent":["/* globals svg4everybody */\n\nsvg4everybody();\n","//@import('jquery.teliaButton.js');\n\nfunction initButton() {\n $(document).trigger('enhance.button');\n}\nwindow.initButton = initButton;\n\n$(function() {\n $(document).trigger('enhance.button');\n});\n","/* ========================================================================\n* Bootstrap: collapse.js v3.3.5\n* http://getbootstrap.com/javascript/#collapse\n* ========================================================================\n* Copyright 2011-2015 Twitter, Inc.\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n* ======================================================================== */\n\n+function($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap');\n\n var transEndEventNames = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return {\n end: transEndEventNames[name]\n };\n }\n }\n\n // explicit for ie8 ( ._.)\n return false;\n }\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function(duration) {\n var called = false;\n var $el = this;\n\n $(this).one('bsTransitionEnd', function() { called = true; });\n function callback() { if (!called) $($el).trigger($.support.transition.end); };\n setTimeout(callback, duration);\n\n return this;\n };\n\n $(function() {\n $.support.transition = transitionEnd();\n\n if (!$.support.transition) return;\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function(e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments);\n }\n };\n });\n}(jQuery);\n\n+function($) {\n 'use strict';\n\n /**\n * Collapse\n * @class\n * @param {HTMLElement} element The HTML element the Collapse should be bound to\n * @param {Object} options An option map\n */\n function Collapse(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, Collapse.DEFAULTS, options);\n this.id = element.id;\n this.$trigger = $('[data-toggle=\"collapse\"][href=\"#' + this.id + '\"],' +\n '[data-toggle=\"collapse\"][data-target=\"#' + this.id + '\"]');\n this.transitioning = null;\n this.$scrollable = this.$element;\n\n var collapseContainer = this.$element.find('.collapse__container');\n\n if (collapseContainer.length) {\n this.$arrow = $('
');\n this.$close = $('');\n\n if (collapseContainer.hasClass('collapse__container--no-close')) {\n this.$close = false;\n }\n if (collapseContainer.hasClass('collapse__container--no-arrow')) {\n this.$arrow = false;\n }\n }\n\n if (this.options.parent) {\n this.$parent = this.getParent();\n } else {\n this.addAriaAndCollapsedClass(this.$element, this.$trigger);\n }\n\n if (this.options.toggle) this.toggle();\n };\n\n Collapse.VERSION = '3.3.5';\n\n Collapse.TRANSITION_DURATION = 350;\n\n Collapse.DEFAULTS = {\n toggle: false,\n scrollSpeed: 500,\n topNavHeight: 50,\n newLocationOffset: 60,\n threshold: 100,\n autoScroll: true,\n // Callback function\n loadContent: function() {}\n };\n\n /**\n * Get element dimensions.\n * @method dimension\n * @return {String}\n */\n Collapse.prototype.dimension = function() {\n var hasWidth = this.$element.hasClass('width');\n\n return hasWidth ? 'width' : 'height';\n };\n\n /**\n * Show collapse.\n * @method show\n * @param {Boolean} noScroll is scrolling allowed\n */\n Collapse.prototype.show = function(noScroll) {\n var shouldAnimate = true;\n\n if (this.$element.data('collapse-animate') != undefined) {\n shouldAnimate = this.$element.data('collapse-animate');\n }\n\n var that = this;\n\n if ((this.transitioning || this.$element.hasClass('collapse--visible'))) {\n if (!noScroll) {\n this.scroll(false);\n }\n\n return;\n }\n\n if (this.$trigger.data('content') == 'ajax') {\n this.options.loadContent.call(this, this.$element, loadContentReady);\n } else {\n showcontent.call(this);\n }\n\n function loadContentReady(html) {\n that.$element.find('.collapse__container').empty().append(html);\n showcontent.call(that);\n }\n\n function showcontent() {\n var activesData;\n var actives = that.$parent && this.$parent.find('.collapse--visible, .collapse--collapsing');\n\n if (actives && actives.length) {\n activesData = actives.data('bs.collapse');\n if (activesData && activesData.transitioning) return;\n }\n\n var event = $.Event('show.bs.collapse');\n\n that.$element.trigger(event);\n if (event.isDefaultPrevented()) return;\n\n if (actives && actives.length) {\n Plugin.call(actives, 'hide');\n activesData || actives.data('bs.collapse', null);\n }\n\n var dimension = this.dimension();\n\n if (!shouldAnimate) {\n that.$element\n .addClass('collapse--visible')[dimension](0)\n .attr('aria-expanded', true)\n .prepend(this.$arrow);\n } else {\n that.$element\n .removeClass('collapse')\n .addClass('collapse--collapsing')[dimension](0)\n .attr('aria-expanded', true)\n .prepend(this.$arrow);\n }\n\n $(document).trigger('refresh.telia', that.$element[0]);\n\n this.$trigger\n .removeClass('collapsed')\n .attr('aria-expanded', true);\n\n this.transitioning = 1;\n\n if (this.$trigger.length) {\n // filters\n this.setArrowPosition();\n }\n\n function complete() {\n that.$element\n .removeClass('collapse--collapsing')\n .addClass('collapse collapse--visible')[dimension]('');\n this.transitioning = 0;\n that.$element\n .trigger('shown.bs.collapse')\n .prepend(this.$close);\n\n this.setCloseButtonAction();\n };\n\n if (!noScroll) {\n this.scroll(true);\n }\n\n setCollapseText(this.$trigger);\n\n if (!$.support.transition) return complete.call(this);\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'));\n\n that.$element\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](that.$element[0][scrollSize]);\n\n if (this.$close) {\n this.$close.on('click', function(event) {\n event.preventDefault();\n });\n }\n\n $(window).on('resize.telia.collapse.' + this.id, this.resizeHandler.bind(this));\n }\n };\n\n /**\n * Handle window resize.\n * @method resizeHandler\n */\n Collapse.prototype.resizeHandler = function() {\n if (this.$trigger.length) {\n this.setArrowPosition();\n }\n };\n\n /**\n * Scroll to collapse.\n * @method scroll\n * @param {Boolean} setEvent\n */\n Collapse.prototype.scroll = function(setEvent) {\n var event;\n var that = this;\n\n if (!this.options.autoScroll) {\n return;\n }\n\n if (setEvent) {\n this.$element.one('shown.bs.collapse', function() {\n scroller();\n });\n } else {\n scroller();\n }\n\n function scroller() {\n event = $.Event('scroll.bs.collapse');\n that.$element.trigger(event);\n if (!that.$scrollable.isOnScreen(that.options.threshold)) {\n event = $.Event('scrolling.bs.collapse');\n that.$element.trigger(event);\n window.autoScroll(that.$scrollable, that.options.scrollSpeed, that.options.newLocationOffset);\n }\n\n event = $.Event('scrolled.bs.collapse');\n that.$element.trigger(event);\n }\n };\n\n /**\n * Hide collapse.\n * @method hide\n */\n Collapse.prototype.hide = function() {\n var shouldAnimate = true;\n\n if (this.$element.data('collapse-animate') != undefined) {\n shouldAnimate = this.$element.data('collapse-animate');\n }\n if (this.transitioning || !this.$element.hasClass('collapse--visible')) return;\n\n var event = $.Event('hide.bs.collapse');\n\n this.$element.trigger(event);\n if (event.isDefaultPrevented()) return;\n\n var dimension = this.dimension();\n\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight;\n\n if (!shouldAnimate) {\n this.$element\n .removeClass('collapse--visible')\n .attr('aria-expanded', false);\n } else {\n this.$element\n .addClass('collapse--collapsing')\n .removeClass('collapse collapse--visible')\n .attr('aria-expanded', false);\n }\n\n this.$trigger\n .addClass('collapsed')\n .attr('aria-expanded', false);\n\n this.transitioning = 1;\n\n function complete() {\n this.transitioning = 0;\n this.$element\n .removeClass('collapse--collapsing')\n .addClass('collapse')\n .trigger('hidden.bs.collapse');\n };\n\n this.$element.find('.video').trigger('reset');\n\n setCollapseText(this.$trigger);\n\n if (!$.support.transition) return complete.call(this);\n\n this.$element[dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION);\n\n $(window).off('resize.telia.collapse.' + this.id);\n };\n\n /**\n * Toggle collapse.\n * @method toggle\n */\n Collapse.prototype.toggle = function() {\n this[this.$element.hasClass('collapse--visible') ? 'hide' : 'show']();\n };\n\n /**\n * Get parent element.\n * @method getParent\n * @return {jQuery} Parent element\n */\n Collapse.prototype.getParent = function() {\n return $(this.options.parent)\n .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n .each($.proxy(function(i, element) {\n var $element = $(element);\n\n this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element);\n }, this))\n .end();\n };\n\n /**\n * Add aria and toggle class for trigger\n * @method addAriaAndCollapsedClass\n * @param {jQuery} $element Collapse element\n * @param {jQuery} $trigger Collapse trigger element\n */\n Collapse.prototype.addAriaAndCollapsedClass = function($element, $trigger) {\n var isOpen = $element.hasClass('collapse--visible');\n\n $element.attr('aria-expanded', isOpen);\n $trigger\n .toggleClass('collapsed', !isOpen)\n .attr('aria-expanded', isOpen);\n };\n\n /**\n * Set arrow position.\n * @method setArrowPosition\n */\n Collapse.prototype.setArrowPosition = function() {\n if (this.$arrow) {\n var left = this.$trigger.offset().left - this.$element.offset().left + this.$trigger.outerWidth() / 2 - 10;\n\n this.$arrow.css({\n left: left\n });\n }\n };\n\n /**\n * Set close button link\n * @method setCloseButtonAction\n */\n Collapse.prototype.setCloseButtonAction = function() {\n if (this.$close) {\n this.$close.attr('href', '#' + this.id);\n }\n };\n\n function getTargetFromTrigger($trigger) {\n var href;\n // strip for ie7\n var target = $trigger.attr('data-target') || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '');\n\n return $(target);\n }\n\n function setCollapseText($trigger) {\n $trigger.each(function() {\n var $this = $(this);\n\n if (!$this.data('more-text') || !$this.data('less-text')) {\n return;\n }\n setTimeout(function() {\n $this.html($this.hasClass('collapsed') ? $this.data('more-text') : $this.data('less-text'));\n }, 100);\n });\n }\n\n /**\n * Create plugin.\n * @param {Object} options\n * @param {Array[]} args\n * @returns {Array}\n */\n function Plugin(option, args) {\n return this.each(function() {\n var $this = $(this);\n var data = $this.data('bs.collapse');\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\n if (!data && options.toggle && (/show|hide/).test(option)) options.toggle = false;\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)));\n if (typeof option == 'string') data[option](args);\n });\n }\n\n var old = $.fn.collapse;\n\n $.fn.collapse = Plugin;\n $.fn.collapse.Constructor = Collapse;\n\n // COLLAPSE NO CONFLICT\n // ====================\n\n $.fn.collapse.noConflict = function() {\n $.fn.collapse = old;\n\n return this;\n };\n\n // COLLAPSE DATA-API\n // =================\n\n /**\n * @param {Event} e\n * @event click.bs.collapseLayer.data-api\n */\n $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function(e) {\n var $this = $(this);\n\n if (!$this.attr('data-target')) e.preventDefault();\n\n var $target = getTargetFromTrigger($this);\n var data = $target.data('bs.collapse');\n var option = data ? 'toggle' : $this.data();\n\n Plugin.call($target, option);\n });\n\n /**\n * @param {Event} e\n * @event click.bs.collapseLayer.data-api\n */\n $(document).on('click.bs.collapse.data-api', '[data-show=\"collapse\"]', function(e) {\n var $this = $(this);\n\n if (!$this.attr('data-target')) e.preventDefault();\n\n var $target = getTargetFromTrigger($this);\n var data = $target.data('bs.collapse');\n var option = data ? 'show' : $this.data();\n\n Plugin.call($target, option);\n });\n\n /**\n * @param {Event} e\n * @event click.bs.collapseLayer.data-api\n */\n $(document).on('click.bs.collapse.data-api', '[data-hide=\"collapse\"]', function(e) {\n var $this = $(this);\n\n if (!$this.attr('data-target')) e.preventDefault();\n\n var $target = getTargetFromTrigger($this);\n var data = $target.data('bs.collapse');\n var option = data ? 'hide' : $this.data();\n\n Plugin.call($target, option);\n });\n}(jQuery);\n",";(function($, window, document) {\n var pluginName = 'teliaCollapseTrigger';\n var defaults = {};\n var initSelector = '[data-collapse-trigger]';\n var breakpoints = {\n xs: '(min-width: 0px)',\n sm: '(min-width: 600px)',\n md: '(min-width: 1024px)',\n lg: '(min-width: 1200px)'\n };\n\n function CollapseTrigger(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.options = $.extend({}, defaults, options);\n this._defaults = defaults;\n this._name = pluginName;\n this.value = jQuery.parseJSON(this.$element.attr('data-collapse-trigger'));\n this.$target = this.getTargetFromTrigger();\n this.userHasManipulated = false;\n\n this.init();\n }\n\n /*\n Initialize the plugin.\n */\n\n CollapseTrigger.prototype.init = function() {\n this.toggleCollapse();\n\n this.$element.on('click.telia.collapseTrigger', this.clickHandler.bind(this));\n $(window).on('resize.telia.collapseTrigger.' + this.$target[0].id, this.toggleCollapse.bind(this));\n };\n\n /*\n Toggle the collapse.\n */\n\n CollapseTrigger.prototype.toggleCollapse = function() {\n if (!this.userHasManipulated) {\n if (this.checkMedia()) {\n this.$target.collapse('show', true);\n } else {\n this.$target.collapse('hide');\n }\n }\n };\n\n /*\n Check if current media condition matches element rules.\n */\n\n CollapseTrigger.prototype.checkMedia = function() {\n var open = false;\n\n for (var key in this.value) {\n if (this.value.hasOwnProperty(key)) {\n if (window.matchMedia(breakpoints[key]).matches) {\n if (this.value[key]) {\n open = true;\n } else {\n open = false;\n }\n }\n }\n }\n\n return open;\n };\n\n /*\n On click, set userHasManipulated to true to disaallow responsive logic.\n */\n\n CollapseTrigger.prototype.clickHandler = function() {\n this.userHasManipulated = true;\n this.destroy();\n };\n\n /*\n Get target collapse element from trigger.\n */\n\n CollapseTrigger.prototype.getTargetFromTrigger = function() {\n var href;\n var target = this.$element.attr('data-target') || (href = this.$element.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '');\n\n return $(target);\n };\n\n /*\n Destroy the plugin instance.\n */\n\n CollapseTrigger.prototype.destroy = function() {\n this.$element.off('click.telia.collapseTrigger');\n $(window).off('resize.telia.collapseTrigger.' + this.$target[0].id);\n this.$element.removeData('plugin_' + pluginName);\n };\n\n $.fn[pluginName] = function(options) {\n var args = Array.prototype.slice.call(arguments, 1);\n\n return this.each(function() {\n var instance = $.data(this, 'plugin_' + pluginName);\n\n if (!instance) {\n $.data(this, 'plugin_' + pluginName, new CollapseTrigger(this, options));\n } else if (typeof options === 'string') {\n instance[options].apply(instance, args);\n }\n });\n };\n\n $(document).on('enhance.telia.collapseTrigger', function(event) {\n $(event.target).find(initSelector)[pluginName]();\n });\n\n $(document).on('destroy.telia.collapseTrigger', function(event) {\n $(event.target).find(initSelector)[pluginName]('destroy');\n });\n})(jQuery, window, document);\n\n/*\nAuto-init the plugin on DOM ready.\n*/\n\n$(function() {\n $(document).trigger('enhance.telia.collapseTrigger');\n});\n","//@import('jquery.teliaForm.js');\n\nfunction initFormComponents() {\n $(document).trigger('enhance.form');\n}\n\n$(document).ready(function() {\n $(document).trigger('enhance.form');\n});\n\nwindow.initFormComponents = initFormComponents;\n","(function($) {\n $.fn.elinaConditionalDataValidator = function() {\n var elinaConditionalDataValidator = {\n run: function(obj, name, value, ignorePreback) {\n var self = this;\n var groups = $('[data-conditional-group=\"' + name + '\"]');\n\n groups.each(function() {\n var group = $(this);\n\n group.addClass('hidden');\n if (group.attr('data-conditional-preback') && !ignorePreback) {\n if (typeof window[group.attr('data-conditional-preback')] == 'function') {\n if (window[group.attr('data-conditional-preback')]({\n target: obj,\n group: group\n })) {\n return setTimeout(function() { self.run(obj, name, value, true); }, 50);\n }\n }\n }\n var condition = group.attr('data-conditional-' + name + '-value');\n\n if (condition == 'any' && value !== false) {\n group.removeClass('hidden');\n } else if (value !== false) {\n var conditions = condition.split(',');\n\n if ($.inArray(value, conditions) !== -1) {\n group.removeClass('hidden');\n } else if (group.find('input:checked').length > 0) {\n self.run(obj, group.find('input:checked').prop('checked', false).attr('name'), false);\n }\n }\n if (group.attr('data-conditional-callback')) {\n if (typeof window[group.attr('data-conditional-callback')] == 'function') {\n window[group.attr('data-conditional-callback')]({\n target: obj,\n group: group\n });\n }\n }\n // trigger resize to refresh equalheight etc\n $(window).trigger('resize');\n });\n }\n };\n\n return this.each(function() {\n $(this).on('change', function() {\n if ($(this).is(':checked')) {\n elinaConditionalDataValidator.run($(this), $(this).attr('name'), $(this).val());\n } else {\n elinaConditionalDataValidator.run($(this), $(this).attr('name'), false);\n }\n });\n });\n };\n}(jQuery));\n","var Datepicker;\n\n(function(window, $, undefined) {\n var pluginName = 'datepicker';\n var autoInitSelector = '.datepicker-here';\n var $body;\n var $datepickersContainer;\n var containerBuilt = false;\n var baseTemplate = '' +\n '
' +\n '' +\n '' +\n '
' +\n '
';\n var defaults = {\n classes: '',\n inline: false,\n language: 'et',\n startDate: new Date(),\n firstDay: '',\n weekends: [6, 0],\n dateFormat: '',\n altField: '',\n altFieldDateFormat: '@',\n toggleSelected: true,\n keyboardNav: true,\n\n position: 'bottom left',\n offset: 12,\n\n view: 'days',\n minView: 'days',\n\n showOtherMonths: true,\n selectOtherMonths: true,\n moveToOtherMonthsOnSelect: true,\n\n showOtherYears: true,\n selectOtherYears: true,\n moveToOtherYearsOnSelect: true,\n\n minDate: '',\n maxDate: '',\n disableNavWhenOutOfRange: true,\n\n // Boolean or Number\n multipleDates: false,\n multipleDatesSeparator: ',',\n range: false,\n\n todayButton: false,\n clearButton: false,\n\n showEvent: 'focus',\n autoClose: false,\n\n // navigation\n monthsFiled: 'monthsShort',\n prevHtml: '',\n nextHtml: '',\n navTitles: {\n days: 'MM yyyy',\n months: 'yyyy',\n years: 'yyyy1 - yyyy2'\n },\n\n // events\n onSelect: '',\n onChangeMonth: '',\n onChangeYear: '',\n onChangeDecade: '',\n onChangeView: '',\n onRenderCell: ''\n };\n var hotKeys = {\n ctrlRight: [17, 39],\n ctrlUp: [17, 38],\n ctrlLeft: [17, 37],\n ctrlDown: [17, 40],\n shiftRight: [16, 39],\n shiftUp: [16, 38],\n shiftLeft: [16, 37],\n shiftDown: [16, 40],\n altUp: [18, 38],\n altRight: [18, 39],\n altLeft: [18, 37],\n altDown: [18, 40],\n ctrlShiftUp: [16, 17, 38]\n };\n var datepicker;\n\n Datepicker = function(el, options) {\n this.el = el;\n this.$el = $(el);\n\n this.opts = $.extend(true, {}, defaults, options, this.$el.data());\n\n if ($body == undefined) {\n $body = $('body');\n }\n\n if (!this.opts.startDate) {\n this.opts.startDate = new Date();\n }\n\n if (this.el.nodeName == 'INPUT') {\n this.elIsInput = true;\n }\n\n if (this.opts.altField) {\n this.$altField = typeof this.opts.altField == 'string' ? $(this.opts.altField) : this.opts.altField;\n }\n\n this.inited = false;\n this.visible = false;\n // Need to prevent unnecessary rendering\n this.silent = false;\n\n this.currentDate = this.opts.startDate;\n this.currentView = this.opts.view;\n this._createShortCuts();\n this.selectedDates = [];\n this.views = {};\n this.keys = [];\n this.minRange = '';\n this.maxRange = '';\n\n this.init();\n };\n\n datepicker = Datepicker;\n\n datepicker.prototype = {\n viewIndexes: ['days', 'months', 'years'],\n\n init: function() {\n if (!containerBuilt && !this.opts.inline && this.elIsInput) {\n this._buildDatepickersContainer();\n }\n this._buildBaseHtml();\n this._defineLocale(this.opts.language);\n this._syncWithMinMaxDates();\n\n if (this.elIsInput) {\n if (!this.opts.inline) {\n // Set extra classes for proper transitions\n this._setPositionClasses(this.opts.position);\n this._bindEvents();\n }\n if (this.opts.keyboardNav) {\n this._bindKeyboardEvents();\n }\n this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this));\n this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this));\n }\n\n if (this.opts.classes) {\n this.$datepicker.addClass(this.opts.classes);\n }\n\n this.views[this.currentView] = new Datepicker.Body(this, this.currentView, this.opts);\n this.views[this.currentView].show();\n this.nav = new Datepicker.Navigation(this, this.opts);\n this.view = this.currentView;\n\n this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));\n this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));\n\n this.inited = true;\n },\n\n _createShortCuts: function() {\n this.minDate = this.opts.minDate ? this.opts.minDate : new Date(-8639999913600000);\n this.maxDate = this.opts.maxDate ? this.opts.maxDate : new Date(8639999913600000);\n },\n\n _bindEvents: function() {\n this.$el.on(this.opts.showEvent, this._onShowEvent.bind(this));\n this.$el.on('blur', this._onBlur.bind(this));\n this.$el.on('input', this._onInput.bind(this));\n $(window).on('resize', this._onResize.bind(this));\n },\n\n _bindKeyboardEvents: function() {\n this.$el.on('keydown', this._onKeyDown.bind(this));\n this.$el.on('keyup', this._onKeyUp.bind(this));\n this.$el.on('hotKey', this._onHotKey.bind(this));\n },\n\n isWeekend: function(day) {\n return this.opts.weekends.indexOf(day) !== -1;\n },\n\n _defineLocale: function(lang) {\n if (typeof lang == 'string') {\n this.loc = Datepicker.language[lang];\n if (!this.loc) {\n this.loc = $.extend(true, {}, Datepicker.language.et);\n }\n\n this.loc = $.extend(true, {}, Datepicker.language.et, Datepicker.language[lang]);\n } else {\n this.loc = $.extend(true, {}, Datepicker.language.et, lang);\n }\n\n if (this.opts.dateFormat) {\n this.loc.dateFormat = this.opts.dateFormat;\n }\n\n if (this.opts.firstDay) {\n this.loc.firstDay = this.opts.firstDay;\n }\n },\n\n _buildDatepickersContainer: function() {\n containerBuilt = true;\n $body.append('
');\n $datepickersContainer = $('#datepickers-container');\n },\n\n _buildBaseHtml: function() {\n var $appendTarget;\n var $inline = $('
');\n\n if (this.el.nodeName == 'INPUT') {\n if (!this.opts.inline) {\n $appendTarget = $datepickersContainer;\n } else {\n $appendTarget = $inline.insertAfter(this.$el);\n }\n } else {\n $appendTarget = $inline.appendTo(this.$el);\n }\n\n this.$datepicker = $(baseTemplate).appendTo($appendTarget);\n this.$content = $('.datepicker--content', this.$datepicker);\n this.$nav = $('.datepicker--nav', this.$datepicker);\n },\n\n _triggerOnChange: function() {\n if (!this.selectedDates.length) {\n return this.opts.onSelect('', '', this);\n }\n\n var selectedDates = this.selectedDates;\n var parsedSelected = datepicker.getParsedDate(selectedDates[0]);\n var formattedDates;\n var _this = this;\n var dates = new Date(parsedSelected.year, parsedSelected.month, parsedSelected.date);\n\n formattedDates = selectedDates.map(function(date) {\n return _this.formatDate(_this.loc.dateFormat, date);\n }).join(this.opts.multipleDatesSeparator);\n\n // Create new dates array, to separate it from original selectedDates\n if (this.opts.multipleDates) {\n dates = selectedDates.map(function(date) {\n var parsedDate = datepicker.getParsedDate(date);\n\n return new Date(parsedDate.year, parsedDate.month, parsedDate.date);\n });\n }\n\n this.opts.onSelect(formattedDates, dates, this);\n },\n\n next: function() {\n var d = this.parsedDate;\n var o = this.opts;\n\n switch (this.view) {\n case 'days':\n this.date = new Date(d.year, d.month + 1, 1);\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\n break;\n case 'months':\n this.date = new Date(d.year + 1, d.month, 1);\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\n break;\n case 'years':\n this.date = new Date(d.year + 10, 0, 1);\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\n break;\n }\n },\n\n prev: function() {\n var d = this.parsedDate;\n var o = this.opts;\n\n switch (this.view) {\n case 'days':\n this.date = new Date(d.year, d.month - 1, 1);\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\n break;\n case 'months':\n this.date = new Date(d.year - 1, d.month, 1);\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\n break;\n case 'years':\n this.date = new Date(d.year - 10, 0, 1);\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\n break;\n }\n },\n\n formatDate: function(string, date) {\n date = date || this.date;\n var result = string;\n var boundary = this._getWordBoundaryRegExp;\n var locale = this.loc;\n var decade = datepicker.getDecade(date);\n var d = datepicker.getParsedDate(date);\n\n switch (true) {\n case (/@/).test(result):\n result = result.replace(/@/, date.getTime());\n // falls through\n case (/dd/).test(result):\n result = result.replace(boundary('dd'), d.fullDate);\n // falls through\n case (/d/).test(result):\n result = result.replace(boundary('d'), d.date);\n // falls through\n case (/DD/).test(result):\n result = result.replace(boundary('DD'), locale.days[d.day]);\n // falls through\n case (/D/).test(result):\n result = result.replace(boundary('D'), locale.daysShort[d.day]);\n // falls through\n case (/mm/).test(result):\n result = result.replace(boundary('mm'), d.fullMonth);\n // falls through\n case (/m/).test(result):\n result = result.replace(boundary('m'), d.month + 1);\n // falls through\n case (/MM/).test(result):\n result = result.replace(boundary('MM'), this.loc.months[d.month]);\n // falls through\n case (/M/).test(result):\n result = result.replace(boundary('M'), locale.monthsShort[d.month]);\n // falls through\n case (/yyyy/).test(result):\n result = result.replace(boundary('yyyy'), d.year);\n // falls through\n case (/yyyy1/).test(result):\n result = result.replace(boundary('yyyy1'), decade[0]);\n // falls through\n case (/yyyy2/).test(result):\n result = result.replace(boundary('yyyy2'), decade[1]);\n // falls through\n case (/yy/).test(result):\n result = result.replace(boundary('yy'), d.year.toString().slice(-2));\n }\n\n return result;\n },\n\n _getWordBoundaryRegExp: function(sign) {\n return new RegExp('\\\\b(?=[a-zA-Z0-9äöüßÄÖÜ<])' + sign + '(?![>a-zA-Z0-9äöüßÄÖÜ])');\n },\n\n selectDate: function(date) {\n var _this = this;\n var opts = _this.opts;\n var d = _this.parsedDate;\n var selectedDates = _this.selectedDates;\n var len = selectedDates.length;\n var newDate = '';\n\n if (!(date instanceof Date)) return;\n\n if (_this.view == 'days') {\n if ((date.getMonth() != d.month || date.getFullYear() != d.year) && opts.moveToOtherMonthsOnSelect) {\n newDate = new Date(date.getFullYear(), date.getMonth(), 1);\n }\n }\n\n if (_this.view == 'years') {\n if (date.getFullYear() != d.year && opts.moveToOtherYearsOnSelect) {\n newDate = new Date(date.getFullYear(), 0, 1);\n }\n }\n\n if (newDate) {\n _this.silent = true;\n _this.date = newDate;\n _this.silent = false;\n _this.nav._render();\n }\n\n if (opts.multipleDates) {\n if (len === opts.multipleDates) return;\n if (!_this._isSelected(date)) {\n _this.selectedDates.push(date);\n }\n } else if (opts.range) {\n if (len == 2) {\n _this.selectedDates = [date];\n _this.minRange = date;\n _this.maxRange = '';\n } else if (len == 1) {\n _this.selectedDates.push(date);\n if (!_this.maxRange) {\n _this.maxRange = date;\n } else {\n _this.minRange = date;\n }\n _this.selectedDates = [_this.minRange, _this.maxRange];\n } else {\n _this.selectedDates = [date];\n _this.minRange = date;\n }\n } else {\n _this.selectedDates = [date];\n }\n\n _this._setInputValue();\n\n if (opts.onSelect && opts.minView == this.currentView) {\n _this._triggerOnChange();\n }\n\n if (opts.autoClose) {\n if (!opts.multipleDates && !opts.range) {\n _this.hide();\n } else if (opts.range && _this.selectedDates.length == 2) {\n _this.hide();\n }\n }\n\n _this.views[this.currentView]._render();\n },\n\n removeDate: function(date) {\n var selected = this.selectedDates;\n var _this = this;\n\n if (!(date instanceof Date)) return;\n\n return selected.some(function(curDate, i) {\n if (datepicker.isSame(curDate, date)) {\n selected.splice(i, 1);\n\n if (!_this.selectedDates.length) {\n _this.minRange = '';\n _this.maxRange = '';\n }\n\n _this.views[_this.currentView]._render();\n _this._setInputValue();\n\n if (_this.opts.onSelect) {\n _this._triggerOnChange();\n }\n\n return true;\n }\n });\n },\n\n today: function() {\n this.silent = true;\n this.view = this.opts.minView;\n this.silent = false;\n this.date = new Date();\n },\n\n clear: function() {\n this.selectedDates = [];\n this.minRange = '';\n this.maxRange = '';\n this.views[this.currentView]._render();\n this._setInputValue();\n if (this.opts.onSelect) {\n this._triggerOnChange();\n }\n },\n\n /**\n * Updates datepicker options\n * @param {String|Object} param - parameter's name to update. If object then it will extend current options\n * @param {String|Number|Object} [value] - new param value\n */\n update: function(param, value) {\n var len = arguments.length;\n\n if (len == 2) {\n this.opts[param] = value;\n } else if (len == 1 && typeof param == 'object') {\n this.opts = $.extend(true, this.opts, param);\n }\n\n this._createShortCuts();\n this._syncWithMinMaxDates();\n this._defineLocale(this.opts.language);\n this.nav._addButtonsIfNeed();\n this.nav._render();\n this.views[this.currentView]._render();\n\n if (this.elIsInput && !this.opts.inline) {\n this._setPositionClasses(this.opts.position);\n if (this.visible) {\n this.setPosition(this.opts.position);\n }\n }\n\n if (this.opts.classes) {\n this.$datepicker.addClass(this.opts.classes);\n }\n\n return this;\n },\n\n _syncWithMinMaxDates: function() {\n var curTime = this.date.getTime();\n\n this.silent = true;\n if (this.minTime > curTime) {\n this.date = this.minDate;\n }\n\n if (this.maxTime < curTime) {\n this.date = this.maxDate;\n }\n this.silent = false;\n },\n\n _isSelected: function(checkDate, cellType) {\n return this.selectedDates.some(function(date) {\n return datepicker.isSame(date, checkDate, cellType);\n });\n },\n\n _setInputValue: function() {\n var _this = this;\n var format = this.loc.dateFormat;\n var altFormat = this.opts.altFieldDateFormat;\n var value = this.selectedDates.map(function(date) {\n return _this.formatDate(format, date);\n });\n var altValues;\n\n if (this.$altField) {\n altValues = this.selectedDates.map(function(date) {\n return _this.formatDate(altFormat, date);\n });\n altValues = altValues.join(this.opts.multipleDatesSeparator);\n this.$altField.val(altValues);\n }\n\n value = value.join(this.opts.multipleDatesSeparator);\n\n this.$el.val(value);\n },\n\n /**\n * Check if date is between minDate and maxDate\n * @param date {object} - date object\n * @param type {string} - cell type\n * @returns {boolean}\n * @private\n */\n _isInRange: function(date, type) {\n var time = date.getTime();\n var d = datepicker.getParsedDate(date);\n var min = datepicker.getParsedDate(this.minDate);\n var max = datepicker.getParsedDate(this.maxDate);\n var dMinTime = new Date(d.year, d.month, min.date).getTime();\n var dMaxTime = new Date(d.year, d.month, max.date).getTime();\n var types = {\n day: time >= this.minTime && time <= this.maxTime,\n month: dMinTime >= this.minTime && dMaxTime <= this.maxTime,\n year: d.year >= min.year && d.year <= max.year\n };\n\n return type ? types[type] : types.day;\n },\n\n _getDimensions: function($el) {\n var offset = $el.offset();\n\n return {\n width: $el.outerWidth(),\n height: $el.outerHeight(),\n left: offset.left,\n top: offset.top\n };\n },\n\n _getDateFromCell: function(cell) {\n var curDate = this.parsedDate;\n var year = cell.data('year') || curDate.year;\n var month = cell.data('month') == undefined ? curDate.month : cell.data('month');\n var date = cell.data('date') || 1;\n\n return new Date(year, month, date);\n },\n\n _setPositionClasses: function(pos) {\n pos = pos.split(' ');\n var main = pos[0];\n var sec = pos[1];\n var classes = 'datepicker -' + main + '-' + sec + '- -from-' + main + '-';\n\n if (this.visible) classes += ' active';\n\n this.$datepicker\n .removeAttr('class')\n .addClass(classes);\n },\n\n setPosition: function(position) {\n position = position || this.opts.position;\n\n var dims = this._getDimensions(this.$el);\n var selfDims = this._getDimensions(this.$datepicker);\n var pos = position.split(' ');\n var top;\n var left;\n var offset = this.opts.offset;\n var main = pos[0];\n var secondary = pos[1];\n var pointerRight = 3;\n var bodyRect;\n var elRect;\n\n switch (main) {\n case 'top':\n top = dims.top - selfDims.height - offset;\n break;\n case 'right':\n left = dims.left + dims.width + offset;\n break;\n case 'bottom':\n top = dims.top + dims.height + offset;\n break;\n case 'left':\n left = dims.left - selfDims.width - offset;\n break;\n }\n\n switch (secondary) {\n case 'top':\n top = dims.top;\n break;\n case 'right':\n left = dims.left + dims.width - selfDims.width;\n break;\n case 'bottom':\n top = dims.top + dims.height - selfDims.height;\n break;\n case 'left':\n left = dims.left;\n break;\n case 'center':\n if (/left|right/.test(main)) {\n top = dims.top + dims.height / 2 - selfDims.height / 2;\n } else {\n left = dims.left + dims.width / 2 - selfDims.width / 2;\n }\n }\n\n bodyRect = $('body')[0].getBoundingClientRect();\n elRect = this.$el[0].getBoundingClientRect();\n\n if ((elRect.right + 15) < bodyRect.right) {\n left += 15;\n pointerRight += 15;\n }\n\n $(this.$datepicker[0].firstChild).css({\n right: pointerRight\n });\n this.$datepicker.css({\n left: left,\n top: top\n });\n },\n\n show: function() {\n this.setPosition(this.opts.position);\n this.$datepicker.addClass('active');\n this.visible = true;\n\n if ($('body').hasClass('scroll-disabled')) {\n this.$el.parents().on('scroll', this._onResize.bind(this));\n }\n },\n\n hide: function() {\n this.$datepicker\n .removeClass('active')\n .css({\n left: '-10000px'\n });\n\n this.focused = '';\n this.keys = [];\n\n this.inFocus = false;\n this.visible = false;\n this.$el.blur();\n\n if ($('body').hasClass('scroll-disabled')) {\n this.$el.parents().off('scroll', this._onResize.bind(this));\n }\n },\n\n down: function(date) {\n this._changeView(date, 'down');\n },\n\n up: function(date) {\n this._changeView(date, 'up');\n },\n\n _changeView: function(date, dir) {\n date = date || this.focused || this.date;\n\n var nextView = dir == 'up' ? this.viewIndex + 1 : this.viewIndex - 1;\n\n if (nextView > 2) nextView = 2;\n if (nextView < 0) nextView = 0;\n\n this.silent = true;\n this.date = new Date(date.getFullYear(), date.getMonth(), 1);\n this.silent = false;\n this.view = this.viewIndexes[nextView];\n },\n\n _handleHotKey: function(key) {\n var date = datepicker.getParsedDate(this._getFocusedDate());\n var focusedParsed;\n var o = this.opts;\n var newDate;\n var totalDaysInNextMonth;\n var monthChanged = false;\n var yearChanged = false;\n var decadeChanged = false;\n var y = date.year;\n var m = date.month;\n var d = date.date;\n\n switch (key) {\n case 'ctrlRight':\n case 'ctrlUp':\n m += 1;\n monthChanged = true;\n break;\n case 'ctrlLeft':\n case 'ctrlDown':\n m -= 1;\n monthChanged = true;\n break;\n case 'shiftRight':\n case 'shiftUp':\n yearChanged = true;\n y += 1;\n break;\n case 'shiftLeft':\n case 'shiftDown':\n yearChanged = true;\n y -= 1;\n break;\n case 'altRight':\n case 'altUp':\n decadeChanged = true;\n y += 10;\n break;\n case 'altLeft':\n case 'altDown':\n decadeChanged = true;\n y -= 10;\n break;\n case 'ctrlShiftUp':\n this.up();\n break;\n }\n\n totalDaysInNextMonth = datepicker.getDaysCount(new Date(y, m));\n newDate = new Date(y, m, d);\n\n // If next month has less days than current, set date to total days in that month\n if (totalDaysInNextMonth < d) d = totalDaysInNextMonth;\n\n // Check if newDate is in valid range\n if (newDate.getTime() < this.minTime) {\n newDate = this.minDate;\n } else if (newDate.getTime() > this.maxTime) {\n newDate = this.maxDate;\n }\n\n this.focused = newDate;\n\n focusedParsed = datepicker.getParsedDate(newDate);\n if (monthChanged && o.onChangeMonth) {\n o.onChangeMonth(focusedParsed.month, focusedParsed.year);\n }\n if (yearChanged && o.onChangeYear) {\n o.onChangeYear(focusedParsed.year);\n }\n if (decadeChanged && o.onChangeDecade) {\n o.onChangeDecade(this.curDecade);\n }\n },\n\n _registerKey: function(key) {\n var exists = this.keys.some(function(curKey) {\n return curKey == key;\n });\n\n if (!exists) {\n this.keys.push(key);\n }\n },\n\n _unRegisterKey: function(key) {\n var index = this.keys.indexOf(key);\n\n this.keys.splice(index, 1);\n },\n\n _isHotKeyPressed: function() {\n var currentHotKey;\n var found = false;\n var _this = this;\n var pressedKeys = this.keys.sort();\n\n for (var hotKey in hotKeys) {\n currentHotKey = hotKeys[hotKey];\n if (pressedKeys.length != currentHotKey.length) continue;\n\n if (currentHotKey.every(function(key, i) { return key == pressedKeys[i]; })) {\n _this._trigger('hotKey', hotKey);\n found = true;\n }\n }\n\n return found;\n },\n\n _trigger: function(event, args) {\n this.$el.trigger(event, args);\n },\n\n _focusNextCell: function(keyCode, type) {\n type = type || this.cellType;\n\n var date = datepicker.getParsedDate(this._getFocusedDate());\n var y = date.year;\n var m = date.month;\n var d = date.date;\n\n if (this._isHotKeyPressed()) {\n return;\n }\n\n switch (keyCode) {\n case 37:\n // left\n type == 'day' ? (d -= 1) : '';\n type == 'month' ? (m -= 1) : '';\n type == 'year' ? (y -= 1) : '';\n break;\n case 38:\n // up\n type == 'day' ? (d -= 7) : '';\n type == 'month' ? (m -= 3) : '';\n type == 'year' ? (y -= 4) : '';\n break;\n case 39:\n // right\n type == 'day' ? (d += 1) : '';\n type == 'month' ? (m += 1) : '';\n type == 'year' ? (y += 1) : '';\n break;\n case 40:\n // down\n type == 'day' ? (d += 7) : '';\n type == 'month' ? (m += 3) : '';\n type == 'year' ? (y += 4) : '';\n break;\n }\n\n var nd = new Date(y, m, d);\n\n if (nd.getTime() < this.minTime) {\n nd = this.minDate;\n } else if (nd.getTime() > this.maxTime) {\n nd = this.maxDate;\n }\n\n this.focused = nd;\n },\n\n _getFocusedDate: function() {\n var focused = this.focused || this.selectedDates[this.selectedDates.length - 1];\n var d = this.parsedDate;\n\n if (!focused) {\n switch (this.view) {\n case 'days':\n focused = new Date(d.year, d.month, new Date().getDate());\n break;\n case 'months':\n focused = new Date(d.year, d.month, 1);\n break;\n case 'years':\n focused = new Date(d.year, 0, 1);\n break;\n }\n }\n\n return focused;\n },\n\n _getCell: function(date, type) {\n type = type || this.cellType;\n\n var d = datepicker.getParsedDate(date);\n var selector = '.datepicker--cell[data-year=\"' + d.year + '\"]';\n var $cell;\n\n switch (type) {\n case 'month':\n selector = '[data-month=\"' + d.month + '\"]';\n break;\n case 'day':\n selector += '[data-month=\"' + d.month + '\"][data-date=\"' + d.date + '\"]';\n break;\n }\n $cell = this.views[this.currentView].$el.find(selector);\n\n return $cell.length ? $cell : '';\n },\n\n _onShowEvent: function() {\n if (!this.visible) {\n this.show();\n }\n },\n\n _onBlur: function() {\n if (!this.inFocus && this.visible) {\n this.hide();\n }\n },\n\n _onMouseDownDatepicker: function() {\n this.inFocus = true;\n },\n\n _onMouseUpDatepicker: function() {\n this.inFocus = false;\n this.$el.focus();\n },\n\n _onInput: function() {\n var val = this.$el.val();\n\n if (!val) {\n this.clear();\n }\n },\n\n _onResize: function() {\n if (this.visible) {\n this.setPosition();\n }\n },\n\n _onKeyDown: function(e) {\n var code = e.which;\n\n this._registerKey(code);\n\n // Arrows\n if (code >= 37 && code <= 40) {\n e.preventDefault();\n this._focusNextCell(code);\n }\n\n // Enter\n if (code == 13) {\n if (this.focused) {\n if (this._getCell(this.focused).hasClass('-disabled-')) return;\n if (this.view != this.opts.minView) {\n this.down();\n } else {\n var alreadySelected = this._isSelected(this.focused, this.cellType);\n\n if (!alreadySelected) {\n this.selectDate(this.focused);\n } else if (alreadySelected && this.opts.toggleSelected) {\n this.removeDate(this.focused);\n }\n }\n }\n }\n\n // Esc\n if (code == 27) {\n this.hide();\n }\n },\n\n _onKeyUp: function(e) {\n var code = e.which;\n\n this._unRegisterKey(code);\n },\n\n _onHotKey: function(e, hotKey) {\n this._handleHotKey(hotKey);\n },\n\n _onMouseEnterCell: function(e) {\n var $cell = $(e.target).closest('.datepicker--cell');\n var date = this._getDateFromCell($cell);\n\n // Prevent from unnecessary rendering and setting new currentDate\n this.silent = true;\n\n if (this.focused) {\n this.focused = '';\n }\n\n $cell.addClass('-focus-');\n\n this.focused = date;\n this.silent = false;\n\n if (this.opts.range && this.selectedDates.length == 1) {\n this.minRange = this.selectedDates[0];\n this.maxRange = '';\n if (datepicker.less(this.minRange, this.focused)) {\n this.maxRange = this.minRange;\n this.minRange = '';\n }\n this.views[this.currentView]._update();\n }\n },\n\n _onMouseLeaveCell: function(e) {\n var $cell = $(e.target).closest('.datepicker--cell');\n\n $cell.removeClass('-focus-');\n\n this.silent = true;\n this.focused = '';\n this.silent = false;\n },\n\n set focused(val) {\n if (!val && this.focused) {\n var $cell = this._getCell(this.focused);\n\n if ($cell.length) {\n $cell.removeClass('-focus-');\n }\n }\n this._focused = val;\n if (this.opts.range && this.selectedDates.length == 1) {\n this.minRange = this.selectedDates[0];\n this.maxRange = '';\n if (datepicker.less(this.minRange, this._focused)) {\n this.maxRange = this.minRange;\n this.minRange = '';\n }\n }\n if (this.silent) return;\n this.date = val;\n },\n\n get focused() {\n return this._focused;\n },\n\n get parsedDate() {\n return datepicker.getParsedDate(this.date);\n },\n\n set date(val) {\n if (!(val instanceof Date)) return;\n\n this.currentDate = val;\n\n if (this.inited && !this.silent) {\n this.views[this.view]._render();\n this.nav._render();\n if (this.visible && this.elIsInput) {\n this.setPosition();\n }\n }\n\n return val;\n },\n\n get date() {\n return this.currentDate;\n },\n\n set view(val) {\n this.viewIndex = this.viewIndexes.indexOf(val);\n\n if (this.viewIndex < 0) {\n return;\n }\n\n this.prevView = this.currentView;\n this.currentView = val;\n\n if (this.inited) {\n if (!this.views[val]) {\n this.views[val] = new Datepicker.Body(this, val, this.opts);\n } else {\n this.views[val]._render();\n }\n\n this.views[this.prevView].hide();\n this.views[val].show();\n this.nav._render();\n\n if (this.opts.onChangeView) {\n this.opts.onChangeView(val);\n }\n if (this.elIsInput && this.visible) this.setPosition();\n }\n\n return val;\n },\n\n get view() {\n return this.currentView;\n },\n\n get cellType() {\n return this.view.substring(0, this.view.length - 1);\n },\n\n get minTime() {\n var min = datepicker.getParsedDate(this.minDate);\n\n return new Date(min.year, min.month, min.date).getTime();\n },\n\n get maxTime() {\n var max = datepicker.getParsedDate(this.maxDate);\n\n return new Date(max.year, max.month, max.date).getTime();\n },\n\n get curDecade() {\n return datepicker.getDecade(this.date);\n }\n };\n\n // Utils\n // -------------------------------------------------\n\n datepicker.getDaysCount = function(date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n };\n\n datepicker.getParsedDate = function(date) {\n return {\n year: date.getFullYear(),\n month: date.getMonth(),\n // One based\n fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1,\n date: date.getDate(),\n fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),\n day: date.getDay()\n };\n };\n\n datepicker.getDecade = function(date) {\n var firstYear = Math.floor(date.getFullYear() / 10) * 10;\n\n return [firstYear, firstYear + 9];\n };\n\n datepicker.template = function(str, data) {\n return str.replace(/#\\{([\\w]+)\\}/g, function(source, match) {\n if (data[match] || data[match] === 0) {\n return data[match];\n }\n });\n };\n\n datepicker.isSame = function(date1, date2, type) {\n if (!date1 || !date2) return false;\n var d1 = datepicker.getParsedDate(date1);\n var d2 = datepicker.getParsedDate(date2);\n var _type = type ? type : 'day';\n var conditions = {\n day: d1.date == d2.date && d1.month == d2.month && d1.year == d2.year,\n month: d1.month == d2.month && d1.year == d2.year,\n year: d1.year == d2.year\n };\n\n return conditions[_type];\n };\n\n datepicker.less = function(dateCompareTo, date) {\n if (!dateCompareTo || !date) return false;\n\n return date.getTime() < dateCompareTo.getTime();\n };\n\n datepicker.bigger = function(dateCompareTo, date) {\n if (!dateCompareTo || !date) return false;\n\n return date.getTime() > dateCompareTo.getTime();\n };\n\n Datepicker.language = {\n et: {\n days: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],\n daysShort: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n daysMin: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n months: ['Jaanuar', 'Veebruar', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli', 'August', 'September', 'Oktoober', 'November', 'Detsember'],\n monthsShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],\n today: 'Täna',\n clear: 'Tühjenda',\n dateFormat: 'dd.mm.yyyy',\n firstDay: 1\n }\n };\n\n $.fn[pluginName] = function(options) {\n return this.each(function() {\n if (!$.data(this, pluginName)) {\n $.data(this, pluginName,\n new Datepicker(this, options));\n } else {\n var _this = $.data(this, pluginName);\n\n _this.opts = $.extend(true, _this.opts, options);\n _this.update();\n }\n });\n };\n\n $(function() {\n $(autoInitSelector).datepicker();\n });\n})(window, jQuery);\n;(function() {\n var templates = {\n days: '' +\n '
' +\n '
' +\n '
' +\n '
',\n months: '' +\n '
' +\n '
' +\n '
',\n years: '' +\n '
' +\n '
' +\n '
'\n };\n var D = Datepicker;\n\n D.Body = function(d, type, opts) {\n this.d = d;\n this.type = type;\n this.opts = opts;\n\n this.init();\n };\n\n D.Body.prototype = {\n init: function() {\n this._buildBaseHtml();\n this._render();\n\n this._bindEvents();\n },\n\n _bindEvents: function() {\n this.$el.on('click', '.datepicker--cell', $.proxy(this._onClickCell, this));\n },\n\n _buildBaseHtml: function() {\n this.$el = $(templates[this.type]).appendTo(this.d.$content);\n this.$names = $('.datepicker--days-names', this.$el);\n this.$cells = $('.datepicker--cells', this.$el);\n },\n\n _getDayNamesHtml: function(firstDay, curDay, html, i) {\n curDay = curDay != undefined ? curDay : firstDay;\n html = html ? html : '';\n i = i != undefined ? i : 0;\n\n if (i > 7) return html;\n if (curDay == 7) return this._getDayNamesHtml(firstDay, 0, html, ++i);\n\n html += '
' + this.d.loc.daysMin[curDay] + '
';\n\n return this._getDayNamesHtml(firstDay, ++curDay, html, ++i);\n },\n\n _getCellContents: function(date, type) {\n var classes = 'datepicker--cell datepicker--cell-' + type;\n var currentDate = new Date();\n var parent = this.d;\n var opts = parent.opts;\n var d = D.getParsedDate(date);\n var render = {};\n var html = d.date;\n\n if (opts.onRenderCell) {\n render = opts.onRenderCell(date, type) || {};\n html = render.html ? render.html : html;\n classes += render.classes ? ' ' + render.classes : '';\n }\n\n switch (type) {\n case 'day':\n if (parent.isWeekend(d.day)) classes += ' -weekend-';\n if (d.month != this.d.parsedDate.month) {\n classes += ' -other-month-';\n if (!opts.selectOtherMonths) {\n classes += ' -disabled-';\n }\n if (!opts.showOtherMonths) html = '';\n }\n break;\n case 'month':\n html = parent.loc[parent.opts.monthsFiled][d.month];\n break;\n case 'year':\n var decade = parent.curDecade;\n\n if (d.year < decade[0] || d.year > decade[1]) {\n classes += ' -other-decade-';\n if (!opts.selectOtherYears) {\n classes += ' -disabled-';\n }\n if (!opts.showOtherYears) html = '';\n }\n html = d.year;\n break;\n }\n\n if (opts.onRenderCell) {\n render = opts.onRenderCell(date, type) || {};\n html = render.html ? render.html : html;\n classes += render.classes ? ' ' + render.classes : '';\n }\n\n if (opts.range) {\n if (D.isSame(parent.minRange, date, type)) classes += ' -range-from-';\n if (D.isSame(parent.maxRange, date, type)) classes += ' -range-to-';\n\n if (parent.selectedDates.length == 1 && parent.focused) {\n if (\n (D.bigger(parent.minRange, date) && D.less(parent.focused, date)) ||\n (D.less(parent.maxRange, date) && D.bigger(parent.focused, date))) {\n classes += ' -in-range-';\n }\n\n if (D.less(parent.maxRange, date) && D.isSame(parent.focused, date)) {\n classes += ' -range-from-';\n }\n if (D.bigger(parent.minRange, date) && D.isSame(parent.focused, date)) {\n classes += ' -range-to-';\n }\n } else if (parent.selectedDates.length == 2) {\n if (D.bigger(parent.minRange, date) && D.less(parent.maxRange, date)) {\n classes += ' -in-range-';\n }\n }\n }\n\n if (D.isSame(currentDate, date, type)) classes += ' -current-';\n if (parent.focused && D.isSame(date, parent.focused, type)) classes += ' -focus-';\n if (parent._isSelected(date, type)) classes += ' -selected-';\n if (!parent._isInRange(date, type) || render.disabled) classes += ' -disabled-';\n\n return {\n html: html,\n classes: classes\n };\n },\n\n /**\n * Calculates days number to render. Generates days html and returns it.\n * @param {object} date - Date object\n * @returns {string}\n * @private\n */\n _getDaysHtml: function(date) {\n var totalMonthDays = D.getDaysCount(date);\n var firstMonthDay = new Date(date.getFullYear(), date.getMonth(), 1).getDay();\n var lastMonthDay = new Date(date.getFullYear(), date.getMonth(), totalMonthDays).getDay();\n var daysFromPevMonth = firstMonthDay - this.d.loc.firstDay;\n var daysFromNextMonth = 6 - lastMonthDay + this.d.loc.firstDay;\n\n daysFromPevMonth = daysFromPevMonth < 0 ? daysFromPevMonth + 7 : daysFromPevMonth;\n daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;\n\n var startDayIndex = -daysFromPevMonth + 1;\n var m;\n var y;\n var html = '';\n\n for (var i = startDayIndex, max = totalMonthDays + daysFromNextMonth; i <= max; i++) {\n y = date.getFullYear();\n m = date.getMonth();\n\n html += this._getDayHtml(new Date(y, m, i));\n }\n\n return html;\n },\n\n _getDayHtml: function(date) {\n var content = this._getCellContents(date, 'day');\n\n return '
' + content.html + '
';\n },\n\n /**\n * Generates months html\n * @param {object} date - date instance\n * @returns {string}\n * @private\n */\n _getMonthsHtml: function(date) {\n var html = '';\n var d = D.getParsedDate(date);\n var i = 0;\n\n while (i < 12) {\n html += this._getMonthHtml(new Date(d.year, i));\n i++;\n }\n\n return html;\n },\n\n _getMonthHtml: function(date) {\n var content = this._getCellContents(date, 'month');\n\n return '
' + content.html + '
';\n },\n\n _getYearsHtml: function(date) {\n var decade = D.getDecade(date);\n var firstYear = decade[0] - 1;\n var html = '';\n var i = firstYear;\n\n for (i; i <= decade[1] + 1; i++) {\n html += this._getYearHtml(new Date(i, 0));\n }\n\n return html;\n },\n\n _getYearHtml: function(date) {\n var content = this._getCellContents(date, 'year');\n\n return '
' + content.html + '
';\n },\n\n _renderTypes: {\n days: function() {\n var dayNames = this._getDayNamesHtml(this.d.loc.firstDay);\n var days = this._getDaysHtml(this.d.currentDate);\n\n this.$cells.html(days);\n this.$names.html(dayNames);\n },\n months: function() {\n var html = this._getMonthsHtml(this.d.currentDate);\n\n this.$cells.html(html);\n },\n years: function() {\n var html = this._getYearsHtml(this.d.currentDate);\n\n this.$cells.html(html);\n }\n },\n\n _render: function() {\n this._renderTypes[this.type].bind(this)();\n },\n\n _update: function() {\n var $cells = $('.datepicker--cell', this.$cells);\n var _this = this;\n var classes;\n var $cell;\n var date;\n\n $cells.each(function() {\n $cell = $(this);\n date = _this.d._getDateFromCell($(this));\n classes = _this._getCellContents(date, _this.d.cellType);\n $cell.attr('class', classes.classes);\n });\n },\n\n show: function() {\n this.$el.addClass('active');\n this.acitve = true;\n },\n\n hide: function() {\n this.$el.removeClass('active');\n this.active = false;\n },\n\n // Events\n // -------------------------------------------------\n\n _handleClick: function(el) {\n var date = el.data('date') || 1;\n var month = el.data('month') || 0;\n var year = el.data('year') || this.d.parsedDate.year;\n // Change view if min view does not reach yet\n\n if (this.d.view != this.opts.minView) {\n this.d.down(new Date(year, month, date));\n\n return;\n }\n // Select date if min view is reached\n var selectedDate = new Date(year, month, date);\n var alreadySelected = this.d._isSelected(selectedDate, this.d.cellType);\n\n if (!alreadySelected) {\n this.d.selectDate(selectedDate);\n } else if (alreadySelected && this.opts.toggleSelected) {\n this.d.removeDate(selectedDate);\n }\n },\n\n _onClickCell: function(e) {\n var $el = $(e.target).closest('.datepicker--cell');\n\n if ($el.hasClass('-disabled-')) return;\n\n this._handleClick.bind(this)($el);\n }\n };\n})();\n\n;(function() {\n var template = '' +\n '
#{prevHtml}
' +\n '
#{title}
' +\n '
#{nextHtml}
';\n var buttonsContainerTemplate = '
';\n var button = '#{label}';\n\n Datepicker.Navigation = function(d, opts) {\n this.d = d;\n this.opts = opts;\n\n this.$buttonsContainer = '';\n\n this.init();\n };\n\n Datepicker.Navigation.prototype = {\n init: function() {\n this._buildBaseHtml();\n this._bindEvents();\n },\n\n _bindEvents: function() {\n this.d.$nav.on('click', '.datepicker--nav-action', $.proxy(this._onClickNavButton, this));\n this.d.$nav.on('click', '.datepicker--nav-title', $.proxy(this._onClickNavTitle, this));\n this.d.$datepicker.on('click', '.datepicker--button', $.proxy(this._onClickNavButton, this));\n },\n\n _buildBaseHtml: function() {\n this._render();\n this._addButtonsIfNeed();\n },\n\n _addButtonsIfNeed: function() {\n if (this.opts.todayButton) {\n this._addButton('today');\n }\n if (this.opts.clearButton) {\n this._addButton('clear');\n }\n },\n\n _render: function() {\n var title = this._getTitle(this.d.currentDate);\n var html = Datepicker.template(template, $.extend({\n title: title\n }, this.opts));\n\n this.d.$nav.html(html);\n if (this.d.view == 'years') {\n $('.datepicker--nav-title', this.d.$nav).addClass('-disabled-');\n }\n this.setNavStatus();\n },\n\n _getTitle: function(date) {\n return this.d.formatDate(this.opts.navTitles[this.d.view], date);\n },\n\n _addButton: function(type) {\n if (!this.$buttonsContainer.length) {\n this._addButtonsContainer();\n }\n\n var data = {\n action: type,\n label: this.d.loc[type]\n };\n var html = Datepicker.template(button, data);\n\n if ($('[data-action=' + type + ']', this.$buttonsContainer).length) return;\n this.$buttonsContainer.append(html);\n },\n\n _addButtonsContainer: function() {\n this.d.$datepicker.append(buttonsContainerTemplate);\n this.$buttonsContainer = $('.datepicker--buttons', this.d.$datepicker);\n },\n\n setNavStatus: function() {\n if (!(this.opts.minDate || this.opts.maxDate) || !this.opts.disableNavWhenOutOfRange) return;\n\n var date = this.d.parsedDate;\n var m = date.month;\n var y = date.year;\n var d = date.date;\n\n switch (this.d.view) {\n case 'days':\n if (!this.d._isInRange(new Date(y, m - 1, d), 'month')) {\n this._disableNav('prev');\n }\n if (!this.d._isInRange(new Date(y, m + 1, d), 'month')) {\n this._disableNav('next');\n }\n break;\n case 'months':\n if (!this.d._isInRange(new Date(y - 1, m, d), 'year')) {\n this._disableNav('prev');\n }\n if (!this.d._isInRange(new Date(y + 1, m, d), 'year')) {\n this._disableNav('next');\n }\n break;\n case 'years':\n if (!this.d._isInRange(new Date(y - 10, m, d), 'year')) {\n this._disableNav('prev');\n }\n if (!this.d._isInRange(new Date(y + 10, m, d), 'year')) {\n this._disableNav('next');\n }\n break;\n }\n },\n\n _disableNav: function(nav) {\n $('[data-action=\"' + nav + '\"]', this.d.$nav).addClass('-disabled-');\n },\n\n _activateNav: function(nav) {\n $('[data-action=\"' + nav + '\"]', this.d.$nav).removeClass('-disabled-');\n },\n\n _onClickNavButton: function(e) {\n var $el = $(e.target).closest('[data-action]');\n var action = $el.data('action');\n\n this.d[action]();\n },\n\n _onClickNavTitle: function(e) {\n if ($(e.target).hasClass('-disabled-')) return;\n\n if (this.d.view == 'days') {\n return this.d.view = 'months';\n }\n\n this.d.view = 'years';\n }\n };\n})();\n\n//@import('i18n/datepicker.en.js');\n//@import('i18n/datepicker.ru.js');\n//@import('i18n/datepicker.fi.js');\n//@import('i18n/datepicker.da.js');\n","/* ========================================================================\n* Bootstrap: dropdown.js v3.3.6\n* http://getbootstrap.com/javascript/#dropdowns\n* ========================================================================\n* Copyright 2011-2015 Twitter, Inc.\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n* ======================================================================== */\n\n+function($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown__backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n\n function Dropdown(element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.6';\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n // strip for ie7\n selector = selector && (/#[A-Za-z]/).test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '');\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function() {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = {\n relatedTarget: this\n };\n\n if (!$parent.hasClass('open')) return;\n\n if (e && e.type == 'click' && (/input|textarea/i).test(e.target.tagName) && $.contains($parent[0], e.target)) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget));\n });\n }\n\n Dropdown.prototype.toggle = function(e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown__backdrop')\n .insertAfter($(this))\n .on('click', clearMenus);\n }\n\n var relatedTarget = {\n relatedTarget: this\n };\n\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget));\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function(e) {\n if (!(/(38|40|27|32)/).test(e.which) || (/input|textarea/i).test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.disabled):visible a';\n var $items = $parent.find('.dropdown__menu' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n // up\n if (e.which == 38 && index > 0) index--;\n // down\n if (e.which == 40 && index < $items.length - 1) index++;\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function() {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function() {\n $.fn.dropdown = old;\n\n return this;\n };\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function(e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown__menu', Dropdown.prototype.keydown);\n}(jQuery);\n","/* !\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function(factory) {\n factory(jQuery);\n}(function(jQuery) {\n (function($) {\n 'use strict';\n\n // \n if (!String.prototype.includes) {\n (function() {\n // needed to support `apply`/`call` with `undefined`/`null`\n 'use strict';\n\n var toString = {}.toString;\n var defineProperty = (function() {\n // IE 8 only supports `Object.defineProperty` on DOM elements\n try {\n var object = {};\n var $defineProperty = Object.defineProperty;\n var result = $defineProperty(object, object, object) && $defineProperty;\n } catch (error) {\n // continue regardless of error\n }\n\n return result;\n }());\n var indexOf = ''.indexOf;\n\n function includes(search) {\n if (this == null) {\n throw new TypeError();\n }\n var string = String(this);\n\n if (search && toString.call(search) == '[object RegExp]') {\n throw new TypeError();\n }\n var stringLength = string.length;\n var searchString = String(search);\n var searchLength = searchString.length;\n var position = arguments.length > 1 ? arguments[1] : undefined;\n // `ToInteger`\n var pos = position ? Number(position) : 0;\n // better `isNaN`\n\n if (pos != pos) {\n pos = 0;\n }\n var start = Math.min(Math.max(pos, 0), stringLength);\n // Avoid the `indexOf` call if no match is possible\n\n if (searchLength + start > stringLength) {\n return false;\n }\n\n return indexOf.call(string, searchString, pos) != -1;\n };\n if (defineProperty) {\n defineProperty(String.prototype, 'includes', {\n value: includes,\n configurable: true,\n writable: true\n });\n } else {\n String.prototype.includes = includes;\n }\n }());\n }\n\n if (!String.prototype.startsWith) {\n (function() {\n // needed to support `apply`/`call` with `undefined`/`null`\n 'use strict';\n\n var defineProperty = (function() {\n // IE 8 only supports `Object.defineProperty` on DOM elements\n try {\n var object = {};\n var $defineProperty = Object.defineProperty;\n var result = $defineProperty(object, object, object) && $defineProperty;\n } catch (error) {\n // continue regardless of error\n }\n\n return result;\n }());\n var toString = {}.toString;\n\n function startsWith(search) {\n if (this == null) {\n throw new TypeError();\n }\n var string = String(this);\n\n if (search && toString.call(search) == '[object RegExp]') {\n throw new TypeError();\n }\n var stringLength = string.length;\n var searchString = String(search);\n var searchLength = searchString.length;\n var position = arguments.length > 1 ? arguments[1] : undefined;\n // `ToInteger`\n var pos = position ? Number(position) : 0;\n // better `isNaN`\n\n if (pos != pos) {\n pos = 0;\n }\n var start = Math.min(Math.max(pos, 0), stringLength);\n // Avoid the `indexOf` call if no match is possible\n\n if (searchLength + start > stringLength) {\n return false;\n }\n var index = -1;\n\n while (++index < searchLength) {\n if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n return false;\n }\n }\n\n return true;\n };\n if (defineProperty) {\n defineProperty(String.prototype, 'startsWith', {\n value: startsWith,\n configurable: true,\n writable: true\n });\n } else {\n String.prototype.startsWith = startsWith;\n }\n }());\n }\n\n if (!Object.keys) {\n // object, key, result\n Object.keys = function(o, k, r) {\n // initialize object and result\n r = [];\n // iterate over object keys\n for (k in o) {\n // fill result array with non-prototypical keys\n r.hasOwnProperty.call(o, k) && r.push(k);\n }\n\n // return result\n return r;\n };\n }\n\n $.fn.triggerNative = function(eventName) {\n var el = this[0];\n var event;\n\n if (el.dispatchEvent) {\n if (typeof Event === 'function') {\n // For modern browsers\n event = new Event(eventName, {\n bubbles: true\n });\n } else {\n // For IE since it doesn't support Event constructor\n event = document.createEvent('Event');\n event.initEvent(eventName, true, false);\n }\n\n el.dispatchEvent(event);\n } else {\n if (el.fireEvent) {\n event = document.createEventObject();\n event.eventType = eventName;\n el.fireEvent('on' + eventName, event);\n }\n\n this.trigger(eventName);\n }\n };\n // \n\n // Case insensitive contains search\n $.expr[':'].icontains = function(obj, index, meta) {\n var $obj = $(obj);\n var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();\n\n return haystack.includes(meta[3].toUpperCase());\n };\n\n // Case insensitive begins search\n $.expr[':'].ibegins = function(obj, index, meta) {\n var $obj = $(obj);\n var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();\n\n return haystack.startsWith(meta[3].toUpperCase());\n };\n\n // Case and accent insensitive contains search\n $.expr[':'].aicontains = function(obj, index, meta) {\n var $obj = $(obj);\n var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();\n\n return haystack.includes(meta[3].toUpperCase());\n };\n\n // Case and accent insensitive begins search\n $.expr[':'].aibegins = function(obj, index, meta) {\n var $obj = $(obj);\n var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();\n\n return haystack.startsWith(meta[3].toUpperCase());\n };\n\n /**\n * Remove all diatrics from the given text.\n * @access private\n * @param {String} text\n * @returns {String}\n */\n function normalizeToBase(text) {\n var rExps = [\n {\n re: /[\\xC0-\\xC6]/g,\n ch: 'A'\n },\n {\n re: /[\\xE0-\\xE6]/g,\n ch: 'a'\n },\n {\n re: /[\\xC8-\\xCB]/g,\n ch: 'E'\n },\n {\n re: /[\\xE8-\\xEB]/g,\n ch: 'e'\n },\n {\n re: /[\\xCC-\\xCF]/g,\n ch: 'I'\n },\n {\n re: /[\\xEC-\\xEF]/g,\n ch: 'i'\n },\n {\n re: /[\\xD2-\\xD6]/g,\n ch: 'O'\n },\n {\n re: /[\\xF2-\\xF6]/g,\n ch: 'o'\n },\n {\n re: /[\\xD9-\\xDC]/g,\n ch: 'U'\n },\n {\n re: /[\\xF9-\\xFC]/g,\n ch: 'u'\n },\n {\n re: /[\\xC7-\\xE7]/g,\n ch: 'c'\n },\n {\n re: /[\\xD1]/g,\n ch: 'N'\n },\n {\n re: /[\\xF1]/g,\n ch: 'n'\n }\n ];\n\n $.each(rExps, function() {\n text = text.replace(this.re, this.ch);\n });\n\n return text;\n }\n\n function htmlEscape(html) {\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '`': '`'\n };\n var source = '(?:' + Object.keys(escapeMap).join('|') + ')';\n var testRegexp = new RegExp(source);\n var replaceRegexp = new RegExp(source, 'g');\n var string = html == null ? '' : '' + html;\n\n return testRegexp.test(string) ? string.replace(replaceRegexp, function(match) {\n return escapeMap[match];\n }) : string;\n }\n\n function Selectpicker(element, options, e) {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n this.element = element;\n this.$element = $(element);\n this.$newElement = null;\n this.$button = null;\n this.$menu = null;\n this.$lis = null;\n this.options = options;\n\n // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n // data-attribute)\n if (this.options.title === null) {\n this.options.title = this.$element.attr('title');\n }\n\n // Expose public methods\n this.val = Selectpicker.prototype.val;\n this.render = Selectpicker.prototype.render;\n this.refresh = Selectpicker.prototype.refresh;\n this.setStyle = Selectpicker.prototype.setStyle;\n this.selectAll = Selectpicker.prototype.selectAll;\n this.deselectAll = Selectpicker.prototype.deselectAll;\n this.destroy = Selectpicker.prototype.destroy;\n this.remove = Selectpicker.prototype.remove;\n this.show = Selectpicker.prototype.show;\n this.hide = Selectpicker.prototype.hide;\n\n this.init();\n };\n\n Selectpicker.VERSION = '1.10.0';\n\n // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n Selectpicker.DEFAULTS = {\n noneSelectedText: 'Nothing selected',\n noneResultsText: 'No results matched {0}',\n countSelectedText: function(numSelected) {\n return (numSelected == 1) ? '{0} item selected' : '{0} items selected';\n },\n maxOptionsText: function(numAll, numGroup) {\n return [\n (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',\n (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'\n ];\n },\n selectAllText: 'Select All',\n deselectAllText: 'Deselect All',\n doneButton: false,\n doneButtonText: 'Close',\n multipleSeparator: ', ',\n styleBase: 'bootstrap-select__trigger',\n style: '',\n size: 10,\n title: null,\n selectedTextFormat: 'values',\n width: false,\n container: 'body',\n hideDisabled: false,\n showSubtext: false,\n showIcon: true,\n showContent: true,\n dropupAuto: false,\n header: false,\n liveSearch: false,\n liveSearchPlaceholder: null,\n liveSearchNormalize: false,\n liveSearchStyle: 'contains',\n actionsBox: false,\n iconBase: 'glyphicon',\n tickIcon: 'glyphicon-ok',\n showTick: false,\n template: {\n caret: ''\n },\n maxOptions: false,\n mobile: false,\n selectOnTab: false,\n dropdownAlignRight: false\n };\n\n Selectpicker.prototype = {\n\n constructor: Selectpicker,\n\n init: function() {\n var that = this;\n var id = this.$element.attr('id');\n\n this.$element.addClass('bs-select-hidden');\n\n // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility\n // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index=\"' + index + '\"]')\n this.liObj = {};\n this.multiple = this.$element.prop('multiple');\n this.autofocus = this.$element.prop('autofocus');\n this.$newElement = this.createView();\n this.$element\n .after(this.$newElement)\n .appendTo(this.$newElement);\n this.$button = this.$newElement.children('button');\n this.$menu = this.$newElement.children('.dropdown__menu');\n this.$menuInner = this.$menu.children('.dropdown__inner');\n this.$searchbox = this.$menu.find('input');\n\n this.$element.removeClass('bs-select-hidden');\n\n if (this.options.dropdownAlignRight) this.$menu.addClass('dropdown-menu-right');\n\n if (typeof id !== 'undefined') {\n this.$button.attr('data-id', id);\n $('label[for=\"' + id + '\"]').click(function(e) {\n e.preventDefault();\n that.$button.focus();\n });\n }\n\n this.checkDisabled();\n this.clickListener();\n if (this.options.liveSearch) this.liveSearchListener();\n this.render();\n this.setStyle();\n this.setWidth();\n if (this.options.container) this.selectPosition();\n this.$menu.data('this', this);\n this.$newElement.data('this', this);\n if (this.options.mobile) this.mobile();\n\n this.$newElement.on({\n 'hide.bs.dropdown': function(e) {\n that.$element.trigger('hide.bs.select', e);\n },\n 'hidden.bs.dropdown': function(e) {\n that.$element.trigger('hidden.bs.select', e);\n },\n 'show.bs.dropdown': function(e) {\n that.$element.trigger('show.bs.select', e);\n },\n 'shown.bs.dropdown': function(e) {\n that.$element.trigger('shown.bs.select', e);\n }\n });\n\n if (that.$element[0].hasAttribute('required')) {\n this.$element.on('invalid', function() {\n that.$button\n .addClass('bs-invalid')\n .focus();\n\n that.$element.on({\n 'focus.bs.select': function() {\n that.$button.focus();\n that.$element.off('focus.bs.select');\n },\n 'shown.bs.select': function() {\n that.$element\n // set the value to hide the validation message in Chrome when menu is opened\n .val(that.$element.val())\n .off('shown.bs.select');\n },\n 'rendered.bs.select': function() {\n // if select is no longer invalid, remove the bs-invalid class\n if (this.validity.valid) that.$button.removeClass('bs-invalid');\n that.$element.off('rendered.bs.select');\n }\n });\n });\n }\n\n setTimeout(function() {\n that.$element.trigger('loaded.bs.select');\n });\n\n this.observer = this.createMutationObserver();\n },\n\n createMutationObserver: function() {\n var that = this;\n var watch = this.element;\n\n if (typeof window.MutationObserver == 'function') {\n var observer = new window.MutationObserver(function(mutations) {\n mutations.forEach(function(mutation) {\n if (mutation.type === 'childList') {\n that.refresh();\n }\n });\n });\n\n observer.observe(watch, {\n childList: true\n });\n\n return observer;\n } else {\n return false;\n }\n },\n\n createDropdown: function() {\n // Options\n // If we are multiple or showTick option is set, then add the show-tick class\n var showTick = (this.multiple || this.options.showTick) ? ' bootstrap-select--show-tick' : '';\n var inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '';\n var autofocus = this.autofocus ? ' autofocus' : '';\n // Elements\n var header = this.options.header ? '
' + this.options.header + '
' : '';\n var searchbox = '';\n\n if (this.options.liveSearch) {\n searchbox = '
' +\n '' +\n '
';\n }\n\n var actionsbox = '';\n\n if (this.multiple && this.options.actionsBox) {\n actionsbox = '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
';\n }\n\n var donebutton = '';\n\n if (this.multiple && this.options.doneButton) {\n donebutton = '
' +\n '
' +\n '' +\n '
' +\n '
';\n }\n var drop =\n '
' +\n '' +\n '
' +\n header +\n searchbox +\n actionsbox +\n '
    ' +\n '
' +\n donebutton +\n '
' +\n '
';\n\n return $(drop);\n },\n\n createView: function() {\n var $drop = this.createDropdown();\n var li = this.createLi();\n\n $drop.find('ul')[0].innerHTML = li;\n\n return $drop;\n },\n\n reloadLi: function() {\n // Remove all children.\n this.destroyLi();\n // Re build\n var li = this.createLi();\n\n this.$menuInner[0].innerHTML = li;\n },\n\n destroyLi: function() {\n this.$menu.find('li').remove();\n },\n\n createLi: function() {\n var that = this;\n var _li = [];\n var optID = 0;\n var titleOption = document.createElement('option');\n // increment liIndex whenever a new
  • element is created to ensure liObj is correct\n var liIndex = -1;\n\n // Helper functions\n /**\n * @param content\n * @param [index]\n * @param [classes]\n * @param [optgroup]\n * @returns {string}\n */\n function generateLI(content, index, classes, optgroup) {\n return '' + content + '
  • ';\n };\n\n /**\n * @param text\n * @param [classes]\n * @param [inline]\n * @param [tokens]\n * @returns {string}\n */\n function generateA(text, classes, inline, tokens) {\n return '' + text +\n '' +\n '';\n };\n\n if (this.options.title && !this.multiple) {\n // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased\n // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended\n liIndex--;\n\n if (!this.$element.find('.bs-title-option').length) {\n // Use native JS to prepend option (faster)\n var element = this.$element[0];\n\n titleOption.className = 'bs-title-option';\n titleOption.appendChild(document.createTextNode(this.options.title));\n titleOption.value = '';\n element.insertBefore(titleOption, element.firstChild);\n // Check if selected attribute is already set on an option. If not, select the titleOption option.\n if ($(element.options[element.selectedIndex]).prop('selected') == false) titleOption.selected = true;\n }\n }\n\n this.$element.find('option').each(function(index) {\n var $this = $(this);\n\n liIndex++;\n\n if ($this.hasClass('bs-title-option')) return;\n\n // Get the class and text for the option\n var optionClass = this.className || '';\n var inline = this.style.cssText;\n var text = $this.data('content') ? $this.data('content') : $this.html();\n var tokens = $this.data('tokens') ? $this.data('tokens') : null;\n var subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '';\n var icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '';\n var isOptgroup = this.parentNode.tagName === 'OPTGROUP';\n var isDisabled = this.disabled || (isOptgroup && this.parentNode.disabled);\n\n if (icon !== '' && isDisabled) {\n icon = '' + icon + '';\n }\n\n if (that.options.hideDisabled && isDisabled && !isOptgroup) {\n liIndex--;\n\n return;\n }\n\n if (!$this.data('content')) {\n // Prepend any icons and append any subtext to the main text.\n text = icon + '' + text + subtext + '';\n }\n\n if (isOptgroup && $this.data('divider') !== true) {\n var optGroupClass = ' ' + this.parentNode.className || '';\n\n // Is it the first option of the optgroup?\n if ($this.index() === 0) {\n optID += 1;\n\n // Get the opt group label\n var label = this.parentNode.label;\n var labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '';\n var labelIcon = $this.parent().data('icon') ? ' ' : '';\n\n label = labelIcon + '' + label + labelSubtext + '';\n\n // Is it NOT the first option of the select && are there elements in the dropdown?\n if (index !== 0 && _li.length > 0) {\n liIndex++;\n _li.push(generateLI('', null, 'divider', optID + 'div'));\n }\n liIndex++;\n _li.push(generateLI(label, null, 'dropdown__header' + optGroupClass, optID));\n }\n\n if (that.options.hideDisabled && isDisabled) {\n liIndex--;\n\n return;\n }\n\n _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));\n } else if ($this.data('divider') === true) {\n _li.push(generateLI('', index, 'divider'));\n } else if ($this.data('hidden') === true) {\n _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));\n } else {\n if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {\n liIndex++;\n _li.push(generateLI('', null, 'divider', optID + 'div'));\n }\n _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));\n }\n\n that.liObj[index] = liIndex;\n });\n\n // If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button\n if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {\n this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');\n }\n\n return _li.join('');\n },\n\n findLis: function() {\n if (this.$lis == null) this.$lis = this.$menu.find('li');\n\n return this.$lis;\n },\n\n /**\n * @param [updateLi] defaults to true\n */\n render: function(updateLi) {\n var that = this;\n var notDisabled;\n\n // Update the LI to match the SELECT\n if (updateLi !== false) {\n this.$element.find('option').each(function(index) {\n var $lis = that.findLis().eq(that.liObj[index]);\n\n that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);\n that.setSelected(index, this.selected, $lis);\n });\n }\n\n this.tabIndex();\n\n var selectedItems = this.$element.find('option').map(function() {\n if (this.selected) {\n if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;\n\n var $this = $(this);\n var icon = $this.data('icon') && that.options.showIcon ? ' ' : '';\n var subtext;\n\n if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {\n subtext = ' ' + $this.data('subtext') + '';\n } else {\n subtext = '';\n }\n if (typeof $this.attr('title') !== 'undefined') {\n return $this.attr('title');\n } else if ($this.data('content') && that.options.showContent) {\n return $this.data('content');\n } else {\n return icon + $this.html() + subtext;\n }\n }\n }).toArray();\n\n // Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled\n // Convert all the values into a comma delimited string\n var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);\n\n // If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..\n if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {\n var max = this.options.selectedTextFormat.split('>');\n\n if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {\n notDisabled = this.options.hideDisabled ? ', [disabled]' : '';\n var totalCount = this.$element.find('option').not('[data-divider=\"true\"], [data-hidden=\"true\"]' + notDisabled).length;\n var tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;\n\n title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());\n }\n }\n\n if (this.options.title == undefined) {\n this.options.title = this.$element.attr('title');\n }\n\n if (this.options.selectedTextFormat == 'static') {\n title = this.options.title;\n }\n\n // If we dont have a title, then use the default, or if nothing is set at all, use the not selected text\n if (!title) {\n title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;\n }\n\n // strip all html-tags and trim the result\n this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, '')));\n this.$button.children('.bootstrap-select__selected').html(title);\n\n this.$element.trigger('rendered.bs.select');\n },\n\n /**\n * @param [style]\n * @param [status]\n */\n setStyle: function(style, status) {\n if (this.$element.attr('class')) {\n this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n }\n\n var buttonClass = style ? style : this.options.style;\n\n if (status == 'add') {\n this.$button.addClass(buttonClass);\n } else if (status == 'remove') {\n this.$button.removeClass(buttonClass);\n } else {\n this.$button.removeClass(this.options.style);\n this.$button.addClass(buttonClass);\n }\n },\n\n liHeight: function(refresh) {\n if (!refresh && (this.options.size === false || this.sizeInfo)) return;\n\n var newElement = document.createElement('div');\n var menu = document.createElement('div');\n var menuInner = document.createElement('ul');\n var divider = document.createElement('li');\n var li = document.createElement('li');\n var a = document.createElement('a');\n var text = document.createElement('span');\n var header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null;\n var search = this.options.liveSearch ? document.createElement('div') : null;\n var actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null;\n var doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;\n\n text.className = 'bootstrap-select__option';\n newElement.className = this.$menu[0].parentNode.className + ' open';\n menu.className = 'dropdown__menu open';\n menuInner.className = 'dropdown__inner';\n divider.className = 'divider';\n\n text.appendChild(document.createTextNode('Inner text'));\n a.appendChild(text);\n li.appendChild(a);\n menuInner.appendChild(li);\n menuInner.appendChild(divider);\n if (header) menu.appendChild(header);\n if (search) {\n // create a span instead of input as creating an input element is slower\n var input = document.createElement('span');\n\n search.className = 'bootstrap-select__searchbox';\n input.className = 'form-textfield__input';\n search.appendChild(input);\n menu.appendChild(search);\n }\n if (actions) menu.appendChild(actions);\n menu.appendChild(menuInner);\n if (doneButton) menu.appendChild(doneButton);\n newElement.appendChild(menu);\n\n document.body.appendChild(newElement);\n var liHeight = a.offsetHeight;\n var headerHeight = header ? header.offsetHeight : 0;\n // input height 32px, offset gives 6px\n var searchHeight = search ? 32 : 0;\n var actionsHeight = actions ? actions.offsetHeight : 0;\n var doneButtonHeight = doneButton ? doneButton.offsetHeight : 0;\n var dividerHeight = $(divider).outerHeight(true);\n // fall back to jQuery if getComputedStyle is not supported\n var menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false;\n var $menu = menuStyle ? null : $(menu);\n var menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +\n parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +\n parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +\n parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth'));\n var menuExtras = menuPadding +\n parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +\n parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2;\n\n document.body.removeChild(newElement);\n\n this.sizeInfo = {\n liHeight: liHeight,\n headerHeight: headerHeight,\n searchHeight: searchHeight,\n actionsHeight: actionsHeight,\n doneButtonHeight: doneButtonHeight,\n dividerHeight: dividerHeight,\n menuPadding: menuPadding,\n menuExtras: menuExtras\n };\n },\n\n setSize: function() {\n this.findLis();\n this.liHeight();\n\n if (this.options.header) this.$menu.css('padding-top', 0);\n if (this.options.size === false) return;\n\n var that = this;\n var $menu = this.$menu;\n var $menuInner = this.$menuInner;\n var $window = $(window);\n var selectHeight = this.$newElement[0].offsetHeight;\n var liHeight = this.sizeInfo['liHeight'];\n var headerHeight = this.sizeInfo['headerHeight'];\n var searchHeight = this.sizeInfo['searchHeight'];\n var actionsHeight = this.sizeInfo['actionsHeight'];\n var doneButtonHeight = this.sizeInfo['doneButtonHeight'];\n var divHeight = this.sizeInfo['dividerHeight'];\n var menuPadding = this.sizeInfo['menuPadding'];\n var menuExtras = this.sizeInfo['menuExtras'];\n var notDisabled = this.options.hideDisabled ? '.disabled' : '';\n var menuHeight;\n var getHeight;\n var selectOffsetTop;\n var selectOffsetBot;\n\n function posVert() {\n selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();\n selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;\n };\n\n function getSize() {\n var minHeight;\n var lis = that.$menuInner[0].getElementsByTagName('li');\n var lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden');\n var optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown__header', true)) : lisVisible.filter('.dropdown__header');\n\n function hasClass(className, include) {\n return function(element) {\n if (include) {\n return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));\n } else {\n return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));\n }\n };\n }\n\n posVert();\n menuHeight = selectOffsetBot - menuExtras;\n\n if (that.options.container) {\n if (!$menu.data('height')) $menu.data('height', $menu.height());\n getHeight = $menu.data('height');\n } else {\n getHeight = $menu.height();\n }\n\n if (that.options.dropupAuto) {\n that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);\n }\n if (that.$newElement.hasClass('dropup')) {\n menuHeight = selectOffsetTop - menuExtras;\n }\n\n if ((lisVisible.length + optGroup.length) > 3) {\n minHeight = liHeight * 3 + menuExtras - 2;\n } else {\n minHeight = 0;\n }\n\n menuHeight -= 40;\n $menu.css({\n 'max-height': menuHeight + 'px',\n overflow: 'hidden',\n 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'\n });\n $menuInner.css({\n 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px',\n 'overflow-y': 'auto',\n 'min-height': Math.max(minHeight - menuPadding, 0) + 'px'\n });\n }\n\n posVert();\n\n if (this.options.size === 'auto') {\n getSize();\n this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);\n $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);\n } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {\n var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index();\n var divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;\n\n menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;\n\n if (that.options.container) {\n if (!$menu.data('height')) $menu.data('height', $menu.height());\n getHeight = $menu.data('height');\n } else {\n getHeight = $menu.height();\n }\n\n if (that.options.dropupAuto) {\n // noinspection JSUnusedAssignment\n this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);\n }\n $menu.css({\n 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',\n overflow: 'hidden',\n 'min-height': ''\n });\n $menuInner.css({\n 'max-height': menuHeight - menuPadding + 'px',\n 'overflow-y': 'auto',\n 'min-height': ''\n });\n }\n },\n\n setWidth: function() {\n if (this.options.width === 'auto') {\n this.$menu.css('min-width', '0');\n\n // Get correct width if element is hidden\n var $selectClone = this.$menu.parent().clone().appendTo('body');\n var $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone;\n var ulWidth = $selectClone.children('.dropdown__menu').outerWidth();\n var btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();\n\n $selectClone.remove();\n $selectClone2.remove();\n\n // Set width to whatever's larger, button title or longest option\n this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');\n } else if (this.options.width === 'fit') {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '').addClass('fit-width');\n } else if (this.options.width) {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', this.options.width);\n } else {\n // Remove inline min-width/width so width can be changed\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '');\n }\n // Remove fit-width class if width is changed programmatically\n if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n this.$newElement.removeClass('fit-width');\n }\n },\n\n selectPosition: function() {\n this.$bsContainer = $('
    ');\n\n var that = this;\n var pos;\n\n function getPlacement($element) {\n that.$bsContainer.addClass($element.attr('class').replace(/form-textfield__input|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));\n pos = $element.offset();\n that.$bsContainer.css({\n top: pos.top,\n left: pos.left,\n width: $element[0].offsetWidth\n });\n };\n\n this.$button.on('click', function() {\n var $this = $(this);\n\n if (that.isDisabled()) {\n return;\n }\n\n getPlacement(that.$newElement);\n\n that.$bsContainer\n .appendTo(that.options.container)\n .toggleClass('open', !$this.hasClass('open'))\n .append(that.$menu);\n });\n\n $(window).on('resize scroll', function() {\n getPlacement(that.$newElement);\n });\n\n this.$element.on('hide.bs.select', function() {\n that.$menu.data('height', that.$menu.height());\n that.$bsContainer.detach();\n });\n },\n\n setSelected: function(index, selected, $lis) {\n if (!$lis) {\n $lis = this.findLis().eq(this.liObj[index]);\n }\n\n $lis.toggleClass('selected', selected);\n },\n\n setDisabled: function(index, disabled, $lis) {\n if (!$lis) {\n $lis = this.findLis().eq(this.liObj[index]);\n }\n\n if (disabled) {\n $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);\n } else {\n $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);\n }\n },\n\n isDisabled: function() {\n return this.$element[0].disabled;\n },\n\n checkDisabled: function() {\n var that = this;\n\n if (this.isDisabled()) {\n this.$newElement.addClass('disabled');\n this.$button.addClass('disabled').attr('tabindex', -1);\n } else {\n if (this.$button.hasClass('disabled')) {\n this.$newElement.removeClass('disabled');\n this.$button.removeClass('disabled');\n }\n\n if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {\n this.$button.removeAttr('tabindex');\n }\n }\n\n this.$button.click(function() {\n return !that.isDisabled();\n });\n },\n\n tabIndex: function() {\n if (this.$element.data('tabindex') !== this.$element.attr('tabindex') &&\n (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {\n this.$element.data('tabindex', this.$element.attr('tabindex'));\n this.$button.attr('tabindex', this.$element.data('tabindex'));\n }\n\n this.$element.attr('tabindex', -98);\n },\n\n clickListener: function() {\n var that = this;\n var $document = $(document);\n\n this.$newElement.on('touchstart.dropdown', '.dropdown__menu', function(e) {\n e.stopPropagation();\n });\n\n $document.data('spaceSelect', false);\n\n this.$button.on('keyup', function(e) {\n if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n e.preventDefault();\n $document.data('spaceSelect', false);\n }\n });\n\n this.$button.on('click', function() {\n that.setSize();\n });\n\n this.$element.on('shown.bs.select', function() {\n if (!that.options.liveSearch && !that.multiple) {\n that.$menuInner.find('.selected a').focus();\n } else if (!that.multiple) {\n var selectedIndex = that.liObj[that.$element[0].selectedIndex];\n\n if (typeof selectedIndex !== 'number' || that.options.size === false) return;\n\n // scroll to selected option\n var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;\n\n offset = offset - that.$menuInner[0].offsetHeight / 2 + that.sizeInfo.liHeight / 2;\n that.$menuInner[0].scrollTop = offset;\n }\n });\n\n this.$menuInner.on('click', 'li a', function(e) {\n var $this = $(this);\n var clickedIndex = $this.parent().data('originalIndex');\n var prevValue = that.$element.val();\n var prevIndex = that.$element.prop('selectedIndex');\n\n // Don't close on multi choice menu\n if (that.multiple) {\n e.stopPropagation();\n }\n\n e.preventDefault();\n\n // Don't run if we have been disabled\n if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {\n var $options = that.$element.find('option');\n var $option = $options.eq(clickedIndex);\n var state = $option.prop('selected');\n var $optgroup = $option.parent('optgroup');\n var maxOptions = that.options.maxOptions;\n var maxOptionsGrp = $optgroup.data('maxOptions') || false;\n\n // Deselect all others if not multi select box\n if (!that.multiple) {\n $options.prop('selected', false);\n $option.prop('selected', true);\n that.$menuInner.find('.selected').removeClass('selected');\n that.setSelected(clickedIndex, true);\n // Toggle the one we have chosen if we are multi select.\n } else {\n $option.prop('selected', !state);\n that.setSelected(clickedIndex, !state);\n $this.blur();\n\n if (maxOptions !== false || maxOptionsGrp !== false) {\n var maxReached = maxOptions < $options.filter(':selected').length;\n var maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {\n if (maxOptions && maxOptions == 1) {\n $options.prop('selected', false);\n $option.prop('selected', true);\n that.$menuInner.find('.selected').removeClass('selected');\n that.setSelected(clickedIndex, true);\n } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n $optgroup.find('option:selected').prop('selected', false);\n $option.prop('selected', true);\n var optgroupID = $this.parent().data('optgroup');\n\n that.$menuInner.find('[data-optgroup=\"' + optgroupID + '\"]').removeClass('selected');\n that.setSelected(clickedIndex, true);\n } else {\n var maxOptionsArr = that.options.maxOptionsText;\n\n if (typeof that.options.maxOptionsText === 'function') {\n maxOptionsArr = that.options.maxOptionsText(maxOptions, maxOptionsGrp);\n }\n var maxTxt = maxOptionsArr[0].replace('{n}', maxOptions);\n var maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp);\n var $notify = $('
    ');\n // If {var} is set in array, replace it\n /** @deprecated */\n\n if (maxOptionsArr[2]) {\n maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n }\n\n $option.prop('selected', false);\n\n that.$menu.append($notify);\n\n if (maxOptions && maxReached) {\n $notify.append($('
    ' + maxTxt + '
    '));\n that.$element.trigger('maxReached.bs.select');\n }\n\n if (maxOptionsGrp && maxReachedGrp) {\n $notify.append($('
    ' + maxTxtGrp + '
    '));\n that.$element.trigger('maxReachedGrp.bs.select');\n }\n\n setTimeout(function() {\n that.setSelected(clickedIndex, false);\n }, 10);\n\n $notify.delay(750).fadeOut(300, function() {\n $(this).remove();\n });\n }\n }\n }\n }\n\n if (!that.multiple) {\n that.$button.focus();\n } else if (that.options.liveSearch) {\n that.$searchbox.focus();\n }\n\n // Trigger select 'change'\n if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {\n // $option.prop('selected') is current option state (selected/unselected). state is previous option state.\n that.$element\n .trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state])\n .triggerNative('change');\n }\n }\n });\n\n this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function(e) {\n if (e.currentTarget == this) {\n e.preventDefault();\n e.stopPropagation();\n if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n that.$searchbox.focus();\n } else {\n that.$button.focus();\n }\n }\n });\n\n this.$menuInner.on('click', '.divider, .dropdown__header', function(e) {\n e.preventDefault();\n e.stopPropagation();\n if (that.options.liveSearch) {\n that.$searchbox.focus();\n } else {\n that.$button.focus();\n }\n });\n\n this.$menu.on('click', '.popover-title .close', function() {\n that.$button.click();\n });\n\n this.$searchbox.on('click', function(e) {\n e.stopPropagation();\n });\n\n this.$menu.on('click', '.actions-btn', function(e) {\n if (that.options.liveSearch) {\n that.$searchbox.focus();\n } else {\n that.$button.focus();\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($(this).hasClass('bs-select-all')) {\n that.selectAll();\n } else {\n that.deselectAll();\n }\n });\n\n this.$element.change(function() {\n that.render(false);\n });\n },\n\n liveSearchListener: function() {\n var that = this;\n var $noResults = $('
  • ');\n\n this.$button.on('click.dropdown.data-api touchstart.dropdown.data-api', function() {\n that.$menuInner.find('.is-active').removeClass('is-active');\n if (that.$searchbox.val()) {\n that.$searchbox.val('');\n that.$lis.not('.is-hidden').removeClass('hidden');\n if ($noResults.parent().length) $noResults.remove();\n }\n if (!that.multiple) that.$menuInner.find('.selected').addClass('is-active');\n setTimeout(function() {\n that.$searchbox.focus();\n }, 10);\n });\n\n this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function(e) {\n e.stopPropagation();\n });\n\n this.$searchbox.on('input propertychange', function() {\n if (that.$searchbox.val()) {\n var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');\n\n if (that.options.liveSearchNormalize) {\n $searchBase = $searchBase.not(':a' + that._searchStyle() + '(\"' + normalizeToBase(that.$searchbox.val()) + '\")');\n } else {\n $searchBase = $searchBase.not(':' + that._searchStyle() + '(\"' + that.$searchbox.val() + '\")');\n }\n $searchBase.parent().addClass('hidden');\n\n that.$lis.filter('.dropdown__header').each(function() {\n var $this = $(this);\n var optgroup = $this.data('optgroup');\n\n if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {\n $this.addClass('hidden');\n that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');\n }\n });\n\n var $lisVisible = that.$lis.not('.hidden');\n\n // hide divider if first or last visible, or if followed by another divider\n $lisVisible.each(function(index) {\n var $this = $(this);\n\n if ($this.hasClass('divider') && (\n $this.index() === $lisVisible.first().index() ||\n $this.index() === $lisVisible.last().index() ||\n $lisVisible.eq(index + 1).hasClass('divider'))) {\n $this.addClass('hidden');\n }\n });\n\n if (!that.$lis.not('.hidden, .bootstrap-select__no-results').length) {\n if ($noResults.parent().length) {\n $noResults.remove();\n }\n $noResults.html(that.options.noneResultsText.replace('{0}', '\"' + htmlEscape(that.$searchbox.val()) + '\"')).show();\n that.$menuInner.append($noResults);\n } else if ($noResults.parent().length) {\n $noResults.remove();\n }\n } else {\n that.$lis.not('.is-hidden').removeClass('hidden');\n if ($noResults.parent().length) {\n $noResults.remove();\n }\n }\n\n that.$lis.filter('.is-active').removeClass('is-active');\n if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown__header').eq(0).addClass('is-active').children('a').focus();\n $(this).focus();\n });\n },\n\n _searchStyle: function() {\n var styles = {\n begins: 'ibegins',\n startsWith: 'ibegins'\n };\n\n return styles[this.options.liveSearchStyle] || 'icontains';\n },\n\n val: function(value) {\n if (typeof value !== 'undefined') {\n this.$element.val(value);\n this.render();\n\n return this.$element;\n } else {\n return this.$element.val();\n }\n },\n\n changeAll: function(status) {\n if (typeof status === 'undefined') status = true;\n\n this.findLis();\n\n var $options = this.$element.find('option');\n var $lisVisible = this.$lis.not('.divider, .dropdown__header, .disabled, .hidden').toggleClass('selected', status);\n var lisVisLen = $lisVisible.length;\n var selectedOptions = [];\n\n for (var i = 0; i < lisVisLen; i++) {\n var origIndex = $lisVisible[i].getAttribute('data-original-index');\n\n selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];\n }\n\n $(selectedOptions).prop('selected', status);\n\n this.render(false);\n\n this.$element\n .trigger('changed.bs.select')\n .triggerNative('change');\n },\n\n selectAll: function() {\n return this.changeAll(true);\n },\n\n deselectAll: function() {\n return this.changeAll(false);\n },\n\n toggle: function(e) {\n e = e || window.event;\n\n if (e) e.stopPropagation();\n\n this.$button.trigger('click');\n },\n\n keydown: function(e) {\n var $this = $(this);\n var $parent = $this.is('input') ? $this.parent().parent() : $this.parent();\n var $items;\n var that = $parent.data('this');\n var index;\n var next;\n var first;\n var last;\n var prev;\n var nextPrev;\n var prevIndex;\n var isActive;\n var selector = ':not(.disabled, .hidden, .dropdown__header, .divider)';\n var keyCodeMap = {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9'\n };\n\n if (that.options.liveSearch) $parent = $this.parent().parent();\n\n if (that.options.container) $parent = that.$menu;\n\n $items = $('[role=menu] li', $parent);\n\n isActive = that.$newElement.hasClass('open');\n\n if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {\n if (!that.options.container) {\n that.setSize();\n that.$menu.parent().addClass('open');\n isActive = true;\n } else {\n that.$button.trigger('click');\n }\n that.$searchbox.focus();\n }\n\n if (that.options.liveSearch) {\n if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.is-active').length === 0) {\n e.preventDefault();\n that.$menu.parent().removeClass('open');\n if (that.options.container) that.$newElement.removeClass('open');\n that.$button.focus();\n }\n // $items contains li elements when liveSearch is enabled\n $items = $('[role=menu] li' + selector, $parent);\n if (!$this.val() && !(/(38|40)/).test(e.keyCode.toString(10))) {\n if ($items.filter('.is-active').length === 0) {\n $items = that.$menuInner.find('li');\n if (that.options.liveSearchNormalize) {\n $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');\n } else {\n $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');\n }\n }\n }\n }\n\n if (!$items.length) return;\n\n if (/(38|40)/.test(e.keyCode.toString(10))) {\n index = $items.index($items.find('a').filter(':focus').parent());\n first = $items.filter(selector).first().index();\n last = $items.filter(selector).last().index();\n next = $items.eq(index).nextAll(selector).eq(0).index();\n prev = $items.eq(index).prevAll(selector).eq(0).index();\n nextPrev = $items.eq(next).prevAll(selector).eq(0).index();\n\n if (that.options.liveSearch) {\n $items.each(function(i) {\n if (!$(this).hasClass('disabled')) {\n $(this).data('index', i);\n }\n });\n index = $items.index($items.filter('.is-active'));\n first = $items.first().data('index');\n last = $items.last().data('index');\n next = $items.eq(index).nextAll().eq(0).data('index');\n prev = $items.eq(index).prevAll().eq(0).data('index');\n nextPrev = $items.eq(next).prevAll().eq(0).data('index');\n }\n\n prevIndex = $this.data('prevIndex');\n\n if (e.keyCode == 38) {\n if (that.options.liveSearch) index--;\n if (index != nextPrev && index > prev) index = prev;\n if (index < first) index = first;\n if (index == prevIndex) index = last;\n } else if (e.keyCode == 40) {\n if (that.options.liveSearch) index++;\n if (index == -1) index = 0;\n if (index != nextPrev && index < next) index = next;\n if (index > last) index = last;\n if (index == prevIndex) index = first;\n }\n\n $this.data('prevIndex', index);\n\n if (!that.options.liveSearch) {\n $items.eq(index).children('a').focus();\n } else {\n e.preventDefault();\n if (!$this.hasClass('dropdown-toggle')) {\n $items.removeClass('is-active').eq(index).addClass('is-active').children('a').focus();\n $this.focus();\n }\n }\n } else if (!$this.is('input')) {\n var keyIndex = [];\n var count;\n var prevKey;\n\n $items.each(function() {\n if (!$(this).hasClass('disabled')) {\n if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {\n keyIndex.push($(this).index());\n }\n }\n });\n\n count = $(document).data('keycount');\n count++;\n $(document).data('keycount', count);\n\n prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);\n\n if (prevKey != keyCodeMap[e.keyCode]) {\n count = 1;\n $(document).data('keycount', count);\n } else if (count >= keyIndex.length) {\n $(document).data('keycount', 0);\n if (count > keyIndex.length) count = 1;\n }\n\n $items.eq(keyIndex[count - 1]).children('a').focus();\n }\n\n // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {\n if (!(/(32)/).test(e.keyCode.toString(10))) e.preventDefault();\n if (!that.options.liveSearch) {\n var elem = $(':focus');\n\n elem.click();\n // Bring back focus for multiselects\n elem.focus();\n // Prevent screen from scrolling if the user hit the spacebar\n e.preventDefault();\n // Fixes spacebar selection of dropdown items in FF & IE\n $(document).data('spaceSelect', true);\n } else if (!(/(32)/).test(e.keyCode.toString(10))) {\n that.$menuInner.find('.is-active a').click();\n $this.focus();\n }\n $(document).data('keycount', 0);\n }\n\n if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {\n that.$menu.parent().removeClass('open');\n if (that.options.container) that.$newElement.removeClass('open');\n that.$button.focus();\n }\n },\n\n mobile: function() {\n this.$element.addClass('mobile-device');\n },\n\n refresh: function() {\n this.$lis = null;\n this.liObj = {};\n this.reloadLi();\n this.render();\n this.checkDisabled();\n this.liHeight(true);\n this.setStyle();\n this.setWidth();\n if (this.$lis) this.$searchbox.trigger('propertychange');\n\n this.$element.trigger('refreshed.bs.select');\n },\n\n hide: function() {\n this.$newElement.hide();\n },\n\n show: function() {\n this.$newElement.show();\n },\n\n remove: function() {\n this.$newElement.remove();\n this.$element.remove();\n },\n\n destroy: function() {\n this.$newElement.before(this.$element).remove();\n\n if (this.$bsContainer) {\n this.$bsContainer.remove();\n } else {\n this.$menu.remove();\n }\n\n if (this.observer) {\n this.observer.disconnect();\n }\n\n this.$element\n .off('.bs.select')\n .removeData('selectpicker')\n .removeClass('bs-select-hidden selectpicker');\n }\n };\n\n // SELECTPICKER PLUGIN DEFINITION\n // ==============================\n function Plugin(option, event) {\n // get the args of the outer function..\n var args = arguments;\n // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n // to get lost/corrupted in android 2.3 and IE9 #715 #775\n var _option = option;\n var _event = event;\n\n [].shift.apply(args);\n\n var value;\n var chain = this.each(function() {\n var $this = $(this);\n\n if ($this.is('select')) {\n var data = $this.data('selectpicker');\n var options = typeof _option == 'object' && _option;\n\n if (!data) {\n var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);\n\n config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);\n $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));\n } else if (options) {\n for (var i in options) {\n if (options.hasOwnProperty(i)) {\n data.options[i] = options[i];\n }\n }\n }\n\n if (typeof _option == 'string') {\n if (data[_option] instanceof Function) {\n value = data[_option].apply(data, args);\n } else {\n value = data.options[_option];\n }\n }\n }\n });\n\n if (typeof value !== 'undefined') {\n // noinspection JSUnusedAssignment\n return value;\n } else {\n return chain;\n }\n }\n\n var old = $.fn.selectpicker;\n\n $.fn.selectpicker = Plugin;\n $.fn.selectpicker.Constructor = Selectpicker;\n\n // SELECTPICKER NO CONFLICT\n // ========================\n $.fn.selectpicker.noConflict = function() {\n $.fn.selectpicker = old;\n\n return this;\n };\n\n $(document)\n .data('keycount', 0)\n .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"menu\"], .bootstrap-select__searchbox input', Selectpicker.prototype.keydown)\n .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"menu\"], .bootstrap-select__searchbox input', function(e) {\n e.stopPropagation();\n });\n\n // SELECTPICKER DATA-API\n // =====================\n $(window).on('load.bs.select.data-api', function() {\n $('.selectpicker').each(function() {\n var $selectpicker = $(this);\n\n Plugin.call($selectpicker, $selectpicker.data());\n });\n });\n\n $(document).on('enhance.form.select', function(event) {\n $(event.target).find('.form-select select').each(function() {\n var $this = $(this);\n\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) && !$this.data('live-search')) {\n $this.selectpicker('mobile');\n } else {\n $this.selectpicker();\n }\n });\n });\n\n $(document).trigger('enhance.form.select');\n })(jQuery);\n}));\n","(function($) {\n $.fn.elinaTextfield = function() {\n var focusClass = 'is-focused';\n var dirtyClass = 'is-dirty';\n\n return this.each(function() {\n var self = $(this);\n var input = self.find('.form-textfield__input:not(.bootstrap-select)');\n var label = self.find('.form-textfield__label');\n\n function checkValue() {\n if (!input.val() || input.val() == '') {\n self.removeClass(dirtyClass);\n } else {\n self.addClass(dirtyClass);\n }\n }\n\n function resizeHeight() {\n input.css('min-height', 0);\n input.css('min-height', (input.prop('scrollHeight') + 1));\n }\n\n if (self.data('focus-text') && self.data('blur-text') && self.hasClass('is-dirty')) {\n label.text(self.data('focus-text'));\n }\n input.on('focus', function() {\n self.addClass(focusClass);\n if (self.data('focus-text') && self.data('blur-text')) {\n setTimeout(function() {\n label.text(self.data('focus-text'));\n }, 100);\n }\n });\n input.on('blur', function() {\n setTimeout(function() {\n self.removeClass(focusClass);\n }, 100);\n\n if (self.data('focus-text') && self.data('blur-text') && input.val() == '') {\n setTimeout(function() {\n label.text(self.data('blur-text'));\n }, 100);\n }\n });\n input.on('change', function() {\n checkValue();\n });\n\n if (input.is('textarea')) {\n resizeHeight();\n\n input.on('input', function() {\n resizeHeight();\n });\n }\n\n checkValue();\n\n $(window).on('load', function() {\n checkValue();\n\n setTimeout(function() {\n checkValue();\n }, 500);\n });\n\n $(window).on('resize', function() {\n if (input.is('textarea')) {\n resizeHeight();\n }\n });\n });\n };\n}(jQuery));\n",";(function($) {\n 'use strict';\n\n /**\n * Declare variables\n */\n // Plugin Class\n var Validetta = {};\n // Current fields/fields\n var FIELDS = {};\n // RegExp for input validate rules\n var RRULE = new RegExp(/^(minChecked|maxChecked|minSelected|maxSelected|minLength|maxLength|equalTo|different|regExp|remote|callback)\\[(\\w{1,15})\\]/i);\n // RegExp for mail control method\n // @from ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29 )\n var RMAIL = new RegExp(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/);\n // RegExp for input number control method\n var RNUMBER = new RegExp(/^[\\-\\+]?(\\d+|\\d+\\.?\\d+)$/);\n\n /**\n * Form validate error messages\n */\n var messages = {\n required: 'This field is required. Please be sure to check.',\n email: 'Your E-mail address appears to be invalid. Please be sure to check.',\n number: 'You can enter only numbers in this field.',\n maxLength: 'Maximum {count} characters allowed!',\n minLength: 'Minimum {count} characters allowed!',\n maxChecked: 'Maximum {count} options allowed. Please be sure to check.',\n minChecked: 'Please select minimum {count} options.',\n maxSelected: 'Maximum {count} selection allowed. Please be sure to check.',\n minSelected: 'Minimum {count} selection allowed. Please be sure to check.',\n notEqual: 'Fields do not match. Please be sure to check.',\n different: 'Fields cannot be the same as each other',\n creditCard: 'Invalid credit card number. Please be sure to check.'\n };\n\n /**\n * Plugin defaults\n */\n var defaults = {\n // If you dont want to display error messages set this options false\n showErrorMessages: true,\n // Class of the element that would receive error message\n errorTemplateClass: 'form-error',\n // Class that would be added on every failing validation field\n errorClass: 'is-invalid',\n // Same for valid validation\n validClass: 'is-valid',\n validIconClass: 'form-textfield__icon--valid',\n // To enable real-time form control, set this option true.\n realTime: false,\n onValid: function() {\n // This function to be called when the user submits the form and there is no error.\n $(this.form).trigger('valid.telia.validation');\n },\n onError: function() {\n // This function to be called when the user submits the form and there are some errors\n $(this.form).trigger('error.telia.validation');\n },\n validators: {\n regExp: {\n date: {\n pattern: /^(?:(?:31(\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/,\n errorMessage: 'You have not entered a correctly formatted date.'\n },\n number: {\n pattern: /^[\\-\\+]?(\\d+|\\d+[,.]?\\d+)$/,\n errorMessage: 'You can enter only numbers in this field.'\n }\n }\n }\n };\n\n /**\n * Clears the left and right spaces of given parameter.\n * This is the function for string parameter !\n * If parameter is an array, function will return the parameter without trimed\n *\n * @param {string} value\n * @return {mixed}\n */\n function trim(value) {\n return typeof value === 'string' ? value.replace(/^\\s+|\\s+$/g, '') : value;\n };\n\n /**\n * Validator\n * {count} which used below is the specified maximum or minimum value\n * e.g if method is minLength and rule is 2 ( minLength[2] )\n * Output error windows text will be : 'Please select minimum 2 options.'\n *\n * @namespace\n * @param {object} tmp = this.tmp Tmp object for store current field and its value\n * @param {String} val : field value\n */\n var Validator = {\n required: function(tmp, self) {\n switch (tmp.el.type) {\n case 'checkbox' : return tmp.el.checked || messages.required;\n case 'radio' : return this.radio.call(self, tmp.el) || messages.required;\n case 'select-multiple' : return tmp.val.length > 0 || messages.required;\n default : return tmp.val !== '' || messages.required;\n }\n },\n // Mail check - it checks the value if it's a valid email address or not\n email: function(tmp) {\n return RMAIL.test(tmp.val) || messages.email;\n },\n // Number check\n number: function(tmp) {\n return RNUMBER.test(tmp.val) || messages.number;\n },\n // Minimum length check\n minLength: function(tmp) {\n var _length = tmp.val.length;\n\n return _length === 0 || _length >= tmp.arg || messages.minLength.replace('{count}', tmp.arg);\n },\n // Maximum lenght check\n maxLength: function(tmp) {\n return tmp.val.length <= tmp.arg || messages.maxLength.replace('{count}', tmp.arg);\n },\n // equalTo check\n equalTo: function(tmp, self) {\n return self.form.querySelector('input[name=\"' + tmp.arg + '\"]').value === tmp.val || messages.notEqual;\n },\n different: function(tmp, self) {\n return self.form.querySelector('input[name=\"' + tmp.arg + '\"]').value !== tmp.val || messages.different;\n },\n\n /**\n * Credit Card Control\n * @from : http://af-design.com/blog/2010/08/18/validating-credit-card-numbers\n */\n creditCard: function(tmp) {\n // allow empty because empty check does by required metheod\n if (tmp.val === '') return true;\n var reg;\n var cardNumber;\n var pos;\n var digit;\n var i;\n var subTotal;\n var sum = 0;\n var strlen;\n\n reg = new RegExp(/[^0-9]+/g);\n cardNumber = tmp.val.replace(reg, '');\n strlen = cardNumber.length;\n if (strlen < 16) return messages.creditCard;\n for (i = 0; i < strlen; i++) {\n pos = strlen - i;\n digit = parseInt(cardNumber.substring(pos - 1, pos), 10);\n if (i % 2 === 1) {\n subTotal = digit * 2;\n if (subTotal > 9) {\n subTotal = 1 + (subTotal - 10);\n }\n } else {\n subTotal = digit;\n }\n sum += subTotal;\n }\n if (sum > 0 && sum % 10 === 0) return true;\n\n return messages.creditCard;\n },\n // Checkbox check\n maxChecked: function(tmp, self) {\n var cont = $(self.form.querySelectorAll('input[type=checkbox][name=\"' + tmp.el.name + '\"]'));\n // we dont want to open an error window for all checkboxes which have same \"name\"\n\n if (cont.index(tmp.el) !== 0) return;\n var count = cont.filter(':checked').length;\n\n if (count === 0) return;\n\n return count <= tmp.arg || messages.maxChecked.replace('{count}', tmp.arg);\n },\n minChecked: function(tmp, self) {\n var cont = $(self.form.querySelectorAll('input[type=checkbox][name=\"' + tmp.el.name + '\"]'));\n // same as above\n\n if (cont.index(tmp.el) !== 0) return;\n var count = cont.filter(':checked').length;\n\n return count >= tmp.arg || messages.minChecked.replace('{count}', tmp.arg);\n },\n // Selectbox check\n maxSelected: function(tmp) {\n if (tmp.val === null) return;\n\n return tmp.val.length <= tmp.arg || messages.maxSelected.replace('{count}', tmp.arg);\n },\n minSelected: function(tmp) {\n return (tmp.val !== null && tmp.val.length >= tmp.arg) || messages.minSelected.replace('{count}', tmp.arg);\n },\n // Radio\n radio: function(el) {\n var count = this.form.querySelectorAll('input[type=radio][name=\"' + el.name + '\"]:checked').length;\n\n return count === 1;\n },\n // Custom reg check\n regExp: function(tmp, self) {\n var _arg = self.options.validators.regExp[tmp.arg];\n var _reg = new RegExp(_arg.pattern);\n\n return _reg.test(tmp.val) || _arg.errorMessage;\n },\n // Remote\n remote: function(tmp) {\n tmp.remote = tmp.arg;\n\n return;\n },\n // Callback\n callback: function(tmp, self) {\n var _cb = self.options.validators.callback[tmp.arg];\n\n return _cb.callback(tmp.el, tmp.val) || _cb.errorMessage;\n }\n };\n\n /**\n * Plugin Class\n *\n * @constructor\n * @param {object} form :
    element which being controlled\n * @param {object} options : User-specified settings\n * @return {method} events\n */\n Validetta = function(form, options) {\n /**\n * Public Properties\n * @property {mixed} handler It is used to stop or resume submit event handler\n * @property {object} options Property is stored in plugin options\n * @property {object} xhr Stores xhr requests\n * @property {object} form Property is stored in element\n */\n this.handler = false;\n this.options = $.extend(true, {}, defaults, options);\n this.form = form;\n this.xhr = {};\n this.events();\n };\n\n Validetta.prototype = {\n\n constructor: Validetta,\n\n /**\n * This is the method of handling events\n *\n * @return {mixed}\n */\n events: function() {\n // stored this\n var self = this;\n // Handle submit event\n\n $(this.form).submit(function(e) {\n // fields to be controlled transferred to global variable\n FIELDS = this.querySelectorAll('[data-validetta]');\n\n return self.init(e);\n });\n // real-time option control\n if (this.options.realTime === true) {\n // handle change event for form elements (without checkbox)\n $(this.form).find('[data-validetta]').not('[type=checkbox]').on('change', function(e) {\n // field to be controlled transferred to global variable\n FIELDS = $(this);\n\n return self.init(e);\n });\n // handle click event for checkboxes\n $(this.form).find('[data-validetta][type=checkbox]').on('click', function(e) {\n // fields to be controlled transferred to global variable\n FIELDS = self.form.querySelectorAll('[data-validetta][type=checkbox][name=\"' + this.name + '\"]');\n\n return self.init(e);\n });\n }\n // handle reset button to clear error messages\n $(this.form).on('reset', function() {\n $(self.form.querySelectorAll('.' + self.options.errorClass + ', .' + self.options.validClass)).removeClass(self.options.errorClass + ' ' + self.options.validClass);\n\n return self.reset();\n });\n },\n\n /**\n * In this method, fields are validated\n *\n * @params {object} e : event object\n * @return {mixed}\n */\n init: function(e) {\n // Reset error windows from all elements\n this.reset(FIELDS);\n // Start control each elements\n this.checkFields(e);\n // if event type is not submit, break\n if (e.type !== 'submit') return;\n // This is for when running remote request, return false and wait request response\n else if (this.handler === 'pending') return false;\n // if event type is submit and handler is true, break submit and call onError() function\n else if (this.handler === true) {\n this.options.onError.call(this, e);\n\n return false;\n // if form is valid call onValid() function\n } else return this.options.onValid.call(this, e);\n },\n\n /**\n * Checks Fields\n *\n * @param {object} e event object\n * @return {void}\n */\n checkFields: function(e) {\n // stored this\n var self = this;\n var invalidFields = [];\n // Make invalidFields accessible\n\n this.getInvalidFields = function() {\n return invalidFields;\n };\n for (var i = 0, _lengthFields = FIELDS.length; i < _lengthFields; i++) {\n // if field is disabled, do not check\n if (FIELDS[i].disabled) continue;\n // current field\n var el = FIELDS[i];\n // current field's errors\n var errors = '';\n // current field's value\n var val = trim($(el).val());\n // current field's control methods\n var methods = el.getAttribute('data-validetta').split(',');\n // Validation state\n var state;\n\n // Create tmp\n this.tmp = {};\n // store el and val variables in tmp\n this.tmp = {\n el: el,\n val: val,\n parent: this.parents(el)\n };\n // Start to check fields\n // Validator : Fields Control Object\n for (var j = 0, _lengthMethods = methods.length; j < _lengthMethods; j++) {\n // Check Rule\n var rule = methods[j].match(RRULE);\n var method;\n // Does it have rule?\n\n if (rule !== null) {\n // Does it have any argument ?\n if (typeof rule[2] !== 'undefined') this.tmp.arg = rule[2];\n // Set method name\n method = rule[1];\n } else {\n method = methods[j];\n }\n // prevent empty validation if method is not required\n if (val === '' && method !== 'required' && method !== 'equalTo') continue;\n // Is there a methot in Validator ?\n if (Validator.hasOwnProperty(method)) {\n // Validator returns error message if method invalid\n state = Validator[method](self.tmp, self);\n if (typeof state !== 'undefined' && state !== true) {\n var _dataMsg = el.getAttribute('data-vd-message-' + method);\n\n if (_dataMsg !== null) state = _dataMsg;\n errors += state + '
    ';\n }\n }\n }\n // Check the errors\n if (errors !== '') {\n invalidFields.push({\n field: el,\n errors: errors\n });\n $(el).parent().find('.' + this.options.validIconClass).remove();\n // if parent element has valid class, remove and add error class\n this.addErrorClass(this.tmp.parent);\n // open error window\n this.window.open.call(this, el, errors);\n // Check remote validation\n } else if (typeof this.tmp.remote !== 'undefined') {\n this.checkRemote(el, e);\n } else {\n // Nice, there are no error\n // Append icon if element is textfield & valid, but is not a select.\n if ($(el).hasClass('form-textfield__input') && !$(el).is('select')) {\n $(el).after('');\n }\n if (typeof state !== 'undefined') this.addValidClass(this.tmp.parent);\n else $(this.tmp.parent).removeClass(this.options.errorClass + ' ' + this.options.validClass);\n // Reset state variable\n state = undefined;\n }\n }\n },\n\n /**\n * Checks remote validations\n *\n * @param {object} el current field\n * @param {object} e event object\n * @throws {error} If previous remote request for same value has rejected\n * @return {void}\n */\n checkRemote: function(el, e) {\n var ajaxOptions = {};\n var data = {};\n var fieldName = el.name || el.id;\n\n if (typeof this.remoteCache === 'undefined') this.remoteCache = {};\n\n // Set data\n data[fieldName] = this.tmp.val;\n // exends ajax options\n ajaxOptions = $.extend(true, {}, {\n data: data\n }, this.options.validators.remote[this.tmp.remote] || {});\n\n // use $.param() function for generate specific cache key\n var cacheKey = $.param(ajaxOptions);\n\n // Check cache\n var cache = this.remoteCache[cacheKey];\n\n if (typeof cache !== 'undefined') {\n switch (cache.state) {\n // pending means remote request not finished yet\n case 'pending' :\n // update handler and cache event type\n this.handler = 'pending';\n cache.event = e.type;\n break;\n // rejected means remote request could not be performed\n case 'rejected' :\n // we have to break submit because of throw error\n e.preventDefault();\n throw new Error(cache.result.message);\n // resolved means remote request has done\n case 'resolved' :\n // Check to cache, if result is invalid, open an error window\n if (cache.result.valid === false) {\n this.addErrorClass(this.tmp.parent);\n this.window.open.call(this, el, cache.result.message);\n } else {\n this.addValidClass(this.tmp.parent);\n }\n }\n } else {\n // Abort if previous ajax request still running\n var _xhr = this.xhr[fieldName];\n\n if (typeof _xhr !== 'undefined' && _xhr.state() === 'pending') _xhr.abort();\n // Start caching\n cache = this.remoteCache[cacheKey] = {\n state: 'pending',\n event: e.type\n };\n // make a remote request\n this.remoteRequest(ajaxOptions, cache, el, fieldName);\n }\n },\n\n /**\n * Calls ajax request for remote validations\n *\n * @param {object} ajaxOptions Ajax options\n * @param {object} cache Cache object\n * @param {object} el processing element\n * @param {string} fieldName Field name for make specific caching\n * @param {object} e Event object\n */\n remoteRequest: function(ajaxOptions, cache, el, fieldName) {\n var self = this;\n\n $(this.tmp.parent).addClass('validetta-pending');\n\n // cache xhr\n this.xhr[fieldName] = $.ajax(ajaxOptions)\n .done(function(result) {\n if (typeof result !== 'object') result = JSON.parse(result);\n cache.state = 'resolved';\n cache.result = result;\n if (cache.event === 'submit') {\n self.handler = false;\n $(self.form).trigger('submit');\n } else if (result.valid === false) {\n self.addErrorClass(self.tmp.parent);\n self.window.open.call(self, el, result.message);\n } else {\n self.addValidClass(self.tmp.parent);\n }\n })\n .fail(function(jqXHR, textStatus) {\n // Dont throw error if request is aborted\n if (textStatus !== 'abort') {\n var _msg = 'Ajax request failed for field (' + fieldName + ') : ' + jqXHR.status + ' ' + jqXHR.statusText;\n\n cache.state = 'rejected';\n cache.result = {\n valid: false,\n message: _msg\n };\n throw new Error(_msg);\n }\n })\n .always(function() { $(self.tmp.parent).removeClass('validetta-pending'); });\n\n this.handler = 'pending';\n },\n\n /**\n * This the section which opening or closing error windows process is done\n *\n * @namespace\n */\n window: {\n /**\n * Error window opens\n *\n * @params {object} el : element which has an error ( it can be native element or jQuery object )\n * @params {string} error : error messages\n */\n open: function(el, error) {\n // We want display errors ?\n if (!this.options.showErrorMessages) {\n // because of form not valid, set handler true for break submit\n this.handler = true;\n\n return;\n }\n var elParent = this.parents(el);\n // If the parent element undefined, that means el is an object. So we need to transform to the element\n\n if (typeof elParent === 'undefined') elParent = el[0].parentNode;\n // if there is an error window which previously opened for el, return\n if (elParent.querySelectorAll('.' + this.options.errorTemplateClass).length) return;\n\n var errorElement = document.createElement('span');\n\n errorElement.className = this.options.errorTemplateClass;\n errorElement.innerHTML = '' + error + '';\n\n elParent.appendChild(errorElement);\n\n // we have an error so we need to break submit\n // set to handler true\n this.handler = true;\n },\n\n /**\n * Error window closes\n *\n * @params el : the error message window which will be disappear\n */\n close: function(el) {\n el.parentNode.removeChild(el);\n }\n },\n\n\n /**\n * Removes all error messages windows\n *\n * @param {object} or {void} el : form elements which have an error message window\n */\n reset: function(el) {\n var _errorMessages = {};\n // if el is undefined ( This is the process of resetting all )\n // or el is an object that has element more than one\n // and these elements are not checkbox\n\n if (typeof el === 'undefined' || (el.length > 1 && el[0].type !== 'checkbox')) {\n _errorMessages = this.form.querySelectorAll('.' + this.options.errorTemplateClass);\n } else {\n _errorMessages = this.parents(el[0]).querySelectorAll('.' + this.options.errorTemplateClass);\n }\n for (var i = 0, _lengthErrorMessages = _errorMessages.length; i < _lengthErrorMessages; i++) {\n this.window.close.call(this, _errorMessages[i]);\n }\n // set to handler false\n // otherwise at the next validation attempt, submit will not continue even the validation is successful\n this.handler = false;\n },\n\n /**\n * Adds error class and removes valid class if exist\n *\n * @param {object} el element\n */\n addErrorClass: function(el) {\n $(el).removeClass(this.options.validClass).addClass(this.options.errorClass);\n },\n\n /**\n * Adds valid class and removes error class if exist\n * if error class not exist, do not add valid class\n *\n * @param {object} el element\n */\n addValidClass: function(el) {\n $(el).removeClass(this.options.errorClass).addClass(this.options.validClass);\n },\n\n /**\n * Finds parent element\n *\n * @param {object} el element\n * @return {object} el parent element\n */\n parents: function(el) {\n var defaultUp = 0;\n\n if ($(el).hasClass('form-textfield__input')) {\n defaultUp = 1;\n\n if ($(el).prop('tagName') == 'SELECT') {\n defaultUp = 2;\n }\n }\n var upLength = parseInt(el.getAttribute('data-vd-parent-up'), 10) || defaultUp;\n\n for (var i = 0; i <= upLength; i++) {\n el = el.parentNode;\n }\n\n return el;\n }\n };\n\n /**\n * Plugin Validetta\n *\n * @param {object} options : User-specified settings\n * @return {object} this\n */\n $.fn.validetta = function(options, _messages) {\n if ($.validettaLanguage) {\n messages = $.extend(true, {}, messages, $.validettaLanguage.messages);\n }\n if (typeof _messages !== 'undefined') {\n messages = $.extend(true, {}, messages, _messages);\n }\n\n return this.each(function() {\n new Validetta(this, options);\n });\n };\n})(jQuery);\n","(function() {\n 'use strict';\n\n $.fn.weekDatepicker = function() {\n var $trigger = $(this);\n var pickerClass = 'weekdatepicker';\n var activeClass = 'active';\n\n function _setPosition($el) {\n var triggerDims = _getDimensions($trigger);\n var elDims = _getDimensions($el);\n var left;\n var top;\n var bodyRect;\n var triggerRect;\n var pointerRight = 3;\n\n left = triggerDims.width - elDims.width;\n top = triggerDims.top + triggerDims.height + 10;\n\n bodyRect = $('body')[0].getBoundingClientRect();\n triggerRect = $trigger[0].getBoundingClientRect();\n\n if ((triggerRect.right + 15) < bodyRect.right) {\n left += 15;\n pointerRight += 15;\n }\n\n $($el[0].firstElementChild).css({\n right: pointerRight\n });\n\n $el.css({\n left: left,\n top: top\n });\n };\n\n function _getDimensions($el) {\n var offset = $el.position();\n\n return {\n width: $el.outerWidth(),\n height: $el.outerHeight(),\n left: offset.left,\n top: offset.top\n };\n };\n\n function show($el) {\n _setPosition($el);\n $el.addClass(activeClass);\n };\n\n function hide($el) {\n $el.removeClass(activeClass).css({\n left: '-10000px'\n });\n };\n\n return this.each(function() {\n var $this = $(this);\n var $el = $this.parent().siblings('.' + pickerClass);\n\n $this.on('focus', function() {\n show($el);\n });\n $this.on('blur', function() {\n hide($el);\n });\n });\n };\n}());\n",";(function($, window, document) {\n var pluginName = 'teliaHeader';\n var defaults = {};\n var initSelector = '.header';\n\n /**\n * Header\n * @class\n * @param {HTMLElement} element The HTML element the Header should be bound to\n * @param {Object} options An option map\n */\n function Header(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.options = $.extend({}, defaults, options);\n this._defaults = defaults;\n this._name = pluginName;\n this.container = false;\n this.$iframe = this.$element.find('.header__iframe');\n\n this.init();\n }\n\n /**\n * Initialize the plugin.\n * @method init\n */\n Header.prototype.init = function() {\n this.$iframe.iFrameResize({\n checkOrigin: false\n });\n };\n\n /**\n * Destroy the plugin instance.\n * @method destroy\n */\n Header.prototype.destroy = function() {\n this.$element.removeData('plugin_' + pluginName);\n };\n\n /**\n * Create jQuery plugin.\n * @param {Object} options\n * @listens telia.header\n * @returns {Array
    }\n */\n $.fn[pluginName] = function(options) {\n var args = Array.prototype.slice.call(arguments, 1);\n\n return this.each(function() {\n var instance = $.data(this, 'plugin_' + pluginName);\n\n if (!instance) {\n $.data(this, 'plugin_' + pluginName, new Header(this, options));\n } else if (typeof options === 'string') {\n instance[options].apply(instance, args);\n }\n });\n };\n\n /**\n * @param {Event} event\n * @event enhance.telia.header\n */\n $(document).on('enhance.telia.header', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]();\n });\n\n /**\n * @param {Event} event\n * @event destroy.telia.header\n */\n $(document).on('destroy.telia.header', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]('destroy');\n });\n})(jQuery, window, document);\n\n/**\n * Auto-init the plugin on DOM ready.\n * @fires enhance.telia.header\n */\n$(function() {\n $(document).trigger('enhance.telia.header');\n});\n","/**\n * Show overlay\n * @method showOverlay\n * @param {string} container Container selector\n * @param {string} classes List of overlay classes\n * @param {boolean} loader Enable loader\n * @param {string} loaderText Loader text\n * @returns {jQuery|HTMLElement} overlay element\n */\nfunction showOverlay(container, classes, loader, loaderText) {\n if (!container) {\n container = 'body';\n }\n\n var overlay = $('
    ');\n\n if (loader) {\n var spinner = $('
    ');\n\n if (loaderText) {\n spinner.append('
    ' + loaderText + '
    ');\n }\n\n overlay.append(spinner);\n }\n\n $(container).append(overlay);\n\n return overlay;\n}\n\n/**\n * Hide overlay\n * @method hideOverlay\n * @param {jQuery|HTMLElement} overlay jQuery element\n * @returns {void}\n */\nfunction hideOverlay(overlay) {\n if (overlay) {\n overlay.remove();\n } else {\n $('body > .overlay').remove();\n }\n}\n\nwindow.showOverlay = showOverlay;\nwindow.hideOverlay = hideOverlay;\n","/**\n * Start loader\n * @param {string} container Container selector\n * @param {string} classes List of classes for overlay\n * @param {string} loaderText Loader text\n * @returns {Function} showOverlay function\n */\nfunction startLoad(container, classes, loaderText) {\n if (!classes && !container) {\n classes = 'overlay--fixed';\n }\n\n return window.showOverlay(container, classes, true, loaderText);\n}\n\n/**\n * End loader\n * @param {JQuery} overlay Overlay element\n * @returns {void}\n */\nfunction endLoad(overlay) {\n window.hideOverlay(overlay);\n}\n\nwindow.startLoad = startLoad;\nwindow.endLoad = endLoad;\n",";(function($, window, document) {\n var pluginName = 'teliaModal';\n var defaults = {};\n var initSelector = '.modal';\n\n /**\n * Modal\n * @class\n * @param {HTMLElement} element The HTML element the Modal should be bound to\n * @param {Object} options An option map\n */\n function Modal(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.options = $.extend({}, defaults, options);\n this._defaults = defaults;\n this._name = pluginName;\n this.container = false;\n\n this.init();\n }\n\n /**\n * Initialize the plugin.\n * @method init\n */\n Modal.prototype.init = function() {};\n\n /**\n * Open modal\n * @method open\n * @param {HTMLElement} trigger\n */\n Modal.prototype.open = function(trigger) {\n if ($('.modal-container--visible').length > 0) {\n $('.modal-container--visible').each(function() {\n $(this).find(initSelector)[pluginName]('close');\n });\n }\n\n var that = this;\n var e = $.Event('open.telia.modal');\n\n this.$element.trigger(e);\n\n if (!this.container.length) {\n this.container = $('
    ');\n this.inner = $('
    ');\n\n this.container.on('click.telia.modal.close', function(event) {\n if ($(event.target).parents('body').length && $(event.target).closest('.modal').length == 0) {\n event.preventDefault();\n that.close();\n }\n });\n\n // force re-rendering of icons to fix a very weird chrome bug\n this.$element.find('.icon').each(function() {\n $(this).html($(this).html());\n });\n\n this.inner.append(this.$element);\n this.container.append(this.inner);\n\n $('body').append(this.container);\n }\n\n if (this.$element.find('.modal__close').length == 0) {\n this.closeBtn = $('');\n\n this.$element.prepend(this.closeBtn);\n\n this.closeBtn.on('click.telia.modal.close', function(event) {\n event.preventDefault();\n that.close();\n });\n }\n\n this.container.addClass('modal-container--visible');\n $(document).trigger('refresh.telia', [this.element, trigger]);\n\n window.disableScroll(true);\n $(document).on('keyup.telia.modal', this.keyboard.bind(this));\n };\n\n /**\n * Close modal on esc\n * @method keyboard\n * @param {Event} event\n */\n Modal.prototype.keyboard = function(event) {\n if (event.keyCode == 27) {\n this.close();\n }\n };\n\n /**\n * Close modal\n * @method close\n */\n Modal.prototype.close = function() {\n this.$element.find('.video').trigger('reset');\n this.container.removeClass('modal-container--visible');\n window.enableScroll();\n var e = $.Event('close.telia.modal');\n\n this.$element.trigger(e);\n $(document).off('keyup.telia.modal');\n };\n\n /**\n * Destroy the plugin instance.\n * @method destroy\n */\n Modal.prototype.destroy = function() {\n this.$element.removeData('plugin_' + pluginName);\n };\n\n /**\n * Create jQuery plugin.\n * @param {Object} options\n * @listens telia.modal\n * @returns {Array}\n */\n $.fn[pluginName] = function(options) {\n var args = Array.prototype.slice.call(arguments, 1);\n\n return this.each(function() {\n var instance = $.data(this, 'plugin_' + pluginName);\n\n if (!instance) {\n $.data(this, 'plugin_' + pluginName, new Modal(this, options));\n } else if (typeof options === 'string') {\n instance[options].apply(instance, args);\n }\n });\n };\n\n /**\n * @param {Event} event\n * @event enhance.telia.modal\n */\n $(document).on('enhance.telia.modal', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]();\n });\n\n /**\n * @param {Event} event\n * @event destroy.telia.modal\n */\n $(document).on('destroy.telia.modal', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]('destroy');\n });\n\n /**\n * @param {Event} event\n * @event click.telia.modal.open\n */\n $(document).on('click.telia.modal.open', '.js-modal', function(event) {\n event.preventDefault();\n var $this = $(this);\n var trigger = $(event.currentTarget);\n var target = false;\n\n if ($this.attr('data-modal-target')) {\n target = $this.attr('data-modal-target');\n } else if ($this.attr('href')) {\n target = $this.attr('href');\n }\n\n if (target) {\n $(target)[pluginName]('open', trigger);\n }\n });\n})(jQuery, window, document);\n\n/**\n * Auto-init the plugin on DOM ready.\n * @fires enhance.telia.modal\n */\n$(function() {\n $(document).trigger('enhance.telia.modal');\n});\n\n/**\n * Old init for compatibility.\n * @fires enhance.telia.modal\n * @deprecated Use enhance.telia.modal event directly.\n */\nfunction initModal() {\n $(document).trigger('enhance.telia.modal');\n}\nwindow.initModal = initModal;\n",";(function($, window, document) {\n var pluginName = 'teliaProgress';\n var defaults = {};\n var initSelector = '.progress';\n\n /**\n * Progress\n * @class\n * @param {HTMLElement} element The HTML element the Progress should be bound to\n * @param {Object} options An option map\n */\n function Progress(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.options = $.extend({}, defaults, options);\n this._defaults = defaults;\n this._name = pluginName;\n this.progressBreaks = {\n sm: 600,\n md: 1024\n };\n this.currentBreak = this.$element.data('break');\n this.progressWindowWidth = $(window).width();\n this.steps = this.$element.find('.progress__item');\n this.progressContentContainer = this.$element.find('.progress__container');\n this.progressResizeTimer;\n\n this.init();\n }\n\n /**\n * Initialize the plugin.\n * @method init\n */\n Progress.prototype.init = function() {\n if (this.currentBreak in this.progressBreaks) {\n var currentProgressBreak = this.progressBreaks[this.currentBreak];\n\n if (this.progressWindowWidth < currentProgressBreak) {\n this.convertToNarrow();\n }\n } else {\n this.convertToNarrow();\n }\n\n $(window).on('resize.telia.progress', this.resize.bind(this));\n };\n\n /**\n * Resize\n * @method resize\n */\n Progress.prototype.resize = function() {\n var that = this;\n\n clearTimeout(this.progressResizeTimer);\n this.progressResizeTimer = setTimeout(function() {\n var progressWindowWidthNew = $(window).width();\n\n if (that.currentBreak in that.progressBreaks) {\n var currentProgressBreak = that.progressBreaks[that.currentBreak];\n\n if (that.progressWindowWidth < currentProgressBreak && progressWindowWidthNew >= currentProgressBreak) {\n that.convertToWide();\n } else if (that.progressWindowWidth >= currentProgressBreak && progressWindowWidthNew < currentProgressBreak) {\n that.convertToNarrow();\n }\n }\n\n that.progressWindowWidth = progressWindowWidthNew;\n }, 250);\n };\n\n /**\n * Convert progress steps to column view\n * @method convertToNarrow\n */\n Progress.prototype.convertToNarrow = function() {\n if (this.$element.data('break-content') !== undefined && !this.$element.data('break-content')) {\n return;\n }\n\n this.steps.each(function() {\n var step = $(this);\n var contentID = step.attr('data-content');\n var content = $(contentID);\n\n step.append(content);\n });\n\n this.$element.addClass('progress--enhanced');\n };\n\n /**\n * Convert progress steps to row view\n * @method convertToWide\n * @param {HTMLElement} $parent\n */\n Progress.prototype.convertToWide = function($parent) {\n var container = ($parent && $parent.length) ? $parent : this.progressContentContainer;\n\n this.steps.each(function() {\n var step = $(this);\n var contentID = step.attr('data-content');\n var content = $(contentID);\n\n container.append(content);\n });\n\n this.$element.removeClass('progress--enhanced');\n };\n\n /**\n * Initialize slick plugin.\n * @method destroy\n */\n Progress.prototype.destroy = function() {\n $(window).off('resize.telia.progress');\n\n this.$element.removeData('plugin_' + pluginName);\n };\n\n /**\n * Create jQuery plugin.\n * @param {Object} options\n * @listens telia.progress\n * @returns {Array}\n */\n $.fn[pluginName] = function(options) {\n var args = Array.prototype.slice.call(arguments, 1);\n\n return this.each(function() {\n var instance = $.data(this, 'plugin_' + pluginName);\n\n if (!instance) {\n $.data(this, 'plugin_' + pluginName, new Progress(this, options));\n } else if (typeof options === 'string') {\n instance[options].apply(instance, args);\n }\n });\n };\n\n /**\n * @param {Event} event\n * @event enhance.telia.progress\n */\n $(document).on('enhance.telia.progress', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]();\n });\n\n /**\n * @param {Event} event\n * @event destroy.telia.progress\n */\n $(document).on('destroy.telia.progress', function(event) {\n $(event.target).find(initSelector).addBack(initSelector)[pluginName]('destroy');\n });\n})(jQuery, window, document);\n\n/**\n * Auto-init the plugin on DOM ready.\n * @fires enhance.telia.progress\n */\n$(function() {\n $(document).trigger('enhance.telia.progress');\n});\n\n/**\n * Old init for compatibility.\n * @fires enhance.telia.progress\n * @deprecated Use enhance.telia.progress event directly.\n */\nfunction initProgress() {\n $(document).trigger('enhance.telia.progress');\n}\nwindow.initProgress = initProgress;\n","/* ========================================================================\n* Bootstrap: tooltip.js v3.3.6\n* http://getbootstrap.com/javascript/#tooltip\n* Inspired by the original jQuery.tipsy by Jason Frame\n* ========================================================================\n* Copyright 2011-2015 Twitter, Inc.\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n* ======================================================================== */\n\n+function($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n function Tooltip(element, options) {\n this.type = null;\n this.options = null;\n this.enabled = null;\n this.timeout = null;\n this.hoverState = null;\n this.$element = null;\n this.inState = null;\n\n this.init('tooltip', element, options);\n };\n\n Tooltip.VERSION = '3.3.6';\n\n Tooltip.TRANSITION_DURATION = 150;\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '
    ',\n trigger: 'hover focus',\n title: '',\n titleSize: 'h4',\n delay: 0,\n html: false,\n container: 'body',\n viewport: {\n selector: 'body',\n padding: 0\n },\n variant: '',\n close: false,\n onload: false,\n class: ''\n };\n\n Tooltip.prototype.init = function(type, element, options) {\n this.enabled = true;\n this.type = type;\n this.$element = $(element);\n this.options = this.getOptions(options);\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport));\n this.inState = {\n click: false,\n hover: false,\n focus: false\n };\n this.$close = $('');\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!');\n }\n\n var triggers = this.options.trigger.split(' ');\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i];\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this));\n this.options.close = true;\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin';\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout';\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this));\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this));\n }\n }\n\n if (this.options.selector) {\n this._options = $.extend({}, this.options, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this.fixTitle();\n }\n };\n\n Tooltip.prototype.getDefaults = function() {\n return Tooltip.DEFAULTS;\n };\n\n Tooltip.prototype.getOptions = function(options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options);\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n };\n }\n\n return options;\n };\n\n Tooltip.prototype.getDelegateOptions = function() {\n var options = {};\n var defaults = this.getDefaults();\n\n this._options && $.each(this._options, function(key, value) {\n if (defaults[key] != value) options[key] = value;\n });\n\n return options;\n };\n\n Tooltip.prototype.enter = function(obj) {\n var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type);\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions());\n $(obj.currentTarget).data('bs.' + this.type, self);\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true;\n }\n\n if (self.tip().hasClass('popover--visible') || self.hoverState == 'popover--visible') {\n self.hoverState = 'popover--visible';\n\n return;\n }\n\n clearTimeout(self.timeout);\n\n self.hoverState = 'popover--visible';\n\n if (!self.options.delay || !self.options.delay.show) return self.show();\n\n self.timeout = setTimeout(function() {\n if (self.hoverState == 'popover--visible') self.show();\n }, self.options.delay.show);\n };\n\n Tooltip.prototype.isInStateTrue = function() {\n for (var key in this.inState) {\n if (this.inState[key]) return true;\n }\n\n return false;\n };\n\n Tooltip.prototype.leave = function(obj) {\n var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type);\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions());\n $(obj.currentTarget).data('bs.' + this.type, self);\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false;\n }\n\n if (self.isInStateTrue()) return;\n\n clearTimeout(self.timeout);\n\n self.hoverState = 'out';\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide();\n\n self.timeout = setTimeout(function() {\n if (self.hoverState == 'out') self.hide();\n }, self.options.delay.hide);\n };\n\n Tooltip.prototype.show = function() {\n function complete() {\n var prevHoverState = that.hoverState;\n\n that.$element.trigger('shown.bs.' + that.type);\n that.hoverState = null;\n\n if (prevHoverState == 'out') that.leave(that);\n\n $(document).on('keyup.telia.tooltip.' + that.$tip[0].id, that.keyboard.bind(that));\n };\n\n var e = $.Event('show.bs.' + this.type);\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e);\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);\n\n if (e.isDefaultPrevented() || !inDom) return;\n var that = this;\n\n var $tip = this.tip();\n\n var tipId = this.getUID(this.type);\n\n this.setContent();\n $tip.attr('id', tipId);\n this.$element.attr('aria-describedby', tipId);\n\n if (this.options.close) {\n if (this.options.title == '') {\n $tip.addClass('popover--with-close');\n }\n $tip.addClass('popover--with-close-and-title');\n $tip.append(this.$close);\n\n this.$close.on('click', function(e) {\n e.preventDefault();\n that.hide();\n that.inState.click = false;\n });\n }\n\n if (this.options.animation) $tip.addClass('popover--fade');\n\n var placement = typeof this.options.placement == 'function' ? this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement;\n\n $tip\n .detach()\n .css({\n top: 0,\n left: 0,\n display: 'block'\n })\n .data('bs.' + this.type, this);\n\n if (this.options.variant) {\n var variants = this.options.variant.split(' ');\n\n for (var i = 0; i < variants.length; i++) {\n var variant = variants[i];\n\n if (variant && variant != 'default') {\n $tip.addClass('popover--' + variant);\n if (variant == 'blue') {\n $tip.find('.popover__arrow').removeClass('popover__arrow').addClass('popover__arrow-triangle');\n }\n }\n }\n }\n\n if (this.options.class) {\n var classes = this.options.class.split(' ');\n\n for (var j = 0; j < classes.length; j++) {\n var oneclass = classes[j];\n\n if (oneclass) {\n $tip.addClass(oneclass);\n }\n }\n }\n\n if (this.$element.closest('.modal').length) {\n if (this.options.container == Tooltip.DEFAULTS.container) {\n this.options.container = this.$element.closest('.modal');\n }\n }\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element);\n this.$element.trigger('inserted.bs.' + this.type);\n\n var pos = this.getPosition();\n var actualWidth = $tip[0].offsetWidth;\n var actualHeight = $tip[0].offsetHeight;\n var tp;\n var fallbackPosition = 'top';\n\n // Get positions\n var tpt = {\n top: pos.top - actualHeight,\n left: pos.left + pos.width / 2 - actualWidth / 2\n };\n var tpb = {\n top: pos.top + pos.height,\n left: pos.left + pos.width / 2 - actualWidth / 2\n };\n var tpl = {\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left - actualWidth\n };\n var tpr = {\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left + pos.width\n };\n\n var headerHeight = 0;\n\n if (!this.$tip.hasClass('popover--top') && $('.header').length) {\n headerHeight = $('.header').height();\n }\n // Get position room\n var hast = (tpt.top > $(window).scrollTop() + headerHeight);\n var hasb = ((tpb.top + actualHeight) < ($(window).scrollTop() + $(window).height()));\n var hasl = (tpl.left > $(window).scrollLeft());\n var hasr = ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width()));\n\n switch (placement) {\n case 'top':\n if (!hast) {\n if (hasb) {\n placement = 'bottom';\n } else if (hasr) {\n placement = 'right';\n } else if (hasl) {\n placement = 'left';\n } else {\n placement = fallbackPosition;\n }\n }\n break;\n case 'bottom':\n if (!hasb) {\n if (hast) {\n placement = 'top';\n } else if (hasr) {\n placement = 'right';\n } else if (hasl) {\n placement = 'left';\n } else {\n placement = fallbackPosition;\n }\n }\n break;\n case 'left':\n if (!hasl) {\n if (hasr) {\n placement = 'right';\n } else if (hast) {\n placement = 'top';\n } else if (hasb) {\n placement = 'bottom';\n } else {\n placement = fallbackPosition;\n }\n }\n break;\n case 'right':\n if (!hasr) {\n if (hasl) {\n placement = 'left';\n } else if (hast) {\n placement = 'top';\n } else if (hasb) {\n placement = 'bottom';\n } else {\n placement = fallbackPosition;\n }\n }\n break;\n }\n\n switch (placement) {\n case 'top':\n tp = tpt;\n break;\n case 'bottom':\n tp = tpb;\n break;\n case 'left':\n tp = tpl;\n break;\n case 'right':\n tp = tpr;\n break;\n }\n\n this.applyPlacement(tp, placement);\n\n $tip.addClass(placement);\n\n if ($.support.transition && this.$tip.hasClass('popover--fade')) {\n $tip.one('bsTransitionEnd', complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION);\n } else {\n complete();\n }\n }\n };\n\n Tooltip.prototype.applyPlacement = function(offset, placement) {\n var $tip = this.tip();\n var width = $tip[0].offsetWidth;\n var height = $tip[0].offsetHeight;\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10);\n var marginLeft = parseInt($tip.css('margin-left'), 10);\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0;\n if (isNaN(marginLeft)) marginLeft = 0;\n\n offset.top += marginTop;\n offset.left += marginLeft;\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function(props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n });\n }\n }, offset), 0);\n\n $tip.addClass('popover--visible');\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth;\n var actualHeight = $tip[0].offsetHeight;\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight;\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight);\n\n if (delta.left) offset.left += delta.left;\n else offset.top += delta.top;\n\n var isVertical = (/top|bottom/).test(placement);\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight;\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';\n\n if (!this.options.onload) {\n $tip.offset(offset);\n }\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical);\n };\n\n Tooltip.prototype.replaceArrow = function(delta, dimension, isVertical) {\n if (!this.options.onload) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '');\n }\n };\n\n Tooltip.prototype.setContent = function() {\n var $tip = this.tip();\n var title = this.getTitle();\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title);\n $tip.removeClass('popover--fade popover--visible top bottom left right');\n };\n\n Tooltip.prototype.hide = function(callback) {\n var that = this;\n var $tip = $(this.$tip);\n var e = $.Event('hide.bs.' + this.type);\n\n function complete() {\n if (that.hoverState != 'popover--visible') $tip.detach();\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type);\n callback && callback();\n }\n\n if (this.$tip) {\n $(document).off('keyup.telia.tooltip.' + this.$tip[0].id);\n }\n this.$element.trigger(e);\n\n if (e.isDefaultPrevented()) return;\n\n $tip.removeClass('popover--visible');\n\n if ($.support.transition && $tip.hasClass('popover--fade')) {\n $tip.one('bsTransitionEnd', complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION);\n } else {\n complete();\n }\n\n this.hoverState = null;\n\n return this;\n };\n\n Tooltip.prototype.fixTitle = function() {\n var $e = this.$element;\n\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '');\n }\n };\n\n Tooltip.prototype.hasContent = function() {\n return this.getTitle();\n };\n\n Tooltip.prototype.getPosition = function($element) {\n $element = $element || this.$element;\n\n var el = $element[0];\n var isBody = el.tagName == 'BODY';\n\n var elRect = el.getBoundingClientRect();\n\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, {\n width: elRect.right - elRect.left,\n height: elRect.bottom - elRect.top\n });\n }\n var elOffset = isBody ? {\n top: 0,\n left: 0\n } : $element.offset();\n var scroll = {\n scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop()\n };\n var outerDims = isBody ? {\n width: $(window).width(),\n height: $(window).height()\n } : null;\n\n return $.extend({}, elRect, scroll, outerDims, elOffset);\n };\n\n Tooltip.prototype.getCalculatedOffset = function(placement, pos, actualWidth, actualHeight) {\n var ret = {\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left + pos.width\n };\n\n if (placement == 'bottom') {\n ret = {\n top: pos.top + pos.height,\n left: pos.left + pos.width / 2 - actualWidth / 2\n };\n } else if (placement == 'top') {\n ret = {\n top: pos.top - actualHeight,\n left: pos.left + pos.width / 2 - actualWidth / 2\n };\n } else if (placement == 'left') {\n ret = {\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left - actualWidth\n };\n }\n\n return ret;\n };\n\n Tooltip.prototype.getViewportAdjustedDelta = function(placement, pos, actualWidth, actualHeight) {\n var delta = {\n top: 0,\n left: 0\n };\n\n if (!this.$viewport) return delta;\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0;\n var viewportDimensions = this.getPosition(this.$viewport);\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll;\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight;\n\n if (topEdgeOffset < viewportDimensions.top) {\n // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset;\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) {\n // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding;\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth;\n\n if (leftEdgeOffset < viewportDimensions.left) {\n // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset;\n } else if (rightEdgeOffset > viewportDimensions.right) {\n // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset;\n }\n }\n\n return delta;\n };\n\n Tooltip.prototype.getTitle = function() {\n var title;\n var $e = this.$element;\n var o = this.options;\n\n title = $e.attr('data-original-title') ||\n (typeof o.title == 'function' ? o.title.call($e[0]) : o.title);\n\n return title;\n };\n\n Tooltip.prototype.getUID = function(prefix) {\n do prefix += ~~(Math.random() * 1000000);\n while (document.getElementById(prefix));\n\n return prefix;\n };\n\n Tooltip.prototype.tip = function() {\n if (!this.$tip) {\n this.$tip = $(this.options.template);\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!');\n }\n }\n\n return this.$tip;\n };\n\n Tooltip.prototype.arrow = function() {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'));\n };\n\n Tooltip.prototype.enable = function() {\n this.enabled = true;\n };\n\n Tooltip.prototype.disable = function() {\n this.enabled = false;\n };\n\n Tooltip.prototype.toggleEnabled = function() {\n this.enabled = !this.enabled;\n };\n\n Tooltip.prototype.toggle = function(e) {\n var self = this;\n\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type);\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions());\n $(e.currentTarget).data('bs.' + this.type, self);\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click;\n if (self.isInStateTrue()) self.enter(self);\n else self.leave(self);\n } else {\n self.tip().hasClass('popover--visible') ? self.leave(self) : self.enter(self);\n }\n };\n\n Tooltip.prototype.keyboard = function(event) {\n if (event.keyCode == 27) {\n this.hide();\n }\n },\n\n Tooltip.prototype.destroy = function() {\n var that = this;\n\n clearTimeout(this.timeout);\n this.hide(function() {\n that.$element.off('.' + that.type).removeData('bs.' + that.type);\n if (that.$tip) {\n that.$tip.detach();\n }\n that.$tip = null;\n that.$arrow = null;\n that.$viewport = null;\n });\n };\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function() {\n var $this = $(this);\n var data = $this.data('bs.tooltip');\n var options = typeof option == 'object' && option;\n\n if (!data && (/destroy|hide/).test(option)) return;\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)));\n if (typeof option == 'string') data[option]();\n });\n }\n\n var old = $.fn.tooltip;\n\n $.fn.tooltip = Plugin;\n $.fn.tooltip.Constructor = Tooltip;\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function() {\n $.fn.tooltip = old;\n\n return this;\n };\n}(jQuery);\n\n/* ========================================================================\n* Bootstrap: popover.js v3.3.6\n* http://getbootstrap.com/javascript/#popovers\n* ========================================================================\n* Copyright 2011-2015 Twitter, Inc.\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n* ======================================================================== */\n\n+function($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n function Popover(element, options) {\n this.init('popover', element, options);\n };\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js');\n\n Popover.VERSION = '3.3.6';\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'top',\n trigger: 'click',\n content: '',\n template: '

    '\n });\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype);\n\n Popover.prototype.constructor = Popover;\n\n Popover.prototype.getDefaults = function() {\n return Popover.DEFAULTS;\n };\n\n Popover.prototype.setContent = function() {\n var $tip = this.tip();\n var title = this.getTitle();\n var content = this.getContent();\n var $title = $tip.find('.popover__title');\n\n $title[this.options.html ? 'html' : 'text'](title);\n if (this.options.titleSize) {\n $title.addClass(this.options.titleSize);\n }\n if (this.options.html == 'object') {\n content = $(this.$element.data('content')).html();\n $tip.find('.popover__content').children().detach().end()['html'](content);\n } else {\n var method = 'text';\n\n // we use append for html objects to maintain js events\n if (this.options.html) {\n method = typeof content == 'string' ? 'html' : 'append';\n }\n $tip.find('.popover__content').children().detach().end()[method](content);\n }\n\n $tip.removeClass('popover--fade top bottom left right popover--visible');\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$title.html()) $title.hide();\n };\n\n Popover.prototype.hasContent = function() {\n return this.getTitle() || this.getContent();\n };\n\n Popover.prototype.getContent = function() {\n var $e = this.$element;\n var o = this.options;\n\n return $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content);\n };\n\n Popover.prototype.arrow = function() {\n return (this.$arrow = this.$arrow || this.tip().find('.popover__arrow, .popover__arrow-triangle'));\n };\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function() {\n var $this = $(this);\n var data = $this.data('bs.popover');\n var options = typeof option == 'object' && option;\n\n if (!data && (/destroy|hide/).test(option)) return;\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)));\n if (typeof option == 'string') data[option]();\n });\n }\n\n var old = $.fn.popover;\n\n $.fn.popover = Plugin;\n $.fn.popover.Constructor = Popover;\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function() {\n $.fn.popover = old;\n\n return this;\n };\n}(jQuery);\n\nfunction initPopover() {\n $(document).trigger('enhance.tooltip');\n}\nwindow.initPopover = initPopover;\n\n$(document).on('enhance.tooltip', function(event) {\n var initSelector = '[data-toggle=\"popover\"]';\n\n $(event.target).find(initSelector).each(function() {\n var self = $(this);\n\n self.popover();\n\n if (self.data('onload')) {\n self.popover('show');\n }\n });\n\n var popoverResizeTimer;\n var cachedWindowWidth = $(window).width();\n\n $(window).on('resize', function() {\n var newWindowWidth = $(window).width();\n\n if (newWindowWidth != cachedWindowWidth) {\n clearTimeout(popoverResizeTimer);\n popoverResizeTimer = setTimeout(function() {\n $('.popover').each(function() {\n var $this = $(this);\n\n if ($this.is(':visible')) {\n $this.addClass('popover--reset-transition');\n $('#' + $this.attr('id')).popover('show');\n $this.removeClass('popover--reset-transition');\n }\n });\n }, 300);\n\n cachedWindowWidth = newWindowWidth;\n }\n });\n\n $(document).on('click touchstart', function(e) {\n $(initSelector).each(function() {\n if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {\n $(this).popover('hide');\n }\n });\n });\n\n $(document).on('hidden.bs.popover', function(e) {\n $(e.target).data('bs.popover').inState.click = false;\n });\n});\n\n$(function() {\n $(document).trigger('enhance.tooltip');\n});\n","$(function() {\n var lazyloadResizeTimer;\n\n $('.lazyload').on('load', function() {\n clearTimeout(lazyloadResizeTimer);\n lazyloadResizeTimer = setTimeout(function() {\n $(window).trigger('resize');\n }, 250);\n });\n});\n\n/*! track-focus v 1.0.0 | Author: Jeremy Fields [jeremy.fields@vget.com], 2015 | License: MIT */\n// inspired by: http://irama.org/pkg/keyboard-focus-0.3/jquery.keyboard-focus.js\n\n(function(body) {\n var usingMouse;\n\n function preFocus(event) {\n usingMouse = (event.type === 'mousedown');\n };\n\n function addFocus(event) {\n if (usingMouse) event.target.classList.add('is-focus-hidden');\n };\n\n function removeFocus(event) {\n event.target.classList.remove('is-focus-hidden');\n };\n\n function bindEvents() {\n body.addEventListener('keydown', preFocus);\n body.addEventListener('mousedown', preFocus);\n body.addEventListener('focusin', addFocus);\n body.addEventListener('focusout', removeFocus);\n };\n\n bindEvents();\n})(document.body);\n\nfunction disableScroll(hideScrollbar) {\n if (!$('body').hasClass('scroll-disabled')) {\n var curScroll = $(window).scrollTop();\n\n $('body').addClass('scroll-disabled');\n if (hideScrollbar) {\n $('body').addClass('scroll-disabled--hide-scrollbar');\n }\n $('body').css('top', -curScroll);\n }\n}\n\nfunction enableScroll() {\n var bodyScroll = parseInt($('body').css('top'), 10);\n\n $('body').removeClass('scroll-disabled scroll-disabled--hide-scrollbar');\n if (bodyScroll) {\n $(window).scrollTop(-bodyScroll);\n $('body').css('top', 0);\n }\n}\n\nwindow.disableScroll = disableScroll;\nwindow.enableScroll = enableScroll;\n\n$.fn.isOnScreen = function(threshold) {\n var win = $(window);\n\n var viewport = {\n top: win.scrollTop(),\n left: win.scrollLeft()\n };\n\n viewport.right = viewport.left + win.width();\n viewport.bottom = viewport.top + win.height();\n\n var bounds = this.offset();\n\n bounds.right = bounds.left + this.outerWidth();\n bounds.bottom = bounds.top + this.outerHeight();\n\n return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top + threshold || viewport.top > bounds.bottom));\n};\n\nfunction hashTrigger() {\n var hashes;\n var hash = window.location.hash;\n\n if (!hash) {\n return;\n }\n\n hashes = hash.split('/');\n\n $.each(hashes, function(index, value) {\n if (value.indexOf('?') !== 0 && value.length != 1 && value.length != 0) {\n if (value.charAt(0) != '#') {\n value = '#' + value;\n }\n var first = $('[data-target=\"' + value + '\"][data-toggle],[href=\"' + value + '\"][data-toggle], .sidemenu__link[href=\"' + value + '\"], .tabs__link[href=\"' + value + '\"], .tabs__accordion-link[href=\"' + value + '\"]').first();\n\n first.trigger('click');\n }\n });\n}\nwindow.hashTrigger = hashTrigger;\n$(function() {\n hashTrigger();\n});\n\n/**\nChildNode.remove() polyfill.\nFrom: https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n*/\n(function(arr) {\n arr.forEach(function(item) {\n item.remove = item.remove || function() {\n this.parentNode.removeChild(this);\n };\n });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n"]}