{"version":3,"sources":["bootstrap-tabdrop.js","jquery.plugin.js","jquery.datepick.js","jquery.validate.js","galleria-1.4.2.js","flowtype.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;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1uEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACr3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtwNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":"omnivendor-new.js","sourcesContent":["/* =========================================================\r\n * bootstrap-tabdrop.js \r\n * http://www.eyecon.ro/bootstrap-tabdrop\r\n * =========================================================\r\n * Copyright 2012 Stefan Petre\r\n *\r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * \r\n * NOTICE: Changes made 2019 by Nathan Brown, Competitive Computing:\r\n * Added ADA support for HTML being injected into page.\r\n * \r\n * ========================================================= */\r\n\r\n!function ($) {\r\n\r\n var WinReszier = (function () {\r\n var registered = [];\r\n var inited = false;\r\n var timer;\r\n var resize = function (ev) {\r\n clearTimeout(timer);\r\n timer = setTimeout(notify, 100);\r\n };\r\n var notify = function () {\r\n for (var i = 0, cnt = registered.length; i < cnt; i++) {\r\n registered[i].apply();\r\n }\r\n };\r\n return {\r\n register: function (fn) {\r\n registered.push(fn);\r\n if (inited === false) {\r\n $(window).bind('resize', resize);\r\n inited = true;\r\n }\r\n },\r\n unregister: function (fn) {\r\n for (var i = 0, cnt = registered.length; i < cnt; i++) {\r\n if (registered[i] == fn) {\r\n delete registered[i];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }());\r\n\r\n var TabDrop = function (element, options) {\r\n this.element = $(element);\r\n this.dropdown = $('
xyz
\r\n\t\t\tproduces $.xyz
and $.fn.xyz
. */\r\n\t\t_init: function() {\r\n\t\t\t// Apply default localisations\r\n\t\t\t$.extend(this.defaultOptions, (this.regionalOptions && this.regionalOptions['']) || {});\r\n\t\t\t// Camel-case the name\r\n\t\t\tvar jqName = camelCase(this.name);\r\n\t\t\t// Expose jQuery singleton manager\r\n\t\t\t$[jqName] = this;\r\n\t\t\t// Expose jQuery collection plugin\r\n\t\t\t$.fn[jqName] = function(options) {\r\n\t\t\t\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\r\n\t\t\t\tif ($[jqName]._isNotChained(options, otherArgs)) {\r\n\t\t\t\t\treturn $[jqName][options].apply($[jqName], [this[0]].concat(otherArgs));\r\n\t\t\t\t}\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tif (typeof options === 'string') {\r\n\t\t\t\t\t\tif (options[0] === '_' || !$[jqName][options]) {\r\n\t\t\t\t\t\t\tthrow 'Unknown method: ' + options;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$[jqName][options].apply($[jqName], [this].concat(otherArgs));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t$[jqName]._attach(this, options);\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/** Set default values for all subsequent instances.\r\n\t\t\t@param options {object} The new default options.\r\n\t\t\t@example $.plugin.setDefauls({name: value}) */\r\n\t\tsetDefaults: function(options) {\r\n\t\t\t$.extend(this.defaultOptions, options || {});\r\n\t\t},\r\n\t\t\r\n\t\t/** Determine whether a method is a getter and doesn't permit chaining.\r\n\t\t\t@private\r\n\t\t\t@param name {string} The method name.\r\n\t\t\t@param otherArgs {any[]} Any other arguments for the method.\r\n\t\t\t@return {boolean} True if this method is a getter, false otherwise. */\r\n\t\t_isNotChained: function(name, otherArgs) {\r\n\t\t\tif (name === 'option' && (otherArgs.length === 0 ||\r\n\t\t\t\t\t(otherArgs.length === 1 && typeof otherArgs[0] === 'string'))) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn $.inArray(name, this._getters) > -1;\r\n\t\t},\r\n\t\t\r\n\t\t/** Initialise an element. Called internally only.\r\n\t\t\tAdds an instance object as data named for the plugin.\r\n\t\t\t@param elem {Element} The element to enhance.\r\n\t\t\t@param options {object} Overriding settings. */\r\n\t\t_attach: function(elem, options) {\r\n\t\t\telem = $(elem);\r\n\t\t\tif (elem.hasClass(this._getMarker())) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\telem.addClass(this._getMarker());\r\n\t\t\toptions = $.extend({}, this.defaultOptions, this._getMetadata(elem), options || {});\r\n\t\t\tvar inst = $.extend({name: this.name, elem: elem, options: options},\r\n\t\t\t\tthis._instSettings(elem, options));\r\n\t\t\telem.data(this.name, inst); // Save instance against element\r\n\t\t\tthis._postAttach(elem, inst);\r\n\t\t\tthis.option(elem, options);\r\n\t\t},\r\n\r\n\t\t/** Retrieve additional instance settings.\r\n\t\t\tOverride this in a sub-class to provide extra settings.\r\n\t\t\t@param elem {jQuery} The current jQuery element.\r\n\t\t\t@param options {object} The instance options.\r\n\t\t\t@return {object} Any extra instance values.\r\n\t\t\t@example _instSettings: function(elem, options) {\r\n \treturn {nav: elem.find(options.navSelector)};\r\n } */\r\n\t\t_instSettings: function(elem, options) {\r\n\t\t\treturn {};\r\n\t\t},\r\n\r\n\t\t/** Plugin specific post initialisation.\r\n\t\t\tOverride this in a sub-class to perform extra activities.\r\n\t\t\t@param elem {jQuery} The current jQuery element.\r\n\t\t\t@param inst {object} The instance settings.\r\n\t\t\t@example _postAttach: function(elem, inst) {\r\n \telem.on('click.' + this.name, function() {\r\n \t\t...\r\n \t});\r\n } */\r\n\t\t_postAttach: function(elem, inst) {\r\n\t\t},\r\n\r\n\t\t/** Retrieve metadata configuration from the element.\r\n\t\t\tMetadata is specified as an attribute:\r\n\t\t\tdata-<plugin name>=\"<setting name>: '<value>', ...\"
.\r\n\t\t\tDates should be specified as strings in this format: 'new Date(y, m-1, d)'.\r\n\t\t\t@private\r\n\t\t\t@param elem {jQuery} The source element.\r\n\t\t\t@return {object} The inline configuration or {}. */\r\n\t\t_getMetadata: function(elem) {\r\n\t\t\ttry {\r\n\t\t\t\tvar data = elem.data(this.name.toLowerCase()) || '';\r\n\t\t\t\tdata = data.replace(/'/g, '\"');\r\n\t\t\t\tdata = data.replace(/([a-zA-Z0-9]+):/g, function(match, group, i) { \r\n\t\t\t\t\tvar count = data.substring(0, i).match(/\"/g); // Handle embedded ':'\r\n\t\t\t\t\treturn (!count || count.length % 2 === 0 ? '\"' + group + '\":' : group + ':');\r\n\t\t\t\t});\r\n\t\t\t\tdata = $.parseJSON('{' + data + '}');\r\n\t\t\t\tfor (var name in data) { // Convert dates\r\n\t\t\t\t\tvar value = data[name];\r\n\t\t\t\t\tif (typeof value === 'string' && value.match(/^new Date\\((.*)\\)$/)) {\r\n\t\t\t\t\t\tdata[name] = eval(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\t\t\tcatch (e) {\r\n\t\t\t\treturn {};\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Retrieve the instance data for element.\r\n\t\t\t@param elem {Element} The source element.\r\n\t\t\t@return {object} The instance data or {}. */\r\n\t\t_getInst: function(elem) {\r\n\t\t\treturn $(elem).data(this.name) || {};\r\n\t\t},\r\n\t\t\r\n\t\t/** Retrieve or reconfigure the settings for a plugin.\r\n\t\t\t@param elem {Element} The source element.\r\n\t\t\t@param name {object|string} The collection of new option values or the name of a single option.\r\n\t\t\t@param [value] {any} The value for a single named option.\r\n\t\t\t@return {any|object} If retrieving a single value or all options.\r\n\t\t\t@example $(selector).plugin('option', 'name', value)\r\n $(selector).plugin('option', {name: value, ...})\r\n var value = $(selector).plugin('option', 'name')\r\n var options = $(selector).plugin('option') */\r\n\t\toption: function(elem, name, value) {\r\n\t\t\telem = $(elem);\r\n\t\t\tvar inst = elem.data(this.name);\r\n\t\t\tif (!name || (typeof name === 'string' && value == null)) {\r\n\t\t\t\tvar options = (inst || {}).options;\r\n\t\t\t\treturn (options && name ? options[name] : options);\r\n\t\t\t}\r\n\t\t\tif (!elem.hasClass(this._getMarker())) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar options = name || {};\r\n\t\t\tif (typeof name === 'string') {\r\n\t\t\t\toptions = {};\r\n\t\t\t\toptions[name] = value;\r\n\t\t\t}\r\n\t\t\tthis._optionsChanged(elem, inst, options);\r\n\t\t\t$.extend(inst.options, options);\r\n\t\t},\r\n\t\t\r\n\t\t/** Plugin specific options processing.\r\n\t\t\tOld value available in inst.options[name]
, new value in options[name]
.\r\n\t\t\tOverride this in a sub-class to perform extra activities.\r\n\t\t\t@param elem {jQuery} The current jQuery element.\r\n\t\t\t@param inst {object} The instance settings.\r\n\t\t\t@param options {object} The new options.\r\n\t\t\t@example _optionsChanged: function(elem, inst, options) {\r\n \tif (options.name != inst.options.name) {\r\n \t\telem.removeClass(inst.options.name).addClass(options.name);\r\n \t}\r\n } */\r\n\t\t_optionsChanged: function(elem, inst, options) {\r\n\t\t},\r\n\t\t\r\n\t\t/** Remove all trace of the plugin.\r\n\t\t\tOverride _preDestroy
for plugin-specific processing.\r\n\t\t\t@param elem {Element} The source element.\r\n\t\t\t@example $(selector).plugin('destroy') */\r\n\t\tdestroy: function(elem) {\r\n\t\t\telem = $(elem);\r\n\t\t\tif (!elem.hasClass(this._getMarker())) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._preDestroy(elem, this._getInst(elem));\r\n\t\t\telem.removeData(this.name).removeClass(this._getMarker());\r\n\t\t},\r\n\r\n\t\t/** Plugin specific pre destruction.\r\n\t\t\tOverride this in a sub-class to perform extra activities and undo everything that was\r\n\t\t\tdone in the _postAttach
or _optionsChanged
functions.\r\n\t\t\t@param elem {jQuery} The current jQuery element.\r\n\t\t\t@param inst {object} The instance settings.\r\n\t\t\t@example _preDestroy: function(elem, inst) {\r\n \telem.off('.' + this.name);\r\n } */\r\n\t\t_preDestroy: function(elem, inst) {\r\n\t\t}\r\n\t});\r\n\t\r\n\t/** Convert names from hyphenated to camel-case.\r\n\t\t@private\r\n\t\t@param value {string} The original hyphenated name.\r\n\t\t@return {string} The camel-case version. */\r\n\tfunction camelCase(name) {\r\n\t\treturn name.replace(/-([a-z])/g, function(match, group) {\r\n\t\t\treturn group.toUpperCase();\r\n\t\t});\r\n\t}\r\n\t\r\n\t/** Expose the plugin base.\r\n\t\t@namespace \"$.JQPlugin\" */\r\n\t$.JQPlugin = {\r\n\t\r\n\t\t/** Create a new collection plugin.\r\n\t\t\t@memberof \"$.JQPlugin\"\r\n\t\t\t@param [superClass='JQPlugin'] {string} The name of the parent class to inherit from.\r\n\t\t\t@param overrides {object} The property/function overrides for the new class.\r\n\t\t\t@example $.JQPlugin.createPlugin({\r\n \tname: 'tabs',\r\n \tdefaultOptions: {selectedClass: 'selected'},\r\n \t_initSettings: function(elem, options) { return {...}; },\r\n \t_postAttach: function(elem, inst) { ... }\r\n }); */\r\n\t\tcreatePlugin: function(superClass, overrides) {\r\n\t\t\tif (typeof superClass === 'object') {\r\n\t\t\t\toverrides = superClass;\r\n\t\t\t\tsuperClass = 'JQPlugin';\r\n\t\t\t}\r\n\t\t\tsuperClass = camelCase(superClass);\r\n\t\t\tvar className = camelCase(overrides.name);\r\n\t\t\tJQClass.classes[className] = JQClass.classes[superClass].extend(overrides);\r\n\t\t\tnew JQClass.classes[className]();\r\n\t\t}\r\n\t};\r\n\r\n})(jQuery);","/* http://keith-wood.name/datepick.html\r\n Date picker for jQuery v5.0.1.\r\n Written by Keith Wood (kbwood{at}iinet.com.au) February 2010.\r\n Licensed under the MIT (http://keith-wood.name/licence.html) licence. \r\n Please attribute the author if you use it. */\r\n\r\n(function($) { // Hide scope, no $ conflict\r\n\r\n\tvar pluginName = 'datepick';\r\n\r\n // Multi-language calendar labels from CMS\r\n\tvar cmsMonthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\tvar cmsMonthNamesShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n\tvar cmsDayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n\tvar cmsDayNamesShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n\r\n\tvar longMonths = $(\".calendar-container\").data(\"long-months\");\r\n\tif (longMonths) {\r\n\t cmsMonthNames = longMonths.split(\",\");\r\n\t}\r\n\tvar shortMonths = $(\".calendar-container\").data(\"short-months\");\r\n\tif (shortMonths) {\r\n\t cmsMonthNamesShort = shortMonths.split(\",\");\r\n\t}\r\n\r\n\tvar longWeekdays = $(\".calendar-container\").data(\"long-weekdays\");\r\n\tif (longWeekdays) {\r\n\t cmsDayNames = longWeekdays.split(\",\");\r\n\t}\r\n\tvar shortWeekdays = $(\".calendar-container\").data(\"short-weekdays\");\r\n\tif (shortWeekdays) {\r\n\t cmsDayNamesShort = shortWeekdays.split(\",\");\r\n\t}\r\n // End multi-language calendar labels from CMS\r\n\r\n\t/** Create the datepicker plugin.\r\n\t\tSets an input field to popup a calendar for date entry,\r\n\t\t\tor a div
or span
to show an inline calendar.
Expects HTML like:
\r\n\t\t<input type=\"text\"> or <div></div>\r\n\t\t
Provide inline configuration like:
\r\n\t\t<input type=\"text\" data-datepick=\"name: 'value'\"/>\r\n\t \t@module Datepick\r\n\t\t@augments JQPlugin\r\n\t\t@example $(selector).datepick()\r\n $(selector).datepick({minDate: 0, maxDate: '+1m +1w'}) */\r\n\t$.JQPlugin.createPlugin({\r\n\t\r\n\t\t/** The name of the plugin. */\r\n\t\tname: pluginName,\r\n\t\t\r\n\t\t/** Default template for generating a datepicker.\r\n\t\t\tInsert anywhere: '{l10n:name}' to insert localised value for name,\r\n\t\t\t'{link:name}' to insert a link trigger for command name,\r\n\t\t\t'{button:name}' to insert a button trigger for command name,\r\n\t\t\t'{popup:start}...{popup:end}' to mark a section for inclusion in a popup datepicker only,\r\n\t\t\t'{inline:start}...{inline:end}' to mark a section for inclusion in an inline datepicker only.\r\n\t\t\t@property picker {string} Overall structure: '{months}' to insert calendar months.\r\n\t\t\t@property monthRow {string} One row of months: '{months}' to insert calendar months.\r\n\t\t\t@property month {string} A single month: '{monthHeader:dateFormat}' to insert the month header -\r\n\t\t\t\t\t\tdateFormat is optional and defaults to 'MM yyyy',\r\n\t\t\t\t\t\t'{weekHeader}' to insert a week header, '{weeks}' to insert the month's weeks.\r\n\t\t\t@property weekHeader {string} A week header: '{days}' to insert individual day names.\r\n\t\t\t@property dayHeader {string} Individual day header: '{day}' to insert day name.\r\n\t\t\t@property week {string} One week of the month: '{days}' to insert the week's days,\r\n\t\t\t\t\t\t'{weekOfYear}' to insert week of year.\r\n\t\t\t@property day {string} An individual day: '{day}' to insert day value.\r\n\t\t\t@property monthSelector {string} jQuery selector, relative to picker, for a single month.\r\n\t\t\t@property daySelector {string} jQuery selector, relative to picker, for individual days.\r\n\t\t\t@property rtlClass {string} Class for right-to-left (RTL) languages.\r\n\t\t\t@property multiClass {string} Class for multi-month datepickers.\r\n\t\t\t@property defaultClass {string} Class for selectable dates.\r\n\t\t\t@property selectedClass {string} Class for currently selected dates.\r\n\t\t\t@property highlightedClass {string} Class for highlighted dates.\r\n\t\t\t@property todayClass {string} Class for today.\r\n\t\t\t@property otherMonthClass {string} Class for days from other months.\r\n\t\t\t@property weekendClass {string} Class for days on weekends.\r\n\t\t\t@property commandClass {string} Class prefix for commands.\r\n\t\t\t@property commandButtonClass {string} Extra class(es) for commands that are buttons.\r\n\t\t\t@property commandLinkClass {string} Extra class(es) for commands that are links.\r\n\t\t\t@property disabledClass {string} Class for disabled commands. */\r\n\t\tdefaultRenderer: {\r\n\t\t\tpicker: '
monthsToStep
option) - PageUpmonthsToJump
option) - Ctrl+PageUpmonthsToStep
option) - PageDownmonthsToJump
option) - Ctrl+PageDownkeyCode
{number} the code for the keystroke,\r\n\t\t\t\tctrlKey
{boolean} true
if Ctrl is required,\r\n\t\t\t\taltKey
{boolean} true
if Alt is required,\r\n\t\t\t\tshiftKey
{boolean} true
if Shift is required.\r\n\t\t\t@property enabled {DatepickCommandEnabled} The function that indicates the command is enabled.\r\n\t\t\t@property date {DatepickCommandDate} The function to get the date associated with this action.\r\n\t\t\t@property action {DatepickCommandAction} The function that implements the action. */\r\n\t\tcommands: {\r\n\t\t\tprev: {text: 'prevText', status: 'prevStatus', // Previous month\r\n\t\t\t\tkeystroke: {keyCode: 33}, // Page up\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\treturn (!minDate || plugin.add(plugin.day(\r\n\t\t\t\t\t\tplugin._applyMonthsOffset(plugin.add(plugin.newDate(inst.drawDate),\r\n\t\t\t\t\t\t1 - inst.options.monthsToStep, 'm'), inst), 1), -1, 'd').\r\n\t\t\t\t\t\tgetTime() >= minDate.getTime()); },\r\n\t\t\t\tdate: function(inst) {\r\n\t\t\t\t\treturn plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), -inst.options.monthsToStep, 'm'), inst), 1); },\r\n\t\t\t\taction: function(inst) {\r\n\t\t\t\t\tplugin.changeMonth(this, -inst.options.monthsToStep); }\r\n\t\t\t},\r\n\t\t\tprevJump: {text: 'prevJumpText', status: 'prevJumpStatus', // Previous year\r\n\t\t\t\tkeystroke: {keyCode: 33, ctrlKey: true}, // Ctrl + Page up\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\treturn (!minDate || plugin.add(plugin.day(\r\n\t\t\t\t\t\tplugin._applyMonthsOffset(plugin.add(plugin.newDate(inst.drawDate),\r\n\t\t\t\t\t\t1 - inst.options.monthsToJump, 'm'), inst), 1), -1, 'd').\r\n\t\t\t\t\t\tgetTime() >= minDate.getTime()); },\r\n\t\t\t\tdate: function(inst) {\r\n\t\t\t\t\treturn plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), -inst.options.monthsToJump, 'm'), inst), 1); },\r\n\t\t\t\taction: function(inst) {\r\n\t\t\t\t\tplugin.changeMonth(this, -inst.options.monthsToJump); }\r\n\t\t\t},\r\n\t\t\tnext: {text: 'nextText', status: 'nextStatus', // Next month\r\n\t\t\t\tkeystroke: {keyCode: 34}, // Page down\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\treturn (!maxDate || plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), inst.options.monthsToStep, 'm'), inst), 1).\r\n\t\t\t\t\t\tgetTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) {\r\n\t\t\t\t\treturn plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), inst.options.monthsToStep, 'm'), inst), 1); },\r\n\t\t\t\taction: function(inst) {\r\n\t\t\t\t\tplugin.changeMonth(this, inst.options.monthsToStep); }\r\n\t\t\t},\r\n\t\t\tnextJump: {text: 'nextJumpText', status: 'nextJumpStatus', // Next year\r\n\t\t\t\tkeystroke: {keyCode: 34, ctrlKey: true}, // Ctrl + Page down\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\treturn (!maxDate || plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), inst.options.monthsToJump, 'm'), inst), 1).\r\n\t\t\t\t\t\tgetTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) {\r\n\t\t\t\t\treturn plugin.day(plugin._applyMonthsOffset(plugin.add(\r\n\t\t\t\t\t\tplugin.newDate(inst.drawDate), inst.options.monthsToJump, 'm'), inst), 1); },\r\n\t\t\t\taction: function(inst) {\r\n\t\t\t\t\tplugin.changeMonth(this, inst.options.monthsToJump); }\r\n\t\t\t},\r\n\t\t\tcurrent: {text: 'currentText', status: 'currentStatus', // Current month\r\n\t\t\t\tkeystroke: {keyCode: 36, ctrlKey: true}, // Ctrl + Home\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\tvar curDate = inst.selectedDates[0] || plugin.today();\r\n\t\t\t\t\treturn (!minDate || curDate.getTime() >= minDate.getTime()) &&\r\n\t\t\t\t\t\t(!maxDate || curDate.getTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) {\r\n\t\t\t\t\treturn inst.selectedDates[0] || plugin.today(); },\r\n\t\t\t\taction: function(inst) {\r\n\t\t\t\t\tvar curDate = inst.selectedDates[0] || plugin.today();\r\n\t\t\t\t\tplugin.showMonth(this, curDate.getFullYear(), curDate.getMonth() + 1); }\r\n\t\t\t},\r\n\t\t\ttoday: {text: 'todayText', status: 'todayStatus', // Today's month\r\n\t\t\t\tkeystroke: {keyCode: 36, ctrlKey: true}, // Ctrl + Home\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\treturn (!minDate || plugin.today().getTime() >= minDate.getTime()) &&\r\n\t\t\t\t\t\t(!maxDate || plugin.today().getTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) { return plugin.today(); },\r\n\t\t\t\taction: function(inst) { plugin.showMonth(this); }\r\n\t\t\t},\r\n\t\t\tclear: {text: 'clearText', status: 'clearStatus', // Clear the datepicker\r\n\t\t\t\tkeystroke: {keyCode: 35, ctrlKey: true}, // Ctrl + End\r\n\t\t\t\tenabled: function(inst) { return true; },\r\n\t\t\t\tdate: function(inst) { return null; },\r\n\t\t\t\taction: function(inst) { plugin.clear(this); }\r\n\t\t\t},\r\n\t\t\tclose: {text: 'closeText', status: 'closeStatus', // Close the datepicker\r\n\t\t\t\tkeystroke: {keyCode: 27}, // Escape\r\n\t\t\t\tenabled: function(inst) { return true; },\r\n\t\t\t\tdate: function(inst) { return null; },\r\n\t\t\t\taction: function(inst) { plugin.hide(this); }\r\n\t\t\t},\r\n\t\t\tprevWeek: {text: 'prevWeekText', status: 'prevWeekStatus', // Previous week\r\n\t\t\t\tkeystroke: {keyCode: 38, ctrlKey: true}, // Ctrl + Up\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\treturn (!minDate || plugin.add(plugin.newDate(inst.drawDate), -7, 'd').\r\n\t\t\t\t\t\tgetTime() >= minDate.getTime()); },\r\n\t\t\t\tdate: function(inst) { return plugin.add(plugin.newDate(inst.drawDate), -7, 'd'); },\r\n\t\t\t\taction: function(inst) { plugin.changeDay(this, -7); }\r\n\t\t\t},\r\n\t\t\tprevDay: {text: 'prevDayText', status: 'prevDayStatus', // Previous day\r\n\t\t\t\tkeystroke: {keyCode: 37, ctrlKey: true}, // Ctrl + Left\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar minDate = inst.curMinDate();\r\n\t\t\t\t\treturn (!minDate || plugin.add(plugin.newDate(inst.drawDate), -1, 'd').\r\n\t\t\t\t\t\tgetTime() >= minDate.getTime()); },\r\n\t\t\t\tdate: function(inst) { return plugin.add(plugin.newDate(inst.drawDate), -1, 'd'); },\r\n\t\t\t\taction: function(inst) { plugin.changeDay(this, -1); }\r\n\t\t\t},\r\n\t\t\tnextDay: {text: 'nextDayText', status: 'nextDayStatus', // Next day\r\n\t\t\t\tkeystroke: {keyCode: 39, ctrlKey: true}, // Ctrl + Right\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\treturn (!maxDate || plugin.add(plugin.newDate(inst.drawDate), 1, 'd').\r\n\t\t\t\t\t\tgetTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) { return plugin.add(plugin.newDate(inst.drawDate), 1, 'd'); },\r\n\t\t\t\taction: function(inst) { plugin.changeDay(this, 1); }\r\n\t\t\t},\r\n\t\t\tnextWeek: {text: 'nextWeekText', status: 'nextWeekStatus', // Next week\r\n\t\t\t\tkeystroke: {keyCode: 40, ctrlKey: true}, // Ctrl + Down\r\n\t\t\t\tenabled: function(inst) {\r\n\t\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\t\treturn (!maxDate || plugin.add(plugin.newDate(inst.drawDate), 7, 'd').\r\n\t\t\t\t\t\tgetTime() <= maxDate.getTime()); },\r\n\t\t\t\tdate: function(inst) { return plugin.add(plugin.newDate(inst.drawDate), 7, 'd'); },\r\n\t\t\t\taction: function(inst) { plugin.changeDay(this, 7); }\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Determine whether a command is enabled.\r\n\t\t\t@callback DatepickCommandEnabled\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {boolean} true
if this command is enabled, false
if not.\r\n\t\t\t@example enabled: function(inst) {\r\n\treturn !!inst.curMinDate();\r\n } */\r\n\r\n\t\t/** Calculate the representative date for a command.\r\n\t\t\t@callback DatepickCommandDate\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {Date} A date appropriate for this command.\r\n\t\t\t@example date: function(inst) {\r\n\treturn inst.curMinDate();\r\n } */\r\n\r\n\t\t/** Perform the action for a command.\r\n\t\t\t@callback DatepickCommandAction\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@example date: function(inst) {\r\n\t$.datepick.setDate(inst.elem, inst.curMinDate());\r\n } */\r\n\r\n\t\t/** Calculate the week of the year for a date.\r\n\t\t\t@callback DatepickCalculateWeek\r\n\t\t\t@param date {Date} The date to evaluate.\r\n\t\t\t@return {number} The week of the year.\r\n\t\t\t@example calculateWeek: function(date) {\r\n\treturn Math.floor(($.datepick.dayOfYear(date) - 1) / 7) + 1;\r\n } */\r\n\r\n\t\t/** Provide information about an individual date shown in the calendar.\r\n\t\t\t@callback DatepickOnDate\r\n\t\t\t@param date {Date} The date to evaluate.\r\n\t\t\t@return {object} Information about that date, with the properties above.\r\n\t\t\t@property selectable {boolean} true
if this date can be selected.\r\n\t\t\t@property dateClass {string} Class(es) to be applied to the date.\r\n\t\t\t@property content {string} The date cell content.\r\n\t\t\t@property tooltip {string} A popup tooltip for the date.\r\n\t\t\t@example onDate: function(date) {\r\n\treturn {selectable: date.getDay() > 0 && date.getDay() < 5,\r\n\t\tdateClass: date.getDay() == 4 ? 'last-day' : ''};\r\n } */\r\n\r\n\t\t/** Update the datepicker display.\r\n\t\t\t@callback DatepickOnShow\r\n\t\t\t@param picker {jQuery} The datepicker div
to be shown.\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@example onShow: function(picker, inst) {\r\n\tpicker.append('<button type=\"button\">Hi</button>').\r\n\t\tfind('button:last').click(function() {\r\n\t\t\talert('Hi!');\r\n\t\t});\r\n } */\r\n\r\n\t\t/** React to navigating through the months/years.\r\n\t\t\t@callback DatepickOnChangeMonthYear\r\n\t\t\t@param year {number} The new year.\r\n\t\t\t@param month {number} The new month (1 to 12).\r\n\t\t\t@example onChangeMonthYear: function(year, month) {\r\n\talert('Now in ' + month + '/' + year);\r\n } */\r\n\t\t\t\r\n\t\t/** Datepicker on select callback.\r\n\t\t\tTriggered when a date is selected.\r\n\t\t\t@callback DatepickOnSelect\r\n\t\t\t@param dates {Date[]} The selected date(s).\r\n\t\t\t@example onSelect: function(dates) {\r\n \talert('Selected ' + dates);\r\n } */\r\n\t\t\t\r\n\t\t/** Datepicker on close callback.\r\n\t\t\tTriggered when a popup calendar is closed.\r\n\t\t\t@callback DatepickOnClose\r\n\t\t\t@param dates {Date[]} The selected date(s).\r\n\t\t\t@example onClose: function(dates) {\r\n \talert('Selected ' + dates);\r\n } */\r\n\t\t\t\r\n\t\t/** Default settings for the plugin.\r\n\t\t\t@property [pickerClass=''] {string} CSS class to add to this instance of the datepicker.\r\n\t\t\t@property [showOnFocus=true] {boolean} true
for popup on focus, false
for not.\r\n\t\t\t@property [showTrigger=null] {string|Element|jQuery} Element to be cloned for a trigger, null
for none.\r\n\t\t\t@property [showAnim='show'] {string} Name of jQuery animation for popup, '' for no animation.\r\n\t\t\t@property [showOptions=null] {object} Options for enhanced animations.\r\n\t\t\t@property [showSpeed='normal'] {string} Duration of display/closure.\r\n\t\t\t@property [popupContainer=null] {string|Element|jQuery} The element to which a popup calendar is added, null
for body.\r\n\t\t\t@property [alignment='bottom'] {string} Alignment of popup - with nominated corner of input:\r\n\t\t\t\t\t\t'top' or 'bottom' aligns depending on language direction,\r\n\t\t\t\t\t\t'topLeft', 'topRight', 'bottomLeft', 'bottomRight'.\r\n\t\t\t@property [fixedWeeks=false] {boolean} true
to always show 6 weeks, false
to only show as many as are needed.\r\n\t\t\t@property [firstDay=0] {number} First day of the week, 0 = Sunday, 1 = Monday, etc.\r\n\t\t\t@property [calculateWeek=this.iso8601Week] {DatepickCalculateWeek} Calculate week of the year from a date, null
for ISO8601.\r\n\t\t\t@property [monthsToShow=1] {number|number[]} How many months to show, cols or [rows, cols].\r\n\t\t\t@property [monthsOffset=0] {number} How many months to offset the primary month by;\r\n\t\t\t\t\t\tmay be a function that takes the date and returns the offset.\r\n\t\t\t@property [monthsToStep=1] {number} How many months to move when prev/next clicked.\r\n\t\t\t@property [monthsToJump=12] {number} How many months to move when large prev/next clicked.\r\n\t\t\t@property [useMouseWheel=true] {boolean} true
to use mousewheel if available, false
to never use it.\r\n\t\t\t@property [changeMonth=true] {boolean} true
to change month/year via drop-down, false
for navigation only.\r\n\t\t\t@property [yearRange='c-10:c+10'] {string} Range of years to show in drop-down: 'any' for direct text entry\r\n\t\t\t\t\t\tor 'start:end', where start/end are '+-nn' for relative to today\r\n\t\t\t\t\t\tor 'c+-nn' for relative to the currently selected date\r\n\t\t\t\t\t\tor 'nnnn' for an absolute year.\r\n\t\t\t@property [shortYearCutoff='+10'] {string} Cutoff for two-digit year in the current century.\r\n\t\t\t@property [showOtherMonths=false] {boolean} true
to show dates from other months, false
to not show them.\r\n\t\t\t@property [selectOtherMonths=false] {boolean} true
to allow selection of dates from other months too.\r\n\t\t\t@property [defaultDate=null] {string|number|Date} Date to show if no other selected.\r\n\t\t\t@property [selectDefaultDate=false] {boolean} true
to pre-select the default date if no other is chosen.\r\n\t\t\t@property [minDate=null] {string|number|Date} The minimum selectable date.\r\n\t\t\t@property [maxDate=null] {string|number|Date} The maximum selectable date.\r\n\t\t\t@property [dateFormat='mm/dd/yyyy'] {string} Format for dates.\r\n\t\t\t@property [autoSize=false] {boolean} true
to size the input field according to the date format.\r\n\t\t\t@property [rangeSelect=false] {boolean} Allows for selecting a date range on one date picker.\r\n\t\t\t@property [rangeSeparator=' - '] {string} Text between two dates in a range.\r\n\t\t\t@property [multiSelect=0] {number} Maximum number of selectable dates, zero for single select.\r\n\t\t\t@property [multiSeparator=','] {string} Text between multiple dates.\r\n\t\t\t@property [onDate=null] {DatepickOnDate} Callback as a date is added to the datepicker.\r\n\t\t\t@property [onShow=null] {DatepickOnShow} Callback just before a datepicker is shown.\r\n\t\t\t@property [onChangeMonthYear=null] {DatepickOnChangeMonthYear} Callback when a new month/year is selected.\r\n\t\t\t@property [onSelect=null] {DatepickOnSelect} Callback when a date is selected.\r\n\t\t\t@property [onClose=null] {DatepickOnClose} Callback when a datepicker is closed.\r\n\t\t\t@property [altField=null] {string|Element|jQuery} Alternate field to update in synch with the datepicker.\r\n\t\t\t@property [altFormat=null] {string} Date format for alternate field, defaults to dateFormat
.\r\n\t\t\t@property [constrainInput=true] {boolean} true
to constrain typed input to dateFormat
allowed characters.\r\n\t\t\t@property [commandsAsDateFormat=false] {boolean} true
to apply\r\n\t\t\t\t\t\tformatDate
to the command texts.\r\n\t\t\t@property [commands=this.commands] {object} Command actions that may be added to a layout by name. */\r\n\t\tdefaultOptions: {\r\n\t\t\tpickerClass: '',\r\n\t\t\tshowOnFocus: true,\r\n\t\t\tshowTrigger: null,\r\n\t\t\tshowAnim: 'show',\r\n\t\t\tshowOptions: {},\r\n\t\t\tshowSpeed: 'normal',\r\n\t\t\tpopupContainer: null,\r\n\t\t\talignment: 'bottom',\r\n\t\t\tfixedWeeks: false,\r\n\t\t\tfirstDay: 0,\r\n\t\t\tcalculateWeek: null, // this.iso8601Week,\r\n\t\t\tmonthsToShow: 1,\r\n\t\t\tmonthsOffset: 0,\r\n\t\t\tmonthsToStep: 1,\r\n\t\t\tmonthsToJump: 12,\r\n\t\t\tuseMouseWheel: true,\r\n\t\t\tchangeMonth: true,\r\n\t\t\tyearRange: 'c-10:c+10',\r\n\t\t\tshortYearCutoff: '+10',\r\n\t\t\tshowOtherMonths: false,\r\n\t\t\tselectOtherMonths: false,\r\n\t\t\tdefaultDate: null,\r\n\t\t\tselectDefaultDate: false,\r\n\t\t\tminDate: null,\r\n\t\t\tmaxDate: null,\r\n\t\t\tdateFormat: 'mm/dd/yyyy',\r\n\t\t\tautoSize: false,\r\n\t\t\trangeSelect: false,\r\n\t\t\trangeSeparator: ' - ',\r\n\t\t\tmultiSelect: 0,\r\n\t\t\tmultiSeparator: ',',\r\n\t\t\tonDate: null,\r\n\t\t\tonShow: null,\r\n\t\t\tonChangeMonthYear: null,\r\n\t\t\tonSelect: null,\r\n\t\t\tonClose: null,\r\n\t\t\taltField: null,\r\n\t\t\taltFormat: null,\r\n\t\t\tconstrainInput: true,\r\n\t\t\tcommandsAsDateFormat: false,\r\n\t\t\tcommands: {} // this.commands\r\n\t\t},\r\n\r\n\t\t/** Localisations for the plugin.\r\n\t\t\tEntries are objects indexed by the language code ('' being the default US/English).\r\n\t\t\tEach object has the following attributes.\r\n\t\t\t@property [monthNames=['January','February','March','April','May','June','July','August','September','October','November','December']]\r\n\t\t\t\t\t\tThe long names of the months.\r\n\t\t\t@property [monthNamesShort=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']]\r\n\t\t\t\t\t\tThe short names of the months.\r\n\t\t\t@property [dayNames=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']]\r\n\t\t\t\t\t\tThe long names of the days of the week.\r\n\t\t\t@property [dayNamesShort=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']] The short names of the days of the week.\r\n\t\t\t@property [dayNamesMin=['Su','Mo','Tu','We','Th','Fr','Sa']] The minimal names of the days of the week.\r\n\t\t\t@property [dateFormat='mm/dd/yyyy'] {string} See options on formatDate
.\r\n\t\t\t@property [firstDay=0] {number} The first day of the week, Sun = 0, Mon = 1, etc.\r\n\t\t\t@property [renderer=this.defaultRenderer] {string} The rendering templates.\r\n\t\t\t@property [prevText='<Prev'] {string} Text for the previous month command.\r\n\t\t\t@property [prevStatus='Show the previous month'] {string} Status text for the previous month command.\r\n\t\t\t@property [prevJumpText='<<'] {string} Text for the previous year command.\r\n\t\t\t@property [prevJumpStatus='Show the previous year'] {string} Status text for the previous year command.\r\n\t\t\t@property [nextText='Next>'] {string} Text for the next month command.\r\n\t\t\t@property [nextStatus='Show the next month'] {string} Status text for the next month command.\r\n\t\t\t@property [nextJumpText='>>'] {string} Text for the next year command.\r\n\t\t\t@property [nextJumpStatus='Show the next year'] {string} Status text for the next year command.\r\n\t\t\t@property [currentText='Current'] {string} Text for the current month command.\r\n\t\t\t@property [currentStatus='Show the current month'] {string} Status text for the current month command.\r\n\t\t\t@property [todayText='Today'] {string} Text for the today's month command.\r\n\t\t\t@property [todayStatus='Show today\\'s month'] {string} Status text for the today's month command.\r\n\t\t\t@property [clearText='Clear'] {string} Text for the clear command.\r\n\t\t\t@property [clearStatus='Clear all the dates'] {string} Status text for the clear command.\r\n\t\t\t@property [closeText='Close'] {string} Text for the close command.\r\n\t\t\t@property [closeStatus='Close the datepicker'] {string} Status text for the close command.\r\n\t\t\t@property [yearStatus='Change the year'] {string} Status text for year selection.\r\n\t\t\t@property [earlierText=' â–²'] {string} Text for earlier years.\r\n\t\t\t@property [laterText=' â–¼'] {string} Text for later years.\r\n\t\t\t@property [monthStatus='Change the month'] {string} Status text for month selection.\r\n\t\t\t@property [weekText='Wk'] {string} Text for week of the year column header.\r\n\t\t\t@property [weekStatus='Week of the year'] {string} Status text for week of the year column header.\r\n\t\t\t@property [dayStatus='Select DD, M d, yyyy'] {string} Status text for selectable days.\r\n\t\t\t@property [defaultStatus='Select a date'] {string} Status text shown by default.\r\n\t\t\t@property [isRTL=false] {boolean} true
if language is right-to-left. */\r\n\t\tregionalOptions: { // Available regional settings, indexed by language/country code\r\n\t\t\t'': { // Default regional settings - English/US\r\n\t\t\t monthNames: cmsMonthNames,\r\n\t\t\t monthNamesShort: cmsMonthNamesShort,\r\n\t\t\t dayNames: cmsDayNames,\r\n\t\t\t dayNamesShort: cmsDayNamesShort,\r\n\t\t\t dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n\t\t\t\tdateFormat: 'mm/dd/yyyy',\r\n\t\t\t\tfirstDay: 0,\r\n\t\t\t\trenderer: {}, // this.defaultRenderer\r\n\t\t\t\tprevText: '<Prev',\r\n\t\t\t\tprevStatus: 'Show the previous month',\r\n\t\t\t\tprevJumpText: '<<',\r\n\t\t\t\tprevJumpStatus: 'Show the previous year',\r\n\t\t\t\tnextText: 'Next>',\r\n\t\t\t\tnextStatus: 'Show the next month',\r\n\t\t\t\tnextJumpText: '>>',\r\n\t\t\t\tnextJumpStatus: 'Show the next year',\r\n\t\t\t\tcurrentText: 'Current',\r\n\t\t\t\tcurrentStatus: 'Show the current month',\r\n\t\t\t\ttodayText: 'Today',\r\n\t\t\t\ttodayStatus: 'Show today\\'s month',\r\n\t\t\t\tclearText: 'Clear',\r\n\t\t\t\tclearStatus: 'Clear all the dates',\r\n\t\t\t\tcloseText: 'Close',\r\n\t\t\t\tcloseStatus: 'Close the datepicker',\r\n\t\t\t\tyearStatus: 'Change the year',\r\n\t\t\t\tearlierText: ' â–²',\r\n\t\t\t\tlaterText: ' â–¼',\r\n\t\t\t\tmonthStatus: 'Change the month',\r\n\t\t\t\tweekText: 'Wk',\r\n\t\t\t\tweekStatus: 'Week of the year',\r\n\t\t\t\tdayStatus: 'Select DD, M d, yyyy',\r\n\t\t\t\tdefaultStatus: 'Select a date',\r\n\t\t\t\tisRTL: false\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t/** Names of getter methods - those that can't be chained. */\r\n\t\t_getters: ['getDate', 'isDisabled', 'isSelectable', 'retrieveDate'],\r\n\r\n\t\t_disabled: [],\r\n\t\t\r\n\t\t_popupClass: pluginName + '-popup', // Marker for popup division\r\n\t\t_triggerClass: pluginName + '-trigger', // Marker for trigger element\r\n\t\t_disableClass: pluginName + '-disable', // Marker for disabled element\r\n\t\t_monthYearClass: pluginName + '-month-year', // Marker for month/year inputs\r\n\t\t_curMonthClass: pluginName + '-month-', // Marker for current month/year\r\n\t\t_anyYearClass: pluginName + '-any-year', // Marker for year direct input\r\n\t\t_curDoWClass: pluginName + '-dow-', // Marker for day of week\r\n\r\n\t\t_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\r\n\t\t\tMath.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\r\n\t\t_msPerDay: 24 * 60 * 60 * 1000,\r\n\r\n\t\t/** The date format for use with Atom (RFC 3339/ISO 8601). */\r\n\t\tATOM: 'yyyy-mm-dd',\r\n\t\t/** The date format for use with cookies. */\r\n\t\tCOOKIE: 'D, dd M yyyy',\r\n\t\t/** The date format for full display. */\r\n\t\tFULL: 'DD, MM d, yyyy',\r\n\t\t/** The date format for use with ISO 8601. */\r\n\t\tISO_8601: 'yyyy-mm-dd',\r\n\t\t/** The date format for Julian dates. */\r\n\t\tJULIAN: 'J',\r\n\t\t/** The date format for use with RFC 822. */\r\n\t\tRFC_822: 'D, d M yy',\r\n\t\t/** The date format for use with RFC 850. */\r\n\t\tRFC_850: 'DD, dd-M-yy',\r\n\t\t/** The date format for use with RFC 1036. */\r\n\t\tRFC_1036: 'D, d M yy',\r\n\t\t/** The date format for use with RFC 1123. */\r\n\t\tRFC_1123: 'D, d M yyyy',\r\n\t\t/** The date format for use with RFC 2822. */\r\n\t\tRFC_2822: 'D, d M yyyy',\r\n\t\t/** The date format for use with RSS (RFC 822). */\r\n\t\tRSS: 'D, d M yy',\r\n\t\t/** The date format for Windows ticks. */\r\n\t\tTICKS: '!',\r\n\t\t/** The date format for Unix timestamp. */\r\n\t\tTIMESTAMP: '@',\r\n\t\t/** The date format for use with W3C (ISO 8601). */\r\n\t\tW3C: 'yyyy-mm-dd',\r\n\r\n\t\t/** Format a date object into a string value.\r\n\t\t\tThe format can be combinations of the following:\r\n\t\t\tformatDate
for the possible formats, plus:\r\n\t\t\tnull
if value is blank.\r\n\t\t\t@throws Errors if the format and/or value are missing, if the value doesn't match the format,\r\n\t\t\t\t\tor if the date is invalid.\r\n\t\t\t@example var date = $.datepick.parseDate('dd/mm/yyyy', '25/12/2014') */\r\n\t\tparseDate: function(format, value, settings) {\r\n\t\t\tif (value == null) {\r\n\t\t\t\tthrow 'Invalid arguments';\r\n\t\t\t}\r\n\t\t\tvalue = (typeof value === 'object' ? value.toString() : value + '');\r\n\t\t\tif (value === '') {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tformat = format || this.defaultOptions.dateFormat;\r\n\t\t\tsettings = settings || {};\r\n\t\t\tvar shortYearCutoff = settings.shortYearCutoff || this.defaultOptions.shortYearCutoff;\r\n\t\t\tshortYearCutoff = (typeof shortYearCutoff !== 'string' ? shortYearCutoff :\r\n\t\t\t\tthis.today().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n\t\t\tvar dayNamesShort = settings.dayNamesShort || this.defaultOptions.dayNamesShort;\r\n\t\t\tvar dayNames = settings.dayNames || this.defaultOptions.dayNames;\r\n\t\t\tvar monthNamesShort = settings.monthNamesShort || this.defaultOptions.monthNamesShort;\r\n\t\t\tvar monthNames = settings.monthNames || this.defaultOptions.monthNames;\r\n\t\t\tvar year = -1;\r\n\t\t\tvar month = -1;\r\n\t\t\tvar day = -1;\r\n\t\t\tvar doy = -1;\r\n\t\t\tvar shortYear = false;\r\n\t\t\tvar literal = false;\r\n\t\t\t// Check whether a format character is doubled\r\n\t\t\tvar doubled = function(match, step) {\r\n\t\t\t\tvar matches = 1;\r\n\t\t\t\twhile (iFormat + matches < format.length && format.charAt(iFormat + matches) === match) {\r\n\t\t\t\t\tmatches++;\r\n\t\t\t\t}\r\n\t\t\t\tiFormat += matches - 1;\r\n\t\t\t\treturn Math.floor(matches / (step || 1)) > 1;\r\n\t\t\t};\r\n\t\t\t// Extract a number from the string value\r\n\t\t\tvar getNumber = function(match, step) {\r\n\t\t\t\tvar isDoubled = doubled(match, step);\r\n\t\t\t\tvar size = [2, 3, isDoubled ? 4 : 2, 11, 20]['oy@!'.indexOf(match) + 1];\r\n\t\t\t\tvar digits = new RegExp('^-?\\\\d{1,' + size + '}');\r\n\t\t\t\tvar num = value.substring(iValue).match(digits);\r\n\t\t\t\tif (!num) {\r\n\t\t\t\t\tthrow 'Missing number at position {0}'.replace(/\\{0\\}/, iValue);\r\n\t\t\t\t}\r\n\t\t\t\tiValue += num[0].length;\r\n\t\t\t\treturn parseInt(num[0], 10);\r\n\t\t\t};\r\n\t\t\t// Extract a name from the string value and convert to an index\r\n\t\t\tvar getName = function(match, shortNames, longNames, step) {\r\n\t\t\t\tvar names = (doubled(match, step) ? longNames : shortNames);\r\n\t\t\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t\t\tif (value.substr(iValue, names[i].length).toLowerCase() === names[i].toLowerCase()) {\r\n\t\t\t\t\t\tiValue += names[i].length;\r\n\t\t\t\t\t\treturn i + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthrow 'Unknown name at position {0}'.replace(/\\{0\\}/, iValue);\r\n\t\t\t};\r\n\t\t\t// Confirm that a literal character matches the string value\r\n\t\t\tvar checkLiteral = function() {\r\n\t\t\t\tif (value.charAt(iValue) !== format.charAt(iFormat)) {\r\n\t\t\t\t\tthrow 'Unexpected literal at position {0}'.replace(/\\{0\\}/, iValue);\r\n\t\t\t\t}\r\n\t\t\t\tiValue++;\r\n\t\t\t};\r\n\t\t\tvar iValue = 0;\r\n\t\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\t\tif (literal) {\r\n\t\t\t\t\tif (format.charAt(iFormat) === \"'\" && !doubled(\"'\")) {\r\n\t\t\t\t\t\tliteral = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\t\tcase 'd': day = getNumber('d'); break;\r\n\t\t\t\t\t\tcase 'D': getName('D', dayNamesShort, dayNames); break;\r\n\t\t\t\t\t\tcase 'o': doy = getNumber('o'); break;\r\n\t\t\t\t\t\tcase 'w': getNumber('w'); break;\r\n\t\t\t\t\t\tcase 'm': month = getNumber('m'); break;\r\n\t\t\t\t\t\tcase 'M': month = getName('M', monthNamesShort, monthNames); break;\r\n\t\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\t\tvar iSave = iFormat;\r\n\t\t\t\t\t\t\tshortYear = !doubled('y', 2);\r\n\t\t\t\t\t\t\tiFormat = iSave;\r\n\t\t\t\t\t\t\tyear = getNumber('y', 2);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '@':\r\n\t\t\t\t\t\t\tvar date = this._normaliseDate(new Date(getNumber('@') * 1000));\r\n\t\t\t\t\t\t\tyear = date.getFullYear();\r\n\t\t\t\t\t\t\tmonth = date.getMonth() + 1;\r\n\t\t\t\t\t\t\tday = date.getDate();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '!':\r\n\t\t\t\t\t\t\tvar date = this._normaliseDate(\r\n\t\t\t\t\t\t\t\tnew Date((getNumber('!') - this._ticksTo1970) / 10000));\r\n\t\t\t\t\t\t\tyear = date.getFullYear();\r\n\t\t\t\t\t\t\tmonth = date.getMonth() + 1;\r\n\t\t\t\t\t\t\tday = date.getDate();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '*': iValue = value.length; break;\r\n\t\t\t\t\t\tcase \"'\":\r\n\t\t\t\t\t\t\tif (doubled(\"'\")) {\r\n\t\t\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault: checkLiteral();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (iValue < value.length) {\r\n\t\t\t\tthrow 'Additional text found at end';\r\n\t\t\t}\r\n\t\t\tif (year === -1) {\r\n\t\t\t\tyear = this.today().getFullYear();\r\n\t\t\t}\r\n\t\t\telse if (year < 100 && shortYear) {\r\n\t\t\t\tyear += (shortYearCutoff === -1 ? 1900 : this.today().getFullYear() -\r\n\t\t\t\t\tthis.today().getFullYear() % 100 - (year <= shortYearCutoff ? 0 : 100));\r\n\t\t\t}\r\n\t\t\tif (doy > -1) {\r\n\t\t\t\tmonth = 1;\r\n\t\t\t\tday = doy;\r\n\t\t\t\tfor (var dim = this.daysInMonth(year, month); day > dim;\r\n\t\t\t\t\t\tdim = this.daysInMonth(year, month)) {\r\n\t\t\t\t\tmonth++;\r\n\t\t\t\t\tday -= dim;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar date = this.newDate(year, month, day);\r\n\t\t\tif (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\r\n\t\t\t\tthrow 'Invalid date';\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\r\n\t\t/** A date may be specified as an exact value or a relative one.\r\n\t\t\t@param dateSpec {Date|number|string} The date as an object or string\r\n\t\t\t\t\tin the given format or an offset - numeric days from today,\r\n\t\t\t\t\tor string amounts and periods, e.g. '+1m +2w'.\r\n\t\t\t@param defaultDate {Date} The date to use if no other supplied, may be null
.\r\n\t\t\t@param [currentDate] {Date} The current date as a possible basis for relative dates,\r\n\t\t\t\t\tif null
today is used.\r\n\t\t\t@param dateFormat {string} The expected date format - see formatDate
.\r\n\t\t\t@param settings {object} With the properties shown above.\r\n\t\t\t@property [shortYearCutoff] {number} The cutoff year for determining the century.\r\n\t\t\t@property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.\r\n\t\t\t@property [dayNames] {string[]} Names of the days from Sunday.\r\n\t\t\t@property [monthNamesShort] {string[]} Abbreviated names of the months.\r\n\t\t\t@property [monthNames] {string[]} Names of the months.\r\n\t\t\t@return {Date} The decoded date.\r\n\t\t\t@example $.datepick.determineDate('+1m +2w', new Date()) */\r\n\t\tdetermineDate: function(dateSpec, defaultDate, currentDate, dateFormat, settings) {\r\n\t\t\tif (currentDate && typeof currentDate !== 'object') {\r\n\t\t\t\tsettings = dateFormat;\r\n\t\t\t\tdateFormat = currentDate;\r\n\t\t\t\tcurrentDate = null;\r\n\t\t\t}\r\n\t\t\tif (typeof dateFormat !== 'string') {\r\n\t\t\t\tsettings = dateFormat;\r\n\t\t\t\tdateFormat = '';\r\n\t\t\t}\r\n\t\t\tvar offsetString = function(offset) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn plugin.parseDate(dateFormat, offset, settings);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) {\r\n\t\t\t\t\t// Ignore\r\n\t\t\t\t}\r\n\t\t\t\toffset = offset.toLowerCase();\r\n\t\t\t\tvar date = (offset.match(/^c/) && currentDate ? plugin.newDate(currentDate) : null) ||\r\n\t\t\t\t\tplugin.today();\r\n\t\t\t\tvar pattern = /([+-]?[0-9]+)\\s*(d|w|m|y)?/g;\r\n\t\t\t\tvar matches = null;\r\n\t\t\t\twhile (matches = pattern.exec(offset)) {\r\n\t\t\t\t\tdate = plugin.add(date, parseInt(matches[1], 10), matches[2] || 'd');\r\n\t\t\t\t}\r\n\t\t\t\treturn date;\r\n\t\t\t};\r\n\t\t\tdefaultDate = (defaultDate ? plugin.newDate(defaultDate) : null);\r\n\t\t\tdateSpec = (dateSpec == null ? defaultDate :\r\n\t\t\t\t(typeof dateSpec === 'string' ? offsetString(dateSpec) : (typeof dateSpec === 'number' ?\r\n\t\t\t\t(isNaN(dateSpec) || dateSpec === Infinity || dateSpec === -Infinity ? defaultDate :\r\n\t\t\t\tplugin.add(plugin.today(), dateSpec, 'd')) : plugin.newDate(dateSpec))));\r\n\t\t\treturn dateSpec;\r\n\t\t},\r\n\r\n\t\t/** Find the number of days in a given month.\r\n\t\t\t@param year {Date|number} The date to get days for or the full year.\r\n\t\t\t@param month {number} The month (1 to 12).\r\n\t\t\t@return {number} The number of days in this month.\r\n\t\t\t@example var days = $.datepick.daysInMonth(2014, 12) */\r\n\t\tdaysInMonth: function(year, month) {\r\n\t\t\tmonth = (year.getFullYear ? year.getMonth() + 1 : month);\r\n\t\t\tyear = (year.getFullYear ? year.getFullYear() : year);\r\n\t\t\treturn this.newDate(year, month + 1, 0).getDate();\r\n\t\t},\r\n\r\n\t\t/** Calculate the day of the year for a date.\r\n\t\t\t@param year {Date|number} The date to get the day-of-year for or the full year.\r\n\t\t\t@param month {number} The month (1-12).\r\n\t\t\t@param day {number} The day.\r\n\t\t\t@return {number} The day of the year.\r\n\t\t\t@example var doy = $.datepick.dayOfYear(2014, 12, 25) */\r\n\t\tdayOfYear: function(year, month, day) {\r\n\t\t\tvar date = (year.getFullYear ? year : plugin.newDate(year, month, day));\r\n\t\t\tvar newYear = plugin.newDate(date.getFullYear(), 1, 1);\r\n\t\t\treturn Math.floor((date.getTime() - newYear.getTime()) / plugin._msPerDay) + 1;\r\n\t\t},\r\n\r\n\t\t/** Set as calculateWeek
to determine the week of the year based on the ISO 8601 definition.\r\n\t\t\t@param year {Date|number} The date to get the week for or the full year.\r\n\t\t\t@param month {number} The month (1-12).\r\n\t\t\t@param day {number} The day.\r\n\t\t\t@return {number} The number of the week within the year that contains this date.\r\n\t\t\t@example var week = $.datepick.iso8601Week(2014, 12, 25) */\r\n\t\tiso8601Week: function(year, month, day) {\r\n\t\t\tvar checkDate = (year.getFullYear ?\r\n\t\t\t\tnew Date(year.getTime()) : plugin.newDate(year, month, day));\r\n\t\t\t// Find Thursday of this week starting on Monday\r\n\t\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\r\n\t\t\tvar time = checkDate.getTime();\r\n\t\t\tcheckDate.setMonth(0, 1); // Compare with Jan 1\r\n\t\t\treturn Math.floor(Math.round((time - checkDate) / plugin._msPerDay) / 7) + 1;\r\n\t\t},\r\n\r\n\t\t/** Return today's date.\r\n\t\t\t@return {Date} Today.\r\n\t\t\t@example $.datepick.today() */\r\n\t\ttoday: function() {\r\n\t\t\treturn this._normaliseDate(new Date());\r\n\t\t},\r\n\r\n\t\t/** Return a new date.\r\n\t\t\t@param year {Date|number} The date to clone or the year.\r\n\t\t\t@param month {number} The month (1-12).\r\n\t\t\t@param day {number} The day.\r\n\t\t\t@return {Date} The date.\r\n\t\t\t@example $.datepick.newDate(oldDate)\r\n $.datepick.newDate(2014, 12, 25) */\r\n\t\tnewDate: function(year, month, day) {\r\n\t\t\treturn (!year ? null : (year.getFullYear ? this._normaliseDate(new Date(year.getTime())) :\r\n\t\t\t\tnew Date(year, month - 1, day, 12)));\r\n\t\t},\r\n\r\n\t\t/** Standardise a date into a common format - time portion is 12 noon.\r\n\t\t\t@private\r\n\t\t\t@param date {Date} The date to standardise.\r\n\t\t\t@return {Date} The normalised date. */\r\n\t\t_normaliseDate: function(date) {\r\n\t\t\tif (date) {\r\n\t\t\t\tdate.setHours(12, 0, 0, 0);\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\r\n\t\t/** Set the year for a date.\r\n\t\t\t@param date {Date} The original date.\r\n\t\t\t@param year {number} The new year.\r\n\t\t\t@return {Date} The updated date.\r\n\t\t\t@example $.datepick.year(date, 2014) */\r\n\t\tyear: function(date, year) {\r\n\t\t\tdate.setFullYear(year);\r\n\t\t\treturn this._normaliseDate(date);\r\n\t\t},\r\n\r\n\t\t/** Set the month for a date.\r\n\t\t\t@param date {Date} The original date.\r\n\t\t\t@param month {number} The new month (1-12).\r\n\t\t\t@return {Date} The updated date.\r\n\t\t\t@example $.datepick.month(date, 12) */\r\n\t\tmonth: function(date, month) {\r\n\t\t\tdate.setMonth(month - 1);\r\n\t\t\treturn this._normaliseDate(date);\r\n\t\t},\r\n\r\n\t\t/** Set the day for a date.\r\n\t\t\t@param date {Date} The original date.\r\n\t\t\t@param day {number} The new day of the month.\r\n\t\t\t@return {Date} The updated date.\r\n\t\t\t@example $.datepick.day(date, 25) */\r\n\t\tday: function(date, day) {\r\n\t\t\tdate.setDate(day);\r\n\t\t\treturn this._normaliseDate(date);\r\n\t\t},\r\n\r\n\t\t/** Add a number of periods to a date.\r\n\t\t\t@param date {Date} The original date.\r\n\t\t\t@param amount {number} The number of periods.\r\n\t\t\t@param period {string} The type of period d/w/m/y.\r\n\t\t\t@return {Date} The updated date.\r\n\t\t\t@example $.datepick.add(date, 10, 'd') */\r\n\t\tadd: function(date, amount, period) {\r\n\t\t\tif (period === 'd' || period === 'w') {\r\n\t\t\t\tthis._normaliseDate(date);\r\n\t\t\t\tdate.setDate(date.getDate() + amount * (period === 'w' ? 7 : 1));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar year = date.getFullYear() + (period === 'y' ? amount : 0);\r\n\t\t\t\tvar month = date.getMonth() + (period === 'm' ? amount : 0);\r\n\t\t\t\tdate.setTime(plugin.newDate(year, month + 1,\r\n\t\t\t\t\tMath.min(date.getDate(), this.daysInMonth(year, month + 1))).getTime());\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\r\n\t\t/** Apply the months offset value to a date.\r\n\t\t\t@private\r\n\t\t\t@param date {Date} The original date.\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {Date} The updated date. */\r\n\t\t_applyMonthsOffset: function(date, inst) {\r\n\t\t\tvar monthsOffset = inst.options.monthsOffset;\r\n\t\t\tif ($.isFunction(monthsOffset)) {\r\n\t\t\t\tmonthsOffset = monthsOffset.apply(inst.elem[0], [date]);\r\n\t\t\t}\r\n\t\t\treturn plugin.add(date, -monthsOffset, 'm');\r\n\t\t},\r\n\r\n\t\t_init: function() {\r\n\t\t\tthis.defaultOptions.commands = this.commands;\r\n\t\t\tthis.defaultOptions.calculateWeek = this.iso8601Week;\r\n\t\t\tthis.regionalOptions[''].renderer = this.defaultRenderer;\r\n\t\t\tthis._super();\r\n\t\t},\r\n\r\n\t\t_instSettings: function(elem, options) {\r\n\t\t\treturn {selectedDates: [], drawDate: null, pickingRange: false,\r\n\t\t\t\tinline: ($.inArray(elem[0].nodeName.toLowerCase(), ['div', 'span']) > -1),\r\n\t\t\t\tget: function(name) { // Get a setting value, computing if necessary\r\n\t\t\t\t\tif ($.inArray(name, ['defaultDate', 'minDate', 'maxDate']) > -1) { // Decode date settings\r\n\t\t\t\t\t\treturn plugin.determineDate(this.options[name], null,\r\n\t\t\t\t\t\t\tthis.selectedDates[0], this.options.dateFormat, this.getConfig());\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.options[name];\r\n\t\t\t\t},\r\n\t\t\t\tcurMinDate: function() {\r\n\t\t\t\t\treturn (this.pickingRange ? this.selectedDates[0] : this.get('minDate'));\r\n\t\t\t\t},\r\n\t\t\t\tgetConfig: function() {\r\n\t\t\t\t\treturn {dayNamesShort: this.options.dayNamesShort, dayNames: this.options.dayNames,\r\n\t\t\t\t\t\tmonthNamesShort: this.options.monthNamesShort, monthNames: this.options.monthNames,\r\n\t\t\t\t\t\tcalculateWeek: this.options.calculateWeek,\r\n\t\t\t\t\t\tshortYearCutoff: this.options.shortYearCutoff};\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t_postAttach: function(elem, inst) {\r\n\t\t\tif (inst.inline) {\r\n\t\t\t\tinst.drawDate = plugin._checkMinMax(plugin.newDate(inst.selectedDates[0] ||\r\n\t\t\t\t\tinst.get('defaultDate') || plugin.today()), inst);\r\n\t\t\t\tinst.prevDate = plugin.newDate(inst.drawDate);\r\n\t\t\t\tthis._update(elem[0]);\r\n\t\t\t\tif ($.fn.mousewheel) {\r\n\t\t\t\t\telem.mousewheel(this._doMouseWheel);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._attachments(elem, inst);\r\n\t\t\t\telem.on('keydown.' + inst.name, this._keyDown).on('keypress.' + inst.name, this._keyPress).\r\n\t\t\t\t\ton('keyup.' + inst.name, this._keyUp);\r\n\t\t\t\tif (elem.attr('disabled')) {\r\n\t\t\t\t\tthis.disable(elem[0]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_optionsChanged: function(elem, inst, options) {\r\n\t\t\tif (options.calendar && options.calendar !== inst.options.calendar) {\r\n\t\t\t\tvar discardDate = function(name) {\r\n\t\t\t\t\treturn (typeof inst.options[name] === 'object' ? null : inst.options[name]);\r\n\t\t\t\t};\r\n\t\t\t\toptions = $.extend({defaultDate: discardDate('defaultDate'),\r\n\t\t\t\t\tminDate: discardDate('minDate'), maxDate: discardDate('maxDate')}, options);\r\n\t\t\t\tinst.selectedDates = [];\r\n\t\t\t\tinst.drawDate = null;\r\n\t\t\t}\r\n\t\t\tvar dates = inst.selectedDates;\r\n\t\t\t$.extend(inst.options, options);\r\n\t\t\tthis.setDate(elem[0], dates, null, false, true);\r\n\t\t\tinst.pickingRange = false;\r\n\t\t\tinst.drawDate = plugin.newDate(this._checkMinMax(\r\n\t\t\t\t(inst.options.defaultDate ? inst.get('defaultDate') : inst.drawDate) ||\r\n\t\t\t\tinst.get('defaultDate') || plugin.today(), inst));\r\n\t\t\tif (!inst.inline) {\r\n\t\t\t\tthis._attachments(elem, inst);\r\n\t\t\t}\r\n\t\t\tif (inst.inline || inst.div) {\r\n\t\t\t\tthis._update(elem[0]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Attach events and trigger, if necessary.\r\n\t\t\t@private\r\n\t\t\t@param elem {jQuery} The control to affect.\r\n\t\t\t@param inst {object} The current instance settings. */\r\n\t\t_attachments: function(elem, inst) {\r\n\t\t\telem.off('focus.' + inst.name);\r\n\t\t\tif (inst.options.showOnFocus) {\r\n\t\t\t\telem.on('focus.' + inst.name, this.show);\r\n\t\t\t}\r\n\t\t\tif (inst.trigger) {\r\n\t\t\t\tinst.trigger.remove();\r\n\t\t\t}\r\n\t\t\tvar trigger = inst.options.showTrigger;\r\n\t\t\tinst.trigger = (!trigger ? $([]) :\r\n\t\t\t\t$(trigger).clone().removeAttr('id').addClass(this._triggerClass)\r\n\t\t\t\t\t[inst.options.isRTL ? 'insertBefore' : 'insertAfter'](elem).\r\n\t\t\t\t\tclick(function() {\r\n\t\t\t\t\t\tif (!plugin.isDisabled(elem[0])) {\r\n\t\t\t\t\t\t\tplugin[plugin.curInst === inst ? 'hide' : 'show'](elem[0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}));\r\n\t\t\tthis._autoSize(elem, inst);\r\n\t\t\tvar dates = this._extractDates(inst, elem.val());\r\n\t\t\tif (dates) {\r\n\t\t\t\tthis.setDate(elem[0], dates, null, true);\r\n\t\t\t}\r\n\t\t\tvar defaultDate = inst.get('defaultDate');\r\n\t\t\tif (inst.options.selectDefaultDate && defaultDate && inst.selectedDates.length === 0) {\r\n\t\t\t\tthis.setDate(elem[0], plugin.newDate(defaultDate || plugin.today()));\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Apply the maximum length for the date format.\r\n\t\t\t@private\r\n\t\t\t@param elem {jQuery} The control to affect.\r\n\t\t\t@param inst {object} The current instance settings. */\r\n\t\t_autoSize: function(elem, inst) {\r\n\t\t\tif (inst.options.autoSize && !inst.inline) {\r\n\t\t\t\tvar date = plugin.newDate(2009, 10, 20); // Ensure double digits\r\n\t\t\t\tvar dateFormat = inst.options.dateFormat;\r\n\t\t\t\tif (dateFormat.match(/[DM]/)) {\r\n\t\t\t\t\tvar findMax = function(names) {\r\n\t\t\t\t\t\tvar max = 0;\r\n\t\t\t\t\t\tvar maxI = 0;\r\n\t\t\t\t\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t\t\t\t\tif (names[i].length > max) {\r\n\t\t\t\t\t\t\t\tmax = names[i].length;\r\n\t\t\t\t\t\t\t\tmaxI = i;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn maxI;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdate.setMonth(findMax(inst.options[dateFormat.match(/MM/) ? // Longest month\r\n\t\t\t\t\t\t'monthNames' : 'monthNamesShort']));\r\n\t\t\t\t\tdate.setDate(findMax(inst.options[dateFormat.match(/DD/) ? // Longest day\r\n\t\t\t\t\t\t'dayNames' : 'dayNamesShort']) + 20 - date.getDay());\r\n\t\t\t\t}\r\n\t\t\t\tinst.elem.attr('size', plugin.formatDate(dateFormat, date, inst.getConfig()).length);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_preDestroy: function(elem, inst) {\r\n\t\t\tif (inst.trigger) {\r\n\t\t\t\tinst.trigger.remove();\r\n\t\t\t}\r\n\t\t\telem.empty().off('.' + inst.name);\r\n\t\t\tif (inst.inline && $.fn.mousewheel) {\r\n\t\t\t\telem.unmousewheel();\r\n\t\t\t}\r\n\t\t\tif (!inst.inline && inst.options.autoSize) {\r\n\t\t\t\telem.removeAttr('size');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Apply multiple event functions.\r\n\t\t\t@param fns {function} The functions to apply.\r\n\t\t\t@example onShow: multipleEvents(fn1, fn2, ...) */\r\n\t\tmultipleEvents: function(fns) {\r\n\t\t\tvar funcs = arguments;\r\n\t\t\treturn function(args) {\r\n\t\t\t\tfor (var i = 0; i < funcs.length; i++) {\r\n\t\t\t\t\tfuncs[i].apply(this, arguments);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t/** Enable the control.\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@example $(selector).datepick('enable') */\r\n\t\tenable: function(elem) {\r\n\t\t\telem = $(elem);\r\n\t\t\tif (!elem.hasClass(this._getMarker())) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (inst.inline) {\r\n\t\t\t\telem.children('.' + this._disableClass).remove().end().\r\n\t\t\t\t\tfind('button,select').prop('disabled', false).end().\r\n\t\t\t\t\tfind('a').attr('href', 'javascript:void(0)');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\telem.prop('disabled', false);\r\n\t\t\t\tinst.trigger.filter('button.' + this._triggerClass).prop('disabled', false).end().\r\n\t\t\t\t\tfilter('img.' + this._triggerClass).css({opacity: '1.0', cursor: ''});\r\n\t\t\t}\r\n\t\t\tthis._disabled = $.map(this._disabled,\r\n\t\t\t\tfunction(value) { return (value === elem[0] ? null : value); }); // Delete entry\r\n\t\t},\r\n\r\n\t\t/** Disable the control.\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@example $(selector).datepick('disable') */\r\n\t\tdisable: function(elem) {\r\n\t\t\telem = $(elem);\r\n\t\t\tif (!elem.hasClass(this._getMarker())) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (inst.inline) {\r\n\t\t\t\tvar inline = elem.children(':last');\r\n\t\t\t\tvar offset = inline.offset();\r\n\t\t\t\tvar relOffset = {left: 0, top: 0};\r\n\t\t\t\tinline.parents().each(function() {\r\n\t\t\t\t\tif ($(this).css('position') === 'relative') {\r\n\t\t\t\t\t\trelOffset = $(this).offset();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tvar zIndex = elem.css('zIndex');\r\n\t\t\t\tzIndex = (zIndex === 'auto' ? 0 : parseInt(zIndex, 10)) + 1;\r\n\t\t\t\telem.prepend('').\r\n\t\t\t\t\tfind('button,select').prop('disabled', true).end().\r\n\t\t\t\t\tfind('a').removeAttr('href');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\telem.prop('disabled', true);\r\n\t\t\t\tinst.trigger.filter('button.' + this._triggerClass).prop('disabled', true).end().\r\n\t\t\t\t\tfilter('img.' + this._triggerClass).css({opacity: '0.5', cursor: 'default'});\r\n\t\t\t}\r\n\t\t\tthis._disabled = $.map(this._disabled,\r\n\t\t\t\tfunction(value) { return (value === elem[0] ? null : value); }); // Delete entry\r\n\t\t\tthis._disabled.push(elem[0]);\r\n\t\t},\r\n\r\n\t\t/** Is the first field in a jQuery collection disabled as a datepicker?\r\n\t\t\t@param elem {Element} The control to examine.\r\n\t\t\t@return {boolean} true
if disabled, false
if enabled.\r\n\t\t\t@example if ($(selector).datepick('isDisabled')) {...} */\r\n\t\tisDisabled: function(elem) {\r\n\t\t\treturn (elem && $.inArray(elem, this._disabled) > -1);\r\n\t\t},\r\n\r\n\t\t/** Show a popup datepicker.\r\n\t\t\t@param elem {Event|Element} a focus event or the control to use.\r\n\t\t\t@example $(selector).datepick('show') */\r\n\t\tshow: function(elem) {\r\n\t\t\telem = $(elem.target || elem);\r\n\t\t\tvar inst = plugin._getInst(elem);\r\n\t\t\tif (plugin.curInst === inst) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (plugin.curInst) {\r\n\t\t\t\tplugin.hide(plugin.curInst, true);\r\n\t\t\t}\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\t// Retrieve existing date(s)\r\n\t\t\t\tinst.lastVal = null;\r\n\t\t\t\tinst.selectedDates = plugin._extractDates(inst, elem.val());\r\n\t\t\t\tinst.pickingRange = false;\r\n\t\t\t\tinst.drawDate = plugin._checkMinMax(plugin.newDate(inst.selectedDates[0] ||\r\n\t\t\t\t\tinst.get('defaultDate') || plugin.today()), inst);\r\n\t\t\t\tinst.prevDate = plugin.newDate(inst.drawDate);\r\n\t\t\t\tplugin.curInst = inst;\r\n\t\t\t\t// Generate content\r\n\t\t\t\tplugin._update(elem[0], true);\r\n\t\t\t\t// Adjust position before showing\r\n\t\t\t\tvar offset = plugin._checkOffset(inst);\r\n\t\t\t\tinst.div.css({left: offset.left, top: offset.top});\r\n\t\t\t\t// And display\r\n\t\t\t\tvar showAnim = inst.options.showAnim;\r\n\t\t\t\tvar showSpeed = inst.options.showSpeed;\r\n\t\t\t\tshowSpeed = (showSpeed === 'normal' && $.ui &&\r\n\t\t\t\t\tparseInt($.ui.version.substring(2)) >= 8 ? '_default' : showSpeed);\r\n\t\t\t\tif ($.effects && ($.effects[showAnim] || ($.effects.effect && $.effects.effect[showAnim]))) {\r\n\t\t\t\t\tvar data = inst.div.data(); // Update old effects data\r\n\t\t\t\t\tfor (var key in data) {\r\n\t\t\t\t\t\tif (key.match(/^ec\\.storage\\./)) {\r\n\t\t\t\t\t\t\tdata[key] = inst._mainDiv.css(key.replace(/ec\\.storage\\./, ''));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinst.div.data(data).show(showAnim, inst.options.showOptions, showSpeed);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tinst.div[showAnim || 'show'](showAnim ? showSpeed : 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Extract possible dates from a string.\r\n\t\t\t@private\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@param text {string} The text to extract from.\r\n\t\t\t@return {Date[]} The extracted dates. */\r\n\t\t_extractDates: function(inst, datesText) {\r\n\t\t\tif (datesText === inst.lastVal) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tinst.lastVal = datesText;\r\n\t\t\tdatesText = datesText.split(inst.options.multiSelect ? inst.options.multiSeparator :\r\n\t\t\t\t(inst.options.rangeSelect ? inst.options.rangeSeparator : '\\x00'));\r\n\t\t\tvar dates = [];\r\n\t\t\tfor (var i = 0; i < datesText.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar date = plugin.parseDate(inst.options.dateFormat, datesText[i], inst.getConfig());\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tvar found = false;\r\n\t\t\t\t\t\tfor (var j = 0; j < dates.length; j++) {\r\n\t\t\t\t\t\t\tif (dates[j].getTime() === date.getTime()) {\r\n\t\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!found) {\r\n\t\t\t\t\t\t\tdates.push(date);\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\tcatch (e) {\r\n\t\t\t\t\t// Ignore\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tdates.splice(inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1), dates.length);\r\n\t\t\tif (inst.options.rangeSelect && dates.length === 1) {\r\n\t\t\t\tdates[1] = dates[0];\r\n\t\t\t}\r\n\t\t\treturn dates;\r\n\t\t},\r\n\r\n\t\t/** Update the datepicker display.\r\n\t\t\t@private\r\n\t\t\t@param elem {Event|Element} a focus event or the control to use.\r\n\t\t\t@param hidden {boolean} true
to initially hide the datepicker. */\r\n\t\t_update: function(elem, hidden) {\r\n\t\t\telem = $(elem.target || elem);\r\n\t\t\tvar inst = plugin._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tif (inst.inline || plugin.curInst === inst) {\r\n\t\t\t\t\tif ($.isFunction(inst.options.onChangeMonthYear) && (!inst.prevDate ||\r\n\t\t\t\t\t\t\tinst.prevDate.getFullYear() !== inst.drawDate.getFullYear() ||\r\n\t\t\t\t\t\t\tinst.prevDate.getMonth() !== inst.drawDate.getMonth())) {\r\n\t\t\t\t\t\tinst.options.onChangeMonthYear.apply(elem[0],\r\n\t\t\t\t\t\t\t[inst.drawDate.getFullYear(), inst.drawDate.getMonth() + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (inst.inline) {\r\n\t\t\t\t\tvar index = $('a, :input', elem).index($(':focus', elem));\r\n\t\t\t\t\telem.html(this._generateContent(elem[0], inst));\r\n\t\t\t\t\tvar focus = elem.find('a, :input');\r\n\t\t\t\t\tfocus.eq(Math.max(Math.min(index, focus.length - 1), 0)).focus();\r\n\t\t\t\t}\r\n\t\t\t\telse if (plugin.curInst === inst) {\r\n\t\t\t\t\tif (!inst.div) {\r\n\t\t\t\t\t\tinst.div = $('').addClass(this._popupClass).\r\n\t\t\t\t\t\t\tcss({display: (hidden ? 'none' : 'static'), position: 'absolute',\r\n\t\t\t\t\t\t\t\tleft: elem.offset().left, top: elem.offset().top + elem.outerHeight()}).\r\n\t\t\t\t\t\t\tappendTo($(inst.options.popupContainer || 'body'));\r\n\t\t\t\t\t\tif ($.fn.mousewheel) {\r\n\t\t\t\t\t\t\tinst.div.mousewheel(this._doMouseWheel);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinst.div.html(this._generateContent(elem[0], inst));\r\n\t\t\t\t\telem.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Update the input field and any alternate field with the current dates.\r\n\t\t\t@private\r\n\t\t\t@param elem {Element} The control to use.\r\n\t\t\t@param keyUp {boolean} true
if coming from keyUp
processing (internal). */\r\n\t\t_updateInput: function(elem, keyUp) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tvar value = '';\r\n\t\t\t\tvar altValue = '';\r\n\t\t\t\tvar sep = (inst.options.multiSelect ? inst.options.multiSeparator :\r\n\t\t\t\t\tinst.options.rangeSeparator);\r\n\t\t\t\tvar altFormat = inst.options.altFormat || inst.options.dateFormat;\r\n\t\t\t\tfor (var i = 0; i < inst.selectedDates.length; i++) {\r\n\t\t\t\t\tvalue += (keyUp ? '' : (i > 0 ? sep : '') + plugin.formatDate(\r\n\t\t\t\t\t\tinst.options.dateFormat, inst.selectedDates[i], inst.getConfig()));\r\n\t\t\t\t\taltValue += (i > 0 ? sep : '') + plugin.formatDate(\r\n\t\t\t\t\t\taltFormat, inst.selectedDates[i], inst.getConfig());\r\n\t\t\t\t}\r\n\t\t\t\tif (!inst.inline && !keyUp) {\r\n\t\t\t\t\t$(elem).val(value);\r\n\t\t\t\t}\r\n\t\t\t\t$(inst.options.altField).val(altValue);\r\n\t\t\t\tif ($.isFunction(inst.options.onSelect) && !keyUp && !inst.inSelect) {\r\n\t\t\t\t\tinst.inSelect = true; // Prevent endless loops\r\n\t\t\t\t\tinst.options.onSelect.apply(elem, [inst.selectedDates]);\r\n\t\t\t\t\tinst.inSelect = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Retrieve the size of left and top borders for an element.\r\n\t\t\t@private\r\n\t\t\t@param elem {jQuery} The element of interest.\r\n\t\t\t@return {number[]} The left and top borders. */\r\n\t\t_getBorders: function(elem) {\r\n\t\t\tvar convert = function(value) {\r\n\t\t\t\treturn {thin: 1, medium: 3, thick: 5}[value] || value;\r\n\t\t\t};\r\n\t\t\treturn [parseFloat(convert(elem.css('border-left-width'))),\r\n\t\t\t\tparseFloat(convert(elem.css('border-top-width')))];\r\n\t\t},\r\n\r\n\t\t/** Check positioning to remain on the screen.\r\n\t\t\t@private\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {object} The updated offset for the datepicker. */\r\n\t\t_checkOffset: function(inst) {\r\n\t\t\tvar base = (inst.elem.is(':hidden') && inst.trigger ? inst.trigger : inst.elem);\r\n\t\t\tvar offset = base.offset();\r\n\t\t\tvar browserWidth = $(window).width();\r\n\t\t\tvar browserHeight = $(window).height();\r\n\t\t\tif (browserWidth === 0) {\r\n\t\t\t\treturn offset;\r\n\t\t\t}\r\n\t\t\tvar isFixed = false;\r\n\t\t\t$(inst.elem).parents().each(function() {\r\n\t\t\t\tisFixed |= $(this).css('position') === 'fixed';\r\n\t\t\t\treturn !isFixed;\r\n\t\t\t});\r\n\t\t\tvar scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n\t\t\tvar scrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\t\tvar above = offset.top - (isFixed ? scrollY : 0) - inst.div.outerHeight();\r\n\t\t\tvar below = offset.top - (isFixed ? scrollY : 0) + base.outerHeight();\r\n\t\t\tvar alignL = offset.left - (isFixed ? scrollX : 0);\r\n\t\t\tvar alignR = offset.left - (isFixed ? scrollX : 0) + base.outerWidth() - inst.div.outerWidth();\r\n\t\t\tvar tooWide = (offset.left - scrollX + inst.div.outerWidth()) > browserWidth;\r\n\t\t\tvar tooHigh = (offset.top - scrollY + inst.elem.outerHeight() +\r\n\t\t\t\tinst.div.outerHeight()) > browserHeight;\r\n\t\t\tinst.div.css('position', isFixed ? 'fixed' : 'absolute');\r\n\t\t\tvar alignment = inst.options.alignment;\r\n\t\t\tif (alignment === 'topLeft') {\r\n\t\t\t\toffset = {left: alignL, top: above};\r\n\t\t\t}\r\n\t\t\telse if (alignment === 'topRight') {\r\n\t\t\t\toffset = {left: alignR, top: above};\r\n\t\t\t}\r\n\t\t\telse if (alignment === 'bottomLeft') {\r\n\t\t\t\toffset = {left: alignL, top: below};\r\n\t\t\t}\r\n\t\t\telse if (alignment === 'bottomRight') {\r\n\t\t\t\toffset = {left: alignR, top: below};\r\n\t\t\t}\r\n\t\t\telse if (alignment === 'top') {\r\n\t\t\t\toffset = {left: (inst.options.isRTL || tooWide ? alignR : alignL), top: above};\r\n\t\t\t}\r\n\t\t\telse { // bottom\r\n\t\t\t\toffset = {left: (inst.options.isRTL || tooWide ? alignR : alignL),\r\n\t\t\t\t\ttop: (tooHigh ? above : below)};\r\n\t\t\t}\r\n\t\t\toffset.left = Math.max((isFixed ? 0 : scrollX), offset.left);\r\n\t\t\toffset.top = Math.max((isFixed ? 0 : scrollY), offset.top);\r\n\t\t\treturn offset;\r\n\t\t},\r\n\r\n\t\t/** Close date picker if clicked elsewhere.\r\n\t\t\t@private\r\n\t\t\t@param event {MouseEvent} The mouse click to check. */\r\n\t\t_checkExternalClick: function(event) {\r\n\t\t\tif (!plugin.curInst) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar elem = $(event.target);\r\n\t\t\tif (elem.closest('.' + plugin._popupClass + ',.' + plugin._triggerClass).length === 0 &&\r\n\t\t\t\t\t!elem.hasClass(plugin._getMarker())) {\r\n\t\t\t\tplugin.hide(plugin.curInst);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Hide a popup datepicker.\r\n\t\t\t@param elem {Element|object} The control to use or the current instance settings.\r\n\t\t\t@param immediate {boolean} true
to close immediately without animation (internal).\r\n\t\t\t@example $(selector).datepick('hide') */\r\n\t\thide: function(elem, immediate) {\r\n\t\t\tif (!elem) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif ($.isEmptyObject(inst)) {\r\n\t\t\t\tinst = elem;\r\n\t\t\t}\r\n\t\t\tif (inst && inst === plugin.curInst) {\r\n\t\t\t\tvar showAnim = (immediate ? '' : inst.options.showAnim);\r\n\t\t\t\tvar showSpeed = inst.options.showSpeed;\r\n\t\t\t\tshowSpeed = (showSpeed === 'normal' && $.ui &&\r\n\t\t\t\t\tparseInt($.ui.version.substring(2)) >= 8 ? '_default' : showSpeed);\r\n\t\t\t\tvar postProcess = function() {\r\n\t\t\t\t\tif (!inst.div) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinst.div.remove();\r\n\t\t\t\t\tinst.div = null;\r\n\t\t\t\t\tplugin.curInst = null;\r\n\t\t\t\t\tif ($.isFunction(inst.options.onClose)) {\r\n\t\t\t\t\t\tinst.options.onClose.apply(elem, [inst.selectedDates]);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tinst.div.stop();\r\n\t\t\t\tif ($.effects && ($.effects[showAnim] || ($.effects.effect && $.effects.effect[showAnim]))) {\r\n\t\t\t\t\tinst.div.hide(showAnim, inst.options.showOptions, showSpeed, postProcess);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tvar hideAnim = (showAnim === 'slideDown' ? 'slideUp' :\r\n\t\t\t\t\t\t(showAnim === 'fadeIn' ? 'fadeOut' : 'hide'));\r\n\t\t\t\t\tinst.div[hideAnim]((showAnim ? showSpeed : ''), postProcess);\r\n\t\t\t\t}\r\n\t\t\t\tif (!showAnim) {\r\n\t\t\t\t\tpostProcess();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Handle keystrokes in the datepicker.\r\n\t\t\t@private\r\n\t\t\t@param event {KeyEvent} The keystroke.\r\n\t\t\t@return {boolean} true
if not handled, false
if handled. */\r\n\t\t_keyDown: function(event) {\r\n\t\t\tvar elem = (event.data && event.data.elem) || event.target;\r\n\t\t\tvar inst = plugin._getInst(elem);\r\n\t\t\tvar handled = false;\r\n\t\t\tif (inst.inline || inst.div) {\r\n\t\t\t\tif (event.keyCode === 9) { // Tab - close\r\n\t\t\t\t\tplugin.hide(elem);\r\n\t\t\t\t}\r\n\t\t\t\telse if (event.keyCode === 13) { // Enter - select\r\n\t\t\t\t\tplugin.selectDate(elem,\r\n\t\t\t\t\t\t$('a.' + inst.options.renderer.highlightedClass, inst.div)[0]);\r\n\t\t\t\t\thandled = true;\r\n\t\t\t\t}\r\n\t\t\t\telse { // Command keystrokes\r\n\t\t\t\t\tvar commands = inst.options.commands;\r\n\t\t\t\t\tfor (var name in commands) {\r\n\t\t\t\t\t\tvar command = commands[name];\r\n\t\t\t\t\t\tif (command.keystroke.keyCode === event.keyCode &&\r\n\t\t\t\t\t\t\t\t!!command.keystroke.ctrlKey === !!(event.ctrlKey || event.metaKey) &&\r\n\t\t\t\t\t\t\t\t!!command.keystroke.altKey === event.altKey &&\r\n\t\t\t\t\t\t\t\t!!command.keystroke.shiftKey === event.shiftKey) {\r\n\t\t\t\t\t\t\tplugin.performAction(elem, name);\r\n\t\t\t\t\t\t\thandled = true;\r\n\t\t\t\t\t\t\tbreak;\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\telse { // Show on 'current' keystroke\r\n\t\t\t\tvar command = inst.options.commands.current;\r\n\t\t\t\tif (command.keystroke.keyCode === event.keyCode &&\r\n\t\t\t\t\t\t!!command.keystroke.ctrlKey === !!(event.ctrlKey || event.metaKey) &&\r\n\t\t\t\t\t\t!!command.keystroke.altKey === event.altKey &&\r\n\t\t\t\t\t\t!!command.keystroke.shiftKey === event.shiftKey) {\r\n\t\t\t\t\tplugin.show(elem);\r\n\t\t\t\t\thandled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tinst.ctrlKey = ((event.keyCode < 48 && event.keyCode !== 32) || event.ctrlKey || event.metaKey);\r\n\t\t\tif (handled) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t}\r\n\t\t\treturn !handled;\r\n\t\t},\r\n\r\n\t\t/** Filter keystrokes in the datepicker.\r\n\t\t\t@private\r\n\t\t\t@param event {KeyEvent} The keystroke.\r\n\t\t\t@return {boolean} true
if allowed, false
if not allowed. */\r\n\t\t_keyPress: function(event) {\r\n\t\t\tvar inst = plugin._getInst((event.data && event.data.elem) || event.target);\r\n\t\t\tif (!$.isEmptyObject(inst) && inst.options.constrainInput) {\r\n\t\t\t\tvar ch = String.fromCharCode(event.keyCode || event.charCode);\r\n\t\t\t\tvar allowedChars = plugin._allowedChars(inst);\r\n\t\t\t\treturn (event.metaKey || inst.ctrlKey || ch < ' ' ||\r\n\t\t\t\t\t!allowedChars || allowedChars.indexOf(ch) > -1);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t/** Determine the set of characters allowed by the date format.\r\n\t\t\t@private\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {string} The set of allowed characters, or null
if anything allowed. */\r\n\t\t_allowedChars: function(inst) {\r\n\t\t\tvar allowedChars = (inst.options.multiSelect ? inst.options.multiSeparator :\r\n\t\t\t\t(inst.options.rangeSelect ? inst.options.rangeSeparator : ''));\r\n\t\t\tvar literal = false;\r\n\t\t\tvar hasNum = false;\r\n\t\t\tvar dateFormat = inst.options.dateFormat;\r\n\t\t\tfor (var i = 0; i < dateFormat.length; i++) {\r\n\t\t\t\tvar ch = dateFormat.charAt(i);\r\n\t\t\t\tif (literal) {\r\n\t\t\t\t\tif (ch === \"'\" && dateFormat.charAt(i + 1) !== \"'\") {\r\n\t\t\t\t\t\tliteral = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tallowedChars += ch;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tswitch (ch) {\r\n\t\t\t\t\t\tcase 'd': case 'm': case 'o': case 'w':\r\n\t\t\t\t\t\t\tallowedChars += (hasNum ? '' : '0123456789'); hasNum = true; break;\r\n\t\t\t\t\t\tcase 'y': case '@': case '!':\r\n\t\t\t\t\t\t\tallowedChars += (hasNum ? '' : '0123456789') + '-'; hasNum = true; break;\r\n\t\t\t\t\t\tcase 'J':\r\n\t\t\t\t\t\t\tallowedChars += (hasNum ? '' : '0123456789') + '-.'; hasNum = true; break;\r\n\t\t\t\t\t\tcase 'D': case 'M': case 'Y':\r\n\t\t\t\t\t\t\treturn null; // Accept anything\r\n\t\t\t\t\t\tcase \"'\":\r\n\t\t\t\t\t\t\tif (dateFormat.charAt(i + 1) === \"'\") {\r\n\t\t\t\t\t\t\t\tallowedChars += \"'\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tallowedChars += ch;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn allowedChars;\r\n\t\t},\r\n\r\n\t\t/** Synchronise datepicker with the field.\r\n\t\t\t@private\r\n\t\t\t@param event {KeyEvent} The keystroke.\r\n\t\t\t@return {boolean} true
if allowed, false
if not allowed. */\r\n\t\t_keyUp: function(event) {\r\n\t\t\tvar elem = (event.data && event.data.elem) || event.target;\r\n\t\t\tvar inst = plugin._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst) && !inst.ctrlKey && inst.lastVal !== inst.elem.val()) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar dates = plugin._extractDates(inst, inst.elem.val());\r\n\t\t\t\t\tif (dates.length > 0) {\r\n\t\t\t\t\t\tplugin.setDate(elem, dates, null, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (event) {\r\n\t\t\t\t\t// Ignore\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t/** Increment/decrement month/year on mouse wheel activity.\r\n\t\t\t@private\r\n\t\t\t@param event {event} The mouse wheel event.\r\n\t\t\t@param delta {number} The amount of change. */\r\n\t\t_doMouseWheel: function(event, delta) {\r\n\t\t\tvar elem = (plugin.curInst && plugin.curInst.elem[0]) ||\r\n\t\t\t\t$(event.target).closest('.' + plugin._getMarker())[0];\r\n\t\t\tif (plugin.isDisabled(elem)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar inst = plugin._getInst(elem);\r\n\t\t\tif (inst.options.useMouseWheel) {\r\n\t\t\t\tdelta = (delta < 0 ? -1 : +1);\r\n\t\t\t\tplugin.changeMonth(elem, -inst.options[event.ctrlKey ? 'monthsToJump' : 'monthsToStep'] * delta);\r\n\t\t\t}\r\n\t\t\tevent.preventDefault();\r\n\t\t},\r\n\r\n\t\t/** Clear an input and close a popup datepicker.\r\n\t\t\t@param elem {Element} The control to use.\r\n\t\t\t@example $(selector).datepick('clear') */\r\n\t\tclear: function(elem) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tinst.selectedDates = [];\r\n\t\t\t\tthis.hide(elem);\r\n\t\t\t\tvar defaultDate = inst.get('defaultDate');\r\n\t\t\t\tif (inst.options.selectDefaultDate && defaultDate) {\r\n\t\t\t\t\tthis.setDate(elem, plugin.newDate(defaultDate || plugin.today()));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._updateInput(elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Retrieve the selected date(s) for a datepicker.\r\n\t\t\t@param elem {Element} The control to examine.\r\n\t\t\t@return {Date[]} The selected date(s).\r\n\t\t\t@example var dates = $(selector).datepick('getDate') */\r\n\t\tgetDate: function(elem) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\treturn (!$.isEmptyObject(inst) ? inst.selectedDates : []);\r\n\t\t},\r\n\r\n\t\t/** Set the selected date(s) for a datepicker.\r\n\t\t\t@param elem {Element} the control to examine.\r\n\t\t\t@param dates {Date|number|string|array} the selected date(s).\r\n\t\t\t@param [endDate] {Date|number|string} the ending date for a range.\r\n\t\t\t@param keyUp {boolean} true
if coming from keyUp
processing (internal).\r\n\t\t\t@param setOpt {boolean} true
if coming from option processing (internal).\r\n\t\t\t@example $(selector).datepick('setDate', new Date(2014, 12-1, 25))\r\n $(selector).datepick('setDate', '12/25/2014', '01/01/2015')\r\n $(selector).datepick('setDate', [date1, date2, date3]) */\r\n\t\tsetDate: function(elem, dates, endDate, keyUp, setOpt) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tif (!$.isArray(dates)) {\r\n\t\t\t\t\tdates = [dates];\r\n\t\t\t\t\tif (endDate) {\r\n\t\t\t\t\t\tdates.push(endDate);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar minDate = inst.get('minDate');\r\n\t\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\t\tvar curDate = inst.selectedDates[0];\r\n\t\t\t\tinst.selectedDates = [];\r\n\t\t\t\tfor (var i = 0; i < dates.length; i++) {\r\n\t\t\t\t\tvar date = plugin.determineDate(\r\n\t\t\t\t\t\tdates[i], null, curDate, inst.options.dateFormat, inst.getConfig());\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tif ((!minDate || date.getTime() >= minDate.getTime()) &&\r\n\t\t\t\t\t\t\t\t(!maxDate || date.getTime() <= maxDate.getTime())) {\r\n\t\t\t\t\t\t\tvar found = false;\r\n\t\t\t\t\t\t\tfor (var j = 0; j < inst.selectedDates.length; j++) {\r\n\t\t\t\t\t\t\t\tif (inst.selectedDates[j].getTime() === date.getTime()) {\r\n\t\t\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!found) {\r\n\t\t\t\t\t\t\t\tinst.selectedDates.push(date);\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\tinst.selectedDates.splice(inst.options.multiSelect ||\r\n\t\t\t\t\t(inst.options.rangeSelect ? 2 : 1), inst.selectedDates.length);\r\n\t\t\t\tif (inst.options.rangeSelect) {\r\n\t\t\t\t\tswitch (inst.selectedDates.length) {\r\n\t\t\t\t\t\tcase 1: inst.selectedDates[1] = inst.selectedDates[0]; break;\r\n\t\t\t\t\t\tcase 2: inst.selectedDates[1] =\r\n\t\t\t\t\t\t\t(inst.selectedDates[0].getTime() > inst.selectedDates[1].getTime() ?\r\n\t\t\t\t\t\t\tinst.selectedDates[0] : inst.selectedDates[1]); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinst.pickingRange = false;\r\n\t\t\t\t}\r\n\t\t\t\tinst.prevDate = (inst.drawDate ? plugin.newDate(inst.drawDate) : null);\r\n\t\t\t\tinst.drawDate = this._checkMinMax(plugin.newDate(inst.selectedDates[0] ||\r\n\t\t\t\t\tinst.get('defaultDate') || plugin.today()), inst);\r\n\t\t\t\tif (!setOpt) {\r\n\t\t\t\t\tthis._update(elem);\r\n\t\t\t\t\tthis._updateInput(elem, keyUp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Determine whether a date is selectable for this datepicker.\r\n\t\t\t@private\r\n\t\t\t@param elem {Element} The control to check.\r\n\t\t\t@param date {Date|string|number} The date to check.\r\n\t\t\t@return {boolean} true
if selectable, false
if not.\r\n\t\t\t@example var selectable = $(selector).datepick('isSelectable', date) */\r\n\t\tisSelectable: function(elem, date) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif ($.isEmptyObject(inst)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tdate = plugin.determineDate(date, inst.selectedDates[0] || this.today(), null,\r\n\t\t\t\tinst.options.dateFormat, inst.getConfig());\r\n\t\t\treturn this._isSelectable(elem, date, inst.options.onDate,\r\n\t\t\t\tinst.get('minDate'), inst.get('maxDate'));\r\n\t\t},\r\n\r\n\t\t/** Internally determine whether a date is selectable for this datepicker.\r\n\t\t\t@private\r\n\t\t\t@param elem {Element} the control to check.\r\n\t\t\t@param date {Date} The date to check.\r\n\t\t\t@param onDate {function|boolean} Any onDate callback or callback.selectable.\r\n\t\t\t@param minDate {Date} The minimum allowed date.\r\n\t\t\t@param maxDate {Date} The maximum allowed date.\r\n\t\t\t@return {boolean} true
if selectable, false
if not. */\r\n\t\t_isSelectable: function(elem, date, onDate, minDate, maxDate) {\r\n\t\t\tvar dateInfo = (typeof onDate === 'boolean' ? {selectable: onDate} :\r\n\t\t\t\t(!$.isFunction(onDate) ? {} : onDate.apply(elem, [date, true])));\r\n\t\t\treturn (dateInfo.selectable !== false) &&\r\n\t\t\t\t(!minDate || date.getTime() >= minDate.getTime()) &&\r\n\t\t\t\t(!maxDate || date.getTime() <= maxDate.getTime());\r\n\t\t},\r\n\r\n\t\t/** Perform a named action for a datepicker.\r\n\t\t\t@param elem {element} The control to affect.\r\n\t\t\t@param action {string} The name of the action. */\r\n\t\tperformAction: function(elem, action) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {\r\n\t\t\t\tvar commands = inst.options.commands;\r\n\t\t\t\tif (commands[action] && commands[action].enabled.apply(elem, [inst])) {\r\n\t\t\t\t\tcommands[action].action.apply(elem, [inst]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Set the currently shown month, defaulting to today's.\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@param [year] {number} The year to show.\r\n\t\t\t@param [month] {number} The month to show (1-12).\r\n\t\t\t@param [day] {number} The day to show.\r\n\t\t\t@example $(selector).datepick('showMonth', 2014, 12, 25) */\r\n\t\tshowMonth: function(elem, year, month, day) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst) && (day != null ||\r\n\t\t\t\t\t(inst.drawDate.getFullYear() !== year || inst.drawDate.getMonth() + 1 !== month))) {\r\n\t\t\t\tinst.prevDate = plugin.newDate(inst.drawDate);\r\n\t\t\t\tvar show = this._checkMinMax((year != null ?\r\n\t\t\t\t\tplugin.newDate(year, month, 1) : plugin.today()), inst);\r\n\t\t\t\tinst.drawDate = plugin.newDate(show.getFullYear(), show.getMonth() + 1, \r\n\t\t\t\t\t(day != null ? day : Math.min(inst.drawDate.getDate(),\r\n\t\t\t\t\tplugin.daysInMonth(show.getFullYear(), show.getMonth() + 1))));\r\n\t\t\t\tthis._update(elem);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Adjust the currently shown month.\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@param offset {number} The number of months to change by.\r\n\t\t\t@example $(selector).datepick('changeMonth', 2)*/\r\n\t\tchangeMonth: function(elem, offset) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tvar date = plugin.add(plugin.newDate(inst.drawDate), offset, 'm');\r\n\t\t\t\tthis.showMonth(elem, date.getFullYear(), date.getMonth() + 1);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Adjust the currently shown day.\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@param offset {number} The number of days to change by.\r\n\t\t\t@example $(selector).datepick('changeDay', 7)*/\r\n\t\tchangeDay: function(elem, offset) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst)) {\r\n\t\t\t\tvar date = plugin.add(plugin.newDate(inst.drawDate), offset, 'd');\r\n\t\t\t\tthis.showMonth(elem, date.getFullYear(), date.getMonth() + 1, date.getDate());\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Restrict a date to the minimum/maximum specified.\r\n\t\t\t@private\r\n\t\t\t@param date {Date} The date to check.\r\n\t\t\t@param inst {object} The current instance settings. */\r\n\t\t_checkMinMax: function(date, inst) {\r\n\t\t\tvar minDate = inst.get('minDate');\r\n\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\tdate = (minDate && date.getTime() < minDate.getTime() ? plugin.newDate(minDate) : date);\r\n\t\t\tdate = (maxDate && date.getTime() > maxDate.getTime() ? plugin.newDate(maxDate) : date);\r\n\t\t\treturn date;\r\n\t\t},\r\n\r\n\t\t/** Retrieve the date associated with an entry in the datepicker.\r\n\t\t\t@param elem {Element} The control to examine.\r\n\t\t\t@param target {Element} The selected datepicker element.\r\n\t\t\t@return {Date} The corresponding date, or null
.\t\t\t\r\n\t\t\t@example var date = $(selector).datepick('retrieveDate', $('div.datepick-popup a:contains(10)')[0]) */\r\n\t\tretrieveDate: function(elem, target) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\treturn ($.isEmptyObject(inst) ? null : this._normaliseDate(\r\n\t\t\t\tnew Date(parseInt(target.className.replace(/^.*dp(-?\\d+).*$/, '$1'), 10))));\r\n\t\t},\r\n\r\n\t\t/** Select a date for this datepicker.\r\n\t\t\t@param elem {Element} The control to examine.\r\n\t\t\t@param target {Element} The selected datepicker element.\r\n\t\t\t@example $(selector).datepick('selectDate', $('div.datepick-popup a:contains(10)')[0]) */\r\n\t\tselectDate: function(elem, target) {\r\n\t\t\tvar inst = this._getInst(elem);\r\n\t\t\tif (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {\r\n\t\t\t\tvar date = this.retrieveDate(elem, target);\r\n\t\t\t\tif (inst.options.multiSelect) {\r\n\t\t\t\t\tvar found = false;\r\n\t\t\t\t\tfor (var i = 0; i < inst.selectedDates.length; i++) {\r\n\t\t\t\t\t\tif (date.getTime() === inst.selectedDates[i].getTime()) {\r\n\t\t\t\t\t\t\tinst.selectedDates.splice(i, 1);\r\n\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!found && inst.selectedDates.length < inst.options.multiSelect) {\r\n\t\t\t\t\t\tinst.selectedDates.push(date);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (inst.options.rangeSelect) {\r\n\t\t\t\t\tif (inst.pickingRange) {\r\n\t\t\t\t\t\tinst.selectedDates[1] = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinst.selectedDates = [date, date];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tinst.pickingRange = !inst.pickingRange;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tinst.selectedDates = [date];\r\n\t\t\t\t}\r\n\t\t\t\tinst.prevDate = inst.drawDate = plugin.newDate(date);\r\n\t\t\t\tthis._updateInput(elem);\r\n\t\t\t\tif (inst.inline || inst.pickingRange || inst.selectedDates.length <\r\n\t\t\t\t\t\t(inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1))) {\r\n\t\t\t\t\tthis._update(elem);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.hide(elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/** Generate the datepicker content for this control.\r\n\t\t\t@private\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {jQuery} The datepicker content */\r\n\t\t_generateContent: function(elem, inst) {\r\n\t\t\tvar monthsToShow = inst.options.monthsToShow;\r\n\t\t\tmonthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]);\r\n\t\t\tinst.drawDate = this._checkMinMax(\r\n\t\t\t\tinst.drawDate || inst.get('defaultDate') || plugin.today(), inst);\r\n\t\t\tvar drawDate = plugin._applyMonthsOffset(plugin.newDate(inst.drawDate), inst);\r\n\t\t\t// Generate months\r\n\t\t\tvar monthRows = '';\r\n\t\t\tfor (var row = 0; row < monthsToShow[0]; row++) {\r\n\t\t\t\tvar months = '';\r\n\t\t\t\tfor (var col = 0; col < monthsToShow[1]; col++) {\r\n\t\t\t\t\tmonths += this._generateMonth(elem, inst, drawDate.getFullYear(),\r\n\t\t\t\t\t\tdrawDate.getMonth() + 1, inst.options.renderer, (row === 0 && col === 0));\r\n\t\t\t\t\tplugin.add(drawDate, 1, 'm');\r\n\t\t\t\t}\r\n\t\t\t\tmonthRows += this._prepare(inst.options.renderer.monthRow, inst).replace(/\\{months\\}/, months);\r\n\t\t\t}\r\n\t\t\tvar picker = this._prepare(inst.options.renderer.picker, inst).replace(/\\{months\\}/, monthRows).\r\n\t\t\t\treplace(/\\{weekHeader\\}/g, this._generateDayHeaders(inst, inst.options.renderer));\r\n\t\t\t// Add commands\r\n\t\t\tvar addCommand = function(type, open, close, name, classes) {\r\n\t\t\t\tif (picker.indexOf('{' + type + ':' + name + '}') === -1) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar command = inst.options.commands[name];\r\n\t\t\t\tvar date = (inst.options.commandsAsDateFormat ? command.date.apply(elem, [inst]) : null);\r\n\t\t\t\tpicker = picker.replace(new RegExp('\\\\{' + type + ':' + name + '\\\\}', 'g'),\r\n\t\t\t\t\t'<' + open + (command.status ? ' title=\"' + inst.options[command.status] + '\"' : '') +\r\n\t\t\t\t\t' class=\"' + inst.options.renderer.commandClass + ' ' +\r\n\t\t\t\t\tinst.options.renderer.commandClass + '-' + name + ' ' + classes +\r\n\t\t\t\t\t(command.enabled(inst) ? '' : ' ' + inst.options.renderer.disabledClass) + '\">' +\r\n\t\t\t\t\t(date ? plugin.formatDate(inst.options[command.text], date, inst.getConfig()) :\r\n\t\t\t\t\tinst.options[command.text]) + '' + close + '>');\r\n\t\t\t};\r\n\t\t\tfor (var name in inst.options.commands) {\r\n\t\t\t\taddCommand('button', 'button type=\"button\"', 'button', name,\r\n\t\t\t\t\tinst.options.renderer.commandButtonClass);\r\n\t\t\t\taddCommand('link', 'a href=\"javascript:void(0)\"', 'a', name,\r\n\t\t\t\t\tinst.options.renderer.commandLinkClass);\r\n\t\t\t}\r\n\t\t\tpicker = $(picker);\r\n\t\t\tif (monthsToShow[1] > 1) {\r\n\t\t\t\tvar count = 0;\r\n\t\t\t\t$(inst.options.renderer.monthSelector, picker).each(function() {\r\n\t\t\t\t\tvar nth = ++count % monthsToShow[1];\r\n\t\t\t\t\t$(this).addClass(nth === 1 ? 'first' : (nth === 0 ? 'last' : ''));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// Add datepicker behaviour\r\n\t\t\tvar self = this;\r\n\t\t\tfunction removeHighlight() {\r\n\t\t\t\t(inst.inline ? $(this).closest('.' + self._getMarker()) : inst.div).\r\n\t\t\t\t\tfind(inst.options.renderer.daySelector + ' a').\r\n\t\t\t\t\tremoveClass(inst.options.renderer.highlightedClass);\r\n\t\t\t}\r\n\t\t\tpicker.find(inst.options.renderer.daySelector + ' a').hover(\r\n\t\t\t\t\tfunction() {\r\n\t\t\t\t\t\tremoveHighlight.apply(this);\r\n\t\t\t\t\t\t$(this).addClass(inst.options.renderer.highlightedClass);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tremoveHighlight).\r\n\t\t\t\tclick(function() {\r\n\t\t\t\t\tself.selectDate(elem, this);\r\n\t\t\t\t}).end().\r\n\t\t\t\tfind('select.' + this._monthYearClass + ':not(.' + this._anyYearClass + ')').\r\n\t\t\t\tchange(function() {\r\n\t\t\t\t\tvar monthYear = $(this).val().split('/');\r\n\t\t\t\t\tself.showMonth(elem, parseInt(monthYear[1], 10), parseInt(monthYear[0], 10));\r\n\t\t\t\t}).end().\r\n\t\t\t\tfind('select.' + this._anyYearClass).click(function() {\r\n\t\t\t\t\t$(this).css('visibility', 'hidden').\r\n\t\t\t\t\t\tnext('input').css({left: this.offsetLeft, top: this.offsetTop,\r\n\t\t\t\t\t\twidth: this.offsetWidth, height: this.offsetHeight}).show().focus();\r\n\t\t\t\t}).end().\r\n\t\t\t\tfind('input.' + self._monthYearClass).change(function() {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar year = parseInt($(this).val(), 10);\r\n\t\t\t\t\t\tyear = (isNaN(year) ? inst.drawDate.getFullYear() : year);\r\n\t\t\t\t\t\tself.showMonth(elem, year, inst.drawDate.getMonth() + 1, inst.drawDate.getDate());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (e) {\r\n\t\t\t\t\t\talert(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t}).keydown(function(event) {\r\n\t\t\t\t\tif (event.keyCode === 13) { // Enter\r\n\t\t\t\t\t\t$(event.elem).change();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (event.keyCode === 27) { // Escape\r\n\t\t\t\t\t\t$(event.elem).hide().prev('select').css('visibility', 'visible');\r\n\t\t\t\t\t\tinst.elem.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t// Add keyboard handling\r\n\t\t\tvar data = {elem: inst.elem[0]};\r\n\t\t\tpicker.keydown(data, this._keyDown).keypress(data, this._keyPress).keyup(data, this._keyUp);\r\n\t\t\t// Add command behaviour\r\n\t\t\tpicker.find('.' + inst.options.renderer.commandClass).click(function() {\r\n\t\t\t\t\tif (!$(this).hasClass(inst.options.renderer.disabledClass)) {\r\n\t\t\t\t\t\tvar action = this.className.replace(\r\n\t\t\t\t\t\t\tnew RegExp('^.*' + inst.options.renderer.commandClass + '-([^ ]+).*$'), '$1');\r\n\t\t\t\t\t\tplugin.performAction(elem, action);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t// Add classes\r\n\t\t\tif (inst.options.isRTL) {\r\n\t\t\t\tpicker.addClass(inst.options.renderer.rtlClass);\r\n\t\t\t}\r\n\t\t\tif (monthsToShow[0] * monthsToShow[1] > 1) {\r\n\t\t\t\tpicker.addClass(inst.options.renderer.multiClass);\r\n\t\t\t}\r\n\t\t\tif (inst.options.pickerClass) {\r\n\t\t\t\tpicker.addClass(inst.options.pickerClass);\r\n\t\t\t}\r\n\t\t\t// Resize\r\n\t\t\t$('body').append(picker);\r\n\t\t\tvar width = 0;\r\n\t\t\tpicker.find(inst.options.renderer.monthSelector).each(function() {\r\n\t\t\t\twidth += $(this).outerWidth();\r\n\t\t\t});\r\n\t\t\tpicker.width(width / monthsToShow[0]);\r\n\t\t\t// Pre-show customisation\r\n\t\t\tif ($.isFunction(inst.options.onShow)) {\r\n\t\t\t\tinst.options.onShow.apply(elem, [picker, inst]);\r\n\t\t\t}\r\n\t\t\treturn picker;\r\n\t\t},\r\n\r\n\t\t/** Generate the content for a single month.\r\n\t\t\t@private\r\n\t\t\t@param elem {Element} The control to affect.\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@param year {number} The year to generate.\r\n\t\t\t@param month {number} The month to generate.\r\n\t\t\t@param renderer {object} The rendering templates.\r\n\t\t\t@param first {boolean} true
if first of multiple months.\r\n\t\t\t@return {string} The month content. */\r\n\t\t_generateMonth: function(elem, inst, year, month, renderer, first) {\r\n\t\t\tvar daysInMonth = plugin.daysInMonth(year, month);\r\n\t\t\tvar monthsToShow = inst.options.monthsToShow;\r\n\t\t\tmonthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]);\r\n\t\t\tvar fixedWeeks = inst.options.fixedWeeks || (monthsToShow[0] * monthsToShow[1] > 1);\r\n\t\t\tvar firstDay = inst.options.firstDay;\r\n\t\t\tvar leadDays = (plugin.newDate(year, month, 1).getDay() - firstDay + 7) % 7;\r\n\t\t\tvar numWeeks = (fixedWeeks ? 6 : Math.ceil((leadDays + daysInMonth) / 7));\r\n\t\t\tvar selectOtherMonths = inst.options.selectOtherMonths && inst.options.showOtherMonths;\r\n\t\t\tvar minDate = (inst.pickingRange ? inst.selectedDates[0] : inst.get('minDate'));\r\n\t\t\tvar maxDate = inst.get('maxDate');\r\n\t\t\tvar showWeeks = renderer.week.indexOf('{weekOfYear}') > -1;\r\n\t\t\tvar today = plugin.today();\r\n\t\t\tvar drawDate = plugin.newDate(year, month, 1);\r\n\t\t\tplugin.add(drawDate, -leadDays - (fixedWeeks && (drawDate.getDay() === firstDay) ? 7 : 0), 'd');\r\n\t\t\tvar ts = drawDate.getTime();\r\n\t\t\t// Generate weeks\r\n\t\t\tvar weeks = '';\r\n\t\t\tfor (var week = 0; week < numWeeks; week++) {\r\n\t\t\t\tvar weekOfYear = (!showWeeks ? '' : '' +\r\n\t\t\t\t\t($.isFunction(inst.options.calculateWeek) ? inst.options.calculateWeek(drawDate) : 0) + '');\r\n\t\t\t\tvar days = '';\r\n\t\t\t\tfor (var day = 0; day < 7; day++) {\r\n\t\t\t\t\tvar selected = false;\r\n\t\t\t\t\tif (inst.options.rangeSelect && inst.selectedDates.length > 0) {\r\n\t\t\t\t\t\tselected = (drawDate.getTime() >= inst.selectedDates[0] &&\r\n\t\t\t\t\t\t\tdrawDate.getTime() <= inst.selectedDates[1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tfor (var i = 0; i < inst.selectedDates.length; i++) {\r\n\t\t\t\t\t\t\tif (inst.selectedDates[i].getTime() === drawDate.getTime()) {\r\n\t\t\t\t\t\t\t\tselected = true;\r\n\t\t\t\t\t\t\t\tbreak;\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\tvar dateInfo = (!$.isFunction(inst.options.onDate) ? {} :\r\n\t\t\t\t\t\tinst.options.onDate.apply(elem, [drawDate, drawDate.getMonth() + 1 === month]));\r\n\r\n\t\t\t\t\tvar dateToday = new Date();\r\n\t\t\t\t dateToday.setHours(0, 0, 0, 0);\r\n\r\n\t\t\t\t\tvar selectable = (selectOtherMonths || drawDate.getMonth() + 1 === month) &&\r\n\t\t\t\t \tthis._isSelectable(elem, drawDate, dateInfo.selectable, dateToday, maxDate); // minDate replaced with dateToday.\r\n\r\n\t\t\t\t\tdays += this._prepare(renderer.day, inst).replace(/\\{day\\}/g,\r\n\t\t\t\t\t\t(selectable ? '' +\r\n\t\t\t\t\t\t(inst.options.showOtherMonths || (drawDate.getMonth() + 1) === month ?\r\n\t\t\t\t\t\tdateInfo.content || drawDate.getDate() : ' ') +\r\n\t\t\t\t\t\t(selectable ? '' : ''));\r\n\t\t\t\t\tplugin.add(drawDate, 1, 'd');\r\n\t\t\t\t\tts = drawDate.getTime();\r\n\t\t\t\t}\r\n\t\t\t\tweeks += this._prepare(renderer.week, inst).replace(/\\{days\\}/g, days).\r\n\t\t\t\t\treplace(/\\{weekOfYear\\}/g, weekOfYear);\r\n\t\t\t}\r\n\t\t\tvar monthHeader = this._prepare(renderer.month, inst).match(/\\{monthHeader(:[^\\}]+)?\\}/);\r\n\t\t\tmonthHeader = (monthHeader[0].length <= 13 ? 'MM yyyy' :\r\n\t\t\t\tmonthHeader[0].substring(13, monthHeader[0].length - 1));\r\n\t\t\tmonthHeader = (first ? this._generateMonthSelection(\r\n\t\t\t\tinst, year, month, minDate, maxDate, monthHeader, renderer) :\r\n\t\t\t\tplugin.formatDate(monthHeader, plugin.newDate(year, month, 1), inst.getConfig()));\r\n\t\t\tvar weekHeader = this._prepare(renderer.weekHeader, inst).\r\n\t\t\t\treplace(/\\{days\\}/g, this._generateDayHeaders(inst, renderer));\r\n\t\t\treturn this._prepare(renderer.month, inst).replace(/\\{monthHeader(:[^\\}]+)?\\}/g, monthHeader).\r\n\t\t\t\treplace(/\\{weekHeader\\}/g, weekHeader).replace(/\\{weeks\\}/g, weeks);\r\n\t\t},\r\n\r\n\t\t/** Generate the HTML for the day headers.\r\n\t\t\t@private\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@param renderer {object} The rendering templates.\r\n\t\t\t@return {string} A week's worth of day headers. */\r\n\t\t_generateDayHeaders: function(inst, renderer) {\r\n\t\t\tvar header = '';\r\n\t\t\tfor (var day = 0; day < 7; day++) {\r\n\t\t\t\tvar dow = (day + inst.options.firstDay) % 7;\r\n\t\t\t\theader += this._prepare(renderer.dayHeader, inst).replace(/\\{day\\}/g,\r\n\t\t\t\t\t'' + inst.options.dayNamesMin[dow] + '');\r\n\t\t\t}\r\n\t\t\treturn header;\r\n\t\t},\r\n\r\n\t\t/** Generate selection controls for month.\r\n\t\t\t@private\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@param year {number} The year to generate.\r\n\t\t\t@param month {number} The month to generate.\r\n\t\t\t@param minDate {Date} The minimum date allowed.\r\n\t\t\t@param maxDate {Date} The maximum date allowed.\r\n\t\t\t@param monthHeader {string} The month/year format.\r\n\t\t\t@return {string} The month selection content. */\r\n\t\t_generateMonthSelection: function(inst, year, month, minDate, maxDate, monthHeader) {\r\n\t\t\tif (!inst.options.changeMonth) {\r\n\t\t\t\treturn plugin.formatDate(\r\n\t\t\t\t\tmonthHeader, plugin.newDate(year, month, 1), inst.getConfig());\r\n\t\t\t}\r\n\t\t\t// Months\r\n\t\t\tvar monthNames = inst.options['monthNames' + (monthHeader.match(/mm/i) ? '' : 'Short')];\r\n\t\t\tvar html = monthHeader.replace(/m+/i, '\\\\x2E').replace(/y+/i, '\\\\x2F');\r\n\t\t\tvar selector = '';\r\n\t\t\thtml = html.replace(/\\\\x2E/, selector);\r\n\t\t\t// Years\r\n\t\t\tvar yearRange = inst.options.yearRange;\r\n\t\t\tif (yearRange === 'any') {\r\n\t\t\t\tselector = '' +\r\n\t\t\t\t\t'';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tyearRange = yearRange.split(':');\r\n\t\t\t\tvar todayYear = plugin.today().getFullYear();\r\n\t\t\t\tvar start = (yearRange[0].match('c[+-].*') ? year + parseInt(yearRange[0].substring(1), 10) :\r\n\t\t\t\t\t((yearRange[0].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[0], 10)));\r\n\t\t\t\tvar end = (yearRange[1].match('c[+-].*') ? year + parseInt(yearRange[1].substring(1), 10) :\r\n\t\t\t\t\t((yearRange[1].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[1], 10)));\r\n\t\t\t\tselector = '';\r\n\t\t\t}\r\n\t\t\thtml = html.replace(/\\\\x2F/, selector);\r\n\t\t\treturn html;\r\n\t\t},\r\n\r\n\t\t/** Prepare a render template for use.\r\n\t\t\tExclude popup/inline sections that are not applicable.\r\n\t\t\tLocalise text of the form: {l10n:name}.\r\n\t\t\t@private\r\n\t\t\t@param text {string} The text to localise.\r\n\t\t\t@param inst {object} The current instance settings.\r\n\t\t\t@return {string} The localised text. */\r\n\t\t_prepare: function(text, inst) {\r\n\t\t\tvar replaceSection = function(type, retain) {\r\n\t\t\t\twhile (true) {\r\n\t\t\t\t\tvar start = text.indexOf('{' + type + ':start}');\r\n\t\t\t\t\tif (start === -1) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar end = text.substring(start).indexOf('{' + type + ':end}');\r\n\t\t\t\t\tif (end > -1) {\r\n\t\t\t\t\t\ttext = text.substring(0, start) +\r\n\t\t\t\t\t\t\t(retain ? text.substr(start + type.length + 8, end - type.length - 8) : '') +\r\n\t\t\t\t\t\t\ttext.substring(start + end + type.length + 6);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\treplaceSection('inline', inst.inline);\r\n\t\t\treplaceSection('popup', !inst.inline);\r\n\t\t\tvar pattern = /\\{l10n:([^\\}]+)\\}/;\r\n\t\t\tvar matches = null;\r\n\t\t\twhile (matches = pattern.exec(text)) {\r\n\t\t\t\ttext = text.replace(matches[0], inst.options[matches[1]]);\r\n\t\t\t}\r\n\t\t\treturn text;\r\n\t\t}\r\n\t});\r\n\r\n\tvar plugin = $.datepick; // Singleton instance\r\n\r\n\t$(function() {\r\n\t\t$(document).on('mousedown.' + pluginName, plugin._checkExternalClick).\r\n\t\t\ton('resize.' + pluginName, function() { plugin.hide(plugin.curInst); });\r\n\t});\r\n\r\n})(jQuery);\r\n","/*!\r\n * jQuery Validation Plugin v1.14.0\r\n *\r\n * http://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2015 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend($.fn, {\r\n\t// http://jqueryvalidation.org/validate/\r\n\tvalidate: function( options ) {\r\n\r\n\t\t// if nothing is selected, return nothing; can't chain anyway\r\n\t\tif ( !this.length ) {\r\n\t\t\tif ( options && options.debug && window.console ) {\r\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if a validator for this form was already created\r\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\r\n\t\tif ( validator ) {\r\n\t\t\treturn validator;\r\n\t\t}\r\n\r\n\t\t// Add novalidate tag if HTML5.\r\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\r\n\r\n\t\tvalidator = new $.validator( options, this[ 0 ] );\r\n\t\t$.data( this[ 0 ], \"validator\", validator );\r\n\r\n\t\tif ( validator.settings.onsubmit ) {\r\n\r\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\r\n\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\tvalidator.submitButton = event.target;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\r\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\r\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// validate the form on submit\r\n\t\t\tthis.on( \"submit.validate\", function( event ) {\r\n\t\t\t\tif ( validator.settings.debug ) {\r\n\t\t\t\t\t// prevent form submit to be able to see console output\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\tfunction handle() {\r\n\t\t\t\t\tvar hidden, result;\r\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\t\tif ( validator.submitButton ) {\r\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\r\n\t\t\t\t\t\t\thidden = $( \"\" )\r\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\r\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\r\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\r\n\t\t\t\t\t\tif ( validator.submitButton ) {\r\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\r\n\t\t\t\t\t\t\thidden.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( result !== undefined ) {\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\r\n\t\t\t\tif ( validator.cancelSubmit ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = false;\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t}\r\n\t\t\t\tif ( validator.form() ) {\r\n\t\t\t\t\tif ( validator.pendingRequest ) {\r\n\t\t\t\t\t\tvalidator.formSubmitted = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidator.focusInvalid();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn validator;\r\n\t},\r\n\t// http://jqueryvalidation.org/valid/\r\n\tvalid: function() {\r\n\t\tvar valid, validator, errorList;\r\n\r\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\r\n\t\t\tvalid = this.validate().form();\r\n\t\t} else {\r\n\t\t\terrorList = [];\r\n\t\t\tvalid = true;\r\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvalid = validator.element( this ) && valid;\r\n\t\t\t\terrorList = errorList.concat( validator.errorList );\r\n\t\t\t});\r\n\t\t\tvalidator.errorList = errorList;\r\n\t\t}\r\n\t\treturn valid;\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/rules/\r\n\trules: function( command, argument ) {\r\n\t\tvar element = this[ 0 ],\r\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\r\n\r\n\t\tif ( command ) {\r\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\r\n\t\t\tstaticRules = settings.rules;\r\n\t\t\texistingRules = $.validator.staticRules( element );\r\n\t\t\tswitch ( command ) {\r\n\t\t\tcase \"add\":\r\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\r\n\t\t\t\t// remove messages from rules, but allow them to be set separately\r\n\t\t\t\tdelete existingRules.messages;\r\n\t\t\t\tstaticRules[ element.name ] = existingRules;\r\n\t\t\t\tif ( argument.messages ) {\r\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"remove\":\r\n\t\t\t\tif ( !argument ) {\r\n\t\t\t\t\tdelete staticRules[ element.name ];\r\n\t\t\t\t\treturn existingRules;\r\n\t\t\t\t}\r\n\t\t\t\tfiltered = {};\r\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\r\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\r\n\t\t\t\t\tdelete existingRules[ method ];\r\n\t\t\t\t\tif ( method === \"required\" ) {\r\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn filtered;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdata = $.validator.normalizeRules(\r\n\t\t$.extend(\r\n\t\t\t{},\r\n\t\t\t$.validator.classRules( element ),\r\n\t\t\t$.validator.attributeRules( element ),\r\n\t\t\t$.validator.dataRules( element ),\r\n\t\t\t$.validator.staticRules( element )\r\n\t\t), element );\r\n\r\n\t\t// make sure required is at front\r\n\t\tif ( data.required ) {\r\n\t\t\tparam = data.required;\r\n\t\t\tdelete data.required;\r\n\t\t\tdata = $.extend( { required: param }, data );\r\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\r\n\t\t}\r\n\r\n\t\t// make sure remote is at back\r\n\t\tif ( data.remote ) {\r\n\t\t\tparam = data.remote;\r\n\t\t\tdelete data.remote;\r\n\t\t\tdata = $.extend( data, { remote: param });\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n});\r\n\r\n// Custom selectors\r\n$.extend( $.expr[ \":\" ], {\r\n\t// http://jqueryvalidation.org/blank-selector/\r\n\tblank: function( a ) {\r\n\t\treturn !$.trim( \"\" + $( a ).val() );\r\n\t},\r\n\t// http://jqueryvalidation.org/filled-selector/\r\n\tfilled: function( a ) {\r\n\t\treturn !!$.trim( \"\" + $( a ).val() );\r\n\t},\r\n\t// http://jqueryvalidation.org/unchecked-selector/\r\n\tunchecked: function( a ) {\r\n\t\treturn !$( a ).prop( \"checked\" );\r\n\t}\r\n});\r\n\r\n// constructor for validator\r\n$.validator = function( options, form ) {\r\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\r\n\tthis.currentForm = form;\r\n\tthis.init();\r\n};\r\n\r\n// http://jqueryvalidation.org/jQuery.validator.format/\r\n$.validator.format = function( source, params ) {\r\n\tif ( arguments.length === 1 ) {\r\n\t\treturn function() {\r\n\t\t\tvar args = $.makeArray( arguments );\r\n\t\t\targs.unshift( source );\r\n\t\t\treturn $.validator.format.apply( this, args );\r\n\t\t};\r\n\t}\r\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\r\n\t\tparams = $.makeArray( arguments ).slice( 1 );\r\n\t}\r\n\tif ( params.constructor !== Array ) {\r\n\t\tparams = [ params ];\r\n\t}\r\n\t$.each( params, function( i, n ) {\r\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\r\n\t\t\treturn n;\r\n\t\t});\r\n\t});\r\n\treturn source;\r\n};\r\n\r\n$.extend( $.validator, {\r\n\r\n\tdefaults: {\r\n\t\tmessages: {},\r\n\t\tgroups: {},\r\n\t\trules: {},\r\n\t\terrorClass: \"error\",\r\n\t\tvalidClass: \"valid\",\r\n\t\terrorElement: \"label\",\r\n\t\tfocusCleanup: false,\r\n\t\tfocusInvalid: true,\r\n\t\terrorContainer: $( [] ),\r\n\t\terrorLabelContainer: $( [] ),\r\n\t\tonsubmit: true,\r\n\t\tignore: \":hidden\",\r\n\t\tignoreTitle: false,\r\n\t\tonfocusin: function( element ) {\r\n\t\t\tthis.lastActive = element;\r\n\r\n\t\t\t// Hide error label and remove error class on focus if enabled\r\n\t\t\tif ( this.settings.focusCleanup ) {\r\n\t\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonfocusout: function( element ) {\r\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonkeyup: function( element, event ) {\r\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\r\n\t\t\t// Shift => 16\r\n\t\t\t// Ctrl => 17\r\n\t\t\t// Alt => 18\r\n\t\t\t// Caps lock => 20\r\n\t\t\t// End => 35\r\n\t\t\t// Home => 36\r\n\t\t\t// Left arrow => 37\r\n\t\t\t// Up arrow => 38\r\n\t\t\t// Right arrow => 39\r\n\t\t\t// Down arrow => 40\r\n\t\t\t// Insert => 45\r\n\t\t\t// Num lock => 144\r\n\t\t\t// AltGr key => 225\r\n\t\t\tvar excludedKeys = [\r\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\r\n\t\t\t\t38, 39, 40, 45, 144, 225\r\n\t\t\t];\r\n\r\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonclick: function( element ) {\r\n\t\t\t// click on selects, radiobuttons and checkboxes\r\n\t\t\tif ( element.name in this.submitted ) {\r\n\t\t\t\tthis.element( element );\r\n\r\n\t\t\t// or option elements, check parent select in that case\r\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\r\n\t\t\t\tthis.element( element.parentNode );\r\n\t\t\t}\r\n\t\t},\r\n\t\thighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t}\r\n\t\t},\r\n\t\tunhighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\r\n\tsetDefaults: function( settings ) {\r\n\t\t$.extend( $.validator.defaults, settings );\r\n\t},\r\n\r\n\tmessages: {\r\n\t\trequired: \"This field is required.\",\r\n\t\tremote: \"Please fix this field.\",\r\n\t\temail: \"Please enter a valid email address.\",\r\n\t\turl: \"Please enter a valid URL.\",\r\n\t\tdate: \"Please enter a valid date.\",\r\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\r\n\t\tnumber: \"Please enter a valid number.\",\r\n\t\tdigits: \"Please enter only digits.\",\r\n\t\tcreditcard: \"Please enter a valid credit card number.\",\r\n\t\tequalTo: \"Please enter the same value again.\",\r\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\r\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\r\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\r\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\r\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\r\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\r\n\t},\r\n\r\n\tautoCreateRanges: false,\r\n\r\n\tprototype: {\r\n\r\n\t\tinit: function() {\r\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\r\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\r\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.valueCache = {};\r\n\t\t\tthis.pendingRequest = 0;\r\n\t\t\tthis.pending = {};\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.reset();\r\n\r\n\t\t\tvar groups = ( this.groups = {} ),\r\n\t\t\t\trules;\r\n\t\t\t$.each( this.settings.groups, function( key, value ) {\r\n\t\t\t\tif ( typeof value === \"string\" ) {\r\n\t\t\t\t\tvalue = value.split( /\\s/ );\r\n\t\t\t\t}\r\n\t\t\t\t$.each( value, function( index, name ) {\r\n\t\t\t\t\tgroups[ name ] = key;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\trules = this.settings.rules;\r\n\t\t\t$.each( rules, function( key, value ) {\r\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\r\n\t\t\t});\r\n\r\n\t\t\tfunction delegate( event ) {\r\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\r\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\r\n\t\t\t\t\tsettings = validator.settings;\r\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\r\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\r\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\r\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\r\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\r\n\t\t\t\t\t\"[type='radio'], [type='checkbox']\", delegate)\r\n\t\t\t\t// Support: Chrome, oldIE\r\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\r\n\t\t\t\t.on(\"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate);\r\n\r\n\t\t\tif ( this.settings.invalidHandler ) {\r\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\r\n\t\t\t}\r\n\r\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\r\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\r\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.form/\r\n\t\tform: function() {\r\n\t\t\tthis.checkForm();\r\n\t\t\t$.extend( this.submitted, this.errorMap );\r\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\r\n\t\t\tif ( !this.valid() ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\tcheckForm: function() {\r\n\t\t\tthis.prepareForm();\r\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\r\n\t\t\t\tthis.check( elements[ i ] );\r\n\t\t\t}\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.element/\r\n\t\telement: function( element ) {\r\n\t\t\tvar cleanElement = this.clean( element ),\r\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\r\n\t\t\t\tresult = true;\r\n\r\n\t\t\tthis.lastElement = checkElement;\r\n\r\n\t\t\tif ( checkElement === undefined ) {\r\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\r\n\t\t\t} else {\r\n\t\t\t\tthis.prepareElement( checkElement );\r\n\t\t\t\tthis.currentElements = $( checkElement );\r\n\r\n\t\t\t\tresult = this.check( checkElement ) !== false;\r\n\t\t\t\tif ( result ) {\r\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Add aria-invalid status for screen readers\r\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\r\n\r\n\t\t\tif ( !this.numberOfInvalids() ) {\r\n\t\t\t\t// Hide error containers on last error\r\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\r\n\t\tshowErrors: function( errors ) {\r\n\t\t\tif ( errors ) {\r\n\t\t\t\t// add items to error list and map\r\n\t\t\t\t$.extend( this.errorMap, errors );\r\n\t\t\t\tthis.errorList = [];\r\n\t\t\t\tfor ( var name in errors ) {\r\n\t\t\t\t\tthis.errorList.push({\r\n\t\t\t\t\t\tmessage: errors[ name ],\r\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// remove items from success list\r\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\r\n\t\t\t\t\treturn !( element.name in errors );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif ( this.settings.showErrors ) {\r\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\r\n\t\t\t} else {\r\n\t\t\t\tthis.defaultShowErrors();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\r\n\t\tresetForm: function() {\r\n\t\t\tif ( $.fn.resetForm ) {\r\n\t\t\t\t$( this.currentForm ).resetForm();\r\n\t\t\t}\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.lastElement = null;\r\n\t\t\tthis.prepareForm();\r\n\t\t\tthis.hideErrors();\r\n\t\t\tvar i, elements = this.elements()\r\n\t\t\t\t.removeData( \"previousValue\" )\r\n\t\t\t\t.removeAttr( \"aria-invalid\" );\r\n\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\r\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\telements.removeClass( this.settings.errorClass );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tnumberOfInvalids: function() {\r\n\t\t\treturn this.objectLength( this.invalid );\r\n\t\t},\r\n\r\n\t\tobjectLength: function( obj ) {\r\n\t\t\t/* jshint unused: false */\r\n\t\t\tvar count = 0,\r\n\t\t\t\ti;\r\n\t\t\tfor ( i in obj ) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t\treturn count;\r\n\t\t},\r\n\r\n\t\thideErrors: function() {\r\n\t\t\tthis.hideThese( this.toHide );\r\n\t\t},\r\n\r\n\t\thideThese: function( errors ) {\r\n\t\t\terrors.not( this.containers ).text( \"\" );\r\n\t\t\tthis.addWrapper( errors ).hide();\r\n\t\t},\r\n\r\n\t\tvalid: function() {\r\n\t\t\treturn this.size() === 0;\r\n\t\t},\r\n\r\n\t\tsize: function() {\r\n\t\t\treturn this.errorList.length;\r\n\t\t},\r\n\r\n\t\tfocusInvalid: function() {\r\n\t\t\tif ( this.settings.focusInvalid ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\r\n\t\t\t\t\t.filter( \":visible\" )\r\n\t\t\t\t\t.focus()\r\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\r\n\t\t\t\t\t.trigger( \"focusin\" );\r\n\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfindLastActive: function() {\r\n\t\t\tvar lastActive = this.lastActive;\r\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\r\n\t\t\t\treturn n.element.name === lastActive.name;\r\n\t\t\t}).length === 1 && lastActive;\r\n\t\t},\r\n\r\n\t\telements: function() {\r\n\t\t\tvar validator = this,\r\n\t\t\t\trulesCache = {};\r\n\r\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\r\n\t\t\treturn $( this.currentForm )\r\n\t\t\t.find( \"input, select, textarea\" )\r\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\r\n\t\t\t.not( this.settings.ignore )\r\n\t\t\t.filter( function() {\r\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\r\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// select only the first element for each name, and only those with rules specified\r\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trulesCache[ this.name ] = true;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tclean: function( selector ) {\r\n\t\t\treturn $( selector )[ 0 ];\r\n\t\t},\r\n\r\n\t\terrors: function() {\r\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\r\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\r\n\t\t},\r\n\r\n\t\treset: function() {\r\n\t\t\tthis.successList = [];\r\n\t\t\tthis.errorList = [];\r\n\t\t\tthis.errorMap = {};\r\n\t\t\tthis.toShow = $( [] );\r\n\t\t\tthis.toHide = $( [] );\r\n\t\t\tthis.currentElements = $( [] );\r\n\t\t},\r\n\r\n\t\tprepareForm: function() {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errors().add( this.containers );\r\n\t\t},\r\n\r\n\t\tprepareElement: function( element ) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errorsFor( element );\r\n\t\t},\r\n\r\n\t\telementValue: function( element ) {\r\n\t\t\tvar val,\r\n\t\t\t\t$element = $( element ),\r\n\t\t\t\ttype = element.type;\r\n\r\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\r\n\t\t\t\treturn this.findByName( element.name ).filter(\":checked\").val();\r\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\r\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\r\n\t\t\t}\r\n\r\n\t\t\tval = $element.val();\r\n\t\t\tif ( typeof val === \"string\" ) {\r\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t},\r\n\r\n\t\tcheck: function( element ) {\r\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\r\n\r\n\t\t\tvar rules = $( element ).rules(),\r\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}).length,\r\n\t\t\t\tdependencyMismatch = false,\r\n\t\t\t\tval = this.elementValue( element ),\r\n\t\t\t\tresult, method, rule;\r\n\r\n\t\t\tfor ( method in rules ) {\r\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\r\n\t\t\t\ttry {\r\n\r\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\r\n\r\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\r\n\t\t\t\t\t// don't mark it as valid when there are no other rules\r\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\r\n\t\t\t\t\t\tdependencyMismatch = true;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdependencyMismatch = false;\r\n\r\n\t\t\t\t\tif ( result === \"pending\" ) {\r\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !result ) {\r\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\r\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( e instanceof TypeError ) {\r\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( dependencyMismatch ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( this.objectLength( rules ) ) {\r\n\t\t\t\tthis.successList.push( element );\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// return the custom message for the given element and validation method\r\n\t\t// specified in the element's HTML5 data attribute\r\n\t\t// return the generic message if present and no method specific message is present\r\n\t\tcustomDataMessage: function( element, method ) {\r\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\r\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\r\n\t\t},\r\n\r\n\t\t// return the custom message for the given element name and validation method\r\n\t\tcustomMessage: function( name, method ) {\r\n\t\t\tvar m = this.settings.messages[ name ];\r\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\r\n\t\t},\r\n\r\n\t\t// return the first defined argument, allowing empty strings\r\n\t\tfindDefined: function() {\r\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\r\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\r\n\t\t\t\t\treturn arguments[ i ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn undefined;\r\n\t\t},\r\n\r\n\t\tdefaultMessage: function( element, method ) {\r\n\t\t\treturn this.findDefined(\r\n\t\t\t\tthis.customMessage( element.name, method ),\r\n\t\t\t\tthis.customDataMessage( element, method ),\r\n\t\t\t\t// title is never undefined, so handle empty string as undefined\r\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\r\n\t\t\t\t$.validator.messages[ method ],\r\n\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\r\n\t\t\t);\r\n\t\t},\r\n\r\n\t\tformatAndAdd: function( element, rule ) {\r\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\r\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\r\n\t\t\tif ( typeof message === \"function\" ) {\r\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\r\n\t\t\t} else if ( theregex.test( message ) ) {\r\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\r\n\t\t\t}\r\n\t\t\tthis.errorList.push({\r\n\t\t\t\tmessage: message,\r\n\t\t\t\telement: element,\r\n\t\t\t\tmethod: rule.method\r\n\t\t\t});\r\n\r\n\t\t\tthis.errorMap[ element.name ] = message;\r\n\t\t\tthis.submitted[ element.name ] = message;\r\n\t\t},\r\n\r\n\t\taddWrapper: function( toToggle ) {\r\n\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\r\n\t\t\t}\r\n\t\t\treturn toToggle;\r\n\t\t},\r\n\r\n\t\tdefaultShowErrors: function() {\r\n\t\t\tvar i, elements, error;\r\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\r\n\t\t\t\terror = this.errorList[ i ];\r\n\t\t\t\tif ( this.settings.highlight ) {\r\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showLabel( error.element, error.message );\r\n\t\t\t}\r\n\t\t\tif ( this.errorList.length ) {\r\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\r\n\t\t\t}\r\n\t\t\tif ( this.settings.success ) {\r\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\r\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\r\n\t\t\tthis.hideErrors();\r\n\t\t\tthis.addWrapper( this.toShow ).show();\r\n\t\t},\r\n\r\n\t\tvalidElements: function() {\r\n\t\t\treturn this.currentElements.not( this.invalidElements() );\r\n\t\t},\r\n\r\n\t\tinvalidElements: function() {\r\n\t\t\treturn $( this.errorList ).map(function() {\r\n\t\t\t\treturn this.element;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tshowLabel: function( element, message ) {\r\n\t\t\tvar place, group, errorID,\r\n\t\t\t\terror = this.errorsFor( element ),\r\n\t\t\t\telementID = this.idOrName( element ),\r\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\r\n\t\t\tif ( error.length ) {\r\n\t\t\t\t// refresh error/success class\r\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\r\n\t\t\t\t// replace message on existing label\r\n\t\t\t\terror.html( message );\r\n\t\t\t} else {\r\n\t\t\t\t// create error element\r\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\r\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\r\n\t\t\t\t\t.addClass( this.settings.errorClass )\r\n\t\t\t\t\t.html( message || \"\" );\r\n\r\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\r\n\t\t\t\tplace = error;\r\n\t\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\t\t// make sure the element is visible, even in IE\r\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\r\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\r\n\t\t\t\t}\r\n\t\t\t\tif ( this.labelContainer.length ) {\r\n\t\t\t\t\tthis.labelContainer.append( place );\r\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\r\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplace.insertAfter( element );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Link error back to the element\r\n\t\t\t\tif ( error.is( \"label\" ) ) {\r\n\t\t\t\t\t// If the error is a label, then associate using 'for'\r\n\t\t\t\t\terror.attr( \"for\", elementID );\r\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\r\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\r\n\t\t\t\t\t// to explicitly apply aria-describedby\r\n\r\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\]|\\$)/g, \"\\\\$1\");\r\n\t\t\t\t\t// Respect existing non-error aria-describedby\r\n\t\t\t\t\tif ( !describedBy ) {\r\n\t\t\t\t\t\tdescribedBy = errorID;\r\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\r\n\t\t\t\t\t\t// Add to end of list if not already present\r\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\r\n\r\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\r\n\t\t\t\t\tgroup = this.groups[ element.name ];\r\n\t\t\t\t\tif ( group ) {\r\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\r\n\t\t\t\t\t\t\tif ( testgroup === group ) {\r\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\r\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\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\tif ( !message && this.settings.success ) {\r\n\t\t\t\terror.text( \"\" );\r\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\r\n\t\t\t\t\terror.addClass( this.settings.success );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.settings.success( error, element );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toShow = this.toShow.add( error );\r\n\t\t},\r\n\r\n\t\terrorsFor: function( element ) {\r\n\t\t\tvar name = this.idOrName( element ),\r\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\r\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\r\n\r\n\t\t\t// aria-describedby should directly reference the error element\r\n\t\t\tif ( describer ) {\r\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\r\n\t\t\t}\r\n\t\t\treturn this\r\n\t\t\t\t.errors()\r\n\t\t\t\t.filter( selector );\r\n\t\t},\r\n\r\n\t\tidOrName: function( element ) {\r\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\r\n\t\t},\r\n\r\n\t\tvalidationTargetFor: function( element ) {\r\n\r\n\t\t\t// If radio/checkbox, validate first element in group instead\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\telement = this.findByName( element.name );\r\n\t\t\t}\r\n\r\n\t\t\t// Always apply ignore filter\r\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\r\n\t\t},\r\n\r\n\t\tcheckable: function( element ) {\r\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\r\n\t\t},\r\n\r\n\t\tfindByName: function( name ) {\r\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\r\n\t\t},\r\n\r\n\t\tgetLength: function( value, element ) {\r\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\r\n\t\t\tcase \"select\":\r\n\t\t\t\treturn $( \"option:selected\", element ).length;\r\n\t\t\tcase \"input\":\r\n\t\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn value.length;\r\n\t\t},\r\n\r\n\t\tdepend: function( param, element ) {\r\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\r\n\t\t},\r\n\r\n\t\tdependTypes: {\r\n\t\t\t\"boolean\": function( param ) {\r\n\t\t\t\treturn param;\r\n\t\t\t},\r\n\t\t\t\"string\": function( param, element ) {\r\n\t\t\t\treturn !!$( param, element.form ).length;\r\n\t\t\t},\r\n\t\t\t\"function\": function( param, element ) {\r\n\t\t\t\treturn param( element );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\toptional: function( element ) {\r\n\t\t\tvar val = this.elementValue( element );\r\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\r\n\t\t},\r\n\r\n\t\tstartRequest: function( element ) {\r\n\t\t\tif ( !this.pending[ element.name ] ) {\r\n\t\t\t\tthis.pendingRequest++;\r\n\t\t\t\tthis.pending[ element.name ] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstopRequest: function( element, valid ) {\r\n\t\t\tthis.pendingRequest--;\r\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\r\n\t\t\tif ( this.pendingRequest < 0 ) {\r\n\t\t\t\tthis.pendingRequest = 0;\r\n\t\t\t}\r\n\t\t\tdelete this.pending[ element.name ];\r\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\r\n\t\t\t\t$( this.currentForm ).submit();\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tpreviousValue: function( element ) {\r\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\r\n\t\t\t\told: null,\r\n\t\t\t\tvalid: true,\r\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t// cleans up all forms and elements, removes validator-specific events\r\n\t\tdestroy: function() {\r\n\t\t\tthis.resetForm();\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.off( \".validate\" )\r\n\t\t\t\t.removeData( \"validator\" );\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclassRuleSettings: {\r\n\t\trequired: { required: true },\r\n\t\temail: { email: true },\r\n\t\turl: { url: true },\r\n\t\tdate: { date: true },\r\n\t\tdateISO: { dateISO: true },\r\n\t\tnumber: { number: true },\r\n\t\tdigits: { digits: true },\r\n\t\tcreditcard: { creditcard: true }\r\n\t},\r\n\r\n\taddClassRules: function( className, rules ) {\r\n\t\tif ( className.constructor === String ) {\r\n\t\t\tthis.classRuleSettings[ className ] = rules;\r\n\t\t} else {\r\n\t\t\t$.extend( this.classRuleSettings, className );\r\n\t\t}\r\n\t},\r\n\r\n\tclassRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tclasses = $( element ).attr( \"class\" );\r\n\r\n\t\tif ( classes ) {\r\n\t\t\t$.each( classes.split( \" \" ), function() {\r\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\r\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\r\n\r\n\t\t// convert the value to a number for number inputs, and for text for backwards compability\r\n\t\t// allows type=\"date\" and others to be compared as strings\r\n\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\r\n\t\t\tvalue = Number( value );\r\n\r\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\r\n\t\t\tif ( isNaN( value ) ) {\r\n\t\t\t\tvalue = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( value || value === 0 ) {\r\n\t\t\trules[ method ] = value;\r\n\t\t} else if ( type === method && type !== \"range\" ) {\r\n\r\n\t\t\t// exception: the jquery validate 'range' method\r\n\t\t\t// does not test for the html5 'range' type\r\n\t\t\trules[ method ] = true;\r\n\t\t}\r\n\t},\r\n\r\n\tattributeRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\r\n\t\t\t// support for in both html5 and older browsers\r\n\t\t\tif ( method === \"required\" ) {\r\n\t\t\t\tvalue = element.getAttribute( method );\r\n\r\n\t\t\t\t// Some browsers return an empty string for the required attribute\r\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\r\n\t\t\t\tif ( value === \"\" ) {\r\n\t\t\t\t\tvalue = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// force non-HTML5 browsers to return bool\r\n\t\t\t\tvalue = !!value;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = $element.attr( method );\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\r\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\r\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\r\n\t\t\tdelete rules.maxlength;\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tdataRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tstaticRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tvalidator = $.data( element.form, \"validator\" );\r\n\r\n\t\tif ( validator.settings.rules ) {\r\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeRules: function( rules, element ) {\r\n\t\t// handle dependency check\r\n\t\t$.each( rules, function( prop, val ) {\r\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\r\n\t\t\tif ( val === false ) {\r\n\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( val.param || val.depends ) {\r\n\t\t\t\tvar keepRule = true;\r\n\t\t\t\tswitch ( typeof val.depends ) {\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif ( keepRule ) {\r\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// evaluate parameters\r\n\t\t$.each( rules, function( rule, parameter ) {\r\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\r\n\t\t});\r\n\r\n\t\t// clean number parameters\r\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\trules[ this ] = Number( rules[ this ] );\r\n\t\t\t}\r\n\t\t});\r\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\r\n\t\t\tvar parts;\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\r\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\r\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\r\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\r\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( $.validator.autoCreateRanges ) {\r\n\t\t\t// auto-create ranges\r\n\t\t\tif ( rules.min != null && rules.max != null ) {\r\n\t\t\t\trules.range = [ rules.min, rules.max ];\r\n\t\t\t\tdelete rules.min;\r\n\t\t\t\tdelete rules.max;\r\n\t\t\t}\r\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\r\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\r\n\t\t\t\tdelete rules.minlength;\r\n\t\t\t\tdelete rules.maxlength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\r\n\tnormalizeRule: function( data ) {\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\tvar transformed = {};\r\n\t\t\t$.each( data.split( /\\s/ ), function() {\r\n\t\t\t\ttransformed[ this ] = true;\r\n\t\t\t});\r\n\t\t\tdata = transformed;\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\r\n\taddMethod: function( name, method, message ) {\r\n\t\t$.validator.methods[ name ] = method;\r\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\r\n\t\tif ( method.length < 3 ) {\r\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\r\n\t\t}\r\n\t},\r\n\r\n\tmethods: {\r\n\r\n\t\t// http://jqueryvalidation.org/required-method/\r\n\t\trequired: function( value, element, param ) {\r\n\t\t\t// check if dependency is met\r\n\t\t\tif ( !this.depend( param, element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\r\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\r\n\t\t\t\tvar val = $( element ).val();\r\n\t\t\t\treturn val && val.length > 0;\r\n\t\t\t}\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\treturn this.getLength( value, element ) > 0;\r\n\t\t\t}\r\n\t\t\treturn value.length > 0;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/email-method/\r\n\t\temail: function( value, element ) {\r\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n\t\t\t// Retrieved 2014-01-14\r\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\r\n\t\t\t// Or use custom methods to implement your own email validation\r\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/url-method/\r\n\t\turl: function( value, element ) {\r\n\r\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\r\n\t\t\t// https://gist.github.com/dperini/729294\r\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\r\n\t\t\t// modified to allow protocol-relative URLs\r\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/date-method/\r\n\t\tdate: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/dateISO-method/\r\n\t\tdateISO: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/number-method/\r\n\t\tnumber: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/digits-method/\r\n\t\tdigits: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/creditcard-method/\r\n\t\t// based on http://en.wikipedia.org/wiki/Luhn_algorithm\r\n\t\tcreditcard: function( value, element ) {\r\n\t\t\tif ( this.optional( element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\t// accept only spaces, digits and dashes\r\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tvar nCheck = 0,\r\n\t\t\t\tnDigit = 0,\r\n\t\t\t\tbEven = false,\r\n\t\t\t\tn, cDigit;\r\n\r\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\r\n\r\n\t\t\t// Basing min and max length on\r\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\r\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\r\n\t\t\t\tcDigit = value.charAt( n );\r\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\r\n\t\t\t\tif ( bEven ) {\r\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\r\n\t\t\t\t\t\tnDigit -= 9;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnCheck += nDigit;\r\n\t\t\t\tbEven = !bEven;\r\n\t\t\t}\r\n\r\n\t\t\treturn ( nCheck % 10 ) === 0;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/minlength-method/\r\n\t\tminlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length >= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/maxlength-method/\r\n\t\tmaxlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length <= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/rangelength-method/\r\n\t\trangelength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/min-method/\r\n\t\tmin: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value >= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/max-method/\r\n\t\tmax: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value <= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/range-method/\r\n\t\trange: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/equalTo-method/\r\n\t\tequalTo: function( value, element, param ) {\r\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\r\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\r\n\t\t\tvar target = $( param );\r\n\t\t\tif ( this.settings.onfocusout ) {\r\n\t\t\t\ttarget.off( \".validate-equalTo\" ).on( \"blur.validate-equalTo\", function() {\r\n\t\t\t\t\t$( element ).valid();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn value === target.val();\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/remote-method/\r\n\t\tremote: function( value, element, param ) {\r\n\t\t\tif ( this.optional( element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\r\n\t\t\tvar previous = this.previousValue( element ),\r\n\t\t\t\tvalidator, data;\r\n\r\n\t\t\tif (!this.settings.messages[ element.name ] ) {\r\n\t\t\t\tthis.settings.messages[ element.name ] = {};\r\n\t\t\t}\r\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\r\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\r\n\r\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\r\n\r\n\t\t\tif ( previous.old === value ) {\r\n\t\t\t\treturn previous.valid;\r\n\t\t\t}\r\n\r\n\t\t\tprevious.old = value;\r\n\t\t\tvalidator = this;\r\n\t\t\tthis.startRequest( element );\r\n\t\t\tdata = {};\r\n\t\t\tdata[ element.name ] = value;\r\n\t\t\t$.ajax( $.extend( true, {\r\n\t\t\t\tmode: \"abort\",\r\n\t\t\t\tport: \"validate\" + element.name,\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: data,\r\n\t\t\t\tcontext: validator.currentForm,\r\n\t\t\t\tsuccess: function( response ) {\r\n\t\t\t\t\tvar valid = response === true || response === \"true\",\r\n\t\t\t\t\t\terrors, message, submitted;\r\n\r\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\r\n\t\t\t\t\tif ( valid ) {\r\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\r\n\t\t\t\t\t\tvalidator.prepareElement( element );\r\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\r\n\t\t\t\t\t\tvalidator.successList.push( element );\r\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\r\n\t\t\t\t\t\tvalidator.showErrors();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\terrors = {};\r\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\r\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\r\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\r\n\t\t\t\t\t\tvalidator.showErrors( errors );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprevious.valid = valid;\r\n\t\t\t\t\tvalidator.stopRequest( element, valid );\r\n\t\t\t\t}\r\n\t\t\t}, param ) );\r\n\t\t\treturn \"pending\";\r\n\t\t}\r\n\t}\r\n\r\n});\r\n\r\n// ajax mode: abort\r\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\r\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\r\n\r\nvar pendingRequests = {},\r\n\tajax;\r\n// Use a prefilter if available (1.5+)\r\nif ( $.ajaxPrefilter ) {\r\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\r\n\t\tvar port = settings.port;\r\n\t\tif ( settings.mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[port] ) {\r\n\t\t\t\tpendingRequests[port].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[port] = xhr;\r\n\t\t}\r\n\t});\r\n} else {\r\n\t// Proxy ajax\r\n\tajax = $.ajax;\r\n\t$.ajax = function( settings ) {\r\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\r\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\r\n\t\tif ( mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[port] ) {\r\n\t\t\t\tpendingRequests[port].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\r\n\t\t\treturn pendingRequests[port];\r\n\t\t}\r\n\t\treturn ajax.apply(this, arguments);\r\n\t};\r\n}\r\n\r\n}));","/**\r\n * Galleria v 1.4.2 2014-08-07\r\n * http://galleria.io\r\n *\r\n * Licensed under the MIT license\r\n * https://raw.github.com/aino/galleria/master/LICENSE\r\n *\r\n */\r\n\r\n(function( $, window, Galleria, undef ) {\r\n\r\n/*global jQuery, navigator, Image, module, define */\r\n\r\n// some references\r\nvar doc = window.document,\r\n $doc = $( doc ),\r\n $win = $( window ),\r\n\r\n// native prototypes\r\n protoArray = Array.prototype,\r\n\r\n// internal constants\r\n VERSION = 1.41,\r\n DEBUG = true,\r\n TIMEOUT = 30000,\r\n DUMMY = false,\r\n NAV = navigator.userAgent.toLowerCase(),\r\n HASH = window.location.hash.replace(/#\\//, ''),\r\n PROT = window.location.protocol,\r\n M = Math,\r\n F = function(){},\r\n FALSE = function() { return false; },\r\n IE = (function() {\r\n\r\n var v = 3,\r\n div = doc.createElement( 'div' ),\r\n all = div.getElementsByTagName( 'i' );\r\n\r\n do {\r\n div.innerHTML = '';\r\n } while ( all[0] );\r\n\r\n return v > 4 ? v : doc.documentMode || undef;\r\n\r\n }() ),\r\n DOM = function() {\r\n return {\r\n html: doc.documentElement,\r\n body: doc.body,\r\n head: doc.getElementsByTagName('head')[0],\r\n title: doc.title\r\n };\r\n },\r\n IFRAME = window.parent !== window.self,\r\n\r\n // list of Galleria events\r\n _eventlist = 'data ready thumbnail loadstart loadfinish image play pause progress ' +\r\n 'fullscreen_enter fullscreen_exit idle_enter idle_exit rescale ' +\r\n 'lightbox_open lightbox_close lightbox_image',\r\n\r\n _events = (function() {\r\n\r\n var evs = [];\r\n\r\n $.each( _eventlist.split(' '), function( i, ev ) {\r\n evs.push( ev );\r\n\r\n // legacy events\r\n if ( /_/.test( ev ) ) {\r\n evs.push( ev.replace( /_/g, '' ) );\r\n }\r\n });\r\n\r\n return evs;\r\n\r\n }()),\r\n\r\n // legacy options\r\n // allows the old my_setting syntax and converts it to camel case\r\n\r\n _legacyOptions = function( options ) {\r\n\r\n var n;\r\n\r\n if ( typeof options !== 'object' ) {\r\n\r\n // return whatever it was...\r\n return options;\r\n }\r\n\r\n $.each( options, function( key, value ) {\r\n if ( /^[a-z]+_/.test( key ) ) {\r\n n = '';\r\n $.each( key.split('_'), function( i, k ) {\r\n n += i > 0 ? k.substr( 0, 1 ).toUpperCase() + k.substr( 1 ) : k;\r\n });\r\n options[ n ] = value;\r\n delete options[ key ];\r\n }\r\n });\r\n\r\n return options;\r\n },\r\n\r\n _patchEvent = function( type ) {\r\n\r\n // allow 'image' instead of Galleria.IMAGE\r\n if ( $.inArray( type, _events ) > -1 ) {\r\n return Galleria[ type.toUpperCase() ];\r\n }\r\n\r\n return type;\r\n },\r\n\r\n // video providers\r\n _video = {\r\n youtube: {\r\n reg: /https?:\\/\\/(?:[a-zA_Z]{2,3}.)?(?:youtube\\.com\\/watch\\?)((?:[\\w\\d\\-\\_\\=]+&(?:amp;)?)*v(?:<[A-Z]+>)?=([0-9a-zA-Z\\-\\_]+))/i,\r\n embed: function() {\r\n return 'http://www.youtube.com/embed/' + this.id;\r\n },\r\n getUrl: function() {\r\n return PROT + '//gdata.youtube.com/feeds/api/videos/' + this.id + '?v=2&alt=json-in-script&callback=?';\r\n },\r\n get_thumb: function(data) {\r\n return data.entry.media$group.media$thumbnail[2].url;\r\n },\r\n get_image: function(data) {\r\n if ( data.entry.yt$hd ) {\r\n return PROT + '//img.youtube.com/vi/'+this.id+'/maxresdefault.jpg';\r\n }\r\n return data.entry.media$group.media$thumbnail[3].url;\r\n }\r\n },\r\n vimeo: {\r\n reg: /https?:\\/\\/(?:www\\.)?(vimeo\\.com)\\/(?:hd#)?([0-9]+)/i,\r\n embed: function() {\r\n return 'http://player.vimeo.com/video/' + this.id;\r\n },\r\n getUrl: function() {\r\n return PROT + '//vimeo.com/api/v2/video/' + this.id + '.json?callback=?';\r\n },\r\n get_thumb: function( data ) {\r\n return data[0].thumbnail_medium;\r\n },\r\n get_image: function( data ) {\r\n return data[0].thumbnail_large;\r\n }\r\n },\r\n dailymotion: {\r\n reg: /https?:\\/\\/(?:www\\.)?(dailymotion\\.com)\\/video\\/([^_]+)/,\r\n embed: function() {\r\n return PROT + '//www.dailymotion.com/embed/video/' + this.id;\r\n },\r\n getUrl: function() {\r\n return 'https://api.dailymotion.com/video/' + this.id + '?fields=thumbnail_240_url,thumbnail_720_url&callback=?';\r\n },\r\n get_thumb: function( data ) {\r\n return data.thumbnail_240_url;\r\n },\r\n get_image: function( data ) {\r\n return data.thumbnail_720_url;\r\n }\r\n },\r\n _inst: []\r\n },\r\n Video = function( type, id ) {\r\n\r\n for( var i=0; i<_video._inst.length; i++ ) {\r\n if ( _video._inst[i].id === id && _video._inst[i].type == type ) {\r\n return _video._inst[i];\r\n }\r\n }\r\n\r\n this.type = type;\r\n this.id = id;\r\n this.readys = [];\r\n\r\n _video._inst.push(this);\r\n\r\n var self = this;\r\n\r\n $.extend( this, _video[type] );\r\n\r\n $.getJSON( this.getUrl(), function(data) {\r\n self.data = data;\r\n $.each( self.readys, function( i, fn ) {\r\n fn( self.data );\r\n });\r\n self.readys = [];\r\n });\r\n\r\n this.getMedia = function( type, callback, fail ) {\r\n fail = fail || F;\r\n var self = this;\r\n var success = function( data ) {\r\n callback( self['get_'+type]( data ) );\r\n };\r\n try {\r\n if ( self.data ) {\r\n success( self.data );\r\n } else {\r\n self.readys.push( success );\r\n }\r\n } catch(e) {\r\n fail();\r\n }\r\n };\r\n },\r\n\r\n // utility for testing the video URL and getting the video ID\r\n _videoTest = function( url ) {\r\n var match;\r\n for ( var v in _video ) {\r\n match = url && _video[v].reg && url.match( _video[v].reg );\r\n if( match && match.length ) {\r\n return {\r\n id: match[2],\r\n provider: v\r\n };\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n // native fullscreen handler\r\n _nativeFullscreen = {\r\n\r\n support: (function() {\r\n var html = DOM().html;\r\n return !IFRAME && ( html.requestFullscreen || html.msRequestFullscreen || html.mozRequestFullScreen || html.webkitRequestFullScreen );\r\n }()),\r\n\r\n callback: F,\r\n\r\n enter: function( instance, callback, elem ) {\r\n\r\n this.instance = instance;\r\n\r\n this.callback = callback || F;\r\n\r\n elem = elem || DOM().html;\r\n if ( elem.requestFullscreen ) {\r\n elem.requestFullscreen();\r\n }\r\n else if ( elem.msRequestFullscreen ) {\r\n elem.msRequestFullscreen();\r\n }\r\n else if ( elem.mozRequestFullScreen ) {\r\n elem.mozRequestFullScreen();\r\n }\r\n else if ( elem.webkitRequestFullScreen ) {\r\n elem.webkitRequestFullScreen();\r\n }\r\n },\r\n\r\n exit: function( callback ) {\r\n\r\n this.callback = callback || F;\r\n\r\n if ( doc.exitFullscreen ) {\r\n doc.exitFullscreen();\r\n }\r\n else if ( doc.msExitFullscreen ) {\r\n doc.msExitFullscreen();\r\n }\r\n else if ( doc.mozCancelFullScreen ) {\r\n doc.mozCancelFullScreen();\r\n }\r\n else if ( doc.webkitCancelFullScreen ) {\r\n doc.webkitCancelFullScreen();\r\n }\r\n },\r\n\r\n instance: null,\r\n\r\n listen: function() {\r\n\r\n if ( !this.support ) {\r\n return;\r\n }\r\n\r\n var handler = function() {\r\n\r\n if ( !_nativeFullscreen.instance ) {\r\n return;\r\n }\r\n var fs = _nativeFullscreen.instance._fullscreen;\r\n\r\n if ( doc.fullscreen || doc.mozFullScreen || doc.webkitIsFullScreen || ( doc.msFullscreenElement && doc.msFullscreenElement !== null ) ) {\r\n fs._enter( _nativeFullscreen.callback );\r\n } else {\r\n fs._exit( _nativeFullscreen.callback );\r\n }\r\n };\r\n doc.addEventListener( 'fullscreenchange', handler, false );\r\n doc.addEventListener( 'MSFullscreenChange', handler, false );\r\n doc.addEventListener( 'mozfullscreenchange', handler, false );\r\n doc.addEventListener( 'webkitfullscreenchange', handler, false );\r\n }\r\n },\r\n\r\n // the internal gallery holder\r\n _galleries = [],\r\n\r\n // the internal instance holder\r\n _instances = [],\r\n\r\n // flag for errors\r\n _hasError = false,\r\n\r\n // canvas holder\r\n _canvas = false,\r\n\r\n // instance pool, holds the galleries until themeLoad is triggered\r\n _pool = [],\r\n\r\n // Run galleries from theme trigger\r\n _loadedThemes = [],\r\n _themeLoad = function( theme ) {\r\n\r\n _loadedThemes.push(theme);\r\n\r\n // run the instances we have in the pool\r\n // and apply the last theme if not specified\r\n $.each( _pool, function( i, instance ) {\r\n if ( instance._options.theme == theme.name || (!instance._initialized && !instance._options.theme) ) {\r\n instance.theme = theme;\r\n instance._init.call( instance );\r\n }\r\n });\r\n },\r\n\r\n // the Utils singleton\r\n Utils = (function() {\r\n\r\n return {\r\n\r\n // legacy support for clearTimer\r\n clearTimer: function( id ) {\r\n $.each( Galleria.get(), function() {\r\n this.clearTimer( id );\r\n });\r\n },\r\n\r\n // legacy support for addTimer\r\n addTimer: function( id ) {\r\n $.each( Galleria.get(), function() {\r\n this.addTimer( id );\r\n });\r\n },\r\n\r\n array : function( obj ) {\r\n return protoArray.slice.call(obj, 0);\r\n },\r\n\r\n create : function( className, nodeName ) {\r\n nodeName = nodeName || 'div';\r\n var elem = doc.createElement( nodeName );\r\n elem.className = className;\r\n return elem;\r\n },\r\n\r\n removeFromArray : function( arr, elem ) {\r\n $.each(arr, function(i, el) {\r\n if ( el == elem ) {\r\n arr.splice(i, 1);\r\n return false;\r\n }\r\n });\r\n return arr;\r\n },\r\n\r\n getScriptPath : function( src ) {\r\n\r\n // the currently executing script is always the last\r\n src = src || $('script:last').attr('src');\r\n var slices = src.split('/');\r\n\r\n if (slices.length == 1) {\r\n return '';\r\n }\r\n\r\n slices.pop();\r\n\r\n return slices.join('/') + '/';\r\n },\r\n\r\n // CSS3 transitions, added in 1.2.4\r\n animate : (function() {\r\n\r\n // detect transition\r\n var transition = (function( style ) {\r\n var props = 'transition WebkitTransition MozTransition OTransition'.split(' '),\r\n i;\r\n\r\n // disable css3 animations in opera until stable\r\n if ( window.opera ) {\r\n return false;\r\n }\r\n\r\n for ( i = 0; props[i]; i++ ) {\r\n if ( typeof style[ props[ i ] ] !== 'undefined' ) {\r\n return props[ i ];\r\n }\r\n }\r\n return false;\r\n }(( doc.body || doc.documentElement).style ));\r\n\r\n // map transitionend event\r\n var endEvent = {\r\n MozTransition: 'transitionend',\r\n OTransition: 'oTransitionEnd',\r\n WebkitTransition: 'webkitTransitionEnd',\r\n transition: 'transitionend'\r\n }[ transition ];\r\n\r\n // map bezier easing conversions\r\n var easings = {\r\n _default: [0.25, 0.1, 0.25, 1],\r\n galleria: [0.645, 0.045, 0.355, 1],\r\n galleriaIn: [0.55, 0.085, 0.68, 0.53],\r\n galleriaOut: [0.25, 0.46, 0.45, 0.94],\r\n ease: [0.25, 0, 0.25, 1],\r\n linear: [0.25, 0.25, 0.75, 0.75],\r\n 'ease-in': [0.42, 0, 1, 1],\r\n 'ease-out': [0, 0, 0.58, 1],\r\n 'ease-in-out': [0.42, 0, 0.58, 1]\r\n };\r\n\r\n // function for setting transition css for all browsers\r\n var setStyle = function( elem, value, suffix ) {\r\n var css = {};\r\n suffix = suffix || 'transition';\r\n $.each( 'webkit moz ms o'.split(' '), function() {\r\n css[ '-' + this + '-' + suffix ] = value;\r\n });\r\n elem.css( css );\r\n };\r\n\r\n // clear styles\r\n var clearStyle = function( elem ) {\r\n setStyle( elem, 'none', 'transition' );\r\n if ( Galleria.WEBKIT && Galleria.TOUCH ) {\r\n setStyle( elem, 'translate3d(0,0,0)', 'transform' );\r\n if ( elem.data('revert') ) {\r\n elem.css( elem.data('revert') );\r\n elem.data('revert', null);\r\n }\r\n }\r\n };\r\n\r\n // various variables\r\n var change, strings, easing, syntax, revert, form, css;\r\n\r\n // the actual animation method\r\n return function( elem, to, options ) {\r\n\r\n // extend defaults\r\n options = $.extend({\r\n duration: 400,\r\n complete: F,\r\n stop: false\r\n }, options);\r\n\r\n // cache jQuery instance\r\n elem = $( elem );\r\n\r\n if ( !options.duration ) {\r\n elem.css( to );\r\n options.complete.call( elem[0] );\r\n return;\r\n }\r\n\r\n // fallback to jQuery's animate if transition is not supported\r\n if ( !transition ) {\r\n elem.animate(to, options);\r\n return;\r\n }\r\n\r\n // stop\r\n if ( options.stop ) {\r\n // clear the animation\r\n elem.off( endEvent );\r\n clearStyle( elem );\r\n }\r\n\r\n // see if there is a change\r\n change = false;\r\n $.each( to, function( key, val ) {\r\n css = elem.css( key );\r\n if ( Utils.parseValue( css ) != Utils.parseValue( val ) ) {\r\n change = true;\r\n }\r\n // also add computed styles for FF\r\n elem.css( key, css );\r\n });\r\n if ( !change ) {\r\n window.setTimeout( function() {\r\n options.complete.call( elem[0] );\r\n }, options.duration );\r\n return;\r\n }\r\n\r\n // the css strings to be applied\r\n strings = [];\r\n\r\n // the easing bezier\r\n easing = options.easing in easings ? easings[ options.easing ] : easings._default;\r\n\r\n // the syntax\r\n syntax = ' ' + options.duration + 'ms' + ' cubic-bezier(' + easing.join(',') + ')';\r\n\r\n // add a tiny timeout so that the browsers catches any css changes before animating\r\n window.setTimeout( (function(elem, endEvent, to, syntax) {\r\n return function() {\r\n\r\n // attach the end event\r\n elem.one(endEvent, (function( elem ) {\r\n return function() {\r\n\r\n // clear the animation\r\n clearStyle(elem);\r\n\r\n // run the complete method\r\n options.complete.call(elem[0]);\r\n };\r\n }( elem )));\r\n\r\n // do the webkit translate3d for better performance on iOS\r\n if( Galleria.WEBKIT && Galleria.TOUCH ) {\r\n\r\n revert = {};\r\n form = [0,0,0];\r\n\r\n $.each( ['left', 'top'], function(i, m) {\r\n if ( m in to ) {\r\n form[ i ] = ( Utils.parseValue( to[ m ] ) - Utils.parseValue(elem.css( m )) ) + 'px';\r\n revert[ m ] = to[ m ];\r\n delete to[ m ];\r\n }\r\n });\r\n\r\n if ( form[0] || form[1]) {\r\n\r\n elem.data('revert', revert);\r\n\r\n strings.push('-webkit-transform' + syntax);\r\n\r\n // 3d animate\r\n setStyle( elem, 'translate3d(' + form.join(',') + ')', 'transform');\r\n }\r\n }\r\n\r\n // push the animation props\r\n $.each(to, function( p, val ) {\r\n strings.push(p + syntax);\r\n });\r\n\r\n // set the animation styles\r\n setStyle( elem, strings.join(',') );\r\n\r\n // animate\r\n elem.css( to );\r\n\r\n };\r\n }(elem, endEvent, to, syntax)), 2);\r\n };\r\n }()),\r\n\r\n removeAlpha : function( elem ) {\r\n if ( elem instanceof jQuery ) {\r\n elem = elem[0];\r\n }\r\n if ( IE < 9 && elem ) {\r\n\r\n var style = elem.style,\r\n currentStyle = elem.currentStyle,\r\n filter = currentStyle && currentStyle.filter || style.filter || \"\";\r\n\r\n if ( /alpha/.test( filter ) ) {\r\n style.filter = filter.replace( /alpha\\([^)]*\\)/i, '' );\r\n }\r\n }\r\n },\r\n\r\n forceStyles : function( elem, styles ) {\r\n elem = $(elem);\r\n if ( elem.attr( 'style' ) ) {\r\n elem.data( 'styles', elem.attr( 'style' ) ).removeAttr( 'style' );\r\n }\r\n elem.css( styles );\r\n },\r\n\r\n revertStyles : function() {\r\n $.each( Utils.array( arguments ), function( i, elem ) {\r\n\r\n elem = $( elem );\r\n elem.removeAttr( 'style' );\r\n\r\n elem.attr('style',''); // \"fixes\" webkit bug\r\n\r\n if ( elem.data( 'styles' ) ) {\r\n elem.attr( 'style', elem.data('styles') ).data( 'styles', null );\r\n }\r\n });\r\n },\r\n\r\n moveOut : function( elem ) {\r\n Utils.forceStyles( elem, {\r\n position: 'absolute',\r\n left: -10000\r\n });\r\n },\r\n\r\n moveIn : function() {\r\n Utils.revertStyles.apply( Utils, Utils.array( arguments ) );\r\n },\r\n\r\n hide : function( elem, speed, callback ) {\r\n\r\n callback = callback || F;\r\n\r\n var $elem = $(elem);\r\n elem = $elem[0];\r\n\r\n // save the value if not exist\r\n if (! $elem.data('opacity') ) {\r\n $elem.data('opacity', $elem.css('opacity') );\r\n }\r\n\r\n // always hide\r\n var style = { opacity: 0 };\r\n\r\n if (speed) {\r\n\r\n var complete = IE < 9 && elem ? function() {\r\n Utils.removeAlpha( elem );\r\n elem.style.visibility = 'hidden';\r\n callback.call( elem );\r\n } : callback;\r\n\r\n Utils.animate( elem, style, {\r\n duration: speed,\r\n complete: complete,\r\n stop: true\r\n });\r\n } else {\r\n if ( IE < 9 && elem ) {\r\n Utils.removeAlpha( elem );\r\n elem.style.visibility = 'hidden';\r\n } else {\r\n $elem.css( style );\r\n }\r\n }\r\n },\r\n\r\n show : function( elem, speed, callback ) {\r\n\r\n callback = callback || F;\r\n\r\n var $elem = $(elem);\r\n elem = $elem[0];\r\n\r\n // bring back saved opacity\r\n var saved = parseFloat( $elem.data('opacity') ) || 1,\r\n style = { opacity: saved };\r\n\r\n // animate or toggle\r\n if (speed) {\r\n\r\n if ( IE < 9 ) {\r\n $elem.css('opacity', 0);\r\n elem.style.visibility = 'visible';\r\n }\r\n\r\n var complete = IE < 9 && elem ? function() {\r\n if ( style.opacity == 1 ) {\r\n Utils.removeAlpha( elem );\r\n }\r\n callback.call( elem );\r\n } : callback;\r\n\r\n Utils.animate( elem, style, {\r\n duration: speed,\r\n complete: complete,\r\n stop: true\r\n });\r\n } else {\r\n if ( IE < 9 && style.opacity == 1 && elem ) {\r\n Utils.removeAlpha( elem );\r\n elem.style.visibility = 'visible';\r\n } else {\r\n $elem.css( style );\r\n }\r\n }\r\n },\r\n\r\n wait : function(options) {\r\n\r\n Galleria._waiters = Galleria._waiters || [];\r\n\r\n options = $.extend({\r\n until : FALSE,\r\n success : F,\r\n error : function() { Galleria.raise('Could not complete wait function.'); },\r\n timeout: 3000\r\n }, options);\r\n\r\n var start = Utils.timestamp(),\r\n elapsed,\r\n now,\r\n tid,\r\n fn = function() {\r\n now = Utils.timestamp();\r\n elapsed = now - start;\r\n Utils.removeFromArray( Galleria._waiters, tid );\r\n if ( options.until( elapsed ) ) {\r\n options.success();\r\n return false;\r\n }\r\n if (typeof options.timeout == 'number' && now >= start + options.timeout) {\r\n options.error();\r\n return false;\r\n }\r\n Galleria._waiters.push( tid = window.setTimeout(fn, 10) );\r\n };\r\n Galleria._waiters.push( tid = window.setTimeout(fn, 10) );\r\n },\r\n\r\n toggleQuality : function( img, force ) {\r\n\r\n if ( ( IE !== 7 && IE !== 8 ) || !img || img.nodeName.toUpperCase() != 'IMG' ) {\r\n return;\r\n }\r\n\r\n if ( typeof force === 'undefined' ) {\r\n force = img.style.msInterpolationMode === 'nearest-neighbor';\r\n }\r\n\r\n img.style.msInterpolationMode = force ? 'bicubic' : 'nearest-neighbor';\r\n },\r\n\r\n insertStyleTag : function( styles, id ) {\r\n\r\n if ( id && $( '#'+id ).length ) {\r\n return;\r\n }\r\n\r\n var style = doc.createElement( 'style' );\r\n if ( id ) {\r\n style.id = id;\r\n }\r\n\r\n DOM().head.appendChild( style );\r\n\r\n if ( style.styleSheet ) { // IE\r\n style.styleSheet.cssText = styles;\r\n } else {\r\n var cssText = doc.createTextNode( styles );\r\n style.appendChild( cssText );\r\n }\r\n },\r\n\r\n // a loadscript method that works for local scripts\r\n loadScript: function( url, callback ) {\r\n\r\n var done = false,\r\n script = $('