{"version":3,"sources":["respond.js","jquery.bxslider.js","jquery.equalheights.js","jquery.fancybox.pack.js","classie.js","enquire.js","functions.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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":"main.js","sourcesContent":["/* Respond.js: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */\r\n(function( w ){\r\n\r\n\t\"use strict\";\r\n\r\n\t//exposed namespace\r\n\tvar respond = {};\r\n\tw.respond = respond;\r\n\r\n\t//define update even in native-mq-supporting browsers, to avoid errors\r\n\trespond.update = function(){};\r\n\r\n\t//define ajax obj\r\n\tvar requestQueue = [],\r\n\t\txmlHttp = (function() {\r\n\t\t\tvar xmlhttpmethod = false;\r\n\t\t\ttry {\r\n\t\t\t\txmlhttpmethod = new w.XMLHttpRequest();\r\n\t\t\t}\r\n\t\t\tcatch( e ){\r\n\t\t\t\txmlhttpmethod = new w.ActiveXObject( \"Microsoft.XMLHTTP\" );\r\n\t\t\t}\r\n\t\t\treturn function(){\r\n\t\t\t\treturn xmlhttpmethod;\r\n\t\t\t};\r\n\t\t})(),\r\n\r\n\t\t//tweaked Ajax functions from Quirksmode\r\n\t\tajax = function( url, callback ) {\r\n\t\t\tvar req = xmlHttp();\r\n\t\t\tif (!req){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treq.open( \"GET\", url, true );\r\n\t\t\treq.onreadystatechange = function () {\r\n\t\t\t\tif ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcallback( req.responseText );\r\n\t\t\t};\r\n\t\t\tif ( req.readyState === 4 ){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treq.send( null );\r\n\t\t},\r\n\t\tisUnsupportedMediaQuery = function( query ) {\r\n\t\t\treturn query.replace( respond.regex.minmaxwh, '' ).match( respond.regex.other );\r\n\t\t};\r\n\r\n\t//expose for testing\r\n\trespond.ajax = ajax;\r\n\trespond.queue = requestQueue;\r\n\trespond.unsupportedmq = isUnsupportedMediaQuery;\r\n\trespond.regex = {\r\n\t\tmedia: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\r\n\t\tkeyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\r\n\t\tcomments: /\\/\\*[^*]*\\*+([^/][^*]*\\*+)*\\//gi,\r\n\t\turls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\r\n\t\tfindStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\r\n\t\tonly: /(only\\s+)?([a-zA-Z]+)\\s?/,\r\n\t\tminw: /\\(\\s*min\\-width\\s*:\\s*(\\s*[0-9\\.]+)(px|em)\\s*\\)/,\r\n\t\tmaxw: /\\(\\s*max\\-width\\s*:\\s*(\\s*[0-9\\.]+)(px|em)\\s*\\)/,\r\n\t\tminmaxwh: /\\(\\s*m(in|ax)\\-(height|width)\\s*:\\s*(\\s*[0-9\\.]+)(px|em)\\s*\\)/gi,\r\n\t\tother: /\\([^\\)]*\\)/g\r\n\t};\r\n\r\n\t//expose media query support flag for external use\r\n\trespond.mediaQueriesSupported = w.matchMedia && w.matchMedia( \"only all\" ) !== null && w.matchMedia( \"only all\" ).matches;\r\n\r\n\t//if media queries are supported, exit here\r\n\tif( respond.mediaQueriesSupported ){\r\n\t\treturn;\r\n\t}\r\n\r\n\t//define vars\r\n\tvar doc = w.document,\r\n\t\tdocElem = doc.documentElement,\r\n\t\tmediastyles = [],\r\n\t\trules = [],\r\n\t\tappendedEls = [],\r\n\t\tparsedSheets = {},\r\n\t\tresizeThrottle = 30,\r\n\t\thead = doc.getElementsByTagName( \"head\" )[0] || docElem,\r\n\t\tbase = doc.getElementsByTagName( \"base\" )[0],\r\n\t\tlinks = head.getElementsByTagName( \"link\" ),\r\n\r\n\t\tlastCall,\r\n\t\tresizeDefer,\r\n\r\n\t\t//cached container for 1em value, populated the first time it's needed\r\n\t\teminpx,\r\n\r\n\t\t// returns the value of 1em in pixels\r\n\t\tgetEmValue = function() {\r\n\t\t\tvar ret,\r\n\t\t\t\tdiv = doc.createElement('div'),\r\n\t\t\t\tbody = doc.body,\r\n\t\t\t\toriginalHTMLFontSize = docElem.style.fontSize,\r\n\t\t\t\toriginalBodyFontSize = body && body.style.fontSize,\r\n\t\t\t\tfakeUsed = false;\r\n\r\n\t\t\tdiv.style.cssText = \"position:absolute;font-size:1em;width:1em\";\r\n\r\n\t\t\tif( !body ){\r\n\t\t\t\tbody = fakeUsed = doc.createElement( \"body\" );\r\n\t\t\t\tbody.style.background = \"none\";\r\n\t\t\t}\r\n\r\n\t\t\t// 1em in a media query is the value of the default font size of the browser\r\n\t\t\t// reset docElem and body to ensure the correct value is returned\r\n\t\t\tdocElem.style.fontSize = \"100%\";\r\n\t\t\tbody.style.fontSize = \"100%\";\r\n\r\n\t\t\tbody.appendChild( div );\r\n\r\n\t\t\tif( fakeUsed ){\r\n\t\t\t\tdocElem.insertBefore( body, docElem.firstChild );\r\n\t\t\t}\r\n\r\n\t\t\tret = div.offsetWidth;\r\n\r\n\t\t\tif( fakeUsed ){\r\n\t\t\t\tdocElem.removeChild( body );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbody.removeChild( div );\r\n\t\t\t}\r\n\r\n\t\t\t// restore the original values\r\n\t\t\tdocElem.style.fontSize = originalHTMLFontSize;\r\n\t\t\tif( originalBodyFontSize ) {\r\n\t\t\t\tbody.style.fontSize = originalBodyFontSize;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//also update eminpx before returning\r\n\t\t\tret = eminpx = parseFloat(ret);\r\n\r\n\t\t\treturn ret;\r\n\t\t},\r\n\r\n\t\t//enable/disable styles\r\n\t\tapplyMedia = function( fromResize ){\r\n\t\t\tvar name = \"clientWidth\",\r\n\t\t\t\tdocElemProp = docElem[ name ],\r\n\t\t\t\tcurrWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[ name ] || docElemProp,\r\n\t\t\t\tstyleBlocks\t= {},\r\n\t\t\t\tlastLink = links[ links.length-1 ],\r\n\t\t\t\tnow = (new Date()).getTime();\r\n\r\n\t\t\t//throttle resize calls\r\n\t\t\tif( fromResize && lastCall && now - lastCall < resizeThrottle ){\r\n\t\t\t\tw.clearTimeout( resizeDefer );\r\n\t\t\t\tresizeDefer = w.setTimeout( applyMedia, resizeThrottle );\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlastCall = now;\r\n\t\t\t}\r\n\r\n\t\t\tfor( var i in mediastyles ){\r\n\t\t\t\tif( mediastyles.hasOwnProperty( i ) ){\r\n\t\t\t\t\tvar thisstyle = mediastyles[ i ],\r\n\t\t\t\t\t\tmin = thisstyle.minw,\r\n\t\t\t\t\t\tmax = thisstyle.maxw,\r\n\t\t\t\t\t\tminnull = min === null,\r\n\t\t\t\t\t\tmaxnull = max === null,\r\n\t\t\t\t\t\tem = \"em\";\r\n\r\n\t\t\t\t\tif( !!min ){\r\n\t\t\t\t\t\tmin = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !!max ){\r\n\t\t\t\t\t\tmax = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true\r\n\t\t\t\t\tif( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){\r\n\t\t\t\t\t\tif( !styleBlocks[ thisstyle.media ] ){\r\n\t\t\t\t\t\t\tstyleBlocks[ thisstyle.media ] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstyleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove any existing respond style element(s)\r\n\t\t\tfor( var j in appendedEls ){\r\n\t\t\t\tif( appendedEls.hasOwnProperty( j ) ){\r\n\t\t\t\t\tif( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){\r\n\t\t\t\t\t\thead.removeChild( appendedEls[ j ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tappendedEls.length = 0;\r\n\r\n\t\t\t//inject active styles, grouped by media type\r\n\t\t\tfor( var k in styleBlocks ){\r\n\t\t\t\tif( styleBlocks.hasOwnProperty( k ) ){\r\n\t\t\t\t\tvar ss = doc.createElement( \"style\" ),\r\n\t\t\t\t\t\tcss = styleBlocks[ k ].join( \"\\n\" );\r\n\r\n\t\t\t\t\tss.type = \"text/css\";\r\n\t\t\t\t\tss.media = k;\r\n\r\n\t\t\t\t\t//originally, ss was appended to a documentFragment and sheets were appended in bulk.\r\n\t\t\t\t\t//this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!\r\n\t\t\t\t\thead.insertBefore( ss, lastLink.nextSibling );\r\n\r\n\t\t\t\t\tif ( ss.styleSheet ){\r\n\t\t\t\t\t\tss.styleSheet.cssText = css;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tss.appendChild( doc.createTextNode( css ) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//push to appendedEls to track for later removal\r\n\t\t\t\t\tappendedEls.push( ss );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t//find media blocks in css text, convert to style blocks\r\n\t\ttranslate = function( styles, href, media ){\r\n\t\t\tvar qs = styles.replace( respond.regex.comments, '' )\r\n\t\t\t\t\t.replace( respond.regex.keyframes, '' )\r\n\t\t\t\t\t.match( respond.regex.media ),\r\n\t\t\t\tql = qs && qs.length || 0;\r\n\r\n\t\t\t//try to get CSS path\r\n\t\t\thref = href.substring( 0, href.lastIndexOf( \"/\" ) );\r\n\r\n\t\t\tvar repUrls = function( css ){\r\n\t\t\t\t\treturn css.replace( respond.regex.urls, \"$1\" + href + \"$2$3\" );\r\n\t\t\t\t},\r\n\t\t\t\tuseMedia = !ql && media;\r\n\r\n\t\t\t//if path exists, tack on trailing slash\r\n\t\t\tif( href.length ){ href += \"/\"; }\r\n\r\n\t\t\t//if no internal queries exist, but media attr does, use that\r\n\t\t\t//note: this currently lacks support for situations where a media attr is specified on a link AND\r\n\t\t\t\t//its associated stylesheet has internal CSS media queries.\r\n\t\t\t\t//In those cases, the media attribute will currently be ignored.\r\n\t\t\tif( useMedia ){\r\n\t\t\t\tql = 1;\r\n\t\t\t}\r\n\r\n\t\t\tfor( var i = 0; i < ql; i++ ){\r\n\t\t\t\tvar fullq, thisq, eachq, eql;\r\n\r\n\t\t\t\t//media attr\r\n\t\t\t\tif( useMedia ){\r\n\t\t\t\t\tfullq = media;\r\n\t\t\t\t\trules.push( repUrls( styles ) );\r\n\t\t\t\t}\r\n\t\t\t\t//parse for styles\r\n\t\t\t\telse{\r\n\t\t\t\t\tfullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1;\r\n\t\t\t\t\trules.push( RegExp.$2 && repUrls( RegExp.$2 ) );\r\n\t\t\t\t}\r\n\r\n\t\t\t\teachq = fullq.split( \",\" );\r\n\t\t\t\teql = eachq.length;\r\n\r\n\t\t\t\tfor( var j = 0; j < eql; j++ ){\r\n\t\t\t\t\tthisq = eachq[ j ];\r\n\r\n\t\t\t\t\tif( isUnsupportedMediaQuery( thisq ) ) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmediastyles.push( {\r\n\t\t\t\t\t\tmedia : thisq.split( \"(\" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || \"all\",\r\n\t\t\t\t\t\trules : rules.length - 1,\r\n\t\t\t\t\t\thasquery : thisq.indexOf(\"(\") > -1,\r\n\t\t\t\t\t\tminw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || \"\" ),\r\n\t\t\t\t\t\tmaxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || \"\" )\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tapplyMedia();\r\n\t\t},\r\n\r\n\t\t//recurse through request queue, get css text\r\n\t\tmakeRequests = function(){\r\n\t\t\tif( requestQueue.length ){\r\n\t\t\t\tvar thisRequest = requestQueue.shift();\r\n\r\n\t\t\t\tajax( thisRequest.href, function( styles ){\r\n\t\t\t\t\ttranslate( styles, thisRequest.href, thisRequest.media );\r\n\t\t\t\t\tparsedSheets[ thisRequest.href ] = true;\r\n\r\n\t\t\t\t\t// by wrapping recursive function call in setTimeout\r\n\t\t\t\t\t// we prevent \"Stack overflow\" error in IE7\r\n\t\t\t\t\tw.setTimeout(function(){ makeRequests(); },0);\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t//loop stylesheets, send text content to translate\r\n\t\tripCSS = function(){\r\n\r\n\t\t\tfor( var i = 0; i < links.length; i++ ){\r\n\t\t\t\tvar sheet = links[ i ],\r\n\t\t\t\thref = sheet.href,\r\n\t\t\t\tmedia = sheet.media,\r\n\t\t\t\tisCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\r\n\r\n\t\t\t\t//only links plz and prevent re-parsing\r\n\t\t\t\tif( !!href && isCSS && !parsedSheets[ href ] ){\r\n\t\t\t\t\t// selectivizr exposes css through the rawCssText expando\r\n\t\t\t\t\tif (sheet.styleSheet && sheet.styleSheet.rawCssText) {\r\n\t\t\t\t\t\ttranslate( sheet.styleSheet.rawCssText, href, media );\r\n\t\t\t\t\t\tparsedSheets[ href ] = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif( (!/^([a-zA-Z:]*\\/\\/)/.test( href ) && !base) ||\r\n\t\t\t\t\t\t\thref.replace( RegExp.$1, \"\" ).split( \"/\" )[0] === w.location.host ){\r\n\t\t\t\t\t\t\t// IE7 doesn't handle urls that start with '//' for ajax request\r\n\t\t\t\t\t\t\t// manually add in the protocol\r\n\t\t\t\t\t\t\tif ( href.substring(0,2) === \"//\" ) { href = w.location.protocol + href; }\r\n\t\t\t\t\t\t\trequestQueue.push( {\r\n\t\t\t\t\t\t\t\thref: href,\r\n\t\t\t\t\t\t\t\tmedia: media\r\n\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tmakeRequests();\r\n\t\t};\r\n\r\n\t//translate CSS\r\n\tripCSS();\r\n\r\n\t//expose update for re-running respond later on\r\n\trespond.update = ripCSS;\r\n\r\n\t//expose getEmValue\r\n\trespond.getEmValue = getEmValue;\r\n\r\n\t//adjust on resize\r\n\tfunction callMedia(){\r\n\t\tapplyMedia( true );\r\n\t}\r\n\r\n\tif( w.addEventListener ){\r\n\t\tw.addEventListener( \"resize\", callMedia, false );\r\n\t}\r\n\telse if( w.attachEvent ){\r\n\t\tw.attachEvent( \"onresize\", callMedia );\r\n\t}\r\n})(this);\r\n","/**\r\n * BxSlider v4.1.1 - Fully loaded, responsive content slider\r\n * http://bxslider.com\r\n *\r\n * Copyright 2013, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com\r\n * Written while drinking Belgian ales and listening to jazz\r\n *\r\n * Released under the MIT license - http://opensource.org/licenses/MIT\r\n */\r\n\r\n;(function($){\r\n\r\n\tvar plugin = {};\r\n\r\n\tvar defaults = {\r\n\r\n\t\t// GENERAL\r\n\t\tmode: 'horizontal',\r\n\t\tslideSelector: '',\r\n\t\tinfiniteLoop: true,\r\n\t\thideControlOnEnd: false,\r\n\t\tspeed: 500,\r\n\t\teasing: null,\r\n\t\tslideMargin: 0,\r\n\t\tstartSlide: 0,\r\n\t\trandomStart: false,\r\n\t\tcaptions: false,\r\n\t\tticker: false,\r\n\t\ttickerHover: false,\r\n\t\tadaptiveHeight: false,\r\n\t\tadaptiveHeightSpeed: 500,\r\n\t\tvideo: false,\r\n\t\tuseCSS: true,\r\n\t\tpreloadImages: 'visible',\r\n\t\tresponsive: true,\r\n\r\n\t\t// TOUCH\r\n\t\ttouchEnabled: true,\r\n\t\tswipeThreshold: 50,\r\n\t\toneToOneTouch: true,\r\n\t\tpreventDefaultSwipeX: true,\r\n\t\tpreventDefaultSwipeY: false,\r\n\r\n\t\t// PAGER\r\n\t\tpager: true,\r\n\t\tpagerType: 'full',\r\n\t\tpagerShortSeparator: ' / ',\r\n\t\tpagerSelector: null,\r\n\t\tbuildPager: null,\r\n\t\tpagerCustom: null,\r\n\r\n\t\t// CONTROLS\r\n\t\tcontrols: true,\r\n\t\tnextText: 'Next',\r\n\t\tprevText: 'Prev',\r\n\t\tnextSelector: null,\r\n\t\tprevSelector: null,\r\n\t\tautoControls: false,\r\n\t\tstartText: 'Start',\r\n\t\tstopText: 'Stop',\r\n\t\tautoControlsCombine: false,\r\n\t\tautoControlsSelector: null,\r\n\r\n\t\t// AUTO\r\n\t\tauto: false,\r\n\t\tpause: 4000,\r\n\t\tautoStart: true,\r\n\t\tautoDirection: 'next',\r\n\t\tautoHover: false,\r\n\t\tautoDelay: 0,\r\n\r\n\t\t// CAROUSEL\r\n\t\tminSlides: 1,\r\n\t\tmaxSlides: 1,\r\n\t\tmoveSlides: 0,\r\n\t\tslideWidth: 0,\r\n\r\n\t\t// CALLBACKS\r\n\t\tonSliderLoad: function() {},\r\n\t\tonSlideBefore: function() {},\r\n\t\tonSlideAfter: function() {},\r\n\t\tonSlideNext: function() {},\r\n\t\tonSlidePrev: function() {}\r\n\t}\r\n\r\n\t$.fn.bxSlider = function(options){\r\n\r\n\t\tif(this.length == 0) return this;\r\n\r\n\t\t// support mutltiple elements\r\n\t\tif(this.length > 1){\r\n\t\t\tthis.each(function(){$(this).bxSlider(options)});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// create a namespace to be used throughout the plugin\r\n\t\tvar slider = {};\r\n\t\t// set a reference to our slider element\r\n\t\tvar el = this;\r\n\t\tplugin.el = this;\r\n\r\n\t\t/**\r\n\t\t * Makes slideshow responsive\r\n\t\t */\r\n\t\t// first get the original window dimens (thanks alot IE)\r\n\t\tvar windowWidth = $(window).width();\r\n\t\tvar windowHeight = $(window).height();\r\n\r\n\r\n\r\n\t\t/**\r\n\t\t * ===================================================================================\r\n\t\t * = PRIVATE FUNCTIONS\r\n\t\t * ===================================================================================\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * Initializes namespace settings to be used throughout plugin\r\n\t\t */\r\n\t\tvar init = function(){\r\n\t\t\t// merge user-supplied options with the defaults\r\n\t\t\tslider.settings = $.extend({}, defaults, options);\r\n\t\t\t// parse slideWidth setting\r\n\t\t\tslider.settings.slideWidth = parseInt(slider.settings.slideWidth);\r\n\t\t\t// store the original children\r\n\t\t\tslider.children = el.children(slider.settings.slideSelector);\r\n\t\t\t// check if actual number of slides is less than minSlides / maxSlides\r\n\t\t\tif(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length;\r\n\t\t\tif(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length;\r\n\t\t\t// if random start, set the startSlide setting to random number\r\n\t\t\tif(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length);\r\n\t\t\t// store active slide information\r\n\t\t\tslider.active = { index: slider.settings.startSlide }\r\n\t\t\t// store if the slider is in carousel mode (displaying / moving multiple slides)\r\n\t\t\tslider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;\r\n\t\t\t// if carousel, force preloadImages = 'all'\r\n\t\t\tif(slider.carousel) slider.settings.preloadImages = 'all';\r\n\t\t\t// calculate the min / max width thresholds based on min / max number of slides\r\n\t\t\t// used to setup and update carousel slides dimensions\r\n\t\t\tslider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);\r\n\t\t\tslider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);\r\n\t\t\t// store the current state of the slider (if currently animating, working is true)\r\n\t\t\tslider.working = false;\r\n\t\t\t// initialize the controls object\r\n\t\t\tslider.controls = {};\r\n\t\t\t// initialize an auto interval\r\n\t\t\tslider.interval = null;\r\n\t\t\t// determine which property to use for transitions\r\n\t\t\tslider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left';\r\n\t\t\t// determine if hardware acceleration can be used\r\n\t\t\tslider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){\r\n\t\t\t\t// create our test div element\r\n\t\t\t\tvar div = document.createElement('div');\r\n\t\t\t\t// css transition properties\r\n\t\t\t\tvar props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];\r\n\t\t\t\t// test for each property\r\n\t\t\t\tfor(var i in props){\r\n\t\t\t\t\tif(div.style[props[i]] !== undefined){\r\n\t\t\t\t\t\tslider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();\r\n\t\t\t\t\t\tslider.animProp = '-' + slider.cssPrefix + '-transform';\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}());\r\n\t\t\t// if vertical mode always make maxSlides and minSlides equal\r\n\t\t\tif(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides;\r\n\t\t\t// save original style data\r\n\t\t\tel.data(\"origStyle\", el.attr(\"style\"));\r\n\t\t\tel.children(slider.settings.slideSelector).each(function() {\r\n\t\t\t $(this).data(\"origStyle\", $(this).attr(\"style\"));\r\n\t\t\t});\r\n\t\t\t// perform all DOM / CSS modifications\r\n\t\t\tsetup();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Performs all DOM and CSS modifications\r\n\t\t */\r\n\t\tvar setup = function(){\r\n\t\t\t// wrap el in a wrapper\r\n\t\t\tel.wrap('
');\r\n\t\t\t// store a namspace reference to .bx-viewport\r\n\t\t\tslider.viewport = el.parent();\r\n\t\t\t// add a loading div to display while images are loading\r\n\t\t\tslider.loader = $('
');\r\n\t\t\tslider.viewport.prepend(slider.loader);\r\n\t\t\t// set el to a massive width, to hold any needed slides\r\n\t\t\t// also strip any margin and padding from el\r\n\t\t\tel.css({\r\n\t\t\t\twidth: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto',\r\n\t\t\t\tposition: 'relative'\r\n\t\t\t});\r\n\t\t\t// if using CSS, add the easing property\r\n\t\t\tif(slider.usingCSS && slider.settings.easing){\r\n\t\t\t\tel.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);\r\n\t\t\t// if not using CSS and no easing value was supplied, use the default JS animation easing (swing)\r\n\t\t\t}else if(!slider.settings.easing){\r\n\t\t\t\tslider.settings.easing = 'swing';\r\n\t\t\t}\r\n\t\t\tvar slidesShowing = getNumberSlidesShowing();\r\n\t\t\t// make modifications to the viewport (.bx-viewport)\r\n\t\t\tslider.viewport.css({\r\n\t\t\t\twidth: '100%',\r\n\t\t\t\toverflow: 'hidden',\r\n\t\t\t\tposition: 'relative'\r\n\t\t\t});\r\n\t\t\tslider.viewport.parent().css({\r\n\t\t\t\tmaxWidth: getViewportMaxWidth()\r\n\t\t\t});\r\n\t\t\t// make modification to the wrapper (.bx-wrapper)\r\n\t\t\tif(!slider.settings.pager) {\r\n\t\t\t\tslider.viewport.parent().css({\r\n\t\t\t\tmargin: '0 auto 0px'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// apply css to all slider children\r\n\t\t\tslider.children.css({\r\n\t\t\t\t'float': slider.settings.mode == 'horizontal' ? 'left' : 'none',\r\n\t\t\t\tlistStyle: 'none',\r\n\t\t\t\tposition: 'relative'\r\n\t\t\t});\r\n\t\t\t// apply the calculated width after the float is applied to prevent scrollbar interference\r\n\t\t\tslider.children.css('width', getSlideWidth());\r\n\t\t\t// if slideMargin is supplied, add the css\r\n\t\t\tif(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin);\r\n\t\t\tif(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin);\r\n\t\t\t// if \"fade\" mode, add positioning and z-index CSS\r\n\t\t\tif(slider.settings.mode == 'fade'){\r\n\t\t\t\tslider.children.css({\r\n\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\tzIndex: 0,\r\n\t\t\t\t\tdisplay: 'none'\r\n\t\t\t\t});\r\n\t\t\t\t// prepare the z-index on the showing element\r\n\t\t\t\tslider.children.eq(slider.settings.startSlide).css({zIndex: 50, display: 'block'});\r\n\t\t\t}\r\n\t\t\t// create an element to contain all slider controls (pager, start / stop, etc)\r\n\t\t\tslider.controls.el = $('
');\r\n\t\t\t// if captions are requested, add them\r\n\t\t\tif(slider.settings.captions) appendCaptions();\r\n\t\t\t// check if startSlide is last slide\r\n\t\t\tslider.active.last = slider.settings.startSlide == getPagerQty() - 1;\r\n\t\t\t// if video is true, set up the fitVids plugin\r\n\t\t\tif(slider.settings.video) el.fitVids();\r\n\t\t\t// set the default preload selector (visible)\r\n\t\t\tvar preloadSelector = slider.children.eq(slider.settings.startSlide);\r\n\t\t\tif (slider.settings.preloadImages == \"all\") preloadSelector = slider.children;\r\n\t\t\t// only check for control addition if not in \"ticker\" mode\r\n\t\t\tif(!slider.settings.ticker){\r\n\t\t\t\t// if pager is requested, add it\r\n\t\t\t\tif(slider.settings.pager) appendPager();\r\n\t\t\t\t// if controls are requested, add them\r\n\t\t\t\tif(slider.settings.controls) appendControls();\r\n\t\t\t\t// if auto is true, and auto controls are requested, add them\r\n\t\t\t\tif(slider.settings.auto && slider.settings.autoControls) appendControlsAuto();\r\n\t\t\t\t// if any control option is requested, add the controls wrapper\r\n\t\t\t\tif(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el);\r\n\t\t\t// if ticker mode, do not allow a pager\r\n\t\t\t}else{\r\n\t\t\t\tslider.settings.pager = false;\r\n\t\t\t}\r\n\t\t\t// preload all images, then perform final DOM / CSS modifications that depend on images being loaded\r\n\t\t\tloadElements(preloadSelector, start);\r\n\t\t}\r\n\r\n\t\tvar loadElements = function(selector, callback){\r\n\t\t\tvar total = selector.find('img, iframe').length;\r\n\t\t\tif (total == 0){\r\n\t\t\t\tcallback();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar count = 0;\r\n\t\t\tselector.find('img, iframe').each(function(){\r\n\t\t\t\t$(this).one('load', function() {\r\n\t\t\t\t if(++count == total) callback();\r\n\t\t\t\t}).each(function() {\r\n\t\t\t\t if(this.complete) $(this).load();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Start the slider\r\n\t\t */\r\n\t\tvar start = function(){\r\n\t\t\t// if infinite loop, prepare additional slides\r\n\t\t\tif(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){\r\n\t\t\t\tvar slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides;\r\n\t\t\t\tvar sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone');\r\n\t\t\t\tvar slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone');\r\n\t\t\t\tel.append(sliceAppend).prepend(slicePrepend);\r\n\t\t\t}\r\n\t\t\t// remove the loading DOM element\r\n\t\t\tslider.loader.remove();\r\n\t\t\t// set the left / top position of \"el\"\r\n\t\t\tsetSlidePosition();\r\n\t\t\t// if \"vertical\" mode, always use adaptiveHeight to prevent odd behavior\r\n\t\t\tif (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true;\r\n\t\t\t// set the viewport height\r\n\t\t\tslider.viewport.height(getViewportHeight());\r\n\t\t\t// make sure everything is positioned just right (same as a window resize)\r\n\t\t\tel.redrawSlider();\r\n\t\t\t// onSliderLoad callback\r\n\t\t\tslider.settings.onSliderLoad(slider.active.index);\r\n\t\t\t// slider has been fully initialized\r\n\t\t\tslider.initialized = true;\r\n\t\t\t// bind the resize call to the window\r\n\t\t\tif (slider.settings.responsive) $(window).bind('resize', resizeWindow);\r\n\t\t\t// if auto is true, start the show\r\n\t\t\tif (slider.settings.auto && slider.settings.autoStart) initAuto();\r\n\t\t\t// if ticker is true, start the ticker\r\n\t\t\tif (slider.settings.ticker) initTicker();\r\n\t\t\t// if pager is requested, make the appropriate pager link active\r\n\t\t\tif (slider.settings.pager) updatePagerActive(slider.settings.startSlide);\r\n\t\t\t// check for any updates to the controls (like hideControlOnEnd updates)\r\n\t\t\tif (slider.settings.controls) updateDirectionControls();\r\n\t\t\t// if touchEnabled is true, setup the touch events\r\n\t\t\tif (slider.settings.touchEnabled && !slider.settings.ticker) initTouch();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value\r\n\t\t */\r\n\t\tvar getViewportHeight = function(){\r\n\t\t\tvar height = 0;\r\n\t\t\t// first determine which children (slides) should be used in our height calculation\r\n\t\t\tvar children = $();\r\n\t\t\t// if mode is not \"vertical\" and adaptiveHeight is false, include all children\r\n\t\t\tif(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){\r\n\t\t\t\tchildren = slider.children;\r\n\t\t\t}else{\r\n\t\t\t\t// if not carousel, return the single active child\r\n\t\t\t\tif(!slider.carousel){\r\n\t\t\t\t\tchildren = slider.children.eq(slider.active.index);\r\n\t\t\t\t// if carousel, return a slice of children\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// get the individual slide index\r\n\t\t\t\t\tvar currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy();\r\n\t\t\t\t\t// add the current slide to the children\r\n\t\t\t\t\tchildren = slider.children.eq(currentIndex);\r\n\t\t\t\t\t// cycle through the remaining \"showing\" slides\r\n\t\t\t\t\tfor (i = 1; i <= slider.settings.maxSlides - 1; i++){\r\n\t\t\t\t\t\t// if looped back to the start\r\n\t\t\t\t\t\tif(currentIndex + i >= slider.children.length){\r\n\t\t\t\t\t\t\tchildren = children.add(slider.children.eq(i - 1));\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchildren = children.add(slider.children.eq(currentIndex + i));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// if \"vertical\" mode, calculate the sum of the heights of the children\r\n\t\t\tif(slider.settings.mode == 'vertical'){\r\n\t\t\t\tchildren.each(function(index) {\r\n\t\t\t\t height += $(this).outerHeight();\r\n\t\t\t\t});\r\n\t\t\t\t// add user-supplied margins\r\n\t\t\t\tif(slider.settings.slideMargin > 0){\r\n\t\t\t\t\theight += slider.settings.slideMargin * (slider.settings.minSlides - 1);\r\n\t\t\t\t}\r\n\t\t\t// if not \"vertical\" mode, calculate the max height of the children\r\n\t\t\t}else{\r\n\t\t\t\theight = Math.max.apply(Math, children.map(function(){\r\n\t\t\t\t\treturn $(this).outerHeight(false);\r\n\t\t\t\t}).get());\r\n\t\t\t}\r\n\t\t\treturn height;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the calculated width to be used for the outer wrapper / viewport\r\n\t\t */\r\n\t\tvar getViewportMaxWidth = function(){\r\n\t\t\tvar width = '100%';\r\n\t\t\tif(slider.settings.slideWidth > 0){\r\n\t\t\t\tif(slider.settings.mode == 'horizontal'){\r\n\t\t\t\t\twidth = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);\r\n\t\t\t\t}else{\r\n\t\t\t\t\twidth = slider.settings.slideWidth;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn width;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the calculated width to be applied to each slide\r\n\t\t */\r\n\t\tvar getSlideWidth = function(){\r\n\t\t\t// start with any user-supplied slide width\r\n\t\t\tvar newElWidth = slider.settings.slideWidth;\r\n\t\t\t// get the current viewport width\r\n\t\t\tvar wrapWidth = slider.viewport.width();\r\n\t\t\t// if slide width was not supplied, or is larger than the viewport use the viewport width\r\n\t\t\tif(slider.settings.slideWidth == 0 ||\r\n\t\t\t\t(slider.settings.slideWidth > wrapWidth && !slider.carousel) ||\r\n\t\t\t\tslider.settings.mode == 'vertical'){\r\n\t\t\t\tnewElWidth = wrapWidth;\r\n\t\t\t// if carousel, use the thresholds to determine the width\r\n\t\t\t}else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){\r\n\t\t\t\tif(wrapWidth > slider.maxThreshold){\r\n\t\t\t\t\t// newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides;\r\n\t\t\t\t}else if(wrapWidth < slider.minThreshold){\r\n\t\t\t\t\tnewElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn newElWidth;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the number of slides currently visible in the viewport (includes partially visible slides)\r\n\t\t */\r\n\t\tvar getNumberSlidesShowing = function(){\r\n\t\t\tvar slidesShowing = 1;\r\n\t\t\tif(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){\r\n\t\t\t\t// if viewport is smaller than minThreshold, return minSlides\r\n\t\t\t\tif(slider.viewport.width() < slider.minThreshold){\r\n\t\t\t\t\tslidesShowing = slider.settings.minSlides;\r\n\t\t\t\t// if viewport is larger than minThreshold, return maxSlides\r\n\t\t\t\t}else if(slider.viewport.width() > slider.maxThreshold){\r\n\t\t\t\t\tslidesShowing = slider.settings.maxSlides;\r\n\t\t\t\t// if viewport is between min / max thresholds, divide viewport width by first child width\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar childWidth = slider.children.first().width();\r\n\t\t\t\t\tslidesShowing = Math.floor(slider.viewport.width() / childWidth);\r\n\t\t\t\t}\r\n\t\t\t// if \"vertical\" mode, slides showing will always be minSlides\r\n\t\t\t}else if(slider.settings.mode == 'vertical'){\r\n\t\t\t\tslidesShowing = slider.settings.minSlides;\r\n\t\t\t}\r\n\t\t\treturn slidesShowing;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the number of pages (one full viewport of slides is one \"page\")\r\n\t\t */\r\n\t\tvar getPagerQty = function(){\r\n\t\t\tvar pagerQty = 0;\r\n\t\t\t// if moveSlides is specified by the user\r\n\t\t\tif(slider.settings.moveSlides > 0){\r\n\t\t\t\tif(slider.settings.infiniteLoop){\r\n\t\t\t\t\tpagerQty = slider.children.length / getMoveBy();\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// use a while loop to determine pages\r\n\t\t\t\t\tvar breakPoint = 0;\r\n\t\t\t\t\tvar counter = 0\r\n\t\t\t\t\t// when breakpoint goes above children length, counter is the number of pages\r\n\t\t\t\t\twhile (breakPoint < slider.children.length){\r\n\t\t\t\t\t\t++pagerQty;\r\n\t\t\t\t\t\tbreakPoint = counter + getNumberSlidesShowing();\r\n\t\t\t\t\t\tcounter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// if moveSlides is 0 (auto) divide children length by sides showing, then round up\r\n\t\t\t}else{\r\n\t\t\t\tpagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());\r\n\t\t\t}\r\n\t\t\treturn pagerQty;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns the number of indivual slides by which to shift the slider\r\n\t\t */\r\n\t\tvar getMoveBy = function(){\r\n\t\t\t// if moveSlides was set by the user and moveSlides is less than number of slides showing\r\n\t\t\tif(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){\r\n\t\t\t\treturn slider.settings.moveSlides;\r\n\t\t\t}\r\n\t\t\t// if moveSlides is 0 (auto)\r\n\t\t\treturn getNumberSlidesShowing();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Sets the slider's (el) left or top position\r\n\t\t */\r\n\t\tvar setSlidePosition = function(){\r\n\t\t\t// if last slide, not infinite loop, and number of children is larger than specified maxSlides\r\n\t\t\tif(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){\r\n\t\t\t\tif (slider.settings.mode == 'horizontal'){\r\n\t\t\t\t\t// get the last child's position\r\n\t\t\t\t\tvar lastChild = slider.children.last();\r\n\t\t\t\t\tvar position = lastChild.position();\r\n\t\t\t\t\t// set the left position\r\n\t\t\t\t\tsetPositionProperty(-(position.left - (slider.viewport.width() - lastChild.width())), 'reset', 0);\r\n\t\t\t\t}else if(slider.settings.mode == 'vertical'){\r\n\t\t\t\t\t// get the last showing index's position\r\n\t\t\t\t\tvar lastShowingIndex = slider.children.length - slider.settings.minSlides;\r\n\t\t\t\t\tvar position = slider.children.eq(lastShowingIndex).position();\r\n\t\t\t\t\t// set the top position\r\n\t\t\t\t\tsetPositionProperty(-position.top, 'reset', 0);\r\n\t\t\t\t}\r\n\t\t\t// if not last slide\r\n\t\t\t}else{\r\n\t\t\t\t// get the position of the first showing slide\r\n\t\t\t\tvar position = slider.children.eq(slider.active.index * getMoveBy()).position();\r\n\t\t\t\t// check for last slide\r\n\t\t\t\tif (slider.active.index == getPagerQty() - 1) slider.active.last = true;\r\n\t\t\t\t// set the repective position\r\n\t\t\t\tif (position != undefined){\r\n\t\t\t\t\tif (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0);\r\n\t\t\t\t\telse if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Sets the el's animating property position (which in turn will sometimes animate el).\r\n\t\t * If using CSS, sets the transform property. If not using CSS, sets the top / left property.\r\n\t\t *\r\n\t\t * @param value (int)\r\n\t\t * - the animating property's value\r\n\t\t *\r\n\t\t * @param type (string) 'slider', 'reset', 'ticker'\r\n\t\t * - the type of instance for which the function is being\r\n\t\t *\r\n\t\t * @param duration (int)\r\n\t\t * - the amount of time (in ms) the transition should occupy\r\n\t\t *\r\n\t\t * @param params (array) optional\r\n\t\t * - an optional parameter containing any variables that need to be passed in\r\n\t\t */\r\n\t\tvar setPositionProperty = function(value, type, duration, params){\r\n\t\t\t// use CSS transform\r\n\t\t\tif(slider.usingCSS){\r\n\t\t\t\t// determine the translate3d value\r\n\t\t\t\tvar propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';\r\n\t\t\t\t// add the CSS transition-duration\r\n\t\t\t\tel.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');\r\n\t\t\t\tif(type == 'slide'){\r\n\t\t\t\t\t// set the property value\r\n\t\t\t\t\tel.css(slider.animProp, propValue);\r\n\t\t\t\t\t// bind a callback method - executes when CSS transition completes\r\n\t\t\t\t\tel.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){\r\n\t\t\t\t\t\t// unbind the callback\r\n\t\t\t\t\t\tel.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');\r\n\t\t\t\t\t\tupdateAfterSlideTransition();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else if(type == 'reset'){\r\n\t\t\t\t\tel.css(slider.animProp, propValue);\r\n\t\t\t\t}else if(type == 'ticker'){\r\n\t\t\t\t\t// make the transition use 'linear'\r\n\t\t\t\t\tel.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');\r\n\t\t\t\t\tel.css(slider.animProp, propValue);\r\n\t\t\t\t\t// bind a callback method - executes when CSS transition completes\r\n\t\t\t\t\tel.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){\r\n\t\t\t\t\t\t// unbind the callback\r\n\t\t\t\t\t\tel.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');\r\n\t\t\t\t\t\t// reset the position\r\n\t\t\t\t\t\tsetPositionProperty(params['resetValue'], 'reset', 0);\r\n\t\t\t\t\t\t// start the loop again\r\n\t\t\t\t\t\ttickerLoop();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t// use JS animate\r\n\t\t\t}else{\r\n\t\t\t\tvar animateObj = {};\r\n\t\t\t\tanimateObj[slider.animProp] = value;\r\n\t\t\t\tif(type == 'slide'){\r\n\t\t\t\t\tel.animate(animateObj, duration, slider.settings.easing, function(){\r\n\t\t\t\t\t\tupdateAfterSlideTransition();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else if(type == 'reset'){\r\n\t\t\t\t\tel.css(slider.animProp, value)\r\n\t\t\t\t}else if(type == 'ticker'){\r\n\t\t\t\t\tel.animate(animateObj, speed, 'linear', function(){\r\n\t\t\t\t\t\tsetPositionProperty(params['resetValue'], 'reset', 0);\r\n\t\t\t\t\t\t// run the recursive loop after animation\r\n\t\t\t\t\t\ttickerLoop();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Populates the pager with proper amount of pages\r\n\t\t */\r\n\t\tvar populatePager = function(){\r\n\t\t\tvar pagerHtml = '';\r\n\t\t\tvar pagerQty = getPagerQty();\r\n\t\t\t// loop through each pager item\r\n\t\t\tfor(var i=0; i < pagerQty; i++){\r\n\t\t\t\tvar linkContent = '';\r\n\t\t\t\t// if a buildPager function is supplied, use it to get pager link value, else use index + 1\r\n\t\t\t\tif(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){\r\n\t\t\t\t\tlinkContent = slider.settings.buildPager(i);\r\n\t\t\t\t\tslider.pagerEl.addClass('bx-custom-pager');\r\n\t\t\t\t}else{\r\n\t\t\t\t\tlinkContent = i + 1;\r\n\t\t\t\t\tslider.pagerEl.addClass('bx-default-pager');\r\n\t\t\t\t}\r\n\t\t\t\t// var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;\r\n\t\t\t\t// add the markup to the string\r\n\t\t\t\tpagerHtml += '';\r\n\t\t\t};\r\n\t\t\t// populate the pager element with pager links\r\n\t\t\tslider.pagerEl.html(pagerHtml);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Appends the pager to the controls element\r\n\t\t */\r\n\t\tvar appendPager = function(){\r\n\t\t\tif(!slider.settings.pagerCustom){\r\n\t\t\t\t// create the pager DOM element\r\n\t\t\t\tslider.pagerEl = $('
');\r\n\t\t\t\t// if a pager selector was supplied, populate it with the pager\r\n\t\t\t\tif(slider.settings.pagerSelector){\r\n\t\t\t\t\t$(slider.settings.pagerSelector).html(slider.pagerEl);\r\n\t\t\t\t// if no pager selector was supplied, add it after the wrapper\r\n\t\t\t\t}else{\r\n\t\t\t\t\tslider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);\r\n\t\t\t\t}\r\n\t\t\t\t// populate the pager\r\n\t\t\t\tpopulatePager();\r\n\t\t\t}else{\r\n\t\t\t\tslider.pagerEl = $(slider.settings.pagerCustom);\r\n\t\t\t}\r\n\t\t\t// assign the pager click binding\r\n\t\t\tslider.pagerEl.delegate('a', 'click', clickPagerBind);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Appends prev / next controls to the controls element\r\n\t\t */\r\n\t\tvar appendControls = function(){\r\n\t\t\tslider.controls.next = $('' + slider.settings.nextText + '');\r\n\t\t\tslider.controls.prev = $('' + slider.settings.prevText + '');\r\n\t\t\t// bind click actions to the controls\r\n\t\t\tslider.controls.next.bind('click', clickNextBind);\r\n\t\t\tslider.controls.prev.bind('click', clickPrevBind);\r\n\t\t\t// if nextSlector was supplied, populate it\r\n\t\t\tif(slider.settings.nextSelector){\r\n\t\t\t\t$(slider.settings.nextSelector).append(slider.controls.next);\r\n\t\t\t}\r\n\t\t\t// if prevSlector was supplied, populate it\r\n\t\t\tif(slider.settings.prevSelector){\r\n\t\t\t\t$(slider.settings.prevSelector).append(slider.controls.prev);\r\n\t\t\t}\r\n\t\t\t// if no custom selectors were supplied\r\n\t\t\tif(!slider.settings.nextSelector && !slider.settings.prevSelector){\r\n\t\t\t\t// add the controls to the DOM\r\n\t\t\t\tslider.controls.directionEl = $('
');\r\n\t\t\t\t// add the control elements to the directionEl\r\n\t\t\t\tslider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);\r\n\t\t\t\t// slider.viewport.append(slider.controls.directionEl);\r\n\t\t\t\tslider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Appends start / stop auto controls to the controls element\r\n\t\t */\r\n\t\tvar appendControlsAuto = function(){\r\n\t\t\tslider.controls.start = $('');\r\n\t\t\tslider.controls.stop = $('');\r\n\t\t\t// add the controls to the DOM\r\n\t\t\tslider.controls.autoEl = $('
');\r\n\t\t\t// bind click actions to the controls\r\n\t\t\tslider.controls.autoEl.delegate('.bx-start', 'click', clickStartBind);\r\n\t\t\tslider.controls.autoEl.delegate('.bx-stop', 'click', clickStopBind);\r\n\t\t\t// if autoControlsCombine, insert only the \"start\" control\r\n\t\t\tif(slider.settings.autoControlsCombine){\r\n\t\t\t\tslider.controls.autoEl.append(slider.controls.start);\r\n\t\t\t// if autoControlsCombine is false, insert both controls\r\n\t\t\t}else{\r\n\t\t\t\tslider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);\r\n\t\t\t}\r\n\t\t\t// if auto controls selector was supplied, populate it with the controls\r\n\t\t\tif(slider.settings.autoControlsSelector){\r\n\t\t\t\t$(slider.settings.autoControlsSelector).html(slider.controls.autoEl);\r\n\t\t\t// if auto controls selector was not supplied, add it after the wrapper\r\n\t\t\t}else{\r\n\t\t\t\tslider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);\r\n\t\t\t}\r\n\t\t\t// update the auto controls\r\n\t\t\tupdateAutoControls(slider.settings.autoStart ? 'stop' : 'start');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Appends image captions to the DOM\r\n\t\t */\r\n\t\tvar appendCaptions = function(){\r\n\t\t\t// cycle through each child\r\n\t\t\tslider.children.each(function(index){\r\n\t\t\t\t// get the image title attribute\r\n\t\t\t\tvar title = $(this).find('img:first').attr('title');\r\n\t\t\t\t// append the caption\r\n\t\t\t\tif (title != undefined && ('' + title).length) {\r\n $(this).append('
' + title + '
');\r\n }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Click next binding\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar clickNextBind = function(e){\r\n\t\t\t// if auto show is running, stop it\r\n\t\t\tif (slider.settings.auto) el.stopAuto();\r\n\t\t\tel.goToNextSlide();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Click prev binding\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar clickPrevBind = function(e){\r\n\t\t\t// if auto show is running, stop it\r\n\t\t\tif (slider.settings.auto) el.stopAuto();\r\n\t\t\tel.goToPrevSlide();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Click start binding\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar clickStartBind = function(e){\r\n\t\t\tel.startAuto();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Click stop binding\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar clickStopBind = function(e){\r\n\t\t\tel.stopAuto();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Click pager binding\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar clickPagerBind = function(e){\r\n\t\t\t// if auto show is running, stop it\r\n\t\t\tif (slider.settings.auto) el.stopAuto();\r\n\t\t\tvar pagerLink = $(e.currentTarget);\r\n\t\t\tvar pagerIndex = parseInt(pagerLink.attr('data-slide-index'));\r\n\t\t\t// if clicked pager link is not active, continue with the goToSlide call\r\n\t\t\tif(pagerIndex != slider.active.index) el.goToSlide(pagerIndex);\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Updates the pager links with an active class\r\n\t\t *\r\n\t\t * @param slideIndex (int)\r\n\t\t * - index of slide to make active\r\n\t\t */\r\n\t\tvar updatePagerActive = function(slideIndex){\r\n\t\t\t// if \"short\" pager type\r\n\t\t\tvar len = slider.children.length; // nb of children\r\n\t\t\tif(slider.settings.pagerType == 'short'){\r\n\t\t\t\tif(slider.settings.maxSlides > 1) {\r\n\t\t\t\t\tlen = Math.ceil(slider.children.length/slider.settings.maxSlides);\r\n\t\t\t\t}\r\n\t\t\t\tslider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// remove all pager active classes\r\n\t\t\tslider.pagerEl.find('a').removeClass('active');\r\n\t\t\t// apply the active class for all pagers\r\n\t\t\tslider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Performs needed actions after a slide transition\r\n\t\t */\r\n\t\tvar updateAfterSlideTransition = function(){\r\n\t\t\t// if infinte loop is true\r\n\t\t\tif(slider.settings.infiniteLoop){\r\n\t\t\t\tvar position = '';\r\n\t\t\t\t// first slide\r\n\t\t\t\tif(slider.active.index == 0){\r\n\t\t\t\t\t// set the new position\r\n\t\t\t\t\tposition = slider.children.eq(0).position();\r\n\t\t\t\t// carousel, last slide\r\n\t\t\t\t}else if(slider.active.index == getPagerQty() - 1 && slider.carousel){\r\n\t\t\t\t\tposition = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();\r\n\t\t\t\t// last slide\r\n\t\t\t\t}else if(slider.active.index == slider.children.length - 1){\r\n\t\t\t\t\tposition = slider.children.eq(slider.children.length - 1).position();\r\n\t\t\t\t}\r\n\t\t\t\tif (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0);; }\r\n\t\t\t\telse if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0);; }\r\n\t\t\t}\r\n\t\t\t// declare that the transition is complete\r\n\t\t\tslider.working = false;\r\n\t\t\t// onSlideAfter callback\r\n\t\t\tslider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Updates the auto controls state (either active, or combined switch)\r\n\t\t *\r\n\t\t * @param state (string) \"start\", \"stop\"\r\n\t\t * - the new state of the auto show\r\n\t\t */\r\n\t\tvar updateAutoControls = function(state){\r\n\t\t\t// if autoControlsCombine is true, replace the current control with the new state\r\n\t\t\tif(slider.settings.autoControlsCombine){\r\n\t\t\t\tslider.controls.autoEl.html(slider.controls[state]);\r\n\t\t\t// if autoControlsCombine is false, apply the \"active\" class to the appropriate control\r\n\t\t\t}else{\r\n\t\t\t\tslider.controls.autoEl.find('a').removeClass('active');\r\n\t\t\t\tslider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Updates the direction controls (checks if either should be hidden)\r\n\t\t */\r\n\t\tvar updateDirectionControls = function(){\r\n\t\t\tif(getPagerQty() == 1){\r\n\t\t\t\tslider.controls.prev.addClass('disabled');\r\n\t\t\t\tslider.controls.next.addClass('disabled');\r\n\t\t\t}else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){\r\n\t\t\t\t// if first slide\r\n\t\t\t\tif (slider.active.index == 0){\r\n\t\t\t\t\tslider.controls.prev.addClass('disabled');\r\n\t\t\t\t\tslider.controls.next.removeClass('disabled');\r\n\t\t\t\t// if last slide\r\n\t\t\t\t}else if(slider.active.index == getPagerQty() - 1){\r\n\t\t\t\t\tslider.controls.next.addClass('disabled');\r\n\t\t\t\t\tslider.controls.prev.removeClass('disabled');\r\n\t\t\t\t// if any slide in the middle\r\n\t\t\t\t}else{\r\n\t\t\t\t\tslider.controls.prev.removeClass('disabled');\r\n\t\t\t\t\tslider.controls.next.removeClass('disabled');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialzes the auto process\r\n\t\t */\r\n\t\tvar initAuto = function(){\r\n\t\t\t// if autoDelay was supplied, launch the auto show using a setTimeout() call\r\n\t\t\tif(slider.settings.autoDelay > 0){\r\n\t\t\t\tvar timeout = setTimeout(el.startAuto, slider.settings.autoDelay);\r\n\t\t\t// if autoDelay was not supplied, start the auto show normally\r\n\t\t\t}else{\r\n\t\t\t\tel.startAuto();\r\n\t\t\t}\r\n\t\t\t// if autoHover is requested\r\n\t\t\tif(slider.settings.autoHover){\r\n\t\t\t\t// on el hover\r\n\t\t\t\tel.hover(function(){\r\n\t\t\t\t\t// if the auto show is currently playing (has an active interval)\r\n\t\t\t\t\tif(slider.interval){\r\n\t\t\t\t\t\t// stop the auto show and pass true agument which will prevent control update\r\n\t\t\t\t\t\tel.stopAuto(true);\r\n\t\t\t\t\t\t// create a new autoPaused value which will be used by the relative \"mouseout\" event\r\n\t\t\t\t\t\tslider.autoPaused = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}, function(){\r\n\t\t\t\t\t// if the autoPaused value was created be the prior \"mouseover\" event\r\n\t\t\t\t\tif(slider.autoPaused){\r\n\t\t\t\t\t\t// start the auto show and pass true agument which will prevent control update\r\n\t\t\t\t\t\tel.startAuto(true);\r\n\t\t\t\t\t\t// reset the autoPaused value\r\n\t\t\t\t\t\tslider.autoPaused = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initialzes the ticker process\r\n\t\t */\r\n\t\tvar initTicker = function(){\r\n\t\t\tvar startPosition = 0;\r\n\t\t\t// if autoDirection is \"next\", append a clone of the entire slider\r\n\t\t\tif(slider.settings.autoDirection == 'next'){\r\n\t\t\t\tel.append(slider.children.clone().addClass('bx-clone'));\r\n\t\t\t// if autoDirection is \"prev\", prepend a clone of the entire slider, and set the left position\r\n\t\t\t}else{\r\n\t\t\t\tel.prepend(slider.children.clone().addClass('bx-clone'));\r\n\t\t\t\tvar position = slider.children.first().position();\r\n\t\t\t\tstartPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top;\r\n\t\t\t}\r\n\t\t\tsetPositionProperty(startPosition, 'reset', 0);\r\n\t\t\t// do not allow controls in ticker mode\r\n\t\t\tslider.settings.pager = false;\r\n\t\t\tslider.settings.controls = false;\r\n\t\t\tslider.settings.autoControls = false;\r\n\t\t\t// if autoHover is requested\r\n\t\t\tif(slider.settings.tickerHover && !slider.usingCSS){\r\n\t\t\t\t// on el hover\r\n\t\t\t\tslider.viewport.hover(function(){\r\n\t\t\t\t\tel.stop();\r\n\t\t\t\t}, function(){\r\n\t\t\t\t\t// calculate the total width of children (used to calculate the speed ratio)\r\n\t\t\t\t\tvar totalDimens = 0;\r\n\t\t\t\t\tslider.children.each(function(index){\r\n\t\t\t\t\t totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// calculate the speed ratio (used to determine the new speed to finish the paused animation)\r\n\t\t\t\t\tvar ratio = slider.settings.speed / totalDimens;\r\n\t\t\t\t\t// determine which property to use\r\n\t\t\t\t\tvar property = slider.settings.mode == 'horizontal' ? 'left' : 'top';\r\n\t\t\t\t\t// calculate the new speed\r\n\t\t\t\t\tvar newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));\r\n\t\t\t\t\ttickerLoop(newSpeed);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// start the ticker loop\r\n\t\t\ttickerLoop();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Runs a continuous loop, news ticker-style\r\n\t\t */\r\n\t\tvar tickerLoop = function(resumeSpeed){\r\n\t\t\tspeed = resumeSpeed ? resumeSpeed : slider.settings.speed;\r\n\t\t\tvar position = {left: 0, top: 0};\r\n\t\t\tvar reset = {left: 0, top: 0};\r\n\t\t\t// if \"next\" animate left position to last child, then reset left to 0\r\n\t\t\tif(slider.settings.autoDirection == 'next'){\r\n\t\t\t\tposition = el.find('.bx-clone').first().position();\r\n\t\t\t// if \"prev\" animate left position to 0, then reset left to first non-clone child\r\n\t\t\t}else{\r\n\t\t\t\treset = slider.children.first().position();\r\n\t\t\t}\r\n\t\t\tvar animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top;\r\n\t\t\tvar resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top;\r\n\t\t\tvar params = {resetValue: resetValue};\r\n\t\t\tsetPositionProperty(animateProperty, 'ticker', speed, params);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Initializes touch events\r\n\t\t */\r\n\t\tvar initTouch = function(){\r\n\t\t\t// initialize object to contain all touch values\r\n\t\t\tslider.touch = {\r\n\t\t\t\tstart: {x: 0, y: 0},\r\n\t\t\t\tend: {x: 0, y: 0}\r\n\t\t\t}\r\n\t\t\tslider.viewport.bind('touchstart', onTouchStart);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Event handler for \"touchstart\"\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar onTouchStart = function(e){\r\n\t\t\tif(slider.working){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}else{\r\n\t\t\t\t// record the original position when touch starts\r\n\t\t\t\tslider.touch.originalPos = el.position();\r\n\t\t\t\tvar orig = e.originalEvent;\r\n\t\t\t\t// record the starting touch x, y coordinates\r\n\t\t\t\tslider.touch.start.x = orig.changedTouches[0].pageX;\r\n\t\t\t\tslider.touch.start.y = orig.changedTouches[0].pageY;\r\n\t\t\t\t// bind a \"touchmove\" event to the viewport\r\n\t\t\t\tslider.viewport.bind('touchmove', onTouchMove);\r\n\t\t\t\t// bind a \"touchend\" event to the viewport\r\n\t\t\t\tslider.viewport.bind('touchend', onTouchEnd);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Event handler for \"touchmove\"\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar onTouchMove = function(e){\r\n\t\t\tvar orig = e.originalEvent;\r\n\t\t\t// if scrolling on y axis, do not prevent default\r\n\t\t\tvar xMovement = Math.abs(orig.changedTouches[0].pageX - slider.touch.start.x);\r\n\t\t\tvar yMovement = Math.abs(orig.changedTouches[0].pageY - slider.touch.start.y);\r\n\t\t\t// x axis swipe\r\n\t\t\tif((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t// y axis swipe\r\n\t\t\t}else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\tif(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){\r\n\t\t\t\tvar value = 0;\r\n\t\t\t\t// if horizontal, drag along x axis\r\n\t\t\t\tif(slider.settings.mode == 'horizontal'){\r\n\t\t\t\t\tvar change = orig.changedTouches[0].pageX - slider.touch.start.x;\r\n\t\t\t\t\tvalue = slider.touch.originalPos.left + change;\r\n\t\t\t\t// if vertical, drag along y axis\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar change = orig.changedTouches[0].pageY - slider.touch.start.y;\r\n\t\t\t\t\tvalue = slider.touch.originalPos.top + change;\r\n\t\t\t\t}\r\n\t\t\t\tsetPositionProperty(value, 'reset', 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Event handler for \"touchend\"\r\n\t\t *\r\n\t\t * @param e (event)\r\n\t\t * - DOM event object\r\n\t\t */\r\n\t\tvar onTouchEnd = function(e){\r\n\t\t\tslider.viewport.unbind('touchmove', onTouchMove);\r\n\t\t\tvar orig = e.originalEvent;\r\n\t\t\tvar value = 0;\r\n\t\t\t// record end x, y positions\r\n\t\t\tslider.touch.end.x = orig.changedTouches[0].pageX;\r\n\t\t\tslider.touch.end.y = orig.changedTouches[0].pageY;\r\n\t\t\t// if fade mode, check if absolute x distance clears the threshold\r\n\t\t\tif(slider.settings.mode == 'fade'){\r\n\t\t\t\tvar distance = Math.abs(slider.touch.start.x - slider.touch.end.x);\r\n\t\t\t\tif(distance >= slider.settings.swipeThreshold){\r\n\t\t\t\t\tslider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();\r\n\t\t\t\t\tel.stopAuto();\r\n\t\t\t\t}\r\n\t\t\t// not fade mode\r\n\t\t\t}else{\r\n\t\t\t\tvar distance = 0;\r\n\t\t\t\t// calculate distance and el's animate property\r\n\t\t\t\tif(slider.settings.mode == 'horizontal'){\r\n\t\t\t\t\tdistance = slider.touch.end.x - slider.touch.start.x;\r\n\t\t\t\t\tvalue = slider.touch.originalPos.left;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdistance = slider.touch.end.y - slider.touch.start.y;\r\n\t\t\t\t\tvalue = slider.touch.originalPos.top;\r\n\t\t\t\t}\r\n\t\t\t\t// if not infinite loop and first / last slide, do not attempt a slide transition\r\n\t\t\t\tif(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){\r\n\t\t\t\t\tsetPositionProperty(value, 'reset', 200);\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// check if distance clears threshold\r\n\t\t\t\t\tif(Math.abs(distance) >= slider.settings.swipeThreshold){\r\n\t\t\t\t\t\tdistance < 0 ? el.goToNextSlide() : el.goToPrevSlide();\r\n\t\t\t\t\t\tel.stopAuto();\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t// el.animate(property, 200);\r\n\t\t\t\t\t\tsetPositionProperty(value, 'reset', 200);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tslider.viewport.unbind('touchend', onTouchEnd);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Window resize event callback\r\n\t\t */\r\n\t\tvar resizeWindow = function(e){\r\n\t\t\t// get the new window dimens (again, thank you IE)\r\n\t\t\tvar windowWidthNew = $(window).width();\r\n\t\t\tvar windowHeightNew = $(window).height();\r\n\t\t\t// make sure that it is a true window resize\r\n\t\t\t// *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements\r\n\t\t\t// are resized. Can you just die already?*\r\n\t\t\tif(windowWidth != windowWidthNew || windowHeight != windowHeightNew){\r\n\t\t\t\t// set the new window dimens\r\n\t\t\t\twindowWidth = windowWidthNew;\r\n\t\t\t\twindowHeight = windowHeightNew;\r\n\t\t\t\t// update all dynamic elements\r\n\t\t\t\tel.redrawSlider();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * ===================================================================================\r\n\t\t * = PUBLIC FUNCTIONS\r\n\t\t * ===================================================================================\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * Performs slide transition to the specified slide\r\n\t\t *\r\n\t\t * @param slideIndex (int)\r\n\t\t * - the destination slide's index (zero-based)\r\n\t\t *\r\n\t\t * @param direction (string)\r\n\t\t * - INTERNAL USE ONLY - the direction of travel (\"prev\" / \"next\")\r\n\t\t */\r\n\t\tel.goToSlide = function(slideIndex, direction){\r\n\t\t\t// if plugin is currently in motion, ignore request\r\n\t\t\tif(slider.working || slider.active.index == slideIndex) return;\r\n\t\t\t// declare that plugin is in motion\r\n\t\t\tslider.working = true;\r\n\t\t\t// store the old index\r\n\t\t\tslider.oldIndex = slider.active.index;\r\n\t\t\t// if slideIndex is less than zero, set active index to last child (this happens during infinite loop)\r\n\t\t\tif(slideIndex < 0){\r\n\t\t\t\tslider.active.index = getPagerQty() - 1;\r\n\t\t\t// if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)\r\n\t\t\t}else if(slideIndex >= getPagerQty()){\r\n\t\t\t\tslider.active.index = 0;\r\n\t\t\t// set active index to requested slide\r\n\t\t\t}else{\r\n\t\t\t\tslider.active.index = slideIndex;\r\n\t\t\t}\r\n\t\t\t// onSlideBefore, onSlideNext, onSlidePrev callbacks\r\n\t\t\tslider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n\t\t\tif(direction == 'next'){\r\n\t\t\t\tslider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n\t\t\t}else if(direction == 'prev'){\r\n\t\t\t\tslider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n\t\t\t}\r\n\t\t\t// check if last slide\r\n\t\t\tslider.active.last = slider.active.index >= getPagerQty() - 1;\r\n\t\t\t// update the pager with active class\r\n\t\t\tif(slider.settings.pager) updatePagerActive(slider.active.index);\r\n\t\t\t// // check for direction control update\r\n\t\t\tif(slider.settings.controls) updateDirectionControls();\r\n\t\t\t// if slider is set to mode: \"fade\"\r\n\t\t\tif(slider.settings.mode == 'fade'){\r\n\t\t\t\t// if adaptiveHeight is true and next height is different from current height, animate to the new height\r\n\t\t\t\tif(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){\r\n\t\t\t\t\tslider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);\r\n\t\t\t\t}\r\n\t\t\t\t// fade out the visible child and reset its z-index value\r\n\t\t\t\tslider.children.filter(':visible').fadeOut(slider.settings.speed).css({zIndex: 0});\r\n\t\t\t\t// fade in the newly requested slide\r\n\t\t\t\tslider.children.eq(slider.active.index).css('zIndex', 51).fadeIn(slider.settings.speed, function(){\r\n\t\t\t\t\t$(this).css('zIndex', 50);\r\n\t\t\t\t\tupdateAfterSlideTransition();\r\n\t\t\t\t});\r\n\t\t\t// slider mode is not \"fade\"\r\n\t\t\t}else{\r\n\t\t\t\t// if adaptiveHeight is true and next height is different from current height, animate to the new height\r\n\t\t\t\tif(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){\r\n\t\t\t\t\tslider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);\r\n\t\t\t\t}\r\n\t\t\t\tvar moveBy = 0;\r\n\t\t\t\tvar position = {left: 0, top: 0};\r\n\t\t\t\t// if carousel and not infinite loop\r\n\t\t\t\tif(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){\r\n\t\t\t\t\tif(slider.settings.mode == 'horizontal'){\r\n\t\t\t\t\t\t// get the last child position\r\n\t\t\t\t\t\tvar lastChild = slider.children.eq(slider.children.length - 1);\r\n\t\t\t\t\t\tposition = lastChild.position();\r\n\t\t\t\t\t\t// calculate the position of the last slide\r\n\t\t\t\t\t\tmoveBy = slider.viewport.width() - lastChild.outerWidth();\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t// get last showing index position\r\n\t\t\t\t\t\tvar lastShowingIndex = slider.children.length - slider.settings.minSlides;\r\n\t\t\t\t\t\tposition = slider.children.eq(lastShowingIndex).position();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// horizontal carousel, going previous while on first slide (infiniteLoop mode)\r\n\t\t\t\t}else if(slider.carousel && slider.active.last && direction == 'prev'){\r\n\t\t\t\t\t// get the last child position\r\n\t\t\t\t\tvar eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);\r\n\t\t\t\t\tvar lastChild = el.children('.bx-clone').eq(eq);\r\n\t\t\t\t\tposition = lastChild.position();\r\n\t\t\t\t// if infinite loop and \"Next\" is clicked on the last slide\r\n\t\t\t\t}else if(direction == 'next' && slider.active.index == 0){\r\n\t\t\t\t\t// get the last clone position\r\n\t\t\t\t\tposition = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();\r\n\t\t\t\t\tslider.active.last = false;\r\n\t\t\t\t// normal non-zero requests\r\n\t\t\t\t}else if(slideIndex >= 0){\r\n\t\t\t\t\tvar requestEl = slideIndex * getMoveBy();\r\n\t\t\t\t\tposition = slider.children.eq(requestEl).position();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* If the position doesn't exist\r\n\t\t\t\t * (e.g. if you destroy the slider on a next click),\r\n\t\t\t\t * it doesn't throw an error.\r\n\t\t\t\t */\r\n\t\t\t\tif (\"undefined\" !== typeof(position)) {\r\n\t\t\t\t\tvar value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top;\r\n\t\t\t\t\t// plugin values to be animated\r\n\t\t\t\t\tsetPositionProperty(value, 'slide', slider.settings.speed);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Transitions to the next slide in the show\r\n\t\t */\r\n\t\tel.goToNextSlide = function(){\r\n\t\t\t// if infiniteLoop is false and last page is showing, disregard call\r\n\t\t\tif (!slider.settings.infiniteLoop && slider.active.last) return;\r\n\t\t\tvar pagerIndex = parseInt(slider.active.index) + 1;\r\n\t\t\tel.goToSlide(pagerIndex, 'next');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Transitions to the prev slide in the show\r\n\t\t */\r\n\t\tel.goToPrevSlide = function(){\r\n\t\t\t// if infiniteLoop is false and last page is showing, disregard call\r\n\t\t\tif (!slider.settings.infiniteLoop && slider.active.index == 0) return;\r\n\t\t\tvar pagerIndex = parseInt(slider.active.index) - 1;\r\n\t\t\tel.goToSlide(pagerIndex, 'prev');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Starts the auto show\r\n\t\t *\r\n\t\t * @param preventControlUpdate (boolean)\r\n\t\t * - if true, auto controls state will not be updated\r\n\t\t */\r\n\t\tel.startAuto = function(preventControlUpdate){\r\n\t\t\t// if an interval already exists, disregard call\r\n\t\t\tif(slider.interval) return;\r\n\t\t\t// create an interval\r\n\t\t\tslider.interval = setInterval(function(){\r\n\t\t\t\tslider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide();\r\n\t\t\t}, slider.settings.pause);\r\n\t\t\t// if auto controls are displayed and preventControlUpdate is not true\r\n\t\t\tif (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Stops the auto show\r\n\t\t *\r\n\t\t * @param preventControlUpdate (boolean)\r\n\t\t * - if true, auto controls state will not be updated\r\n\t\t */\r\n\t\tel.stopAuto = function(preventControlUpdate){\r\n\t\t\t// if no interval exists, disregard call\r\n\t\t\tif(!slider.interval) return;\r\n\t\t\t// clear the interval\r\n\t\t\tclearInterval(slider.interval);\r\n\t\t\tslider.interval = null;\r\n\t\t\t// if auto controls are displayed and preventControlUpdate is not true\r\n\t\t\tif (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns current slide index (zero-based)\r\n\t\t */\r\n\t\tel.getCurrentSlide = function(){\r\n\t\t\treturn slider.active.index;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Returns number of slides in show\r\n\t\t */\r\n\t\tel.getSlideCount = function(){\r\n\t\t\treturn slider.children.length;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Update all dynamic slider elements\r\n\t\t */\r\n\t\tel.redrawSlider = function(){\r\n\t\t\t// resize all children in ratio to new screen size\r\n\t\t\tslider.children.add(el.find('.bx-clone')).outerWidth(getSlideWidth());\r\n\t\t\t// adjust the height\r\n\t\t\tslider.viewport.css('height', getViewportHeight());\r\n\t\t\t// update the slide position\r\n\t\t\tif(!slider.settings.ticker) setSlidePosition();\r\n\t\t\t// if active.last was true before the screen resize, we want\r\n\t\t\t// to keep it last no matter what screen size we end on\r\n\t\t\tif (slider.active.last) slider.active.index = getPagerQty() - 1;\r\n\t\t\t// if the active index (page) no longer exists due to the resize, simply set the index as last\r\n\t\t\tif (slider.active.index >= getPagerQty()) slider.active.last = true;\r\n\t\t\t// if a pager is being displayed and a custom pager is not being used, update it\r\n\t\t\tif(slider.settings.pager && !slider.settings.pagerCustom){\r\n\t\t\t\tpopulatePager();\r\n\t\t\t\tupdatePagerActive(slider.active.index);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Destroy the current instance of the slider (revert everything back to original state)\r\n\t\t */\r\n\t\tel.destroySlider = function(){\r\n\t\t\t// don't do anything if slider has already been destroyed\r\n\t\t\tif(!slider.initialized) return;\r\n\t\t\tslider.initialized = false;\r\n\t\t\t$('.bx-clone', this).remove();\r\n\t\t\tslider.children.each(function() {\r\n\t\t\t\t$(this).data(\"origStyle\") != undefined ? $(this).attr(\"style\", $(this).data(\"origStyle\")) : $(this).removeAttr('style');\r\n\t\t\t});\r\n\t\t\t$(this).data(\"origStyle\") != undefined ? this.attr(\"style\", $(this).data(\"origStyle\")) : $(this).removeAttr('style');\r\n\t\t\t$(this).unwrap().unwrap();\r\n\t\t\tif(slider.controls.el) slider.controls.el.remove();\r\n\t\t\tif(slider.controls.next) slider.controls.next.remove();\r\n\t\t\tif(slider.controls.prev) slider.controls.prev.remove();\r\n\t\t\tif(slider.pagerEl) slider.pagerEl.remove();\r\n\t\t\t$('.bx-caption', this).remove();\r\n\t\t\tif(slider.controls.autoEl) slider.controls.autoEl.remove();\r\n\t\t\tclearInterval(slider.interval);\r\n\t\t\tif(slider.settings.responsive) $(window).unbind('resize', resizeWindow);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Reload the slider (revert all DOM changes, and re-initialize)\r\n\t\t */\r\n\t\tel.reloadSlider = function(settings){\r\n\t\t\tif (settings != undefined) options = settings;\r\n\t\t\tel.destroySlider();\r\n\t\t\tinit();\r\n\t\t}\r\n\r\n\t\tinit();\r\n\r\n\t\t// returns the current jQuery object\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n})(jQuery);\r\n","/**\r\n * Equal Heights Plugin\r\n * Equalize the heights of elements. Great for columns or any elements\r\n * that need to be the same size (floats, etc).\r\n * \r\n * Version 1.0\r\n * Updated 12/10/2008\r\n *\r\n * Copyright (c) 2008 Rob Glazebrook (cssnewbie.com) \r\n *\r\n * Usage: $(object).equalHeights([minHeight], [maxHeight]);\r\n * \r\n * Example 1: $(\".cols\").equalHeights(); Sets all columns to the same height.\r\n * Example 2: $(\".cols\").equalHeights(400); Sets all cols to at least 400px tall.\r\n * Example 3: $(\".cols\").equalHeights(100,300); Cols are at least 100 but no more\r\n * than 300 pixels tall. Elements with too much content will gain a scrollbar.\r\n * \r\n */\r\n\r\n(function($) {\r\n\t$.fn.equalHeights = function(minHeight, maxHeight) {\r\n\t\ttallest = (minHeight) ? minHeight : 0;\r\n\t\tthis.each(function() {\r\n\t\t\tif($(this).height() > tallest) {\r\n\t\t\t\ttallest = $(this).height();\r\n\t\t\t}\r\n\t\t});\r\n\t\tif((maxHeight) && tallest > maxHeight) tallest = maxHeight;\r\n\t\treturn this.each(function() {\r\n\t\t\t$(this).height(tallest).css(\"overflow\",\"auto\");\r\n\t\t});\r\n\t}\r\n})(jQuery);","/*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */\r\n(function(C,z,f,r){var q=f(C),n=f(z),b=f.fancybox=function(){b.open.apply(this,arguments)},H=navigator.userAgent.match(/msie/),w=null,s=z.createTouch!==r,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},p=function(a){return a&&\"string\"===f.type(a)},F=function(a){return p(a)&&0
',image:'\"\"',iframe:'\",error:'

The requested content cannot be loaded.
Please try again later.

',closeBtn:'',next:'',prev:''},openEffect:\"fade\",openSpeed:250,openEasing:\"swing\",openOpacity:!0,\r\nopenMethod:\"zoomIn\",closeEffect:\"fade\",closeSpeed:250,closeEasing:\"swing\",closeOpacity:!0,closeMethod:\"zoomOut\",nextEffect:\"elastic\",nextSpeed:250,nextEasing:\"swing\",nextMethod:\"changeIn\",prevEffect:\"elastic\",prevSpeed:250,prevEasing:\"swing\",prevMethod:\"changeOut\",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,\r\nisOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;\"object\"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data(\"fancybox-href\")||c.attr(\"href\"),title:c.data(\"fancybox-title\")||c.attr(\"title\"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,\r\nc.metadata())):k=c);g=d.href||k.href||(p(c)?c:null);h=d.title!==r?d.title:k.title||\"\";m=(j=d.content||k.content)?\"html\":d.type||k.type;!m&&k.isDom&&(m=c.data(\"fancybox-type\"),m||(m=(m=c.prop(\"class\").match(/fancybox\\.(\\w+)/))?m[1]:null));p(g)&&(m||(b.isImage(g)?m=\"image\":b.isSWF(g)?m=\"swf\":\"#\"===g.charAt(0)?m=\"inline\":p(c)&&(m=\"html\",j=c)),\"ajax\"===m&&(l=g.split(/\\s+/,2),g=l.shift(),l=l.shift()));j||(\"inline\"===m?g?j=f(p(g)?g.replace(/.*(?=#[^\\s]+$)/,\"\"):g):k.isDom&&(j=c):\"html\"===m?j=g:!m&&(!g&&\r\nk.isDom)&&(m=\"inline\",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==r&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger(\"onCancel\")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger(\"onReset\").remove(),b.coming=null,b.current||\r\nb._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger(\"beforeClose\")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(\".fancybox-wrap\").stop(!0).trigger(\"onReset\").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(\".fancybox-item, .fancybox-nav\").remove(),b.wrap.stop(!0,!0).removeClass(\"fancybox-opened\"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=\r\nsetTimeout(b.next,b.current.playSpeed))},c=function(){d();f(\"body\").unbind(\".player\");b.player.isActive=!1;b.trigger(\"onPlayEnd\")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?\"next\":\"prev\"],b.router=e||\"jumpto\",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==r&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&\"scroll\"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},\r\ne.dim,k)))},update:function(a){var d=a&&a.type,e=!d||\"orientationchange\"===d;e&&(clearTimeout(w),w=null);b.isOpen&&!w&&(w=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass(\"fancybox-tmp\"),(e||\"load\"===d||\"resize\"===d&&c.autoResize)&&b._setDimension(),\"scroll\"===d&&c.canShrink||b.reposition(a),b.trigger(\"onUpdate\"),w=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView=\"boolean\"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr(\"style\").addClass(\"fancybox-tmp\"),\r\nb.trigger(\"onUpdate\")),b.update())},hideLoading:function(){n.unbind(\".loading\");f(\"#fancybox-loading\").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
').click(b.cancel).appendTo(\"body\");n.bind(\"keydown.loading\",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:\"absolute\",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||\r\n!1,d={x:q.scrollLeft(),y:q.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&C.innerWidth?C.innerWidth:q.width(),d.h=s&&C.innerHeight?C.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(\".fb\");n.unbind(\".fb\");q.unbind(\".fb\")},bindEvents:function(){var a=b.current,d;a&&(q.bind(\"orientationchange.fb\"+(s?\"\":\" resize.fb\")+(a.autoCenter&&!a.locked?\" scroll.fb\":\"\"),b.update),(d=a.keys)&&n.bind(\"keydown.fb\",function(e){var c=e.which||e.keyCode,k=\r\ne.target||e.srcElement;if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is(\"[contenteditable]\")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?\"up\":\"right\");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,\r\ne){e&&(b.helpers[d]&&f.isFunction(b.helpers[d][a]))&&(e=f.extend(!0,{},b.helpers[d].defaults,e),b.helpers[d][a](e,c))});f.event.trigger(a+\".fb\")}},isImage:function(a){return p(a)&&a.match(/(^data:image\\/.*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp)((\\?|#).*)?$)/i)},isSWF:function(a){return p(a)&&a.match(/\\.(swf)((\\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;\"number\"===f.type(e)&&(d.margin=[e,e,e,e]);\"number\"===f.type(c)&&\r\n(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);\"auto\"===d.width&&(d.autoWidth=!0);\"auto\"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger(\"beforeLoad\"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&\"jumpto\"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=\r\n!0;if(\"image\"===c||\"swf\"===c)d.autoHeight=d.autoWidth=!1,d.scrolling=\"visible\";\"image\"===c&&(d.aspectRatio=!0);\"iframe\"===c&&s&&(d.scrolling=\"scroll\");d.wrap=f(d.tpl.wrap).addClass(\"fancybox-\"+(s?\"mobile\":\"desktop\")+\" fancybox-type-\"+c+\" fancybox-tmp \"+d.wrapCSS).appendTo(d.parent||\"body\");f.extend(d,{skin:f(\".fancybox-skin\",d.wrap),outer:f(\".fancybox-outer\",d.wrap),inner:f(\".fancybox-inner\",d.wrap)});f.each([\"Top\",\"Right\",\"Bottom\",\"Left\"],function(a,b){d.skin.css(\"padding\"+b,x(d.padding[a]))});b.trigger(\"onReady\");\r\nif(\"inline\"===c||\"html\"===c){if(!d.content||!d.content.length)return b._error(\"content\")}else if(!e)return b._error(\"href\");\"image\"===c?b._loadImage():\"ajax\"===c?b._loadAjax():\"iframe\"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:\"html\",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:\"no\",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=\r\nthis.width;b.coming.height=this.height;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error(\"image\")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&\"abort\"!==e?b._error(\"ajax\",a):b.hideLoading()},success:function(d,e){\"success\"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\\{rnd\\}/g,\r\n(new Date).getTime())).attr(\"scrolling\",s?\"auto\":a.iframe.scrolling).attr(\"src\",a.href);f(a.wrap).bind(\"onReset\",function(){try{f(this).find(\"iframe\").hide().attr(\"src\",\"//about:blank\").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one(\"load\",function(){f(this).data(\"ready\",1);s||f(this).bind(\"load.fb\",b.update);f(this).parents(\".fancybox-wrap\").width(\"100%\").removeClass(\"fancybox-tmp\").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=\r\nb.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],\"image\"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger(\"afterLoad\",a,d))a.wrap.stop(!0).trigger(\"onReset\").remove(),b.coming=null;else{d&&(b.trigger(\"beforeChange\",d),d.wrap.stop(!0).removeClass(\"fancybox-opened\").find(\".fancybox-item, .fancybox-nav\").remove());b.unbindEvents();\r\ne=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case \"inline\":case \"ajax\":case \"html\":a.selector?e=f(\"
\").html(e).find(a.selector):t(e)&&(e.data(\"fancybox-placeholder\")||e.data(\"fancybox-placeholder\",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind(\"onReset\",function(){f(this).find(e).length&&e.hide().replaceAll(e.data(\"fancybox-placeholder\")).data(\"fancybox-placeholder\",\r\n!1)}));break;case \"image\":e=a.tpl.image.replace(\"{href}\",g);break;case \"swf\":e='',h=\"\",f.each(a.swf,function(a,b){e+='';h+=\" \"+a+'=\"'+b+'\"'}),e+='\"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger(\"beforeShow\");\r\na.inner.css(\"overflow\",\"yes\"===k?\"scroll\":\"no\"===k?\"hidden\":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(\".fancybox-wrap\").not(a.wrap).stop(!0).trigger(\"onReset\").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,\r\nv=h.maxHeight,s=h.scrolling,q=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,p=l(y[1]+y[3]),r=l(y[0]+y[2]),z,A,t,D,B,G,C,E,w;e.add(k).add(g).width(\"auto\").height(\"auto\").removeClass(\"fancybox-tmp\");y=l(k.outerWidth(!0)-k.width());z=l(k.outerHeight(!0)-k.height());A=p+y;t=r+z;D=F(c)?(a.w-A)*l(c)/100:c;B=F(j)?(a.h-t)*l(j)/100:j;if(\"iframe\"===h.type){if(w=h.content,h.autoHeight&&1===w.data(\"ready\"))try{w[0].contentWindow.document.location&&(g.width(D).height(9999),G=w.contents().find(\"body\"),q&&G.css(\"overflow-x\",\r\n\"hidden\"),B=G.height())}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass(\"fancybox-tmp\"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass(\"fancybox-tmp\");c=l(D);j=l(B);E=D/B;m=l(F(m)?l(m,\"w\")-A:m);n=l(F(n)?l(n,\"w\")-A:n);u=l(F(u)?l(u,\"h\")-t:u);v=l(F(v)?l(v,\"h\")-t:v);G=n;C=v;h.fitToView&&(n=Math.min(a.w-A,n),v=Math.min(a.h-t,v));A=a.w-p;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/E)),j>v&&(j=v,c=l(j*E)),cA||p>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/E)),g.width(c).height(j),e.width(c+y),a=e.width(),p=e.height();else c=Math.max(m,Math.min(c,c-(a-A))),j=Math.max(u,Math.min(j,j-(p-r)));q&&(\"auto\"===s&&jA||p>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
').appendTo(\"body\");\r\nthis.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass(\"fancybox-overlay-fixed\"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(\".overlay\").width(\"auto\").height(\"auto\"):this.create(a);this.fixed||(q.bind(\"resize.overlay\",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind(\"click.overlay\",function(a){f(a.target).hasClass(\"fancybox-overlay\")&&(b.isActive?b.close():d.close())});this.overlay.css(a.css).show()},\r\nclose:function(){f(\".fancybox-overlay\").remove();q.unbind(\"resize.overlay\");this.overlay=null;!1!==this.margin&&(f(\"body\").css(\"margin-right\",this.margin),this.margin=!1);this.el&&this.el.removeClass(\"fancybox-lock\")},update:function(){var a=\"100%\",b;this.overlay.width(a).height(\"100%\");H?(b=Math.max(z.documentElement.offsetWidth,z.body.offsetWidth),n.width()>b&&(a=n.width())):n.width()>q.width()&&(a=n.width());this.overlay.width(a).height(n.height())},onReady:function(a,b){f(\".fancybox-overlay\").stop(!0,\r\n!0);this.overlay||(this.margin=n.height()>q.height()||\"scroll\"===f(\"body\").css(\"overflow-y\")?f(\"body\").css(\"margin-right\"):!1,this.el=z.all&&!z.querySelector?f(\"html\"):f(\"body\"),this.create(a));a.locked&&this.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&(this.el.addClass(\"fancybox-lock\"),!1!==this.margin&&f(\"body\").css(\"margin-right\",l(this.margin)+b.scrollbarWidth));this.open(a)},onUpdate:function(){this.fixed||\r\nthis.update()},afterClose:function(a){this.overlay&&!b.isActive&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:\"float\",position:\"bottom\"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(p(e)&&\"\"!==f.trim(e)){d=f('
'+e+\"
\");switch(c){case \"inside\":c=b.skin;break;case \"outside\":c=b.wrap;break;case \"over\":c=b.inner;break;default:c=b.skin,d.appendTo(\"body\"),\r\nH&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css(\"margin-bottom\")))}d[\"top\"===a.position?\"prependTo\":\"appendTo\"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||\"\",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(\".fancybox-wrap\")&&(k=a.groupAttr||\"data-fancybox-group\",l=h.attr(k),l||(k=\"rel\",l=h.get(0)[k]),l&&(\"\"!==l&&\"nofollow\"!==l)&&(h=c.length?f(c):e,h=h.filter(\"[\"+k+'=\"'+l+\r\n'\"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind(\"click.fb-start\").bind(\"click.fb-start\",k):n.undelegate(c,\"click.fb-start\").delegate(c+\":not('.fancybox-item, .fancybox-nav')\",\"click.fb-start\",k);this.filter(\"[data-fancybox-start=1]\").trigger(\"click\");return this};n.ready(function(){f.scrollbarWidth===r&&(f.scrollbarWidth=function(){var a=f('
').appendTo(\"body\"),b=a.children(),\r\nb=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===r){var a=f.support,d=f('
').appendTo(\"body\"),e=20===d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f(\"body\")})})})(window,document,jQuery);","/*!\r\n * classie - class helper functions\r\n * from bonzo https://github.com/ded/bonzo\r\n * \r\n * classie.has( elem, 'my-class' ) -> true/false\r\n * classie.add( elem, 'my-new-class' )\r\n * classie.remove( elem, 'my-unwanted-class' )\r\n * classie.toggle( elem, 'my-class' )\r\n */\r\n\r\n/*jshint browser: true, strict: true, undef: true */\r\n\r\n( function( window ) {\r\n\r\n'use strict';\r\n\r\n// class helper functions from bonzo https://github.com/ded/bonzo\r\n\r\nfunction classReg( className ) {\r\n return new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\");\r\n}\r\n\r\n// classList support for class management\r\n// altho to be fair, the api sucks because it won't accept multiple classes at once\r\nvar hasClass, addClass, removeClass;\r\n\r\nif ( 'classList' in document.documentElement ) {\r\n hasClass = function( elem, c ) {\r\n return elem.classList.contains( c );\r\n };\r\n addClass = function( elem, c ) {\r\n elem.classList.add( c );\r\n };\r\n removeClass = function( elem, c ) {\r\n elem.classList.remove( c );\r\n };\r\n}\r\nelse {\r\n hasClass = function( elem, c ) {\r\n return classReg( c ).test( elem.className );\r\n };\r\n addClass = function( elem, c ) {\r\n if ( !hasClass( elem, c ) ) {\r\n elem.className = elem.className + ' ' + c;\r\n }\r\n };\r\n removeClass = function( elem, c ) {\r\n elem.className = elem.className.replace( classReg( c ), ' ' );\r\n };\r\n}\r\n\r\nfunction toggleClass( elem, c ) {\r\n var fn = hasClass( elem, c ) ? removeClass : addClass;\r\n fn( elem, c );\r\n}\r\n\r\nwindow.classie = {\r\n // full names\r\n hasClass: hasClass,\r\n addClass: addClass,\r\n removeClass: removeClass,\r\n toggleClass: toggleClass,\r\n // short names\r\n has: hasClass,\r\n add: addClass,\r\n remove: removeClass,\r\n toggle: toggleClass\r\n};\r\n\r\n})( window );","/*!\r\n * enquire.js v2.1.0 - Awesome Media Queries in JavaScript\r\n * Copyright (c) 2013 Nick Williams - http://wicky.nillia.ms/enquire.js\r\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\r\n */\r\n\r\n;(function (name, context, factory) {\r\n\tvar matchMedia = context.matchMedia;\r\n\r\n\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = factory(matchMedia);\r\n\t}\r\n\telse if (typeof define === 'function' && define.amd) {\r\n\t\tdefine(function() {\r\n\t\t\treturn (context[name] = factory(matchMedia));\r\n\t\t});\r\n\t}\r\n\telse {\r\n\t\tcontext[name] = factory(matchMedia);\r\n\t}\r\n}('enquire', this, function (matchMedia) {\r\n\r\n\t'use strict';\r\n\r\n /*jshint unused:false */\r\n /**\r\n * Helper function for iterating over a collection\r\n *\r\n * @param collection\r\n * @param fn\r\n */\r\n function each(collection, fn) {\r\n var i = 0,\r\n length = collection.length,\r\n cont;\r\n\r\n for(i; i < length; i++) {\r\n cont = fn(collection[i], i);\r\n if(cont === false) {\r\n break; //allow early exit\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is an array\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if array, false otherwise\r\n */\r\n function isArray(target) {\r\n return Object.prototype.toString.apply(target) === '[object Array]';\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is a function\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if function, false otherwise\r\n */\r\n function isFunction(target) {\r\n return typeof target === 'function';\r\n }\r\n\r\n /**\r\n * Delegate to handle a media query being matched and unmatched.\r\n *\r\n * @param {object} options\r\n * @param {function} options.match callback for when the media query is matched\r\n * @param {function} [options.unmatch] callback for when the media query is unmatched\r\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\r\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\r\n * @constructor\r\n */\r\n function QueryHandler(options) {\r\n this.options = options;\r\n !options.deferSetup && this.setup();\r\n }\r\n QueryHandler.prototype = {\r\n\r\n /**\r\n * coordinates setup of the handler\r\n *\r\n * @function\r\n */\r\n setup : function() {\r\n if(this.options.setup) {\r\n this.options.setup();\r\n }\r\n this.initialised = true;\r\n },\r\n\r\n /**\r\n * coordinates setup and triggering of the handler\r\n *\r\n * @function\r\n */\r\n on : function() {\r\n !this.initialised && this.setup();\r\n this.options.match && this.options.match();\r\n },\r\n\r\n /**\r\n * coordinates the unmatch event for the handler\r\n *\r\n * @function\r\n */\r\n off : function() {\r\n this.options.unmatch && this.options.unmatch();\r\n },\r\n\r\n /**\r\n * called when a handler is to be destroyed.\r\n * delegates to the destroy or unmatch callbacks, depending on availability.\r\n *\r\n * @function\r\n */\r\n destroy : function() {\r\n this.options.destroy ? this.options.destroy() : this.off();\r\n },\r\n\r\n /**\r\n * determines equality by reference.\r\n * if object is supplied compare options, if function, compare match callback\r\n *\r\n * @function\r\n * @param {object || function} [target] the target for comparison\r\n */\r\n equals : function(target) {\r\n return this.options === target || this.options.match === target;\r\n }\r\n\r\n };\r\n /**\r\n * Represents a single media query, manages it's state and registered handlers for this query\r\n *\r\n * @constructor\r\n * @param {string} query the media query string\r\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\r\n */\r\n function MediaQuery(query, isUnconditional) {\r\n this.query = query;\r\n this.isUnconditional = isUnconditional;\r\n this.handlers = [];\r\n this.mql = matchMedia(query);\r\n\r\n var self = this;\r\n this.listener = function(mql) {\r\n self.mql = mql;\r\n self.assess();\r\n };\r\n this.mql.addListener(this.listener);\r\n }\r\n MediaQuery.prototype = {\r\n\r\n /**\r\n * add a handler for this query, triggering if already active\r\n *\r\n * @param {object} handler\r\n * @param {function} handler.match callback for when query is activated\r\n * @param {function} [handler.unmatch] callback for when query is deactivated\r\n * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\r\n * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\r\n */\r\n addHandler : function(handler) {\r\n var qh = new QueryHandler(handler);\r\n this.handlers.push(qh);\r\n\r\n this.matches() && qh.on();\r\n },\r\n\r\n /**\r\n * removes the given handler from the collection, and calls it's destroy methods\r\n * \r\n * @param {object || function} handler the handler to remove\r\n */\r\n removeHandler : function(handler) {\r\n var handlers = this.handlers;\r\n each(handlers, function(h, i) {\r\n if(h.equals(handler)) {\r\n h.destroy();\r\n return !handlers.splice(i,1); //remove from array and exit each early\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Determine whether the media query should be considered a match\r\n * \r\n * @return {Boolean} true if media query can be considered a match, false otherwise\r\n */\r\n matches : function() {\r\n return this.mql.matches || this.isUnconditional;\r\n },\r\n\r\n /**\r\n * Clears all handlers and unbinds events\r\n */\r\n clear : function() {\r\n each(this.handlers, function(handler) {\r\n handler.destroy();\r\n });\r\n this.mql.removeListener(this.listener);\r\n this.handlers.length = 0; //clear array\r\n },\r\n\r\n /*\r\n * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\r\n */\r\n assess : function() {\r\n var action = this.matches() ? 'on' : 'off';\r\n\r\n each(this.handlers, function(handler) {\r\n handler[action]();\r\n });\r\n }\r\n };\r\n /**\r\n * Allows for registration of query handlers.\r\n * Manages the query handler's state and is responsible for wiring up browser events\r\n *\r\n * @constructor\r\n */\r\n function MediaQueryDispatch () {\r\n if(!matchMedia) {\r\n throw new Error('matchMedia not present, legacy browsers require a polyfill');\r\n }\r\n\r\n this.queries = {};\r\n this.browserIsIncapable = !matchMedia('only all').matches;\r\n }\r\n\r\n MediaQueryDispatch.prototype = {\r\n\r\n /**\r\n * Registers a handler for the given media query\r\n *\r\n * @param {string} q the media query\r\n * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\r\n * @param {function} options.match fired when query matched\r\n * @param {function} [options.unmatch] fired when a query is no longer matched\r\n * @param {function} [options.setup] fired when handler first triggered\r\n * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\r\n * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\r\n */\r\n register : function(q, options, shouldDegrade) {\r\n var queries = this.queries,\r\n isUnconditional = shouldDegrade && this.browserIsIncapable;\r\n\r\n if(!queries[q]) {\r\n queries[q] = new MediaQuery(q, isUnconditional);\r\n }\r\n\r\n //normalise to object in an array\r\n if(isFunction(options)) {\r\n options = { match : options };\r\n }\r\n if(!isArray(options)) {\r\n options = [options];\r\n }\r\n each(options, function(handler) {\r\n queries[q].addHandler(handler);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * unregisters a query and all it's handlers, or a specific handler for a query\r\n *\r\n * @param {string} q the media query to target\r\n * @param {object || function} [handler] specific handler to unregister\r\n */\r\n unregister : function(q, handler) {\r\n var query = this.queries[q];\r\n\r\n if(query) {\r\n if(handler) {\r\n query.removeHandler(handler);\r\n }\r\n else {\r\n query.clear();\r\n delete this.queries[q];\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n };\r\n\r\n\treturn new MediaQueryDispatch();\r\n\r\n}));","/***************************************************\r\nSELECT MENU ON SMALL DEVICES\r\n***************************************************/\r\njQuery(document).ready(function ($) {\r\n var $menu_select = $(\"