{"version":3,"sources":["apolyfill_Array.includes.js","apolyfill_Function.name.js","aPolyfill_promise.min.js","apolyfill_String.endsWith.js","apolyfill_String.includes.js","apolyfill_String.startsWith.js","behaviors.js","functions.js","header.js","wow.js","AnimatedBackgrounds/AtlasPlayer.js","Animations/Animations.js","AffixColumn/AffixColumn.js","CollapseContent/collapse_content.js","ChangeOnHover/ChangeOnHover.js","ContentSlider/ContentSlider.js","Depaginate/depaginate.js","GoogleMap/GoogleMap.js","Offcanvas/betteroffcanvas.js","PageTransition/page_transition.js","ScrollEffects/ScrollEffects.js","StaffGrid/StaffGrid.js","SiteHeader/AccountSlideIn.js","SiteHeader/SiteHeader.js","TabbedContent/tabbed_content.js","VideoPlayer/VideoPlayer.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ECjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MCtHA,6lFCAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ECPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ECbA;AACA;AACA;AACA;AACA,ECJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CChVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ECjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCjgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCzZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CClcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KCpTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KCjsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KCnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CC/6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CC7ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CCtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":"../script.js","sourcesContent":["// From https://github.com/kevlatus/polyfill-array-includes/blob/master/array-includes.js\r\nif (!Array.prototype.includes) {\r\n Object.defineProperty(Array.prototype, 'includes', {\r\n value: function (searchElement, fromIndex) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If len is 0, return false.\r\n if (len === 0) {\r\n return false;\r\n }\r\n\r\n // 4. Let n be ? ToInteger(fromIndex).\r\n // (If fromIndex is undefined, this step produces the value 0.)\r\n var n = fromIndex | 0;\r\n\r\n // 5. If n ≥ 0, then\r\n // a. Let k be n.\r\n // 6. Else n < 0,\r\n // a. Let k be len + n.\r\n // b. If k < 0, let k be 0.\r\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n function sameValueZero(x, y) {\r\n return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));\r\n }\r\n\r\n // 7. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let elementK be the result of ? Get(O, ! ToString(k)).\r\n // b. If SameValueZero(searchElement, elementK) is true, return true.\r\n // c. Increase k by 1.\r\n if (sameValueZero(o[k], searchElement)) {\r\n return true;\r\n }\r\n k++;\r\n }\r\n\r\n // 8. Return false\r\n return false;\r\n }\r\n });\r\n}","//https://github.com/JamesMGreene/Function.name/blob/master/Function.name.js\r\n(function() {\r\n\r\nvar fnNameMatchRegex = /^\\s*function\\s+([^\\(\\s]*)\\s*/;\r\n\r\nfunction _name() {\r\n var match, name;\r\n if (this === Function || this === Function.prototype.constructor) {\r\n name = \"Function\";\r\n }\r\n else if (this !== Function.prototype) {\r\n match = (\"\" + this).match(fnNameMatchRegex);\r\n name = match && match[1];\r\n }\r\n return name || \"\";\r\n}\r\n\r\n// Inspect the polyfill-ability of this browser\r\nvar needsPolyfill = !(\"name\" in Function.prototype && \"name\" in (function x() {}));\r\nvar canDefineProp = typeof Object.defineProperty === \"function\" &&\r\n (function() {\r\n var result;\r\n try {\r\n Object.defineProperty(Function.prototype, \"_xyz\", {\r\n get: function() {\r\n return \"blah\";\r\n },\r\n configurable: true\r\n });\r\n result = Function.prototype._xyz === \"blah\";\r\n delete Function.prototype._xyz;\r\n }\r\n catch (e) {\r\n result = false;\r\n }\r\n return result;\r\n })();\r\nvar canDefineGetter = typeof Object.prototype.__defineGetter__ === \"function\" &&\r\n (function() {\r\n var result;\r\n try {\r\n Function.prototype.__defineGetter__(\"_abc\", function() {\r\n return \"foo\";\r\n });\r\n result = Function.prototype._abc === \"foo\";\r\n delete Function.prototype._abc;\r\n }\r\n catch (e) {\r\n result = false;\r\n }\r\n return result;\r\n })();\r\n\r\n\r\n\r\n// Add the \"private\" property for testing, even if the real property can be polyfilled\r\nFunction.prototype._name = _name;\r\n\r\n\r\n// Polyfill it!\r\n// For:\r\n// * IE >=9 <12\r\n// * Chrome <33\r\nif (needsPolyfill) {\r\n // For:\r\n // * IE >=9 <12\r\n // * Chrome >=5 <33\r\n if (canDefineProp) {\r\n Object.defineProperty(Function.prototype, \"name\", {\r\n get: function() {\r\n var name = _name.call(this);\r\n\r\n // Since named function definitions have immutable names, also memoize the\r\n // output by defining the `name` property directly on this Function\r\n // instance so that this polyfill will not need to be invoked again\r\n if (this !== Function.prototype) {\r\n Object.defineProperty(this, \"name\", {\r\n value: name,\r\n configurable: true\r\n });\r\n }\r\n\r\n return name;\r\n },\r\n configurable: true\r\n });\r\n }\r\n // For:\r\n // * Chrome <5\r\n else if (canDefineGetter) {\r\n // NOTE:\r\n // The snippet:\r\n //\r\n // x.__defineGetter__('y', z);\r\n //\r\n // ...is essentially equivalent to:\r\n //\r\n // Object.defineProperty(x, 'y', {\r\n // get: z,\r\n // configurable: true, // <-- key difference #1\r\n // enumerable: true // <-- key difference #2\r\n // });\r\n //\r\n Function.prototype.__defineGetter__(\"name\", function() {\r\n var name = _name.call(this);\r\n\r\n // Since named function definitions have immutable names, also memoize the\r\n // output by defining the `name` property directly on this Function\r\n // instance so that this polyfill will not need to be invoked again\r\n if (this !== Function.prototype) {\r\n this.__defineGetter__(\"name\", function() { return name; });\r\n }\r\n\r\n return name;\r\n });\r\n }\r\n}\r\n\r\n})();","!function(e){function n(){}function t(e,n){return function(){e.apply(n,arguments)}}function o(e){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof e)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],s(e,this)}function i(e,n){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(n):(e._handled=!0,void o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null===t)return void(1===e._state?r:u)(n.promise,e._value);var o;try{o=t(e._value)}catch(i){return void u(n.promise,i)}r(n.promise,o)}))}function r(e,n){try{if(n===e)throw new TypeError(\"A promise cannot be resolved with itself.\");if(n&&(\"object\"==typeof n||\"function\"==typeof n)){var i=n.then;if(n instanceof o)return e._state=3,e._value=n,void f(e);if(\"function\"==typeof i)return void s(t(i,n),e)}e._state=1,e._value=n,f(e)}catch(r){u(e,r)}}function u(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;n this.length) {\r\n this_len = this.length;\r\n }\r\n return this.substring(this_len - search.length, this_len) === search;\r\n };\r\n}","if (!String.prototype.includes) {\r\n String.prototype.includes = function(search, start) {\r\n 'use strict';\r\n if (typeof start !== 'number') {\r\n start = 0;\r\n }\r\n\r\n if (start + search.length > this.length) {\r\n return false;\r\n } else {\r\n return this.indexOf(search, start) !== -1;\r\n }\r\n };\r\n}","if (!String.prototype.startsWith) {\r\n String.prototype.startsWith = function(search, pos) {\r\n return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\r\n };\r\n}","/*global define, window, document*/\r\n\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"Behaviors\", [\"jquery\"], factory);\r\n } else {\r\n root.Behaviors = factory(root.jQuery);\r\n }\r\n}(this, function ($) {\r\n \"use strict\";\r\n\r\n var module = {},\r\n behavior_registry = {},\r\n content_ready_listeners = [],\r\n ElementMissingError = error(\"ElementMissingError\");\r\n \r\n /* Throttle an event handler.\r\n *\r\n * Returns a function which, no matter how frequently it's called, will\r\n * only trigger a maximum of once per timeout period. More specifically,\r\n * the first event will always be processed, then, no events will process\r\n * until the end of the timeout period. If one or more events occurred\r\n * during this period, the last event recieved will trigger immediately\r\n * after the end of the timeout period, as well as restart the throttling\r\n * period. Any preceding events will be discarded.\r\n *\r\n * Not to be confused with a debounce, which only fires the event handler\r\n * at the end of a string of events spaced closer than the timeout period.\r\n *\r\n * The nature of this function means that any passed in function's return\r\n * value will be discarded.\r\n */\r\n function throttle_single(func, timeout) {\r\n var lastTimeout, afterLastArgs, afterLastThis;\r\n\r\n function unthrottle() {\r\n if (afterLastArgs !== undefined) {\r\n func.apply(afterLastThis, afterLastArgs);\r\n afterLastArgs = undefined;\r\n lastTimeout = window.setTimeout(unthrottle, timeout);\r\n } else {\r\n lastTimeout = undefined;\r\n }\r\n }\r\n\r\n return function () {\r\n var myThis = this, myArgs = [], i;\r\n\r\n for (i = 0; i < arguments.length; i += 1) {\r\n myArgs.push(arguments[i]);\r\n }\r\n\r\n if (lastTimeout === undefined) {\r\n func.apply(myThis, myArgs);\r\n lastTimeout = window.setTimeout(unthrottle, timeout);\r\n } else {\r\n afterLastArgs = myArgs;\r\n afterLastThis = myThis;\r\n }\r\n };\r\n }\r\n\r\n function Behavior(elem) {\r\n //Do something to elem\r\n this.$elem = $(elem);\r\n }\r\n\r\n /* Find a behavior's markup.\r\n *\r\n * The $context argument passed to this function is the jQuery element that\r\n * will be searched for behaviors. Any additional arguments will be passed\r\n * to Behavior.locate and ultimately to the behavior's constructor.\r\n */\r\n Behavior.find_markup = function ($context) {\r\n var results = [], i, splitArgs = [], Class = this;\r\n\r\n for (i = 1; i < arguments.length; i += 1) {\r\n splitArgs.push(arguments[i]);\r\n }\r\n \r\n function processElem(index, elem) {\r\n var locateArgs = [elem].concat(splitArgs);\r\n\r\n results.push(Class.locate.apply(Class, locateArgs));\r\n }\r\n \r\n $context.filter(Class.QUERY).each(processElem);\r\n $context.find(Class.QUERY).each(processElem);\r\n\r\n return results;\r\n };\r\n\r\n /* Locate a behavior onto an element, returning an instance of that\r\n * behavior that you can work with.\r\n *\r\n * A behavior locates onto an element by instantiating an instance of\r\n * itself and installing it onto the markup's jQuery data. Therefore, we\r\n * will only instantiate that behavior once; and further calls to .locate\r\n * instead return the same object. Thus, it is safe to use .locate as a\r\n * general accessor - it is idempotent.\r\n *\r\n * The elem argument indicates the element that the behavior should locate\r\n * onto. Further arguments are passed onto the constructor.\r\n *\r\n * TODO: Is there a non-jQuery way of handling this?\r\n */\r\n Behavior.locate = function (elem, ...objectArgs) {\r\n var $elem = $(elem), new_object, i, Class = this,\r\n rc = $elem.data(\"behaviors-registered-classes\");\r\n \r\n if ($elem.length === 0) {\r\n throw new ElementMissingError(\"Attempted to locate a Behavior onto an empty element query.\");\r\n }\r\n\r\n if (rc === undefined) {\r\n rc = {};\r\n }\r\n\r\n if (rc[Class.QUERY] === undefined) {\r\n rc[Class.QUERY] = new Class(elem, ...objectArgs);\r\n } else {\r\n new_object = rc[Class.QUERY];\r\n }\r\n\r\n $elem.data(\"behaviors-registered-classes\", rc);\r\n\r\n return new_object;\r\n };\r\n\r\n /* Respond to the presence of new content on the page.\r\n *\r\n * By default, we attempt to find markup on all children of the context.\r\n * Subclasses may do something crazier, like say delay behavior processing\r\n * until some third-party API is loaded.\r\n *\r\n * Consider this roughly equivalent to $(document).ready() callbacks.\r\n */\r\n Behavior.content_ready = function ($context) {\r\n var Class = this;\r\n\r\n Class.find_markup($context);\r\n };\r\n \r\n /* Respond to the impending removal of content from the page.\r\n * \r\n * Most behaviors that only attach event handlers to their own content are\r\n * safe and do not need to implement content removal support: they will\r\n * inherently \"fall away\".\r\n * \r\n * However, behaviors that run a constant animation kernel or attach event\r\n * handlers to elements outside of their own ownership must provide a\r\n * mechanism to detach those event handlers and stop those kernels.\r\n */\r\n Behavior.content_removal = function ($context) {\r\n var Class = this,\r\n $attached_elems = $context.find(Class.QUERY);\r\n \r\n //Iterate through each element and see if our behavior has located upon\r\n //them. We don't just call .find_markup/.locate since we don't want to\r\n //risk initializing something just to tear it down one cycle later.\r\n $attached_elems.each(function (index, attach_elem) {\r\n var $elem = $(attach_elem),\r\n rc = $elem.data(\"behaviors-registered-classes\");\r\n \r\n if (rc === undefined) {\r\n return;\r\n }\r\n \r\n if (rc[Class.QUERY] === undefined) {\r\n return;\r\n }\r\n \r\n if (rc[Class.QUERY].deinitialize === undefined) {\r\n return;\r\n }\r\n \r\n rc[Class.QUERY].deinitialize();\r\n });\r\n };\r\n\r\n /* Register a behavior so that it can respond to global events such as new\r\n * content becoming ready.\r\n *\r\n * It is not always appropriate to register your behavior to recieve load\r\n * events. Generally, if this is a behavior you would initialize yourself,\r\n * perhaps with special arguments, then you should not register that here.\r\n */\r\n function register_behavior(Class, name) {\r\n if (name === undefined) {\r\n name = Class.QUERY;\r\n }\r\n\r\n if (behavior_registry[name] === Class) {\r\n console.warn(\"Attempted to register the same behavior twice to the same CSS selector \\\"\" + name + \"\\\".\");\r\n return;\r\n } else if (behavior_registry[name] !== undefined) {\r\n console.error(\"Attempted to register a second behavior onto CSS selector \\\"\"\r\n + name + \"\\\". Only one behavior may be registered to a given CSS selector \"\r\n + \"at a given time. The offending classes are \" + Class.name\r\n + \" and \" + behavior_registry[name].name + \".\");\r\n \r\n return;\r\n }\r\n\r\n behavior_registry[name] = Class;\r\n }\r\n \r\n /* Register a function that is called when content is ready.\r\n * \r\n * This function should only be used for things that are not a Behavior.\r\n * Proper behaviors should be registered using register_behavior for future\r\n * uses. Non-behavior listeners get registered here so that future uses of\r\n * behavior registration do not conflict with non-Behavior listeners.\r\n */\r\n function register_content_listener(func) {\r\n content_ready_listeners.push(func);\r\n }\r\n\r\n /* Indicate that some new content is ready.\r\n *\r\n * The given content will be passed onto all registered behaviors.\r\n *\r\n * CMS/frameworks with their own ready mechanism will need to ship their\r\n * own replacement/wrapper for this function that pushes calls to this\r\n * function over to that mechanism; and calls from that mechanism need to\r\n * come back here.\r\n */\r\n function content_ready($context) {\r\n var k, i;\r\n \r\n function do_later(obj, func) {\r\n window.setTimeout(func.bind(obj, $context), 0);\r\n }\r\n \r\n for (i = 0; i < content_ready_listeners.length; i += 1) {\r\n do_later(undefined, content_ready_listeners[i]);\r\n }\r\n\r\n for (k in behavior_registry) {\r\n if (behavior_registry.hasOwnProperty(k)) {\r\n do_later(behavior_registry[k], behavior_registry[k].content_ready);\r\n }\r\n }\r\n }\r\n \r\n /* Indicate that content is about to be removed.\r\n * \r\n * Registered behaviors with destructors will be called upon to remove any\r\n * external event handlers or animation kernels preventing them from being\r\n * terminated by the JS runtime.\r\n * \r\n * TODO: Add content_removal listener functions.\r\n */\r\n function content_removal($context) {\r\n var k, i;\r\n \r\n function do_later(obj, func) {\r\n window.setTimeout(func.bind(obj, $context), 0);\r\n }\r\n \r\n for (k in behavior_registry) {\r\n if (behavior_registry.hasOwnProperty(k)) {\r\n do_later(behavior_registry[k], behavior_registry[k].content_removal);\r\n }\r\n }\r\n }\r\n \r\n function error(error_class_name, ParentClass) {\r\n if (error_class_name === undefined) {\r\n throw new Error(\"Please name your error subclass.\");\r\n }\r\n\r\n if (!(ParentClass instanceof Function)) {\r\n ParentClass = Error;\r\n }\r\n\r\n var SubError = function (message) {\r\n var err = new Error(message);\r\n err.name = error_class_name;\r\n\r\n this.name = error_class_name;\r\n this.message = err.message;\r\n if (err.stack) {\r\n this.stack = err.stack;\r\n }\r\n };\r\n\r\n SubError.prototype = new ParentClass(\"u dont c me\");\r\n SubError.prototype.constructor = SubError;\r\n SubError.prototype.name = error_class_name;\r\n\r\n delete SubError.prototype.stack;\r\n\r\n return SubError;\r\n }\r\n \r\n function inherit(ChildClass, ParentClass) {\r\n var k;\r\n\r\n //Use the prototyping system to copy methods from parent to child.\r\n ChildClass.prototype = Object.create(ParentClass.prototype);\r\n ChildClass.prototype.constructor = ChildClass;\r\n ChildClass.prototype.parent = ParentClass.prototype;\r\n\r\n //Manually copy class-level methods from parent to child.\r\n for (k in ParentClass) {\r\n if (ParentClass.hasOwnProperty(k)) {\r\n ChildClass[k] = ParentClass[k];\r\n }\r\n }\r\n }\r\n\r\n function init(ChildClass, object, args) {\r\n ChildClass.prototype.parent.constructor.apply(object, args);\r\n }\r\n \r\n /* By default, report the initial page load to registered behaviors.\r\n */\r\n $(document).ready(function () {\r\n content_ready($(document));\r\n });\r\n \r\n module.ElementMissingError = ElementMissingError;\r\n module.throttle_single = throttle_single;\r\n module.Behavior = Behavior;\r\n module.error = error;\r\n module.inherit = inherit;\r\n module.init = init;\r\n module.register_behavior = register_behavior;\r\n module.content_ready = content_ready;\r\n module.content_removal = content_removal;\r\n module.register_content_listener = register_content_listener;\r\n\r\n return module;\r\n}));\r\n","/**\r\n * Function used to get the height of the admin bar in pixels.\r\n *\r\n * @return {int} The height of the admin bar (in pixels)\r\n */\r\n function get_wp_admin_bar_height(){\r\n // Start by getting the admin bar\r\n var admin_bar = document.getElementById( 'wpadminbar' );\r\n // If the admin bar doesn't exist, just return zero\r\n if ( !admin_bar ){\r\n return 0;\r\n }\r\n // Otherwise, get the current height\r\n else {\r\n return admin_bar.offsetHeight;\r\n }\r\n}\r\n\r\n/**\r\n * Function for registering callbacks based on a window resize.\r\n *\r\n * @param {Function} callback The callback\r\n * @param {object} context The context for the callback\r\n * @param {int} window_resize_timeout The timeout for the window resize\r\n *\r\n * @return {void} \r\n */\r\n function bind_callback_to_window_resize(callback, context, window_resize_timeout){\r\n if ( !window_resize_timeout ){\r\n window_resize_timeout = 500;\r\n }\r\n // To allow for the timeout\r\n var id;\r\n window.addEventListener(\"resize\", function(){\r\n // Clear the timeout\r\n clearTimeout(id);\r\n // Create the function and callback\r\n id = setTimeout(function(){\r\n callback.call(context);\r\n }, window_resize_timeout);\r\n });\r\n}\r\n\r\n/**\r\n * Function used to get the height of the header in pixels.\r\n *\r\n * @return {int} The height of the header (in pixels)\r\n */\r\n function get_header_height(){\r\n // Start by getting the header\r\n var header = document.querySelector( 'header' );\r\n return header.offsetHeight;\r\n}\r\n\r\n/**\r\n * Function used to determine if the header is sticky or not.\r\n *\r\n * @return {bool} True if the header is sticky\r\n */\r\n function header_is_sticky(){\r\n // Start by getting the header\r\n var header = document.querySelector( 'header' );\r\n // Get the classes attached to the header\r\n header_classes = header.classList;\r\n return header_classes.contains( 'fl-theme-builder-header-sticky' );\r\n}","\r\njQuery(function() {\r\n\r\n var $window = jQuery(window);\r\n var lastScrollTop = 0;\r\n var $header = jQuery('header');\r\n var headerHeight = $header.outerHeight();\r\n\r\n $window.scroll(function() {\r\n\r\n var windowTop = $window.scrollTop();\r\n\r\n if ( windowTop >= headerHeight ) {\r\n $header.addClass( 'header-sticky' );\r\n } else {\r\n $header.removeClass( 'header-sticky' );\r\n $header.removeClass( 'header-show' );\r\n }\r\n \r\n if ( $header.hasClass( 'header-sticky' ) ) {\r\n if ( windowTop < lastScrollTop ) {\r\n $header.addClass( 'header-show' );\r\n } else {\r\n $header.removeClass( 'header-show' );\r\n }\r\n }\r\n \r\n lastScrollTop = windowTop;\r\n } );\r\n});\r\n\r\n// jQuery(\".Header-Menu-Main ul\").hover(function(){\r\n// jQuery(\".fl-page-content\").toggleClass(\"background-overly\");\r\n// });\r\n\r\n\r\njQuery( \".Header-Menu-Main ul\" ).hover(\r\n function() {\r\n jQuery(\".fl-page-content\").addClass( \"background-overly\" );\r\n }, function() {\r\n jQuery(\".fl-page-content\" ).removeClass( \"background-overly\" );\r\n }\r\n);\r\n\r\njQuery(\".Header-Menu-Main ul li a\").hover(function(){\r\n jQuery(\".fl-page-content\").addClass(\"background-overly\");\r\n});\r\n\r\njQuery(\".Header-Menu-Main ul .apply-now-button a\").hover(function(){\r\n jQuery(\".fl-page-content\").removeClass(\"background-overly\");\r\n});\r\n\r\njQuery(function() { \r\n jQuery(\".fl-button-has-icon .fl-button\").click(function(e) { \r\n jQuery(\".fl-menu-search-item .fl-search-form-fields\").addClass(\"is-showing\");\r\n jQuery(\".fl-page-content\").addClass(\"background-overly\");\r\n });\r\n \r\n jQuery(document).on(\"click\", function(e) {\r\n if(jQuery(e.target).is(\".fl-menu-mobile-toggle\") === true){\r\n \r\n jQuery(\".fl-menu-search-item .fl-search-form-fields\").removeClass(\"is-showing\");\r\n jQuery(\".fl-page-content\").removeClass(\"background-overly\");\r\n \r\n }\r\n if(jQuery(e.target).is(\".fl-search-form-fields .fl-button\") === true){\r\n jQuery(\".fl-menu-search-item .fl-search-form-fields\").removeClass(\"is-showing\");\r\n jQuery(\".fl-page-content\").removeClass(\"background-overly\");\r\n }\r\n if (jQuery(e.target).is(\".fl-menu-search-item .fl-search-form-fields *\") === false ) {\r\n jQuery(\".fl-menu-search-item .fl-search-form-fields\").removeClass(\"is-showing\");\r\n jQuery(\".fl-page-content\").removeClass(\"background-overly\");\r\n }\r\n });\r\n });\r\n\r\n\r\n jQuery(document).ready(function() {\r\n jQuery(\".fl-menu-responsive-toggle-medium-mobile button\").click(function(){\r\n \r\n jQuery(\".fl-menu-search-item .fl-search-form-fields\").removeClass(\"is-showing\");\r\n jQuery(\".fl-search-form-input-wrap\").css(\"display\",\"none\");\r\n \r\n }); \r\n jQuery(\".fl-menu-responsive-toggle-medium-mobile button\").click(function(e) { \r\n jQuery(\".fl-page-content\").addClass(\"background-overly\");\r\n if(jQuery(\".fl-menu-responsive-toggle-medium-mobile button\").hasClass(\"fl-active\")){\r\n jQuery(\".fl-page-content\").removeClass(\"background-overly\");\r\n }\r\n });\r\n});\r\n\r\n\r\njQuery(document).ready(function() {\r\n jQuery(\".apply-now-button a\").wrapInner(\"\");\r\n });\r\n\r\n \r\n (function($) {\r\n 'use strict';\r\n\r\n jQuery(document).ready(function() {\r\n // if adminbar exist (should check for visible?) then add margin to our navbar\r\n var $wpAdminBar = $('#wpadminbar');\r\n if ($wpAdminBar.length) {\r\n jQuery('.UniversityOfPeople-Menu').addClass(\"wp_admin_is_showing\");\r\n }\r\n });\r\n})(jQuery);","(function() {\r\n var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,\r\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\r\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\r\n\r\n Util = (function() {\r\n function Util() {}\r\n\r\n Util.prototype.extend = function(custom, defaults) {\r\n var key, value;\r\n for (key in defaults) {\r\n value = defaults[key];\r\n if (custom[key] == null) {\r\n custom[key] = value;\r\n }\r\n }\r\n return custom;\r\n };\r\n\r\n Util.prototype.isMobile = function(agent) {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);\r\n };\r\n\r\n Util.prototype.createEvent = function(event, bubble, cancel, detail) {\r\n var customEvent;\r\n if (bubble == null) {\r\n bubble = false;\r\n }\r\n if (cancel == null) {\r\n cancel = false;\r\n }\r\n if (detail == null) {\r\n detail = null;\r\n }\r\n if (document.createEvent != null) {\r\n customEvent = document.createEvent('CustomEvent');\r\n customEvent.initCustomEvent(event, bubble, cancel, detail);\r\n } else if (document.createEventObject != null) {\r\n customEvent = document.createEventObject();\r\n customEvent.eventType = event;\r\n } else {\r\n customEvent.eventName = event;\r\n }\r\n return customEvent;\r\n };\r\n\r\n Util.prototype.emitEvent = function(elem, event) {\r\n if (elem.dispatchEvent != null) {\r\n return elem.dispatchEvent(event);\r\n } else if (event in (elem != null)) {\r\n return elem[event]();\r\n } else if ((\"on\" + event) in (elem != null)) {\r\n return elem[\"on\" + event]();\r\n }\r\n };\r\n\r\n Util.prototype.addEvent = function(elem, event, fn) {\r\n if (elem.addEventListener != null) {\r\n return elem.addEventListener(event, fn, false);\r\n } else if (elem.attachEvent != null) {\r\n return elem.attachEvent(\"on\" + event, fn);\r\n } else {\r\n return elem[event] = fn;\r\n }\r\n };\r\n\r\n Util.prototype.removeEvent = function(elem, event, fn) {\r\n if (elem.removeEventListener != null) {\r\n return elem.removeEventListener(event, fn, false);\r\n } else if (elem.detachEvent != null) {\r\n return elem.detachEvent(\"on\" + event, fn);\r\n } else {\r\n return delete elem[event];\r\n }\r\n };\r\n\r\n Util.prototype.innerHeight = function() {\r\n if ('innerHeight' in window) {\r\n return window.innerHeight;\r\n } else {\r\n return document.documentElement.clientHeight;\r\n }\r\n };\r\n\r\n return Util;\r\n\r\n })();\r\n\r\n WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {\r\n function WeakMap() {\r\n this.keys = [];\r\n this.values = [];\r\n }\r\n\r\n WeakMap.prototype.get = function(key) {\r\n var i, item, j, len, ref;\r\n ref = this.keys;\r\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\r\n item = ref[i];\r\n if (item === key) {\r\n return this.values[i];\r\n }\r\n }\r\n };\r\n\r\n WeakMap.prototype.set = function(key, value) {\r\n var i, item, j, len, ref;\r\n ref = this.keys;\r\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\r\n item = ref[i];\r\n if (item === key) {\r\n this.values[i] = value;\r\n return;\r\n }\r\n }\r\n this.keys.push(key);\r\n return this.values.push(value);\r\n };\r\n\r\n return WeakMap;\r\n\r\n })());\r\n\r\n MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {\r\n function MutationObserver() {\r\n if (typeof console !== \"undefined\" && console !== null) {\r\n console.warn('MutationObserver is not supported by your browser.');\r\n }\r\n if (typeof console !== \"undefined\" && console !== null) {\r\n console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');\r\n }\r\n }\r\n\r\n MutationObserver.notSupported = true;\r\n\r\n MutationObserver.prototype.observe = function() {};\r\n\r\n return MutationObserver;\r\n\r\n })());\r\n\r\n getComputedStyle = this.getComputedStyle || function(el, pseudo) {\r\n this.getPropertyValue = function(prop) {\r\n var ref;\r\n if (prop === 'float') {\r\n prop = 'styleFloat';\r\n }\r\n if (getComputedStyleRX.test(prop)) {\r\n prop.replace(getComputedStyleRX, function(_, _char) {\r\n return _char.toUpperCase();\r\n });\r\n }\r\n return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;\r\n };\r\n return this;\r\n };\r\n\r\n getComputedStyleRX = /(\\-([a-z]){1})/g;\r\n\r\n this.WOW = (function() {\r\n WOW.prototype.defaults = {\r\n boxClass: 'wow',\r\n animateClass: 'animated',\r\n offset: 0,\r\n mobile: true,\r\n live: true,\r\n callback: null,\r\n scrollContainer: null\r\n };\r\n\r\n function WOW(options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n this.scrollCallback = bind(this.scrollCallback, this);\r\n this.scrollHandler = bind(this.scrollHandler, this);\r\n this.resetAnimation = bind(this.resetAnimation, this);\r\n this.start = bind(this.start, this);\r\n this.scrolled = true;\r\n this.config = this.util().extend(options, this.defaults);\r\n if (options.scrollContainer != null) {\r\n this.config.scrollContainer = document.querySelector(options.scrollContainer);\r\n }\r\n this.animationNameCache = new WeakMap();\r\n this.wowEvent = this.util().createEvent(this.config.boxClass);\r\n }\r\n\r\n WOW.prototype.init = function() {\r\n var ref;\r\n this.element = window.document.documentElement;\r\n if ((ref = document.readyState) === \"interactive\" || ref === \"complete\") {\r\n this.start();\r\n } else {\r\n this.util().addEvent(document, 'DOMContentLoaded', this.start);\r\n }\r\n return this.finished = [];\r\n };\r\n\r\n WOW.prototype.start = function() {\r\n var box, j, len, ref;\r\n this.stopped = false;\r\n this.boxes = (function() {\r\n var j, len, ref, results;\r\n ref = this.element.querySelectorAll(\".\" + this.config.boxClass);\r\n results = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n results.push(box);\r\n }\r\n return results;\r\n }).call(this);\r\n this.all = (function() {\r\n var j, len, ref, results;\r\n ref = this.boxes;\r\n results = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n results.push(box);\r\n }\r\n return results;\r\n }).call(this);\r\n if (this.boxes.length) {\r\n if (this.disabled()) {\r\n this.resetStyle();\r\n } else {\r\n ref = this.boxes;\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n this.applyStyle(box, true);\r\n }\r\n }\r\n }\r\n if (!this.disabled()) {\r\n this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\r\n this.util().addEvent(window, 'resize', this.scrollHandler);\r\n this.interval = setInterval(this.scrollCallback, 50);\r\n }\r\n if (this.config.live) {\r\n return new MutationObserver((function(_this) {\r\n return function(records) {\r\n var k, len1, node, record, results;\r\n results = [];\r\n for (k = 0, len1 = records.length; k < len1; k++) {\r\n record = records[k];\r\n results.push((function() {\r\n var l, len2, ref1, results1;\r\n ref1 = record.addedNodes || [];\r\n results1 = [];\r\n for (l = 0, len2 = ref1.length; l < len2; l++) {\r\n node = ref1[l];\r\n results1.push(this.doSync(node));\r\n }\r\n return results1;\r\n }).call(_this));\r\n }\r\n return results;\r\n };\r\n })(this)).observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n };\r\n\r\n WOW.prototype.stop = function() {\r\n this.stopped = true;\r\n this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\r\n this.util().removeEvent(window, 'resize', this.scrollHandler);\r\n if (this.interval != null) {\r\n return clearInterval(this.interval);\r\n }\r\n };\r\n\r\n WOW.prototype.sync = function(element) {\r\n if (MutationObserver.notSupported) {\r\n return this.doSync(this.element);\r\n }\r\n };\r\n\r\n WOW.prototype.doSync = function(element) {\r\n var box, j, len, ref, results;\r\n if (element == null) {\r\n element = this.element;\r\n }\r\n if (element.nodeType !== 1) {\r\n return;\r\n }\r\n element = element.parentNode || element;\r\n ref = element.querySelectorAll(\".\" + this.config.boxClass);\r\n results = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n if (indexOf.call(this.all, box) < 0) {\r\n this.boxes.push(box);\r\n this.all.push(box);\r\n if (this.stopped || this.disabled()) {\r\n this.resetStyle();\r\n } else {\r\n this.applyStyle(box, true);\r\n }\r\n results.push(this.scrolled = true);\r\n } else {\r\n results.push(void 0);\r\n }\r\n }\r\n return results;\r\n };\r\n\r\n WOW.prototype.show = function(box) {\r\n this.applyStyle(box);\r\n box.className = box.className + \" \" + this.config.animateClass;\r\n if (this.config.callback != null) {\r\n this.config.callback(box);\r\n }\r\n this.util().emitEvent(box, this.wowEvent);\r\n this.util().addEvent(box, 'animationend', this.resetAnimation);\r\n this.util().addEvent(box, 'oanimationend', this.resetAnimation);\r\n this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);\r\n this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);\r\n return box;\r\n };\r\n\r\n WOW.prototype.applyStyle = function(box, hidden) {\r\n var delay, duration, iteration;\r\n duration = box.getAttribute('data-wow-duration');\r\n delay = box.getAttribute('data-wow-delay');\r\n iteration = box.getAttribute('data-wow-iteration');\r\n return this.animate((function(_this) {\r\n return function() {\r\n return _this.customStyle(box, hidden, duration, delay, iteration);\r\n };\r\n })(this));\r\n };\r\n\r\n WOW.prototype.animate = (function() {\r\n if ('requestAnimationFrame' in window) {\r\n return function(callback) {\r\n return window.requestAnimationFrame(callback);\r\n };\r\n } else {\r\n return function(callback) {\r\n return callback();\r\n };\r\n }\r\n })();\r\n\r\n WOW.prototype.resetStyle = function() {\r\n var box, j, len, ref, results;\r\n ref = this.boxes;\r\n results = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n results.push(box.style.visibility = 'visible');\r\n }\r\n return results;\r\n };\r\n\r\n WOW.prototype.resetAnimation = function(event) {\r\n var target;\r\n if (event.type.toLowerCase().indexOf('animationend') >= 0) {\r\n target = event.target || event.srcElement;\r\n return target.className = target.className.replace(this.config.animateClass, '').trim();\r\n }\r\n };\r\n\r\n WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {\r\n if (hidden) {\r\n this.cacheAnimationName(box);\r\n }\r\n box.style.visibility = hidden ? 'hidden' : 'visible';\r\n if (duration) {\r\n this.vendorSet(box.style, {\r\n animationDuration: duration\r\n });\r\n }\r\n if (delay) {\r\n this.vendorSet(box.style, {\r\n animationDelay: delay\r\n });\r\n }\r\n if (iteration) {\r\n this.vendorSet(box.style, {\r\n animationIterationCount: iteration\r\n });\r\n }\r\n this.vendorSet(box.style, {\r\n animationName: hidden ? 'none' : this.cachedAnimationName(box)\r\n });\r\n return box;\r\n };\r\n\r\n WOW.prototype.vendors = [\"moz\", \"webkit\"];\r\n\r\n WOW.prototype.vendorSet = function(elem, properties) {\r\n var name, results, value, vendor;\r\n results = [];\r\n for (name in properties) {\r\n value = properties[name];\r\n elem[\"\" + name] = value;\r\n results.push((function() {\r\n var j, len, ref, results1;\r\n ref = this.vendors;\r\n results1 = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n vendor = ref[j];\r\n results1.push(elem[\"\" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);\r\n }\r\n return results1;\r\n }).call(this));\r\n }\r\n return results;\r\n };\r\n\r\n WOW.prototype.vendorCSS = function(elem, property) {\r\n var j, len, ref, result, style, vendor;\r\n style = getComputedStyle(elem);\r\n result = style.getPropertyCSSValue(property);\r\n ref = this.vendors;\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n vendor = ref[j];\r\n result = result || style.getPropertyCSSValue(\"-\" + vendor + \"-\" + property);\r\n }\r\n return result;\r\n };\r\n\r\n WOW.prototype.animationName = function(box) {\r\n var animationName;\r\n try {\r\n animationName = this.vendorCSS(box, 'animation-name').cssText;\r\n } catch (_error) {\r\n animationName = getComputedStyle(box).getPropertyValue('animation-name');\r\n }\r\n if (animationName === 'none') {\r\n return '';\r\n } else {\r\n return animationName;\r\n }\r\n };\r\n\r\n WOW.prototype.cacheAnimationName = function(box) {\r\n return this.animationNameCache.set(box, this.animationName(box));\r\n };\r\n\r\n WOW.prototype.cachedAnimationName = function(box) {\r\n return this.animationNameCache.get(box);\r\n };\r\n\r\n WOW.prototype.scrollHandler = function() {\r\n return this.scrolled = true;\r\n };\r\n\r\n WOW.prototype.scrollCallback = function() {\r\n var box;\r\n if (this.scrolled) {\r\n this.scrolled = false;\r\n this.boxes = (function() {\r\n var j, len, ref, results;\r\n ref = this.boxes;\r\n results = [];\r\n for (j = 0, len = ref.length; j < len; j++) {\r\n box = ref[j];\r\n if (!(box)) {\r\n continue;\r\n }\r\n if (this.isVisible(box)) {\r\n this.show(box);\r\n continue;\r\n }\r\n results.push(box);\r\n }\r\n return results;\r\n }).call(this);\r\n if (!(this.boxes.length || this.config.live)) {\r\n return this.stop();\r\n }\r\n }\r\n };\r\n\r\n WOW.prototype.offsetTop = function(element) {\r\n var top;\r\n while (element.offsetTop === void 0) {\r\n element = element.parentNode;\r\n }\r\n top = element.offsetTop;\r\n while (element = element.offsetParent) {\r\n top += element.offsetTop;\r\n }\r\n return top;\r\n };\r\n\r\n WOW.prototype.isVisible = function(box) {\r\n var bottom, offset, top, viewBottom, viewTop;\r\n offset = box.getAttribute('data-wow-offset') || this.config.offset;\r\n viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;\r\n viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;\r\n top = this.offsetTop(box);\r\n bottom = top + box.clientHeight;\r\n return top <= viewBottom && bottom >= viewTop;\r\n };\r\n\r\n WOW.prototype.util = function() {\r\n return this._util != null ? this._util : this._util = new Util();\r\n };\r\n\r\n WOW.prototype.disabled = function() {\r\n return !this.config.mobile && this.util().isMobile(navigator.userAgent);\r\n };\r\n\r\n return WOW;\r\n\r\n })();\r\n\r\n}).call(this);\r\n","/*global define, console, window, HTMLImageElement, Promise*/\r\n\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"AtlasPlayer\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.AtlasPlayer = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n var module = {};\r\n\r\n /* A Behavior that plays an image atlas on a canvas.\r\n *\r\n * Atlas description format is that which is generated by the following\r\n * Photoshop script: https://github.com/tonioloewald/Layer-Group-Atlas\r\n */\r\n function AtlasPlayer() {\r\n Behaviors.init(AtlasPlayer, this, arguments);\r\n\r\n this.deinitialize_stop = false;\r\n\r\n this.$canvas = this.$elem;\r\n if (!this.$canvas.is(\"canvas\")) {\r\n this.$canvas = this.$elem.find(\"canvas\");\r\n }\r\n\r\n this.context = this.$canvas[0].getContext(\"2d\");\r\n\r\n this.image = undefined;\r\n this.atlas_data = undefined;\r\n\r\n //TODO: Make configurable\r\n this.anim_player_running = false;\r\n\r\n this.ready().then(function () {\r\n $(window).on(\"resize\", this.size_canvas_to_fit.bind(this));\r\n \r\n this.anim_length = this.find_anim_length();\r\n \r\n if (this.atlas_data.autoplay === true) {\r\n this.play();\r\n }\r\n }.bind(this));\r\n }\r\n\r\n Behaviors.inherit(AtlasPlayer, Behaviors.Behavior);\r\n\r\n AtlasPlayer.QUERY = \"[data-atlasplayer]\";\r\n\r\n /* Cause AtlasPlayer to ensure it's image and atlas are ready.\r\n *\r\n * Returns a promise which resolves when the atlas is ready for playback.\r\n * Promise will reject if the image is an image tag which has failed to\r\n * load.\r\n */\r\n AtlasPlayer.prototype.ready = function () {\r\n if (this.ready_promise === undefined) {\r\n this.ready_promise = new Promise(function (resolve, reject) {\r\n this.ready_resolve = resolve;\r\n this.ready_reject = reject;\r\n }.bind(this));\r\n\r\n this.find_image();\r\n this.find_atlas();\r\n this.is_ready();\r\n }\r\n\r\n return this.ready_promise;\r\n };\r\n\r\n /* Determine if the atlas is ready for playback.\r\n *\r\n * Calling this function also has the side effect of resolving the ready\r\n * promise if it has not already been done. If this function returns true\r\n * for the first time, then the promise has been resolved. If it returns\r\n * false, it may have been rejected (say, if the image fails to load).\r\n */\r\n AtlasPlayer.prototype.is_ready = function () {\r\n var image_ready, atlas_ready, total_ready;\r\n\r\n if (this.image === undefined) {\r\n image_ready = false;\r\n } else if (this.image.constructor === HTMLImageElement) {\r\n if (this.image.complete) {\r\n if (this.image.naturalHeight === 0) {\r\n //Something has gone horribly wrong\r\n this.ready_reject();\r\n image_ready = false;\r\n } else {\r\n image_ready = true;\r\n }\r\n } else {\r\n image_ready = false;\r\n }\r\n } else {\r\n //Other drawables are presumed already loaded\r\n image_ready = true;\r\n }\r\n\r\n if (this.atlas_data !== undefined && this.atlas_data.then !== undefined) {\r\n //Not ready, since a promise was provided\r\n atlas_ready = false;\r\n } else {\r\n atlas_ready = this.atlas_data !== undefined;\r\n }\r\n\r\n total_ready = image_ready && atlas_ready;\r\n\r\n if (total_ready) {\r\n this.ready_resolve();\r\n }\r\n\r\n return total_ready;\r\n };\r\n\r\n /* Called to find the image we're drawing our animation from, if present.\r\n */\r\n AtlasPlayer.prototype.find_image = function () {\r\n var image_id = this.$elem.data(\"atlasplayer-image\");\r\n\r\n if (this.image !== undefined) {\r\n return;\r\n }\r\n\r\n if (image_id !== undefined) {\r\n this.image = $(image_id)[0];\r\n\r\n if (this.image.constructor === HTMLImageElement) {\r\n $(this.image).on(\"load\", this.is_ready.bind(this));\r\n }\r\n }\r\n };\r\n\r\n /* Called to find and load our atlas data.\r\n */\r\n AtlasPlayer.prototype.find_atlas = function () {\r\n var atlas_data = this.$elem.data(\"atlasplayer-data\");\r\n\r\n if (this.atlas_data !== undefined) {\r\n return;\r\n }\r\n\r\n if (typeof atlas_data === \"string\") {\r\n //Atlas data is a URL.\r\n this.atlas_data = this.load_atlas_data(atlas_data)\r\n .then(function (data) {\r\n this.atlas_data = data;\r\n this.is_ready();\r\n }.bind(this))\r\n .catch(this.ready_reject);\r\n } else {\r\n //Atlas data is immediately provided.\r\n this.atlas_data = atlas_data;\r\n }\r\n };\r\n \r\n AtlasPlayer.prototype.find_anim_length = function () {\r\n var anim_length = this.$elem.data(\"atlasplayer-animlength\");\r\n \r\n if (anim_length === undefined) {\r\n anim_length = this.atlas_data.time;\r\n }\r\n \r\n if (anim_length === undefined) {\r\n anim_length = \"5s\";\r\n }\r\n \r\n anim_length = parseFloat(anim_length, 10);\r\n \r\n if (isNaN(anim_length) || anim_length === 0) {\r\n anim_length = 5000;\r\n } else {\r\n anim_length *= 1000;\r\n }\r\n \r\n return anim_length;\r\n };\r\n\r\n /* Load the atlas data.\r\n *\r\n * Returns a promise which resolves when the atlas data has loaded.\r\n */\r\n AtlasPlayer.prototype.load_atlas_data = function (url) {\r\n var promiseResolve, promiseReject,\r\n myPromise = new Promise(function (resolve, reject) {\r\n promiseResolve = resolve;\r\n promiseReject = reject;\r\n });\r\n\r\n $.ajax({\r\n \"url\": url,\r\n \"dataType\": \"json\"\r\n }).done(function (data) {\r\n promiseResolve(data);\r\n }).fail(function (jqXHR, textStatus, errorThrown) {\r\n promiseReject([textStatus, errorThrown]);\r\n });\r\n\r\n return myPromise;\r\n };\r\n\r\n /* Cause the canvas to draw a particular atlas frame.\r\n */\r\n AtlasPlayer.prototype.draw_frame = function (frame_id) {\r\n var layerData = this.atlas_data.layers[this.atlas_data.layers.length - frame_id - 1];\r\n \r\n if (layerData.width <= 0) {\r\n return;\r\n }\r\n \r\n if (layerData.height <= 0) {\r\n return;\r\n }\r\n\r\n this.context.drawImage(this.image,\r\n //Location of the atlas slice\r\n layerData.packedOrigin.x * this.image_x_space,\r\n layerData.packedOrigin.y * this.image_y_space,\r\n layerData.width * this.image_x_space,\r\n layerData.height * this.image_y_space,\r\n //Where we want it\r\n layerData.left,\r\n layerData.top,\r\n layerData.width,\r\n layerData.height\r\n );\r\n };\r\n \r\n /* Size the canvas to fit our data.\r\n */\r\n AtlasPlayer.prototype.size_canvas_to_fit = function () {\r\n //Determine the device-specific pixel size of this AtlasPlayer.\r\n this.canvas_scale_factor = window.devicePixelRatio;\r\n this.$canvas[0].width = this.$canvas.width() * this.canvas_scale_factor;\r\n this.$canvas[0].height = this.$canvas.height() * this.canvas_scale_factor;\r\n \r\n //Reset the current canvas transform, if any.\r\n this.context.setTransform(1, 0, 0, 1, 0, 0);\r\n \r\n //Scale down our coordinate space\r\n this.context.scale(this.canvas_scale_factor, this.canvas_scale_factor);\r\n \r\n //Determine if cropping is needed.\r\n this.css_aspect_ratio = this.$canvas.width() / this.$canvas.height();\r\n this.atlas_aspect_ratio = this.atlas_data.width / this.atlas_data.height;\r\n if (this.css_aspect_ratio > this.atlas_aspect_ratio) {\r\n this.context.translate(0, (this.$canvas.width() / this.atlas_aspect_ratio - this.$canvas.height()) / -2);\r\n \r\n this.canvas_transform_scale_factor = this.$canvas.width() / this.atlas_aspect_ratio / this.atlas_data.height;\r\n this.context.scale(this.canvas_transform_scale_factor, this.canvas_transform_scale_factor);\r\n } else if (this.css_aspect_ratio < this.atlas_aspect_ratio) {\r\n this.context.translate((this.$canvas.height() * this.atlas_aspect_ratio - this.$canvas.width()) / -2, 0);\r\n \r\n this.canvas_transform_scale_factor = this.$canvas.height() * this.atlas_aspect_ratio / this.atlas_data.width;\r\n this.context.scale(this.canvas_transform_scale_factor, this.canvas_transform_scale_factor);\r\n }\r\n \r\n //We also need to determine if our atlas image is scaled down and adjust\r\n //our source coordinate space to match.\r\n this.image_x_space = this.image.width / this.atlas_data.atlas.width;\r\n this.image_y_space = this.image.height / this.atlas_data.atlas.height;\r\n \r\n //Since we just clared the canvas, if we aren't animated, then we need\r\n //to manually repopulate ourselves:\r\n if (this.last_frame_drawn !== undefined) {\r\n this.draw_frame(this.last_frame_drawn);\r\n }\r\n };\r\n\r\n AtlasPlayer.prototype.animation_krnl = function (time) {\r\n var step, frame, total_frames;\r\n\r\n if (this.deinitialize_stop) {\r\n return;\r\n }\r\n \r\n if (this.playing === false) {\r\n this.anim_player_running = false;\r\n \r\n if (this.on_animation_complete) {\r\n this.on_animation_complete();\r\n this.on_animation_complete = undefined;\r\n }\r\n return;\r\n }\r\n\r\n if (this.anim_first_time === undefined) {\r\n this.anim_first_time = time;\r\n window.requestAnimationFrame(this.animation_krnl.bind(this));\r\n return;\r\n }\r\n \r\n if (this.anim_length === undefined) {\r\n //Don't animate if we haven't loaded yet\r\n window.requestAnimationFrame(this.animation_krnl.bind(this));\r\n return;\r\n }\r\n\r\n total_frames = this.atlas_data.layers.length;\r\n step = this.anim_length / total_frames;\r\n time = time - this.anim_first_time;\r\n frame = Math.max(Math.min(Math.round(time / step), total_frames - 1), 0);\r\n\r\n if (this.reverse) {\r\n frame = (total_frames - 1) - frame;\r\n }\r\n\r\n this.context.clearRect(0,0,this.atlas_data.width, this.atlas_data.height);\r\n this.draw_frame(frame);\r\n \r\n this.last_frame_drawn = frame;\r\n \r\n if (time > this.anim_length) {\r\n if (this.should_loop()) {\r\n this.anim_first_time = undefined;\r\n } else {\r\n this.anim_player_running = false;\r\n \r\n if (this.on_animation_complete) {\r\n this.on_animation_complete();\r\n this.on_animation_complete = undefined;\r\n }\r\n return;\r\n }\r\n }\r\n \r\n window.requestAnimationFrame(this.animation_krnl.bind(this));\r\n };\r\n\r\n AtlasPlayer.prototype.update_animation_state = function () {\r\n if (this.playing && this.anim_player_running === false) {\r\n if (this.on_animation_complete) {\r\n this.on_animation_complete();\r\n }\r\n \r\n this.animation_promise = new Promise(function (resolve, reject) {\r\n this.on_animation_complete = resolve;\r\n }.bind(this));\r\n \r\n this.size_canvas_to_fit();\r\n this.anim_player_running = true;\r\n window.requestAnimationFrame(this.animation_krnl.bind(this));\r\n }\r\n \r\n return this.animation_promise;\r\n };\r\n \r\n AtlasPlayer.prototype.play = function () {\r\n this.playing = true;\r\n this.reverse = false;\r\n this.anim_first_time = undefined;\r\n return this.update_animation_state();\r\n };\r\n\r\n AtlasPlayer.prototype.play_reverse = function () {\r\n this.playing = true;\r\n this.reverse = true;\r\n this.anim_first_time = undefined;\r\n return this.update_animation_state();\r\n };\r\n \r\n /* Request the animation to stop playing on the next frame.\r\n * \r\n * This function also resets the animation to play again.\r\n */\r\n AtlasPlayer.prototype.stop = function () {\r\n //A bit of subtlety: We don't clear anim_player_running since we don't\r\n //cancel the animation frame when you stop the animation. We instead\r\n //wait for the animation to stop itself.\r\n this.playing = false;\r\n this.reverse = false;\r\n this.anim_first_time = undefined;\r\n return this.update_animation_state();\r\n };\r\n \r\n AtlasPlayer.prototype.seek = function (frame) {\r\n if (frame < 0) {\r\n frame = this.atlas_data.layers.length - frame - 2;\r\n }\r\n\r\n this.context.clearRect(0,0,this.atlas_data.width, this.atlas_data.height);\r\n this.draw_frame(frame);\r\n\r\n this.last_frame_drawn = frame;\r\n };\r\n \r\n /* Determine if this AtlasPlayer should loop or not.\r\n */\r\n AtlasPlayer.prototype.should_loop = function () {\r\n var loop_force = this.$elem.data(\"atlasplayer-loop\"),\r\n loop_deny = this.$elem.data(\"atlasplayer-once\");\r\n \r\n if (loop_force !== undefined) {\r\n return true;\r\n } else if (loop_deny !== undefined) {\r\n return false;\r\n } else {\r\n return this.atlas_data.loop === true;\r\n }\r\n };\r\n\r\n Behaviors.register_behavior(AtlasPlayer);\r\n\r\n module.AtlasPlayer = AtlasPlayer;\r\n\r\n return module;\r\n}));\r\n","/*global define, console, document, window*/\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"Animations\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.Animations = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n \r\n var module = {};\r\n\r\n /* Watches for the start and end of an animation.\r\n *\r\n * The .promise attribute stores a promise which resolves whenever the\r\n * animation has completed or no animation events were detected over a\r\n * timeout period of 5 second.\r\n *\r\n * An important caveat: Animations with delay longer than 5 seconds will\r\n * fail to fire events and the animation watcher will trigger the timeout\r\n * behavior instead. You can avoid this behavior by triggering another\r\n * animation of any kind during the timeout period and keeping it alive\r\n * until the delayed animation begins.\r\n */\r\n function AnimationWatcher($elem) {\r\n var Class = this.constructor,\r\n eventSelector = Class.get_unique_id(),\r\n that = this,\r\n evtStartNames = \"animationstart.\" + eventSelector +\r\n \" webkitAnimationStart.\" + eventSelector +\r\n \" oanimationstart.\" + eventSelector +\r\n \" MSAnimationStart.\" + eventSelector,\r\n evtEndNames = \"animationend.\" + eventSelector +\r\n \" webkitAnimationEnd.\" + eventSelector +\r\n \" oanimationend.\" + eventSelector +\r\n \" MSAnimationEnd.\" + eventSelector,\r\n animation_start = this.animation_start.bind(this),\r\n animation_end = this.animation_end.bind(this),\r\n animation_timeout_delay = 5000;\r\n\r\n this.eventSelector = eventSelector;\r\n\r\n this.$elem = $elem;\r\n this.$elem.on(evtStartNames, animation_start);\r\n this.$elem.on(evtEndNames, animation_end);\r\n\r\n if (window.Modernizr && window.Modernizr.cssanimations === false) {\r\n animation_timeout_delay = 0;\r\n }\r\n\r\n this.timeout = window.setTimeout(this.abort_animation.bind(this), animation_timeout_delay);\r\n this.remaining_animations = [];\r\n\r\n //We remove event handlers after one of the handlers resolves the\r\n //animation promise.\r\n this.promise = new Promise(function (resolve, reject) {\r\n that.resolve = resolve;\r\n that.reject = reject;\r\n }).then(function () {\r\n that.$elem.off(evtStartNames, animation_start);\r\n that.$elem.off(evtEndNames, animation_end);\r\n });\r\n\r\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Created\");\r\n }\r\n\r\n AnimationWatcher.count = 0;\r\n\r\n AnimationWatcher.get_unique_id = function () {\r\n var Class = this,\r\n sel = \".\" + Class.name + \"_\" + Class.count;\r\n\r\n Class.count += 1;\r\n return sel;\r\n };\r\n\r\n AnimationWatcher.prototype.animation_start = function (evt) {\r\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Begun (\" + evt.originalEvent.animationName + \")\");\r\n if (this.timeout !== null) {\r\n window.clearTimeout(this.timeout);\r\n this.timeout = null;\r\n }\r\n\r\n this.remaining_animations.push(evt.originalEvent.animationName);\r\n };\r\n\r\n AnimationWatcher.prototype.animation_end = function (evt) {\r\n var loc = this.remaining_animations.indexOf(evt.originalEvent.animationName);\r\n\r\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Ended (\" + evt.originalEvent.animationName + \")\");\r\n\r\n if (loc !== -1) {\r\n this.remaining_animations.splice(loc, 1);\r\n }\r\n\r\n if (this.remaining_animations.length === 0) {\r\n this.resolve();\r\n }\r\n };\r\n\r\n AnimationWatcher.prototype.abort_animation = function (evt) {\r\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Abort timeout triggered\");\r\n\r\n if (this.remaining_animations.length === 0) {\r\n this.resolve();\r\n }\r\n };\r\n\r\n module.AnimationWatcher = AnimationWatcher;\r\n\r\n return module;\r\n}));\r\n","/*global define, console, document, window*/\r\n/*jslint continue:true*/\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"AffixColumn\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.AffixColumn = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n\r\n var module = {};\r\n \r\n function $do(that, target) {\r\n return function () {\r\n target.apply(that, arguments);\r\n };\r\n }\r\n \r\n /* An Affix root is an element which is used to determine the edges of the\r\n * region that columns stick to. It also provides the core event handlers\r\n * to drive the AffixColumn and AffixRow behaviors.\r\n */\r\n function Affix(elem, scrollElem) {\r\n Behaviors.init(Affix, this, arguments);\r\n\r\n this.height = this.$elem.height();\r\n this.offsetTop = this.$elem.offset().top;\r\n \r\n this.columns = [];\r\n this.$scrollElem = $(scrollElem || document);\r\n this.$scrollHeightElem = this.$scrollElem;\r\n \r\n //weird DOM quirk\r\n if (this.$scrollElem[0] === document) {\r\n this.$scrollHeightElem = $(window);\r\n }\r\n \r\n this.$alwaysTopElem = $(this.$elem.data(\"affixcolumn-alwaystop\"));\r\n this.$alwaysBottomElem = $(this.$elem.data(\"affixcolumn-alwaysbottom\"));\r\n \r\n this.bind_event_handlers();\r\n this.find_columns_and_rows();\r\n \r\n this.resized();\r\n this.scroll_changed();\r\n }\r\n \r\n Behaviors.inherit(Affix, Behaviors.Behavior);\r\n \r\n Affix.QUERY = \"[data-affixcolumn='root']\";\r\n \r\n Affix.prototype.deinitialize = function () {\r\n this.unbind_event_handlers();\r\n };\r\n \r\n /* Check our alwaystop/alwaysbottom elements and see if they are floating.\r\n * If so, add their height to the top and bottom adjustments given to the\r\n * individual columns.\r\n */\r\n Affix.prototype.determine_global_floating_adjustment = function () {\r\n this.globalTopAdjust = 0;\r\n \r\n this.$alwaysTopElem.each(function (index, atelem) {\r\n var $atelem = $(atelem);\r\n this.globalTopAdjust += $atelem.height();\r\n }.bind(this));\r\n \r\n this.globalBottomAdjust = 0;\r\n \r\n this.$alwaysBottomElem.each(function (index, atelem) {\r\n var $atelem = $(atelem);\r\n this.globalBottomAdjust += $atelem.height();\r\n }.bind(this));\r\n };\r\n\r\n Affix.prototype.resized = function () {\r\n var i, maxColHeight = 0, maxColId, heightSum, disp = 0, topAdjust = 0, bottomAdjust = 0;\r\n \r\n this.determine_global_floating_adjustment();\r\n this.height = this.$elem.height();\r\n \r\n if (this.columns.length > 0) {\r\n //Scan top rows to fix their displacement heights and determine top\r\n //adjustments.\r\n for (i = 0; i < this.columns.length; i += 1) {\r\n //Also, kill floating adjustments plz\r\n this.columns[i].clear_floating_adjustments();\r\n \r\n if (!this.columns[i].has_option(\"top\")) {\r\n continue;\r\n }\r\n \r\n //Top rows never get a bottom adjustment.\r\n this.columns[i].set_floating_adjustments(this.globalTopAdjust, topAdjust, 0, 0);\r\n \r\n disp = this.columns[i].displacement_height();\r\n \r\n this.columns[i].$height_bearing_element().css(\"min-height\", disp + \"px\");\r\n topAdjust += disp;\r\n }\r\n \r\n //Scan bottom rows to fix their displacement heights and determine top\r\n //adjustments. This is done in reverse order so that the bottommost\r\n //bottom row gets the lowest bottom float adjustment.\r\n for (i = this.columns.length - 1; i >= 0; i -= 1) {\r\n if (!this.columns[i].has_option(\"bottom\")) {\r\n continue;\r\n }\r\n \r\n //Bottom rows never get a top adjustment.\r\n this.columns[i].set_floating_adjustments(0, 0, this.globalBottomAdjust, bottomAdjust);\r\n \r\n disp = this.columns[i].displacement_height();\r\n \r\n this.columns[i].$height_bearing_element().css(\"min-height\", disp + \"px\");\r\n bottomAdjust += disp;\r\n }\r\n \r\n //Scan columns to select the height-bearing column.\r\n for (i = 0; i < this.columns.length; i += 1) {\r\n if (!this.columns[i].has_option(\"column\")) {\r\n continue;\r\n }\r\n \r\n //Columns get both the top and bottom adjustment.\r\n this.columns[i].set_floating_adjustments(this.globalTopAdjust, topAdjust, this.globalBottomAdjust, bottomAdjust);\r\n \r\n //Determine which column is height bearing for this Affix.\r\n if (maxColHeight < this.columns[i].displacement_height() &&\r\n !this.columns[i].has_option(\"noheightbearing\")) {\r\n maxColHeight = this.columns[i].displacement_height();\r\n maxColId = i;\r\n }\r\n \r\n this.columns[i].remove_state(\"tallest\");\r\n }\r\n \r\n if (maxColId !== undefined) {\r\n this.columns[maxColId].add_state(\"tallest\");\r\n }\r\n }\r\n };\r\n \r\n Affix.prototype.scroll_changed = function () {\r\n var i, maxColHeight = 0, maxColId;\r\n \r\n this.height = this.$elem.height();\r\n this.windowHeight = this.$scrollHeightElem.height();\r\n this.offsetTop = this.$elem.offset().top;\r\n this.scrollTop = this.$scrollElem.scrollTop();\r\n this.offsetBottom = this.offsetTop + this.height;\r\n this.scrollBottom = this.scrollTop + this.windowHeight;\r\n \r\n if (this.columns.length > 0) {\r\n for (i = 0; i < this.columns.length; i += 1) {\r\n this.columns[i].viewport_changed(this.height, this.offsetTop, this.offsetBottom, this.scrollTop, this.scrollBottom);\r\n }\r\n }\r\n };\r\n \r\n Affix.prototype.unbind_event_handlers = function () {\r\n if (this.scroll_handler !== undefined) {\r\n this.$scrollElem.off(\"scroll\", this.scroll_handler);\r\n }\r\n \r\n if (this.resize_handler !== undefined) {\r\n $(window).off(\"resize\", this.resize_handler);\r\n }\r\n };\r\n \r\n Affix.prototype.bind_event_handlers = function () {\r\n this.unbind_event_handlers();\r\n \r\n this.scroll_handler = $do(this, this.scroll_changed);\r\n this.resize_handler = $do(this, this.resized);\r\n \r\n this.$scrollElem.on(\"scroll\", this.scroll_handler);\r\n $(window).on(\"resize\", this.resize_handler);\r\n $(document).on(\"load\", this.resize_handler);\r\n $(\"img\").on(\"load\", this.resize_handler);\r\n };\r\n \r\n Affix.prototype.find_columns_and_rows = function () {\r\n var $likely_columns = this.$elem.find(AffixColumn.QUERY),\r\n $likely_roots = this.$elem.find(Affix.QUERY);\r\n\r\n this.columns = [];\r\n this.roots = [];\r\n\r\n $likely_columns.each(function (index, lcelem) {\r\n var $lcelem = $(lcelem),\r\n $parent_root = $lcelem.parents().filter(Affix.QUERY).first();\r\n\r\n if ($parent_root[0] === this.$elem) {\r\n this.columns.push(AffixColumn.locate($lcelem));\r\n }\r\n }.bind(this));\r\n\r\n $likely_roots.each(function (index, lrelem) {\r\n var $lrelem = $(lrelem),\r\n $parent_root = $lrelem.parents().filter(Affix.QUERY).first();\r\n\r\n if ($parent_root[0] === this.$elem) {\r\n this.roots.push(Affix.locate($lrelem));\r\n }\r\n }.bind(this));\r\n };\r\n \r\n /* An AffixColumn is a normally fixed element which sticks to the top or\r\n * bottom edges of a scrolling viewport (typically the document).\r\n * \r\n * AffixColumn itself contains no event handlers. The parent Affix is\r\n * responsible for propagating viewport scrolling to it's child Columns.\r\n * \r\n * Options may be provided which cause the Column to behave differently.\r\n * Examples of this include the \"noheightbearing\" option, which prevents\r\n * your AffixColumn from being marked as tallest for the purposes of parent\r\n * element height preservation. See the parse_option_list function for more\r\n * information on the option list format, and has_option for what options\r\n * are available.\r\n * \r\n * The name \"AffixColumn\" is a misnomer. \"Columns\" may be configured as rows\r\n * or columns in CSS. Orientation of the Column is configured with the\r\n * column/top/bottom options. If neither is active, \"column\" is assumed.\r\n */\r\n function AffixColumn(elem) {\r\n this.$elem = $(elem);\r\n this.options = this.parse_option_list(this.$elem.data(\"affixcolumn-options\"));\r\n \r\n this.top_adjust = 0;\r\n this.bottom_adjust = 0;\r\n }\r\n \r\n Behaviors.inherit(AffixColumn, Behaviors.Behavior);\r\n \r\n AffixColumn.QUERY = \"[data-affixcolumn='column']\";\r\n \r\n /* Calculate the height taken up by the AffixColumn if placed in normal\r\n * document flow.\r\n * \r\n * The floating adjustments currently applied to the column may cause\r\n * invalid displacement height results to occur. For best results, call\r\n * clear_floating_adjustments to remove them, and then trigger a viewport\r\n * update from the Affix root once the height has been measured.\r\n */\r\n AffixColumn.prototype.displacement_height = function () {\r\n return this.$elem.height();\r\n };\r\n \r\n /* Change the top/bottom values that this column floats at.\r\n * \r\n * Floating adjustments determine the safe area of space that this element\r\n * may float at without being overlapped or overlapping top or bottom rows.\r\n * \r\n * These will override any top/bottom values set via CSS.\r\n */\r\n AffixColumn.prototype.set_floating_adjustments = function (globalTop, top, globalBottom, bottom) {\r\n this.top_adjust = top;\r\n this.bottom_adjust = bottom;\r\n \r\n this.global_top_adjust = globalTop;\r\n this.global_bottom_adjust = globalBottom;\r\n };\r\n \r\n /* Remove inline CSS applied to make floating adjustments visually present.\r\n * \r\n * You must call this method before querying displacement_height, or you\r\n * will get invalid results. After calling this method, you must trigger a\r\n * viewport update by calling scroll_changed on the containing Affix root.\r\n */\r\n AffixColumn.prototype.clear_floating_adjustments = function () {\r\n this.$elem.css(\"top\", \"\");\r\n this.$elem.css(\"bottom\", \"\");\r\n };\r\n \r\n /* Return the element responsible for propagating our displacement height in\r\n * normal document flow.\r\n * \r\n * By default, the height bearing element is our parent element. We do not\r\n * have a facility to override this currently.\r\n */\r\n AffixColumn.prototype.$height_bearing_element = function () {\r\n return this.$elem.parent();\r\n };\r\n \r\n AffixColumn.prototype.add_state = function (state) {\r\n this.$elem.addClass(\"is-AffixColumn--\" + state);\r\n };\r\n \r\n AffixColumn.prototype.remove_state = function (state) {\r\n this.$elem.removeClass(\"is-AffixColumn--\" + state);\r\n };\r\n \r\n /* Determine if an AffixColumn option applies given the current viewport.\r\n * \r\n * Valid options include:\r\n * \r\n * - column: AffixColumn to be oriented vertically aside other columns.\r\n * The tallest column is marked as \"tallest\" and considered the height\r\n * bearing column, whereby it is expected to be positioned in normal\r\n * document flow such that the Affix element can grab it's CSS height.\r\n * \r\n * - top: AffixColumn to be oriented above other columns. Top rows are\r\n * given a CSS min-height equal to the sum of their childrens' heights\r\n * and their children are assumed to float. This minimum height will be\r\n * applied as the top value to any following tops or columns.\r\n *\r\n * - bottom: AffixColumn to be oriented below other columns. Bottom rows\r\n * are given a CSS min-height in the same fashion as top rows. This\r\n * minimum height will be applied as the bottom value to any preceding\r\n * bottoms or columns.\r\n * \r\n * - noheightbearing: Column-oriented AffixColumn to be disqualified from\r\n * being marked as a height-bearing column.\r\n */\r\n AffixColumn.prototype.has_option = function (option_string) {\r\n var i;\r\n \r\n for (i = 0; i < this.options.length; i += 1) {\r\n if (this.options[i].media === null || window.matchMedia(this.options[i].media).matches) {\r\n //Column enabled by default\r\n if (option_string === \"column\" &&\r\n this.options[i].options.indexOf(\"top\") === -1 &&\r\n this.options[i].options.indexOf(\"bottom\") === -1) {\r\n return true;\r\n }\r\n \r\n return this.options[i].options.indexOf(option_string) > -1;\r\n }\r\n }\r\n \r\n if (option_string === \"column\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n \r\n AffixColumn.MATCH_MEDIA_QUERY_REGEX = /\\(([\\s\\S]*)\\)/g;\r\n \r\n /* Parse an option list.\r\n * \r\n * The option list determines what options are active on a column. It is\r\n * comma separated. Each comma indicates a new option list for a particular\r\n * media query. The first media query to match determines the total option\r\n * set. The final option set may or may not have a media query; if it does\r\n * not, then it serves as the default option set.\r\n * \r\n * This is very analagous to the sizes attribute of tags in modern\r\n * browsers. Example format:\r\n * \r\n * (min-width: 450px) column noheightbearing, top\r\n */\r\n AffixColumn.prototype.parse_option_list = function (option_list_string) {\r\n var cases, i, j, rval = [], case_obj = {}, match;\r\n \r\n if (option_list_string === undefined) {\r\n option_list_string = \"\";\r\n }\r\n \r\n cases = option_list_string.split(\",\");\r\n \r\n for (i = 0; i < cases.length; i += 1) {\r\n case_obj = {};\r\n match = this.constructor.MATCH_MEDIA_QUERY_REGEX.exec(cases[i]);\r\n \r\n //Reset the string. Sharing regex objects is dirty...\r\n this.constructor.MATCH_MEDIA_QUERY_REGEX.lastIndex = 0;\r\n \r\n if (match === null || match.length === 0) {\r\n case_obj.options = cases[i].split(\" \");\r\n case_obj.media = null;\r\n } else {\r\n case_obj.options = cases[i].slice(match[0]).split(\" \");\r\n case_obj.media = match[0];\r\n }\r\n \r\n //Filter empty options\r\n for (j = 0; j < case_obj.options.length; j += 0) {\r\n if (case_obj.options[j] === \"\") {\r\n case_obj.options.splice(j, 1);\r\n } else {\r\n j += 1;\r\n }\r\n }\r\n \r\n rval.push(case_obj);\r\n }\r\n \r\n return rval;\r\n };\r\n \r\n /* Internal method used by Affix to communicate to it's children the new\r\n * parameters of the scroll viewport.\r\n */\r\n AffixColumn.prototype.viewport_changed = function (rootHeight, offsetTop, offsetBottom, scrollTop, scrollBottom) {\r\n var isTopAnchored = this.has_option(\"column\") || this.has_option(\"top\"),\r\n isBottomAnchored = this.has_option(\"anchorbottom\") || this.has_option(\"bottom\"),\r\n bottomStateAdjust = true,\r\n topStateAdjust = true,\r\n adjustWithoutGlobal = true;\r\n \r\n //Remove existing floating adjustments.\r\n //Otherwise, our displacement height is incorrect.\r\n this.clear_floating_adjustments();\r\n \r\n //Apply affix states.\r\n if (isTopAnchored && scrollTop + this.global_top_adjust < offsetTop ||\r\n isBottomAnchored && scrollBottom - this.displacement_height() < offsetTop) {\r\n this.add_state(\"top\");\r\n this.remove_state(\"bottom\");\r\n bottomStateAdjust = false;\r\n } else if (isTopAnchored && scrollTop + this.top_adjust + this.global_top_adjust + this.displacement_height() + this.bottom_adjust >= offsetBottom ||\r\n isBottomAnchored && scrollBottom >= offsetBottom) {\r\n this.remove_state(\"top\");\r\n this.add_state(\"bottom\");\r\n topStateAdjust = false;\r\n } else {\r\n this.remove_state(\"top\");\r\n this.remove_state(\"bottom\");\r\n adjustWithoutGlobal = false;\r\n }\r\n \r\n //Apply floating adjustments.\r\n if ((this.has_option(\"column\") || this.has_option(\"top\")) && topStateAdjust) {\r\n if (adjustWithoutGlobal) {\r\n this.$elem.css(\"top\", this.top_adjust + \"px\");\r\n } else {\r\n this.$elem.css(\"top\", this.top_adjust + this.global_top_adjust + \"px\");\r\n }\r\n }\r\n \r\n if ((this.has_option(\"column\") || this.has_option(\"bottom\")) && bottomStateAdjust) {\r\n if (adjustWithoutGlobal) {\r\n this.$elem.css(\"bottom\", this.bottom_adjust + \"px\");\r\n } else {\r\n this.$elem.css(\"bottom\", this.bottom_adjust + this.global_bottom_adjust + \"px\");\r\n }\r\n }\r\n };\r\n \r\n Behaviors.register_behavior(Affix);\r\n\r\n module.Affix = Affix;\r\n module.AffixColumn = AffixColumn;\r\n\r\n return module;\r\n}));\r\n","/*global define, console, document, window*/\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"CollapseContent\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.CollapseContent = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n\r\n var module = {};\r\n\r\n function $do(that, target) {\r\n return function () {\r\n target.apply(that, arguments);\r\n };\r\n }\r\n\r\n function CollapseContentRegion(elem) {\r\n Behaviors.init(CollapseContentRegion, this, arguments);\r\n\r\n this.$elem = $(elem);\r\n this.visible = this.$elem.data(\"collapsecontent-region-visible\") !== undefined;\r\n\r\n this.update_classes();\r\n }\r\n\r\n Behaviors.inherit(CollapseContentRegion, Behaviors.Behavior);\r\n\r\n CollapseContentRegion.QUERY = \"[data-collapsecontent-region]\";\r\n\r\n CollapseContentRegion.prototype.update_classes = function () {\r\n this.$elem.find(\"[data-collapsecontent-body]\").each(function (index, body_elem) {\r\n if (this.visible) {\r\n $(body_elem).addClass(\"is-CollapseContent--visible\");\r\n $(body_elem).removeClass(\"is-CollapseContent--hidden\");\r\n } else {\r\n $(body_elem).removeClass(\"is-CollapseContent--visible\");\r\n $(body_elem).addClass(\"is-CollapseContent--hidden\");\r\n }\r\n }.bind(this));\r\n\r\n this.$elem.find(\"[data-collapsecontent-trigger]\").each(function (index, trigger_elem) {\r\n if (this.visible) {\r\n $(trigger_elem).addClass(\"is-CollapseContent--visible\");\r\n $(trigger_elem).removeClass(\"is-CollapseContent--hidden\");\r\n } else {\r\n $(trigger_elem).removeClass(\"is-CollapseContent--visible\");\r\n $(trigger_elem).addClass(\"is-CollapseContent--hidden\");\r\n }\r\n }.bind(this));\r\n };\r\n\r\n CollapseContentRegion.prototype.make_visible = function () {\r\n this.visible = true;\r\n this.update_classes();\r\n };\r\n\r\n CollapseContentRegion.prototype.make_hidden = function () {\r\n this.visible = false;\r\n this.update_classes();\r\n };\r\n\r\n CollapseContentRegion.prototype.toggle = function () {\r\n this.visible = !this.visible;\r\n this.update_classes();\r\n\r\n // Fire custom event when toggles are activated\r\n newEvent = new $.Event({\r\n \"type\": \"collapsecontent-toggle\",\r\n \"visible\": this.visible,\r\n \"target\": this.$elem,\r\n });\r\n\r\n this.$elem.trigger(newEvent);\r\n };\r\n\r\n function CollapseContentTrigger(elem) {\r\n Behaviors.init(CollapseContentTrigger, this, arguments);\r\n\r\n this.$elem = $(elem);\r\n\r\n if (this.$elem.data(\"collapsecontent-trigger\") !== undefined) {\r\n //Mode 1: Trigger explicitly specifies region to toggle.\r\n this.region = this.set_region($(this.$elem.data(\"collapsecontent-trigger\"))[0]);\r\n } else if (this.$elem.attr(\"href\") !== undefined) {\r\n //Mode 1: Trigger explicitly specifies region to toggle, as an href..\r\n this.region = this.set_region($(this.$elem.data(\"collapsecontent-trigger\"))[0]);\r\n }\r\n\r\n if (this.region === undefined) {\r\n //Mode 2: Find parent element that qualifies as a region.\r\n this.region = this.set_region(this.$elem.parents().filter(CollapseContentRegion.QUERY)[0]);\r\n }\r\n\r\n if (this.region === undefined) {\r\n console.error(\"There is a CollapseContent trigger that neither points to a valid region nor is a child of a valid region..\");\r\n }\r\n\r\n this.$elem.on(\"click\", this.toggle_intent.bind(this));\r\n }\r\n\r\n Behaviors.inherit(CollapseContentTrigger, Behaviors.Behavior);\r\n\r\n CollapseContentTrigger.QUERY = \"[data-collapsecontent-trigger]\";\r\n\r\n CollapseContentTrigger.prototype.set_region = function (elem) {\r\n if (elem === undefined) {\r\n return;\r\n }\r\n\r\n return CollapseContentRegion.locate(elem);\r\n };\r\n\r\n CollapseContentTrigger.prototype.toggle_intent = function (evt) {\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n \r\n this.region.toggle();\r\n };\r\n\r\n Behaviors.register_behavior(CollapseContentRegion);\r\n Behaviors.register_behavior(CollapseContentTrigger);\r\n\r\n module.CollapseContentRegion = CollapseContentRegion;\r\n module.CollapseContentTrigger = CollapseContentTrigger;\r\n\r\n return module;\r\n}));\r\n","(function ($) {\r\n $(document).ready(function(){\r\n $('.ChangeOnHover-block__title > li > a').hover(function() {\r\n $(this).tab('show');\r\n });\r\n \r\n })\r\n}(window.jQuery));\r\n\r\n\r\n(function ($) {\r\n $(document).ready(function(){\r\n if($(\".ChangeOnHover-Accordion_title\").hasClass(\"collapsed\")){\r\n $(\".ChangeOnHover-Accordion_title\").addClass(\"show-collapse\");\r\n }\r\n })\r\n}(window.jQuery));","(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"ContentSlider\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.ContentSlider = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(window, function ($, Behaviors) {\r\n //TODO: Move this file out of `frontend.prebuilt.js` and into the global script pack\r\n \"use strict\";\r\n var module = {};\r\n \r\n function ContentSlider() {\r\n Behaviors.init(ContentSlider, this, arguments);\r\n this.element = this.$elem[0];\r\n this.left_arrow = this.$elem.data(\"contentslider-leftarrow\");\r\n this.right_arrow = this.$elem.data(\"contentslider-rightarrow\");\r\n this.dots = this.$elem.data(\"contentslider-dots\");\r\n this.dots_icon = this.$elem.data(\"contentslider-dotsicon\");\r\n this.autoplay_timeout = this.$elem.data(\"contentslider-autoplay\");\r\n\r\n this.item_margin = this.$elem.data(\"contentslider-itemmargin\");\r\n\r\n this.number_of_items = this.$elem.data(\"contentslider-itemsperview\");\r\n this.center = this.$elem.data(\"contentslider-center\");\r\n this.number_of_items_medium = this.$elem.data(\"contentslider-itemsperviewmedium\");\r\n this.center_medium = this.$elem.data(\"contentslider-centermedium\");\r\n this.number_of_items_responsive = this.$elem.data(\"contentslider-itemsperviewresponsive\");\r\n this.center_responsive = this.$elem.data(\"contentslider-centerresponsive\");\r\n\r\n this.slide_stage_padding = this.$elem.data(\"contentslider-stagepadding\");\r\n this.slide_stage_padding_medium = this.$elem.data(\"contentslider-stagepaddingmedium\");\r\n this.slide_stage_padding_responsive = this.$elem.data(\"contentslider-stagepaddingresponsive\");\r\n \r\n this.has_loop = this.$elem.data(\"contentslider-loop\") !== undefined;\r\n this.has_autoplay = this.autoplay_timeout !== undefined;\r\n this.has_hoverpause = this.$elem.data(\"contentslider-hoverpause\") !== undefined;\r\n this.has_dots = this.dots !== \"none\";\r\n this.has_nav = false;\r\n if (this.left_arrow) {\r\n this.has_nav = true;\r\n }\r\n \r\n if (this.right_arrow) {\r\n this.has_nav = true;\r\n }\r\n this.initOwlCarousel();\r\n };\r\n \r\n Behaviors.inherit(ContentSlider, Behaviors.Behavior);\r\n \r\n ContentSlider.QUERY = \"[data-contentslider]\";\r\n \r\n ContentSlider.ELEMENTS = {\r\n heightContainer: \".scrollContainerHeight\",\r\n widthContainer: \".scrollContainerWidth\",\r\n sliderContents: \".horizontalContents\",\r\n section: \".section\",\r\n progressBar: \".progressBarFill\",\r\n progressBall: \".progressBall\",\r\n carousel: \".owl-carousel\"\r\n };\r\n \r\n ContentSlider.prototype.dots_class = function () {\r\n return \"owl-dots ContentSlider-dots ContentSlider-dots--style_\" + this.dots;\r\n };\r\n \r\n ContentSlider.prototype.dot_class = function () {\r\n if (this.dots_icon) {\r\n return \"ContentSlider-dot ContentSlider-dot--style_\" + this.dots + \" \" + this.dots_icon;\r\n } else {\r\n return \"ContentSlider-dot ContentSlider-dot--style_\" + this.dots;\r\n }\r\n };\r\n \r\n ContentSlider.prototype.initOwlCarousel = function() {\r\n this.carousel = this.$elem.find(ContentSlider.ELEMENTS.carousel).owlCarousel({\r\n loop: this.has_loop,\r\n dots: this.has_dots,\r\n dotsClass: this.dots_class(),\r\n dotClass: this.dot_class(),\r\n margin: this.item_margin,\r\n nav: this.has_nav,\r\n navClass: [\"owl-prev \" + this.left_arrow, \"owl-next \" + this.right_arrow],\r\n //onDragged: self.updatePagination.bind(self),\r\n autoplay: this.has_autoplay,\r\n autoplayTimeout: this.autoplay_timeout,\r\n autoplayHoverPause: this.has_hoverpause,\r\n responsive : {\r\n 0 : {\r\n items: this.number_of_items_responsive,\r\n slideBy: this.number_of_items_responsive,\r\n center: this.center_responsive,\r\n stagePadding: this.slide_stage_padding_responsive,\r\n },\r\n 768 : {\r\n items: this.number_of_items_medium,\r\n slideBy: this.number_of_items_medium, \r\n center: this.center_medium,\r\n stagePadding: this.slide_stage_padding_medium,\r\n },\r\n 1024 : {\r\n items: this.number_of_items,\r\n slideBy: this.number_of_items, \r\n center: this.center,\r\n stagePadding: this.slide_stage_padding,\r\n },\r\n },\r\n });\r\n //self.updateNav(0);\r\n };\r\n\r\n \r\n \r\n ContentSlider.prototype.init = function () {\r\n this.fixed = false;\r\n //this.setHeight();\r\n //this.handleScroll();\r\n //this.handleResize();\r\n this.initMobileSlider();\r\n //this.handleDrag();\r\n //this.element.querySelector(\".currentSlide\").innerHTML = \"01\";\r\n //this.element.querySelector(\".maxSlide\").innerHTML = \"0\".concat(this.sectionNumber);\r\n //this.setTitlePos();\r\n };\r\n \r\n ContentSlider.prototype.setHeight = function () {\r\n this.elementHeight = this.element.querySelector(ContentSlider.ELEMENTS.section).offsetHeight;\r\n this.sectionNumber = this.element.querySelectorAll(ContentSlider.ELEMENTS.section).length;\r\n var width = this.element.querySelector(ContentSlider.ELEMENTS.section).offsetWidth;\r\n this.height = (this.sectionNumber - 1) * (width * 3) + this.elementHeight;\r\n this.element.querySelector(ContentSlider.ELEMENTS.heightContainer).style.height = \"\".concat(this.height, \"px\");\r\n };\r\n \r\n ContentSlider.prototype.handleScroll = function () {\r\n var self = this;\r\n wContainer = self.element.querySelector(ContentSlider.ELEMENTS.widthContainer), sContents = self.element.querySelector(ContentSlider.ELEMENTS.sliderContents), pBar = self.element.querySelector(ContentSlider.ELEMENTS.progressBar);\r\n pBall = self.element.querySelector(ContentSlider.ELEMENTS.progressBall);\r\n window.addEventListener(\"scroll\", function () {\r\n self.scrollHandler.call(self, wContainer, sContents, pBar, pBall);\r\n });\r\n };\r\n \r\n ContentSlider.prototype.scrollHandler = function(wContainer, sContents, pBar, pBall) {\r\n var self = this;\r\n var s = self.getOffsetTop(self.element) - window.scrollY;\r\n self.currentScroll = window.scrollY;\r\n var pFill = s * -1 / (self.height - self.elementHeight) * 100;\r\n\r\n if (s <= 0 && s >= (self.height - self.elementHeight) * -1 && self.fixed === false) {\r\n document.body.style.overscrollBehaviorX = 'none';\r\n wContainer.style.position = \"fixed\";\r\n self.fixed = true;\r\n } else if (s > 0) {\r\n wContainer.style.position = \"absolute\";\r\n wContainer.classList.add('top');\r\n wContainer.classList.remove('bottom');\r\n sContents.style.transform = \"translate3d(0px, 0px, 0px)\";\r\n pBar.style.width = \"0%\";\r\n pBall.style.left = \"0%\";\r\n self.fixed = false;\r\n } else if (s <= (self.height - self.elementHeight) * -1) {\r\n var height = (self.height - self.elementHeight) * -1 / 3;\r\n wContainer.style.position = \"absolute\";\r\n wContainer.classList.add('bottom');\r\n wContainer.classList.remove('top');\r\n sContents.style.transform = \"translate3d(\".concat(height, \"px, 0px, 0px)\");\r\n pBar.style.width = \"100%\";\r\n pBall.style.left = \"100%\";\r\n document.body.style.overscrollBehaviorX = 'auto';\r\n self.fixed = false;\r\n }\r\n\r\n if (self.fixed) {\r\n var ns = s / 3;\r\n self.ns = ns;\r\n var wScroll = s * -1;\r\n\r\n var _height = (self.height - self.elementHeight) * -1 / 3;\r\n\r\n if (ns) sContents.style.transform = \"translate3d(\".concat(ns, \"px, 0px, 0px)\");\r\n pBar.style.width = \"\".concat(pFill, \"%\");\r\n pBall.style.left = \"\".concat(pFill, \"%\");\r\n var newIndex = Math.floor(self.sectionNumber * (pFill / 100)) + 1;\r\n\r\n if (newIndex < 10) {\r\n newIndex = \"0\".concat(newIndex);\r\n }\r\n\r\n var maxIndex = self.sectionNumber;\r\n\r\n if (maxIndex < 10) {\r\n maxIndex = \"0\".concat(maxIndex);\r\n }\r\n\r\n self.element.querySelector(\".currentSlide\").innerHTML = newIndex;\r\n self.element.querySelector(\".maxSlide\").innerHTML = maxIndex; // if(pFill >= 90 && !self.circleOpen){\r\n // self.toggleProgressCircle('open');\r\n // }else if(pFill < 90 && self.circleOpen){\r\n // self.toggleProgressCircle('close');\r\n // }\r\n // if(newIndex > self.sectionNum - 1){\r\n // return;\r\n // }else if(newIndex !== self.currentIndex){\r\n // self.currentIndex = newIndex;\r\n // }\r\n // self.changeImageOpacity();\r\n }\r\n\r\n self.scrollPos = s;\r\n };\r\n \r\n ContentSlider.prototype.handleDrag = function() {\r\n var self = this;\r\n var wee = self.element.querySelector(ContentSlider.ELEMENTS.sliderContents);\r\n wee.addEventListener('mousedown', function (e) {\r\n self.mousedown = true;\r\n self.x = e.clientX;\r\n });\r\n wee.addEventListener('mouseup', function (e) {\r\n self.mousedown = false;\r\n });\r\n wee.addEventListener('mousemove', function (e) {\r\n if (self.mousedown === true && self.scrollPos < +30 && self.scrollPos > (self.height - self.elementHeight) * -1 - 30) {\r\n var ws = window.scrollY,\r\n change = (self.x - e.clientX) * 3,\r\n newPos = ws += change;\r\n window.scrollTo(0, newPos);\r\n self.x = e.clientX;\r\n }\r\n });\r\n };\r\n \r\n ContentSlider.prototype.getOffsetTop = function(ele) {\r\n var offsetTop = 0;\r\n\r\n while (ele) {\r\n offsetTop += ele.offsetTop;\r\n ele = ele.offsetParent;\r\n }\r\n\r\n return offsetTop;\r\n };\r\n \r\n ContentSlider.prototype.setTitlePos = function() {\r\n var width = this.element.querySelector(\".fl-row-content\").offsetWidth,\r\n title = this.element.querySelector(\".sliderLabel\"),\r\n prog = this.element.querySelector(\".progressBarContainer\");\r\n var leftPos = (window.innerWidth - width) / 2;\r\n title.style.left = \"\".concat(leftPos, \"px\");\r\n prog.style.left = \"\".concat(leftPos, \"px\");\r\n };\r\n \r\n ContentSlider.prototype.handleResize = function() {\r\n var self = this,\r\n wContainer = self.element.querySelector(ContentSlider.ELEMENTS.widthContainer),\r\n sContents = self.element.querySelector(ContentSlider.ELEMENTS.sliderContents),\r\n pBar = self.element.querySelector(ContentSlider.ELEMENTS.progressBar),\r\n pBall = self.element.querySelector(ContentSlider.ELEMENTS.progressBall);\r\n window.addEventListener(\"resize\", function () {\r\n self.setHeight();\r\n self.setTitlePos();\r\n self.scrollHandler.call(self, wContainer, sContents, pBar, pBall);\r\n this.setTimeout(function () {\r\n self.setMobileOffset();\r\n }, 500);\r\n });\r\n };\r\n \r\n ContentSlider.prototype.setMobileOffset = function() {\r\n var offset = $(\".owl-stage\").offset().left;\r\n $(\".sliderLabel\").css(\"margin-left\", \"\".concat(offset, \"px\"));\r\n $(\".progressBarContainerMobile\").css(\"margin-left\", \"\".concat(offset, \"px\"));\r\n };\r\n \r\n ContentSlider.prototype.updatePagination = function(event) {\r\n var index = event.item.index;\r\n this.updateNav(index);\r\n };\r\n \r\n ContentSlider.prototype.updateNav = function(index) {\r\n var current = this.element.querySelector(\".currentSlideMobile\");\r\n var slideMax = this.element.querySelector(\".maxSlideMobile\");\r\n var max = this.element.querySelectorAll(\".mobile-slider-item\").length;\r\n index++;\r\n\r\n if (index < 10) {\r\n index = \"0\".concat(index);\r\n }\r\n\r\n if (max < 10) {\r\n max = \"0\".concat(max);\r\n }\r\n\r\n current.innerHTML = index;\r\n slideMax.innerHTML = max;\r\n var percent = index / max * 100;\r\n var ball = this.element.querySelector(\".progressBallMobile\");\r\n var fill = this.element.querySelector(\".progressBarFillMobile\");\r\n ball.style.left = \"\".concat(percent, \"%\");\r\n fill.style.width = \"\".concat(percent, \"%\");\r\n };\r\n \r\n Behaviors.register_behavior(ContentSlider);\r\n \r\n module.ContentSlider = ContentSlider;\r\n \r\n return module;\r\n}));","/* Paginate.js\r\n * A progressively-enhancing infinite scroll library\r\n * ©2014 HUEMOR Designs All Rights Reserved\r\n */\r\n\r\n/*global jQuery, define, console, window, document*/\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define('depaginate', ['jquery', \"Behaviors\"], factory);\r\n } else if (root.jQuery) {\r\n root.PaginateJS = factory(root.jQuery, root.Behaviors);\r\n } else {\r\n console.error(\"No jQuery found. Load jQuery before this module or use an AMD-compliant loader.\");\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n \r\n var module = {};\r\n \r\n function Pager(elem, page_select_handler) {\r\n Behaviors.init(Pager, this, arguments);\r\n \r\n this.links = {};\r\n this.current = null;\r\n this.$pager = $(elem);\r\n this.min_page_count = Infinity;\r\n this.max_page_count = 0;\r\n \r\n this.$pager.addClass(\"is-Paginate--managed\");\r\n\r\n this.page_select_handler = page_select_handler;\r\n\r\n this.features = this.$pager.data(\"paginate-features\");\r\n\r\n if (this.features === undefined) {\r\n this.features = \"replaceState\";\r\n }\r\n\r\n console.log(\"Pager Features:\" + this.features);\r\n this.features = this.features.split(\" \");\r\n }\r\n \r\n Behaviors.inherit(Pager, Behaviors.Behavior);\r\n \r\n Pager.QUERY = \"[data-paginate='pager']\";\r\n \r\n Pager.DEFAULT_LINK = {\r\n \"loaded\": false,\r\n \"requested\": false,\r\n \"pending\": false,\r\n \"current\": false\r\n };\r\n \r\n Pager.prototype.is_page_loaded = function (pagenumber) {\r\n return this.links[pagenumber].loaded;\r\n };\r\n \r\n Pager.prototype.set_current_page = function (pagenumber) {\r\n var i = 0, pageid;\r\n \r\n if (this.current === pagenumber) {\r\n return;\r\n }\r\n \r\n this.current = pagenumber;\r\n this.links[pagenumber] = this.links[pagenumber] || $.extend({}, Pager.DEFAULT_LINK);\r\n \r\n for (pageid in this.links) {\r\n if (this.links.hasOwnProperty(pageid)) {\r\n this.links[pageid].current = pageid === pagenumber;\r\n }\r\n }\r\n \r\n if (this.links[pagenumber].$pagerContents !== undefined) {\r\n this.$pager.children().detach();\r\n this.$pager.append(this.links[pagenumber].$pagerContents);\r\n }\r\n \r\n if (this.links[pagenumber].href !== undefined) {\r\n if (this.features.indexOf(\"replaceState\") > -1 && window.history.replaceState) {\r\n window.history.replaceState({transition: true, url: this.links[pagenumber].href}, \"\", this.links[pagenumber].href);\r\n }\r\n }\r\n };\r\n \r\n Pager.prototype.read_pager = function (pagerElem) {\r\n var $newPager = $(pagerElem),\r\n pagerThis = this;\r\n \r\n $newPager.find(\"[data-paginate='page']\").each(function (index, pageElem) {\r\n var $newPage = $(pageElem),\r\n page = $newPage.data(\"paginate-page\"),\r\n isCurrent = $newPage.data(\"paginate-current\") !== undefined,\r\n href = $newPage.attr(\"href\");\r\n \r\n pagerThis.links[page] = pagerThis.links[page] || $.extend({}, Pager.DEFAULT_LINK);\r\n \r\n pagerThis.links[page].href = href || pagerThis.links[page].href;\r\n pagerThis.links[page].current = isCurrent;\r\n \r\n if (isCurrent) {\r\n pagerThis.current = page;\r\n }\r\n \r\n if (pagerThis.links[page].pending) {\r\n pagerThis.load_page(page);\r\n }\r\n \r\n if (page > pagerThis.max_page_count) {\r\n pagerThis.max_page_count = page;\r\n }\r\n \r\n if (page < pagerThis.min_page_count) {\r\n pagerThis.min_page_count = page;\r\n }\r\n\r\n $newPage.on(\"click\", function (evt) {\r\n evt.preventDefault();\r\n\r\n if (pagerThis.page_select_handler) {\r\n pagerThis.page_select_handler(pagerThis, page);\r\n }\r\n });\r\n });\r\n \r\n this.links[this.current] = this.links[this.current] || $.extend({}, Pager.DEFAULT_LINK);\r\n this.links[this.current].$pagerContents = $newPager.children();\r\n \r\n if (this.links[this.current].$pagerContents !== undefined) {\r\n this.$pager.children().detach();\r\n this.$pager.append(this.links[this.current].$pagerContents);\r\n }\r\n };\r\n \r\n Pager.prototype.load_page = function (pagenumber, on_success, on_failure) {\r\n var paginateThis = this;\r\n \r\n if (this.links[pagenumber] === undefined || this.links[pagenumber].href === undefined) {\r\n this.links[pagenumber] = $.extend({}, this.links[pagenumber], Pager.DEFAULT_LINK);\r\n this.links[pagenumber].pending = true;\r\n this.links[pagenumber].on_success = on_success || this.links[pagenumber].on_success;\r\n this.links[pagenumber].on_failure = on_failure || this.links[pagenumber].on_failure;\r\n \r\n return;\r\n }\r\n \r\n if (this.links[pagenumber].requested || this.links[pagenumber].loaded) {\r\n return;\r\n }\r\n \r\n this.links[pagenumber].pending = false;\r\n this.links[pagenumber].requested = true;\r\n \r\n $.ajax({\r\n \"url\": this.links[pagenumber].href,\r\n \"dataType\": \"html\"\r\n }).done(function (data, textStatus, jqXHR) {\r\n if (paginateThis.links[pagenumber].on_success !== undefined) {\r\n paginateThis.links[pagenumber].on_success(data, textStatus, jqXHR);\r\n }\r\n \r\n if (on_success !== undefined) {\r\n on_success(data, textStatus, jqXHR);\r\n }\r\n \r\n paginateThis.links[pagenumber].loaded = true;\r\n }).fail(function (jqXHR, textStatus, errorThrown) {\r\n if (paginateThis.links[pagenumber].on_failure !== undefined) {\r\n paginateThis.links[pagenumber].on_failure(jqXHR, textStatus, errorThrown);\r\n }\r\n \r\n if (on_failure !== undefined) {\r\n on_failure(jqXHR, textStatus, errorThrown);\r\n }\r\n });\r\n };\r\n \r\n Pager.prototype.is_first_page = function (test_page) {\r\n return (test_page !== null && test_page === this.min_page_count);\r\n };\r\n \r\n Pager.prototype.is_last_page = function (test_page) {\r\n return (test_page !== null && test_page === this.max_page_count);\r\n };\r\n \r\n module.Pager = Pager;\r\n \r\n function Region(elem, on_region_scrolled) {\r\n var $extantRegion = $(elem);\r\n Behaviors.init(Region, this, arguments);\r\n \r\n this.name = $extantRegion.data(\"paginate-region\");\r\n\r\n this.load_methods = $extantRegion.data(\"paginate-methods\");\r\n\r\n if (this.load_methods === undefined) {\r\n this.load_methods = \"scroll\";\r\n }\r\n\r\n console.log(\"LoadMethods:\" + this.load_methods);\r\n this.load_methods = this.load_methods.split(\" \");\r\n\r\n this.features = $extantRegion.data(\"paginate-features\");\r\n\r\n if (this.features === undefined) {\r\n this.features = \"scrollOnLoad\";\r\n }\r\n\r\n console.log(\"Region Features:\" + this.features);\r\n this.features = this.features.split(\" \");\r\n \r\n this.pages = {};\r\n this.pagenumbers = [];\r\n \r\n this.min_page_loaded = Infinity;\r\n this.max_page_loaded = 0;\r\n \r\n this.$region = $extantRegion;\r\n \r\n this.$parentScroller = null;\r\n this.lastScrollTop = 0;\r\n \r\n this.on_region_scrolled = on_region_scrolled;\r\n \r\n this.$region.addClass(\"is-Paginate--managed\");\r\n }\r\n \r\n Behaviors.inherit(Region, Behaviors.Behavior);\r\n \r\n Region.QUERY = \"[data-paginate='region']\";\r\n \r\n /* Called to append a new page to the region.\r\n * \r\n * Region contents will be extracted from the given region element and\r\n * appended to the existing region, such that any existing content belonging\r\n * to pages marked with a lower page number will appear before your page\r\n * content, and any existing content belonging to pages marked with a higher\r\n * page number will appear after your page content.\r\n * \r\n * Already inserted pages will not be reinserted into the region.\r\n * \r\n * As this function inserts content into the page, it will be presented to\r\n * Behaviors to ensure any Behaviors on the new page content can locate\r\n * correctly.\r\n * \r\n * An event will be fired from the region's element called depaginate_load\r\n * which serves to indicate when a new page has loaded. Do not use this\r\n * event to check if new content has been added to the page, use Behaviors'\r\n * register_behavior or register_content_listener functions instead. This\r\n * event will be called before behaviors have been located on their\r\n * elements.\r\n */\r\n Region.prototype.read_page_region = function (pageNumber, regionElem) {\r\n var $newRegion = $(regionElem),\r\n itemSelector = $newRegion.data(\"paginate-selector\") || \"> *\",\r\n prevPageNumberId = 0,\r\n nextPageNumberId = this.pagenumbers.length,\r\n nextPageNumber,\r\n prevPageNumber,\r\n pageAlreadyExists = false,\r\n i = 0,\r\n $newItems = $newRegion.find(itemSelector),\r\n $firstItem = $newItems.first(),\r\n $lastItem = $newItems.last(),\r\n oldPageTop = 0,\r\n newPageTop = 0,\r\n evt;\r\n \r\n if (this.firstVisiblePage !== undefined) {\r\n oldPageTop = this.page_top_position(this.firstVisiblePage);\r\n }\r\n\r\n for (i = 0; i < this.pagenumbers.length; i += 1) {\r\n if (this.pagenumbers[i] < pageNumber) {\r\n prevPageNumberId = i;\r\n prevPageNumber = this.pagenumbers[i];\r\n } else if (this.pagenumbers[i] === pageNumber) {\r\n pageAlreadyExists = true;\r\n } else {\r\n nextPageNumber = this.pagenumbers[i];\r\n nextPageNumberId = i;\r\n break;\r\n }\r\n }\r\n \r\n if (!pageAlreadyExists) {\r\n this.pagenumbers.splice(nextPageNumberId, 0, pageNumber);\r\n \r\n if (this.pages[prevPageNumber] !== undefined) {\r\n $newItems = $newItems.insertAfter(this.pages[prevPageNumber].$lastItem);\r\n } else if (this.pages[nextPageNumber] !== undefined) {\r\n $newItems = $newItems.insertBefore(this.pages[nextPageNumber].$firstItem);\r\n } //else do nothing since this obviously must be the original region\r\n \r\n $firstItem = $newItems.first();\r\n $lastItem = $newItems.last();\r\n \r\n this.pages[pageNumber] = this.pages[pageNumber] || {};\r\n this.pages[pageNumber].$newItems = $newItems;\r\n this.pages[pageNumber].$firstItem = $firstItem;\r\n this.pages[pageNumber].$lastItem = $lastItem;\r\n\r\n evt = jQuery.Event(\"depaginate_load\");\r\n evt.region = this;\r\n evt.target = this.$region[0];\r\n evt.$newItems = $newItems;\r\n\r\n this.$region.trigger(evt);\r\n \r\n Behaviors.content_ready($newItems);\r\n }\r\n \r\n if (pageNumber < this.min_page_loaded) {\r\n this.min_page_loaded = pageNumber;\r\n }\r\n \r\n if (pageNumber > this.max_page_loaded) {\r\n this.max_page_loaded = pageNumber;\r\n }\r\n\r\n if (this.firstVisiblePage !== undefined) {\r\n newPageTop = this.page_top_position(this.firstVisiblePage);\r\n\r\n if (this.features.indexOf(\"scrollOnLoad\") > -1) {\r\n window.setTimeout(\r\n this.scroll_by_delta.bind(this, newPageTop - oldPageTop),\r\n 50\r\n );\r\n }\r\n }\r\n };\r\n \r\n Region.prototype.register_scroll_handler = function () {\r\n var cssOverflowX,\r\n regionThis = this;\r\n \r\n if (this.$parentScroller !== null) {\r\n this.$parentScroller.off(\"scroll.paginate\");\r\n }\r\n\r\n this.$parentScroller = this.$region;\r\n\r\n while (this.$parentScroller.length !== 0 && this.$parentScroller.get(0) !== document) {\r\n cssOverflowX = this.$parentScroller.css(\"overflow-x\");\r\n\r\n if (cssOverflowX === \"visible\" || cssOverflowX === \"hidden\") {\r\n this.$parentScroller = this.$parentScroller.parent();\r\n } else {\r\n break;\r\n }\r\n }\r\n \r\n regionThis.on_scroll({\"target\": this.$parentScroller[0]});\r\n this.$parentScroller.on(\"scroll.paginate\", function (evt) {\r\n regionThis.on_scroll(evt);\r\n });\r\n\r\n this.lastScrollTop = this.$parentScroller.scrollTop();\r\n };\r\n \r\n Region.prototype.on_scroll = function (evt) {\r\n var $target = $(evt.target),\r\n scrollTop = $target.scrollTop(),\r\n scrollBottom = scrollTop + (evt.target !== document ? $target.height() : $(window).height()),\r\n targetTop = evt.target !== document ? $target.position().top : 0,\r\n targetAdjust = evt.target !== document ? scrollTop : 0,\r\n i = 0,\r\n firstVisibleTop = null,\r\n firstVisiblePage = null,\r\n lastVisiblePage = null,\r\n lastVisibleBottom = null,\r\n scrollDelta = scrollTop - this.lastScrollTop,\r\n stopOuterLoopSentinel = false,\r\n regionThis = this;\r\n \r\n this.lastScrollTop = scrollDelta;\r\n \r\n function pageEach(index, itemElem) {\r\n var $itemElem = $(itemElem),\r\n itemTop = targetAdjust + $itemElem.position().top - targetTop,\r\n itemBottom = itemTop + $itemElem.height(),\r\n isVisible = (scrollTop <= itemTop && itemTop <= scrollBottom) ||\r\n (scrollTop <= itemBottom && itemBottom <= scrollBottom) ||\r\n (itemTop <= scrollTop && scrollBottom <= itemBottom);\r\n \r\n if (!isVisible) {\r\n if (lastVisiblePage !== null) {\r\n stopOuterLoopSentinel = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (firstVisiblePage === null) {\r\n firstVisiblePage = regionThis.pagenumbers[i];\r\n firstVisibleTop = itemTop;\r\n }\r\n \r\n lastVisiblePage = regionThis.pagenumbers[i];\r\n lastVisibleBottom = itemTop + $itemElem.height();\r\n\r\n return false;\r\n }\r\n \r\n //Determine what pages are visible now\r\n if (this.pagenumbers.length === 0) {\r\n console.log(\"There are no page numbers.\");\r\n }\r\n \r\n for (i = 0; i < this.pagenumbers.length; i += 1) {\r\n if (this.pages[this.pagenumbers[i]].$newItems === 0) {\r\n console.log(\"There are no pages within page \" + this.pagenumbers[i]);\r\n }\r\n \r\n this.pages[this.pagenumbers[i]].$newItems.each(pageEach);\r\n \r\n if (stopOuterLoopSentinel) {\r\n stopOuterLoopSentinel = false;\r\n break;\r\n }\r\n }\r\n \r\n if (firstVisiblePage === null) {\r\n console.log(\"First visible page did NOT get set. Dropping the scroll event.\");\r\n return;\r\n }\r\n \r\n this.firstVisiblePage = firstVisiblePage;\r\n this.lastVisiblePage = lastVisiblePage;\r\n this.firstVisibleTop = firstVisibleTop;\r\n this.lastVisibleBottom = lastVisibleBottom;\r\n\r\n if (this.load_methods.indexOf(\"scroll\") > -1) {\r\n this.on_region_scrolled(this, scrollTop, scrollBottom, scrollDelta, firstVisiblePage, lastVisiblePage, firstVisibleTop, lastVisibleBottom);\r\n }\r\n };\r\n \r\n Region.prototype.first_loaded_page = function () {\r\n return this.min_page_loaded;\r\n };\r\n \r\n Region.prototype.last_loaded_page = function () {\r\n return this.max_page_loaded;\r\n };\r\n \r\n Region.prototype.set_additional_content_indicators = function (has_next_page, has_prev_page) {\r\n if (has_next_page) {\r\n this.$region.addClass(\"is-Paginate--has_next_page\");\r\n this.$region.removeClass(\"is-Paginate--no_next_page\");\r\n } else {\r\n this.$region.removeClass(\"is-Paginate--has_next_page\");\r\n this.$region.addClass(\"is-Paginate--no_next_page\");\r\n }\r\n \r\n if (has_prev_page) {\r\n this.$region.addClass(\"is-Paginate--has_prev_page\");\r\n this.$region.removeClass(\"is-Paginate--no_prev_page\");\r\n } else {\r\n this.$region.removeClass(\"is-Paginate--has_prev_page\");\r\n this.$region.addClass(\"is-Paginate--no_prev_page\");\r\n }\r\n };\r\n \r\n /* Returns the position of the top of a particular page.\r\n */\r\n Region.prototype.page_top_position = function (pagenumber) {\r\n var page = this.pages[pagenumber],\r\n $firstItem,\r\n measuredOffset,\r\n $parentScroller = this.$parentScroller,\r\n scrollerOffset = 0,\r\n encounteredScroller = false;\r\n \r\n if (page === undefined) {\r\n console.log(\"Missing page: \" + pagenumber);\r\n console.log(this.pages);\r\n \r\n if (pagenumber < this.min_page_loaded || pagenumber === null) {\r\n pagenumber = this.min_page_loaded;\r\n }\r\n \r\n if (pagenumber > this.max_page_loaded) {\r\n pagenumber = this.max_page_loaded;\r\n }\r\n \r\n page = this.pages[pagenumber];\r\n }\r\n \r\n $firstItem = page.$firstItem;\r\n measuredOffset = $firstItem.offset().top;\r\n if ($parentScroller[0] !== document) {\r\n scrollerOffset = $parentScroller.offset().top;\r\n }\r\n \r\n return measuredOffset - scrollerOffset;\r\n };\r\n \r\n /* Scroll the region by a particular delta. */\r\n Region.prototype.scroll_by_delta = function (scrollDelta) {\r\n var $parentScroller = this.$parentScroller;\r\n \r\n $parentScroller.scrollTop($parentScroller.scrollTop() + scrollDelta);\r\n };\r\n \r\n Region.prototype.scroll_absolutely = function (scrollAbs) {\r\n var $parentScroller = this.$parentScroller;\r\n \r\n $parentScroller.scrollTop(scrollAbs);\r\n };\r\n \r\n module.Region = Region;\r\n \r\n function Paginate(elem) {\r\n var $extantPager = $(elem).find(Pager.QUERY),\r\n $extantRegions = $(elem).find(Region.QUERY),\r\n currentPage = $(elem).data(\"paginate-page\"),\r\n paginateThis = this;\r\n \r\n Behaviors.init(Paginate, this, arguments);\r\n \r\n if ($extantPager.length === 0) {\r\n console.error(\"No pager was found in this paginage instance.\");\r\n return;\r\n }\r\n \r\n if (this.$elem.attr('id') === undefined) {\r\n console.error(\"This paginate needs an id before it can be used.\");\r\n return;\r\n }\r\n \r\n console.log(\"page: \" + currentPage);\r\n \r\n this.$context = $(elem);\r\n this.id = this.$context.attr(\"id\");\r\n \r\n function pshClosure() {\r\n paginateThis.page_select_handler.apply(paginateThis, arguments);\r\n }\r\n\r\n this.pager = Pager.locate($extantPager.get(0), pshClosure);\r\n \r\n if ($extantPager.data(\"paginate-count\") === 1) {\r\n console.log(\"Not activating depaginate on a region with only one page.\");\r\n return;\r\n }\r\n \r\n this.pager.set_current_page(currentPage);\r\n this.pager.read_pager($extantPager.get(0));\r\n \r\n this.regions = {};\r\n this.regionNames = [];\r\n \r\n this.currentPage = currentPage;\r\n \r\n function orsClosure() {\r\n paginateThis.on_region_scrolled.apply(paginateThis, arguments);\r\n }\r\n \r\n this.features = $extantPager.data(\"paginate-features\");\r\n\r\n if (this.features === undefined) {\r\n this.features = \"backScroll\";\r\n }\r\n\r\n console.log(\"Paginate Features:\" + this.features);\r\n this.features = this.features.split(\" \");\r\n\r\n $extantRegions.each(function (index, elem) {\r\n var $extantRegion = $(elem),\r\n regionName = $extantRegion.data(\"paginate-region\"),\r\n region,\r\n currentPage = paginateThis.currentPage;\r\n \r\n console.log(\"page: \" + currentPage);\r\n \r\n function scrollBack() {\r\n console.log(\"Scrolling back the user to \" + region.page_top_position(currentPage) + \" (page: \" + currentPage + \")\");\r\n region.scroll_absolutely(region.page_top_position(currentPage));\r\n }\r\n \r\n paginateThis.regionNames.push(regionName);\r\n \r\n region = paginateThis.regions[regionName] || Region.locate(elem, orsClosure);\r\n paginateThis.regions[regionName] = region;\r\n \r\n region.read_page_region(currentPage, elem);\r\n region.register_scroll_handler();\r\n \r\n paginateThis.update_region_indicators(region);\r\n \r\n if (!paginateThis.pager.is_first_page(currentPage) && paginateThis.features.indexOf(\"backScroll\") > -1) {\r\n //User pressed back button, scroll the region into view\r\n \r\n $(document).ready(scrollBack);\r\n $(window).on(\"load\", function () {\r\n window.setTimeout(scrollBack, 1500);\r\n });\r\n }\r\n });\r\n }\r\n \r\n Behaviors.inherit(Paginate, Behaviors.Behavior);\r\n \r\n Paginate.QUERY = \"[data-paginate='paginate']\";\r\n \r\n Paginate.prototype.page_load_success = function (data, textStatus, jqXHR) {\r\n var $data = $(data),\r\n i = 0,\r\n $dataPaginate,\r\n $dataRegion,\r\n $dataPager,\r\n region = null,\r\n paginateThis = this,\r\n next_page = 0;\r\n\r\n $dataPaginate = $data.find(\"#\" + this.id);\r\n \r\n if ($dataPaginate.length === 0) {\r\n $dataPaginate = $data.filter(\"#\" + this.id);\r\n }\r\n \r\n if ($dataPaginate.length === 0) {\r\n console.error(\"DEPAGINATE: The paginate context with ID \" + this.id + \" could not be found in the loaded page. Errors may result.\");\r\n }\r\n \r\n next_page = $dataPaginate.data(\"paginate-page\");\r\n\r\n for (i = 0; i < this.regionNames.length; i += 1) {\r\n $dataRegion = $dataPaginate.find(\"[data-paginate-region='\" + this.regionNames[i] + \"']\");\r\n\r\n if ($dataRegion.length > 0) {\r\n region = this.regions[this.regionNames[i]];\r\n region.read_page_region(next_page, $dataRegion[0]);\r\n }\r\n }\r\n\r\n $dataPager = $dataPaginate.find(Pager.QUERY);\r\n $dataPager.each(function (index, pagerElem) {\r\n paginateThis.pager.read_pager(pagerElem);\r\n });\r\n\r\n this.pager.set_current_page(next_page);\r\n this.update_region_indicators(region);\r\n };\r\n\r\n Paginate.prototype.page_select_handler = function (pager, pagenumber) {\r\n var paginateThis = this;\r\n if (this.pager.is_page_loaded(pagenumber)) {\r\n return;\r\n }\r\n\r\n function on_success() {\r\n paginateThis.page_load_success.apply(paginateThis, arguments);\r\n }\r\n\r\n this.pager.load_page(pagenumber, on_success);\r\n };\r\n\r\n Paginate.prototype.on_region_scrolled = function (region, scrollTop, scrollBottom, scrollDelta, firstVisiblePage, lastVisiblePage, firstVisibleTop, lastVisibleBottom) {\r\n var visible_range = lastVisibleBottom - firstVisibleTop,\r\n visible_pagerange = lastVisiblePage - firstVisiblePage,\r\n average_page_size = visible_range / visible_pagerange,\r\n scroll_direction_down = scrollDelta > 0,\r\n should_load_page,\r\n next_page,\r\n paginateThis = this;\r\n \r\n function on_success() {\r\n paginateThis.page_load_success.apply(paginateThis, arguments);\r\n }\r\n \r\n if (scroll_direction_down) {\r\n should_load_page = scrollBottom + scrollDelta >= lastVisibleBottom;\r\n next_page = lastVisiblePage + 1;\r\n \r\n this.pager.set_current_page(lastVisiblePage);\r\n } else {\r\n should_load_page = scrollTop + scrollDelta < firstVisibleTop;\r\n next_page = firstVisiblePage - 1;\r\n \r\n this.pager.set_current_page(firstVisiblePage);\r\n }\r\n \r\n if (next_page < 0) {\r\n return;\r\n }\r\n \r\n if (should_load_page) {\r\n this.pager.load_page(next_page, on_success);\r\n }\r\n };\r\n \r\n Paginate.prototype.update_region_indicators = function (region) {\r\n region.set_additional_content_indicators(\r\n !this.pager.is_last_page(region.last_loaded_page()),\r\n !this.pager.is_first_page(region.first_loaded_page())\r\n );\r\n };\r\n \r\n module.Paginate = Paginate;\r\n \r\n Behaviors.register_behavior(Paginate);\r\n \r\n return module;\r\n}));","/*global define,google,Promise*/\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"GoogleMap\", [\"jquery\", \"Behaviors\"], factory);\r\n } else {\r\n root.GoogleMap = factory(root.jQuery, root.Behaviors);\r\n }\r\n}(this, function ($, Behaviors) {\r\n \"use strict\";\r\n \r\n var module = {};\r\n \r\n function GoogleMap() {\r\n Behaviors.init(GoogleMap, this, arguments);\r\n \r\n this.load_gmaps().then(this.render_map.bind(this));\r\n }\r\n \r\n Behaviors.inherit(GoogleMap, Behaviors.Behavior);\r\n \r\n GoogleMap.QUERY = \"[data-googlemap]\";\r\n \r\n GoogleMap.prototype.center_specified_by_markup = function () {\r\n return this.$elem.data(\"googlemap-lat\") !== undefined && this.$elem.data(\"googlemap-lng\") !== undefined;\r\n };\r\n \r\n GoogleMap.prototype.determine_default_args = function () {\r\n var args = {\r\n center: {lat: 0, lng: 0},\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n disableDefaultUI: true,\r\n draggable: false,\r\n scrollwheel: false,\r\n zoom: 15\r\n };\r\n \r\n if (this.$elem.data(\"googlemap-draggable\") !== undefined) {\r\n args.draggable = true;\r\n }\r\n \r\n if (this.$elem.data(\"googlemap-scrollzoom\") !== undefined) {\r\n args.scrollwheel = true;\r\n }\r\n \r\n if (this.center_specified_by_markup()) {\r\n args.center = {lat: this.$elem.data(\"googlemap-lat\"),\r\n lng: this.$elem.data(\"googlemap-lng\")};\r\n }\r\n \r\n if (this.$elem.data(\"googlemap-zoom\") !== undefined) {\r\n args.zoom = this.$elem.data(\"googlemap-zoom\");\r\n }\r\n \r\n return args;\r\n };\r\n \r\n GoogleMap.prototype.load_gmaps = function () {\r\n return Promise.resolve().then(function () {\r\n if (window.google) {\r\n return;\r\n } else {\r\n //TODO: Autoload Gmaps API\r\n throw new Error(\"Google Maps API not loaded at time of initialization.\");\r\n }\r\n });\r\n };\r\n \r\n GoogleMap.prototype.render_map = function () {\r\n var $markers = this.$elem.find('[data-googlemap-marker]'), i;\r\n \r\n // create map\r\n this.map = new google.maps.Map(this.$elem[0], this.determine_default_args());\r\n \r\n this.map.markers = [];\r\n for (i = 0; i < $markers.length; i += 1) {\r\n this.add_marker($($markers[i]), this.map);\r\n }\r\n \r\n // center map\r\n this.center_map();\r\n };\r\n \r\n GoogleMap.prototype.add_marker = function ($marker) {\r\n var latlng = new google.maps.LatLng($marker.data('googlemap-lat'), $marker.data('googlemap-lng')),\r\n marker = new google.maps.Marker({\r\n position: latlng,\r\n map: this.map\r\n }),\r\n infowindow;\r\n \r\n this.map.markers.push(marker);\r\n \r\n // if marker contains HTML, add it to an infoWindow\r\n if ($marker.html()) {\r\n infowindow = new google.maps.InfoWindow({\r\n content\t\t: $marker.html()\r\n });\r\n \r\n google.maps.event.addListener(marker, 'click', this.marker_click_intent.bind(this, marker, infowindow));\r\n }\r\n };\r\n \r\n GoogleMap.prototype.marker_click_intent = function (marker, infowindow) {\r\n infowindow.open(this.map, marker);\r\n };\r\n \r\n GoogleMap.prototype.center_map = function () {\r\n var i, marker, latlng, bounds = new google.maps.LatLngBounds();\r\n \r\n // loop through all markers and create bounds\r\n for (i = 0; i < this.map.markers.length; i += 1) {\r\n marker = this.map.markers[i];\r\n latlng = new google.maps.LatLng(marker.position.lat(), marker.position.lng());\r\n bounds.extend(latlng);\r\n }\r\n \r\n if (!this.center_specified_by_markup()) {\r\n if (this.map.markers.length === 1) {\r\n this.map.setCenter(bounds.getCenter());\r\n } else {\r\n this.map.fitBounds(bounds);\r\n }\r\n }\r\n };\r\n \r\n Behaviors.register_behavior(GoogleMap);\r\n \r\n module.GoogleMap = GoogleMap;\r\n \r\n return module;\r\n}));","/*global define, console*/\r\n/*jslint bitwise: true */\r\n/* updated 9/14/2016 */\r\n\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (elt) { /*, from*/\r\n \"use strict\";\r\n var len = this.length >>> 0, from = Number(arguments[1]) || 0, derparam;\r\n from = (from < 0) ? Math.ceil(from) : Math.floor(from);\r\n if (from < 0) {\r\n from += len;\r\n }\r\n\r\n for (derparam; from < len; from += 1) {\r\n if (from in this && this[from] === elt) {\r\n return from;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\n(function (root, factory) {\r\n \"use strict\";\r\n if (typeof define === 'function' && define.amd) {\r\n define(\"betteroffcanvas\", [\"jquery\"], factory);\r\n } else {\r\n // Browser globals\r\n root.betteroffcanvas = factory(root.jQuery);\r\n }\r\n}(this, function ($) {\r\n //BetterOffcanvas\r\n //Works like this:\r\n /*\r\n *