{"version":3,"sources":["jquery.validate.js","strlen.js","array_diff.js","strtotime.js","is_numeric.js","php-date-formatter.js","jsvalidation.js","helpers.js","timezones.js","validations.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":"jsvalidation.js","sourcesContent":["/*!\n * jQuery Validation Plugin v1.14.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2015 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend($.fn, {\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t});\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\t\t\t\t// remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param });\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\treturn !!$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t});\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox']\", delegate)\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on(\"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\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\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tresult = true;\n\n\t\t\tthis.lastElement = checkElement;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\tresult = this.check( checkElement ) !== false;\n\t\t\t\tif ( result ) {\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add aria-invalid status for screen readers\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\n\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[ name ],\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar i, elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements.removeClass( this.settings.errorClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ this.name ] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar val,\n\t\t\t\t$element = $( element ),\n\t\t\t\ttype = element.type;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter(\":checked\").val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\n\t\t\t}\n\n\t\t\tval = $element.val();\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[ method ],\n\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t});\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\t\t\tif ( error.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\t\t\t\t// create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\]|\\$)/g, \"\\\\$1\");\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName( element ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// aria-describedby should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t},\n\n\t\t// cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t});\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\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 );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\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 );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/creditcard-method/\n\t\t// based on http://en.wikipedia.org/wiki/Luhn_algorithm\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false,\n\t\t\t\tn, cDigit;\n\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\n\n\t\t\t// Basing min and max length on\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\n\t\t\t\tcDigit = value.charAt( n );\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn ( nCheck % 10 ) === 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.off( \".validate-equalTo\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue( element ),\n\t\t\t\tvalidator, data;\n\n\t\t\tif (!this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n});\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = xhr;\n\t\t}\n\t});\n} else {\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\treturn pendingRequests[port];\n\t\t}\n\t\treturn ajax.apply(this, arguments);\n\t};\n}\n\n}));","function strlen (string) {\n // discuss at: http://phpjs.org/functions/strlen/\n // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: Sakimori\n // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // input by: Kirk Strobeck\n // bugfixed by: Onno Marsman\n // revised by: Brett Zamir (http://brett-zamir.me)\n // note: May look like overkill, but in order to be truly faithful to handling all Unicode\n // note: characters and to this function in PHP which does not count the number of bytes\n // note: but counts the number of characters, something like this is really necessary.\n // example 1: strlen('Kevin van Zonneveld');\n // returns 1: 19\n // example 2: ini_set('unicode.semantics', 'on');\n // example 2: strlen('A\\ud87e\\udc04Z');\n // returns 2: 3\n\n var str = string + ''\n var i = 0,\n chr = '',\n lgth = 0\n\n if (!this.php_js || !this.php_js.ini || !this.php_js.ini['unicode.semantics'] || this.php_js.ini[\n 'unicode.semantics'].local_value.toLowerCase() !== 'on') {\n return string.length\n }\n\n var getWholeChar = function (str, i) {\n var code = str.charCodeAt(i)\n var next = '',\n prev = ''\n if (0xD800 <= code && code <= 0xDBFF) {\n // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)\n if (str.length <= (i + 1)) {\n throw 'High surrogate without following low surrogate'\n }\n next = str.charCodeAt(i + 1)\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate'\n }\n return str.charAt(i) + str.charAt(i + 1)\n } else if (0xDC00 <= code && code <= 0xDFFF) {\n // Low surrogate\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate'\n }\n prev = str.charCodeAt(i - 1)\n if (0xD800 > prev || prev > 0xDBFF) {\n // (could change last hex to 0xDB7F to treat high private surrogates as single characters)\n throw 'Low surrogate without preceding high surrogate'\n }\n // We can pass over low surrogates now as the second component in a pair which we have already processed\n return false\n }\n return str.charAt(i)\n }\n\n for (i = 0, lgth = 0; i < str.length; i++) {\n if ((chr = getWholeChar(str, i)) === false) {\n continue\n } // Adapt this line at the top of any loop, passing in the whole string and the current iteration and returning a variable to represent the individual character; purpose is to treat the first part of a surrogate pair as the whole character and then ignore the second part\n lgth++\n }\n return lgth\n}\n","function array_diff (arr1) {\n // discuss at: http://phpjs.org/functions/array_diff/\n // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: Sanjoy Roy\n // revised by: Brett Zamir (http://brett-zamir.me)\n // example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld']);\n // returns 1: {0:'Kevin'}\n\n var retArr = {},\n argl = arguments.length,\n k1 = '',\n i = 1,\n k = '',\n arr = {}\n\n arr1keys: for (k1 in arr1) {\n for (i = 1; i < argl; i++) {\n arr = arguments[i]\n for (k in arr) {\n if (arr[k] === arr1[k1]) {\n // If it reaches here, it was found in at least one array, so try next value\n continue arr1keys\n }\n }\n retArr[k1] = arr1[k1]\n }\n }\n\n return retArr\n}\n","function strtotime (text, now) {\n // discuss at: http://phpjs.org/functions/strtotime/\n // version: 1109.2016\n // original by: Caio Ariede (http://caioariede.com)\n // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: Caio Ariede (http://caioariede.com)\n // improved by: A. Matías Quezada (http://amatiasq.com)\n // improved by: preuter\n // improved by: Brett Zamir (http://brett-zamir.me)\n // improved by: Mirko Faber\n // input by: David\n // bugfixed by: Wagner B. Soares\n // bugfixed by: Artur Tchernychev\n // bugfixed by: Stephan Bösch-Plepelits (http://github.com/plepe)\n // note: Examples all have a fixed timestamp to prevent tests to fail because of variable time(zones)\n // example 1: strtotime('+1 day', 1129633200);\n // returns 1: 1129719600\n // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200);\n // returns 2: 1130425202\n // example 3: strtotime('last month', 1129633200);\n // returns 3: 1127041200\n // example 4: strtotime('2009-05-04 08:30:00 GMT');\n // returns 4: 1241425800\n // example 5: strtotime('2009-05-04 08:30:00+00');\n // returns 5: 1241425800\n // example 6: strtotime('2009-05-04 08:30:00+02:00');\n // returns 6: 1241418600\n // example 7: strtotime('2009-05-04T08:30:00Z');\n // returns 7: 1241425800\n\n var parsed, match, today, year, date, days, ranges, len, times, regex, i, fail = false\n\n if (!text) {\n return fail\n }\n\n // Unecessary spaces\n text = text.replace(/^\\s+|\\s+$/g, '')\n .replace(/\\s{2,}/g, ' ')\n .replace(/[\\t\\r\\n]/g, '')\n .toLowerCase()\n\n // in contrast to php, js Date.parse function interprets:\n // dates given as yyyy-mm-dd as in timezone: UTC,\n // dates with \".\" or \"-\" as MDY instead of DMY\n // dates with two-digit years differently\n // etc...etc...\n // ...therefore we manually parse lots of common date formats\n match = text.match(\n /^(\\d{1,4})([\\-\\.\\/\\:])(\\d{1,2})([\\-\\.\\/\\:])(\\d{1,4})(?:\\s(\\d{1,2}):(\\d{2})?:?(\\d{2})?)?(?:\\s([A-Z]+)?)?$/)\n\n if (match && match[2] === match[4]) {\n if (match[1] > 1901) {\n switch (match[2]) {\n case '-':\n {\n // YYYY-M-D\n if (match[3] > 12 || match[5] > 31) {\n return fail\n }\n\n return new Date(match[1], parseInt(match[3], 10) - 1, match[5],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n case '.':\n {\n // YYYY.M.D is not parsed by strtotime()\n return fail\n }\n case '/':\n {\n // YYYY/M/D\n if (match[3] > 12 || match[5] > 31) {\n return fail\n }\n\n return new Date(match[1], parseInt(match[3], 10) - 1, match[5],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n }\n } else if (match[5] > 1901) {\n switch (match[2]) {\n case '-':\n {\n // D-M-YYYY\n if (match[3] > 12 || match[1] > 31) {\n return fail\n }\n\n return new Date(match[5], parseInt(match[3], 10) - 1, match[1],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n case '.':\n {\n // D.M.YYYY\n if (match[3] > 12 || match[1] > 31) {\n return fail\n }\n\n return new Date(match[5], parseInt(match[3], 10) - 1, match[1],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n case '/':\n {\n // M/D/YYYY\n if (match[1] > 12 || match[3] > 31) {\n return fail\n }\n\n return new Date(match[5], parseInt(match[1], 10) - 1, match[3],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n }\n } else {\n switch (match[2]) {\n case '-':\n {\n // YY-M-D\n if (match[3] > 12 || match[5] > 31 || (match[1] < 70 && match[1] > 38)) {\n return fail\n }\n\n year = match[1] >= 0 && match[1] <= 38 ? +match[1] + 2000 : match[1]\n return new Date(year, parseInt(match[3], 10) - 1, match[5],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n case '.':\n {\n // D.M.YY or H.MM.SS\n if (match[5] >= 70) {\n // D.M.YY\n if (match[3] > 12 || match[1] > 31) {\n return fail\n }\n\n return new Date(match[5], parseInt(match[3], 10) - 1, match[1],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n if (match[5] < 60 && !match[6]) {\n // H.MM.SS\n if (match[1] > 23 || match[3] > 59) {\n return fail\n }\n\n today = new Date()\n return new Date(today.getFullYear(), today.getMonth(), today.getDate(),\n match[1] || 0, match[3] || 0, match[5] || 0, match[9] || 0) / 1000\n }\n\n // invalid format, cannot be parsed\n return fail\n }\n case '/':\n {\n // M/D/YY\n if (match[1] > 12 || match[3] > 31 || (match[5] < 70 && match[5] > 38)) {\n return fail\n }\n\n year = match[5] >= 0 && match[5] <= 38 ? +match[5] + 2000 : match[5]\n return new Date(year, parseInt(match[1], 10) - 1, match[3],\n match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000\n }\n case ':':\n {\n // HH:MM:SS\n if (match[1] > 23 || match[3] > 59 || match[5] > 59) {\n return fail\n }\n\n today = new Date()\n return new Date(today.getFullYear(), today.getMonth(), today.getDate(),\n match[1] || 0, match[3] || 0, match[5] || 0) / 1000\n }\n }\n }\n }\n\n // other formats and \"now\" should be parsed by Date.parse()\n if (text === 'now') {\n return now === null || isNaN(now) ? new Date()\n .getTime() / 1000 | 0 : now | 0\n }\n if (!isNaN(parsed = Date.parse(text))) {\n return parsed / 1000 | 0\n }\n // Browsers != Chrome have problems parsing ISO 8601 date strings, as they do\n // not accept lower case characters, space, or shortened time zones.\n // Therefore, fix these problems and try again.\n // Examples:\n // 2015-04-15 20:33:59+02\n // 2015-04-15 20:33:59z\n // 2015-04-15t20:33:59+02:00\n if (match = text.match(\n /^([0-9]{4}-[0-9]{2}-[0-9]{2})[ t]([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)([\\+-][0-9]{2}(:[0-9]{2})?|z)/)) {\n // fix time zone information\n if (match[4] == 'z') {\n match[4] = 'Z'\n } else if (match[4].match(/^([\\+-][0-9]{2})$/)) {\n match[4] = match[4] + ':00'\n }\n\n if (!isNaN(parsed = Date.parse(match[1] + 'T' + match[2] + match[4]))) {\n return parsed / 1000 | 0\n }\n }\n\n date = now ? new Date(now * 1000) : new Date()\n days = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n }\n ranges = {\n 'yea': 'FullYear',\n 'mon': 'Month',\n 'day': 'Date',\n 'hou': 'Hours',\n 'min': 'Minutes',\n 'sec': 'Seconds'\n }\n\n function lastNext (type, range, modifier) {\n var diff, day = days[range]\n\n if (typeof day !== 'undefined') {\n diff = day - date.getDay()\n\n if (diff === 0) {\n diff = 7 * modifier\n } else if (diff > 0 && type === 'last') {\n diff -= 7\n } else if (diff < 0 && type === 'next') {\n diff += 7\n }\n\n date.setDate(date.getDate() + diff)\n }\n }\n\n function process (val) {\n var splt = val.split(' '), // Todo: Reconcile this with regex using \\s, taking into account browser issues with split and regexes\n type = splt[0],\n range = splt[1].substring(0, 3),\n typeIsNumber = /\\d+/.test(type),\n ago = splt[2] === 'ago',\n num = (type === 'last' ? -1 : 1) * (ago ? -1 : 1)\n\n if (typeIsNumber) {\n num *= parseInt(type, 10)\n }\n\n if (ranges.hasOwnProperty(range) && !splt[1].match(/^mon(day|\\.)?$/i)) {\n return date['set' + ranges[range]](date['get' + ranges[range]]() + num)\n }\n\n if (range === 'wee') {\n return date.setDate(date.getDate() + (num * 7))\n }\n\n if (type === 'next' || type === 'last') {\n lastNext(type, range, num)\n } else if (!typeIsNumber) {\n return false\n }\n\n return true\n }\n\n times = '(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec' +\n '|sunday|sun\\\\.?|monday|mon\\\\.?|tuesday|tue\\\\.?|wednesday|wed\\\\.?' +\n '|thursday|thu\\\\.?|friday|fri\\\\.?|saturday|sat\\\\.?)'\n regex = '([+-]?\\\\d+\\\\s' + times + '|' + '(last|next)\\\\s' + times + ')(\\\\sago)?'\n\n match = text.match(new RegExp(regex, 'gi'))\n if (!match) {\n return fail\n }\n\n for (i = 0, len = match.length; i < len; i++) {\n if (!process(match[i])) {\n return fail\n }\n }\n\n // ECMAScript 5 only\n // if (!match.every(process))\n // return false;\n\n return (date.getTime() / 1000)\n}\n","function is_numeric (mixed_var) {\n // discuss at: http://phpjs.org/functions/is_numeric/\n // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: David\n // improved by: taith\n // bugfixed by: Tim de Koning\n // bugfixed by: WebDevHobo (http://webdevhobo.blogspot.com/)\n // bugfixed by: Brett Zamir (http://brett-zamir.me)\n // bugfixed by: Denis Chenu (http://shnoulle.net)\n // example 1: is_numeric(186.31);\n // returns 1: true\n // example 2: is_numeric('Kevin van Zonneveld');\n // returns 2: false\n // example 3: is_numeric(' +186.31e2');\n // returns 3: true\n // example 4: is_numeric('');\n // returns 4: false\n // example 5: is_numeric([]);\n // returns 5: false\n // example 6: is_numeric('1 ');\n // returns 6: false\n\n var whitespace =\n ' \\n\\r\\t\\f\\x0b\\xa0\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u2028\\u2029\\u3000'\n return (typeof mixed_var === 'number' || (typeof mixed_var === 'string' && whitespace.indexOf(mixed_var.slice(-1)) ===\n -1)) && mixed_var !== '' && !isNaN(mixed_var)\n}\n","/*!\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2017\n * @version 1.3.4\n *\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\n * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery.\n * \n * @see http://php.net/manual/en/function.date.php\n *\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */\nvar DateFormatter;\n(function () {\n \"use strict\";\n\n var _compare, _lpad, _extend, _indexOf, defaultSettings, DAY, HOUR;\n DAY = 1000 * 60 * 60 * 24;\n HOUR = 3600;\n\n _compare = function (str1, str2) {\n return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\n };\n _lpad = function (value, length, chr) {\n var val = value.toString();\n chr = chr || '0';\n return val.length < length ? _lpad(chr + val, length) : val;\n };\n _extend = function (out) {\n var i, obj;\n out = out || {};\n for (i = 1; i < arguments.length; i++) {\n obj = arguments[i];\n if (!obj) {\n continue;\n }\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (typeof obj[key] === 'object') {\n _extend(out[key], obj[key]);\n } else {\n out[key] = obj[key];\n }\n }\n }\n }\n return out;\n };\n _indexOf = function (val, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i].toLowerCase() === val.toLowerCase()) {\n return i;\n }\n }\n return -1;\n };\n defaultSettings = {\n dateSettings: {\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December'\n ],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n meridiem: ['AM', 'PM'],\n ordinal: function (number) {\n var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\n return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\n }\n },\n separators: /[ \\-+\\/\\.T:@]/g,\n validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\n intParts: /[djwNzmnyYhHgGis]/g,\n tzParts: /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n tzClip: /[^-+\\dA-Z]/g\n };\n\n DateFormatter = function (options) {\n var self = this, config = _extend(defaultSettings, options);\n self.dateSettings = config.dateSettings;\n self.separators = config.separators;\n self.validParts = config.validParts;\n self.intParts = config.intParts;\n self.tzParts = config.tzParts;\n self.tzClip = config.tzClip;\n };\n\n DateFormatter.prototype = {\n constructor: DateFormatter,\n getMonth: function (val) {\n var self = this, i;\n i = _indexOf(val, self.dateSettings.monthsShort) + 1;\n if (i === 0) {\n i = _indexOf(val, self.dateSettings.months) + 1;\n }\n return i;\n },\n parseDate: function (vDate, vFormat) {\n var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\n vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\n out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\n if (!vDate) {\n return null;\n }\n if (vDate instanceof Date) {\n return vDate;\n }\n if (vFormat === 'U') {\n i = parseInt(vDate);\n return i ? new Date(i * 1000) : vDate;\n }\n switch (typeof vDate) {\n case 'number':\n return new Date(vDate);\n case 'string':\n break;\n default:\n return null;\n }\n vFormatParts = vFormat.match(self.validParts);\n if (!vFormatParts || vFormatParts.length === 0) {\n throw new Error(\"Invalid date format definition.\");\n }\n vDateParts = vDate.replace(self.separators, '\\0').split('\\0');\n for (i = 0; i < vDateParts.length; i++) {\n vDatePart = vDateParts[i];\n iDatePart = parseInt(vDatePart);\n switch (vFormatParts[i]) {\n case 'y':\n case 'Y':\n if (iDatePart) {\n len = vDatePart.length;\n out.year = len === 2 ? parseInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'm':\n case 'n':\n case 'M':\n case 'F':\n if (isNaN(iDatePart)) {\n vMonth = self.getMonth(vDatePart);\n if (vMonth > 0) {\n out.month = vMonth;\n } else {\n return null;\n }\n } else {\n if (iDatePart >= 1 && iDatePart <= 12) {\n out.month = iDatePart;\n } else {\n return null;\n }\n }\n vDateFlag = true;\n break;\n case 'd':\n case 'j':\n if (iDatePart >= 1 && iDatePart <= 31) {\n out.day = iDatePart;\n } else {\n return null;\n }\n vDateFlag = true;\n break;\n case 'g':\n case 'h':\n vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\n (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;\n mer = vDateParts[vMeriIndex];\n if (vMeriIndex !== -1) {\n vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :\n (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);\n if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset !== -1) {\n out.hour = iDatePart % 12 === 0 ? vMeriOffset : iDatePart + vMeriOffset;\n } else {\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n }\n }\n } else {\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n }\n vTimeFlag = true;\n break;\n case 'G':\n case 'H':\n if (iDatePart >= 0 && iDatePart <= 23) {\n out.hour = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 'i':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.min = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n case 's':\n if (iDatePart >= 0 && iDatePart <= 59) {\n out.sec = iDatePart;\n } else {\n return null;\n }\n vTimeFlag = true;\n break;\n }\n }\n if (vDateFlag === true && out.year && out.month && out.day) {\n out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);\n } else {\n if (vTimeFlag !== true) {\n return null;\n }\n out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\n }\n return out.date;\n },\n guessDate: function (vDateStr, vFormat) {\n if (typeof vDateStr !== 'string') {\n return vDateStr;\n }\n var self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\n vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\n\n if (!vPattern.test(vFormatParts[0])) {\n return vDateStr;\n }\n\n for (i = 0; i < vParts.length; i++) {\n vDigit = 2;\n iPart = vParts[i];\n iSec = parseInt(iPart.substr(0, 2));\n if (isNaN(iSec)) {\n return null;\n }\n switch (i) {\n case 0:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setMonth(iSec - 1);\n } else {\n vDate.setDate(iSec);\n }\n break;\n case 1:\n if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n vDate.setDate(iSec);\n } else {\n vDate.setMonth(iSec - 1);\n }\n break;\n case 2:\n vYear = vDate.getFullYear();\n len = iPart.length;\n vDigit = len < 4 ? len : 4;\n vYear = parseInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\n if (!vYear) {\n return null;\n }\n vDate.setFullYear(vYear);\n break;\n case 3:\n vDate.setHours(iSec);\n break;\n case 4:\n vDate.setMinutes(iSec);\n break;\n case 5:\n vDate.setSeconds(iSec);\n break;\n }\n n = iPart.substr(vDigit);\n if (n.length > 0) {\n vParts.splice(i + 1, 0, n);\n }\n }\n return vDate;\n },\n parseFormat: function (vChar, vDate) {\n var self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\n return fmt[t] ? fmt[t]() : s;\n };\n fmt = {\n /////////\n // DAY //\n /////////\n /**\n * Day of month with leading 0: `01..31`\n * @return {string}\n */\n d: function () {\n return _lpad(fmt.j(), 2);\n },\n /**\n * Shorthand day name: `Mon...Sun`\n * @return {string}\n */\n D: function () {\n return vSettings.daysShort[fmt.w()];\n },\n /**\n * Day of month: `1..31`\n * @return {number}\n */\n j: function () {\n return vDate.getDate();\n },\n /**\n * Full day name: `Monday...Sunday`\n * @return {number}\n */\n l: function () {\n return vSettings.days[fmt.w()];\n },\n /**\n * ISO-8601 day of week: `1[Mon]..7[Sun]`\n * @return {number}\n */\n N: function () {\n return fmt.w() || 7;\n },\n /**\n * Day of week: `0[Sun]..6[Sat]`\n * @return {number}\n */\n w: function () {\n return vDate.getDay();\n },\n /**\n * Day of year: `0..365`\n * @return {number}\n */\n z: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\n return Math.round((a - b) / DAY);\n },\n\n //////////\n // WEEK //\n //////////\n /**\n * ISO-8601 week number\n * @return {number}\n */\n W: function () {\n var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\n return _lpad(1 + Math.round((a - b) / DAY / 7), 2);\n },\n\n ///////////\n // MONTH //\n ///////////\n /**\n * Full month name: `January...December`\n * @return {string}\n */\n F: function () {\n return vSettings.months[vDate.getMonth()];\n },\n /**\n * Month w/leading 0: `01..12`\n * @return {string}\n */\n m: function () {\n return _lpad(fmt.n(), 2);\n },\n /**\n * Shorthand month name; `Jan...Dec`\n * @return {string}\n */\n M: function () {\n return vSettings.monthsShort[vDate.getMonth()];\n },\n /**\n * Month: `1...12`\n * @return {number}\n */\n n: function () {\n return vDate.getMonth() + 1;\n },\n /**\n * Days in month: `28...31`\n * @return {number}\n */\n t: function () {\n return (new Date(fmt.Y(), fmt.n(), 0)).getDate();\n },\n\n //////////\n // YEAR //\n //////////\n /**\n * Is leap year? `0 or 1`\n * @return {number}\n */\n L: function () {\n var Y = fmt.Y();\n return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\n },\n /**\n * ISO-8601 year\n * @return {number}\n */\n o: function () {\n var n = fmt.n(), W = fmt.W(), Y = fmt.Y();\n return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\n },\n /**\n * Full year: `e.g. 1980...2010`\n * @return {number}\n */\n Y: function () {\n return vDate.getFullYear();\n },\n /**\n * Last two digits of year: `00...99`\n * @return {string}\n */\n y: function () {\n return fmt.Y().toString().slice(-2);\n },\n\n //////////\n // TIME //\n //////////\n /**\n * Meridian lower: `am or pm`\n * @return {string}\n */\n a: function () {\n return fmt.A().toLowerCase();\n },\n /**\n * Meridian upper: `AM or PM`\n * @return {string}\n */\n A: function () {\n var n = fmt.G() < 12 ? 0 : 1;\n return vSettings.meridiem[n];\n },\n /**\n * Swatch Internet time: `000..999`\n * @return {string}\n */\n B: function () {\n var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\n return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);\n },\n /**\n * 12-Hours: `1..12`\n * @return {number}\n */\n g: function () {\n return fmt.G() % 12 || 12;\n },\n /**\n * 24-Hours: `0..23`\n * @return {number}\n */\n G: function () {\n return vDate.getHours();\n },\n /**\n * 12-Hours with leading 0: `01..12`\n * @return {string}\n */\n h: function () {\n return _lpad(fmt.g(), 2);\n },\n /**\n * 24-Hours w/leading 0: `00..23`\n * @return {string}\n */\n H: function () {\n return _lpad(fmt.G(), 2);\n },\n /**\n * Minutes w/leading 0: `00..59`\n * @return {string}\n */\n i: function () {\n return _lpad(vDate.getMinutes(), 2);\n },\n /**\n * Seconds w/leading 0: `00..59`\n * @return {string}\n */\n s: function () {\n return _lpad(vDate.getSeconds(), 2);\n },\n /**\n * Microseconds: `000000-999000`\n * @return {string}\n */\n u: function () {\n return _lpad(vDate.getMilliseconds() * 1000, 6);\n },\n\n //////////////\n // TIMEZONE //\n //////////////\n /**\n * Timezone identifier: `e.g. Atlantic/Azores, ...`\n * @return {string}\n */\n e: function () {\n var str = /\\((.*)\\)/.exec(String(vDate))[1];\n return str || 'Coordinated Universal Time';\n },\n /**\n * DST observed? `0 or 1`\n * @return {number}\n */\n I: function () {\n var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\n b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\n return ((a - c) !== (b - d)) ? 1 : 0;\n },\n /**\n * Difference to GMT in hour format: `e.g. +0200`\n * @return {string}\n */\n O: function () {\n var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\n return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);\n },\n /**\n * Difference to GMT with colon: `e.g. +02:00`\n * @return {string}\n */\n P: function () {\n var O = fmt.O();\n return (O.substr(0, 3) + ':' + O.substr(3, 2));\n },\n /**\n * Timezone abbreviation: `e.g. EST, MDT, ...`\n * @return {string}\n */\n T: function () {\n var str = (String(vDate).match(self.tzParts) || [\"\"]).pop().replace(self.tzClip, \"\");\n return str || 'UTC';\n },\n /**\n * Timezone offset in seconds: `-43200...50400`\n * @return {number}\n */\n Z: function () {\n return -vDate.getTimezoneOffset() * 60;\n },\n\n ////////////////////\n // FULL DATE TIME //\n ////////////////////\n /**\n * ISO-8601 date\n * @return {string}\n */\n c: function () {\n return 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\n },\n /**\n * RFC 2822 date\n * @return {string}\n */\n r: function () {\n return 'D, d M Y H:i:s O'.replace(backslash, doFormat);\n },\n /**\n * Seconds since UNIX epoch\n * @return {number}\n */\n U: function () {\n return vDate.getTime() / 1000 || 0;\n }\n };\n return doFormat(vChar, vChar);\n },\n formatDate: function (vDate, vFormat) {\n var self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\n if (typeof vDate === 'string') {\n vDate = self.parseDate(vDate, vFormat);\n if (!vDate) {\n return null;\n }\n }\n if (vDate instanceof Date) {\n len = vFormat.length;\n for (i = 0; i < len; i++) {\n vChar = vFormat.charAt(i);\n if (vChar === 'S' || vChar === BACKSLASH) {\n continue;\n }\n if (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\n vDateStr += vChar;\n continue;\n }\n str = self.parseFormat(vChar, vDate);\n if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\n n = parseInt(str) || 0;\n str += self.dateSettings.ordinal(n);\n }\n vDateStr += str;\n }\n return vDateStr;\n }\n return '';\n }\n };\n})();","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\nvar laravelValidation;\nlaravelValidation = {\n\n implicitRules: ['Required','Confirmed'],\n\n /**\n * Initialize laravel validations.\n */\n init: function () {\n\n // Disable class rules and attribute rules\n $.validator.classRuleSettings = {};\n $.validator.attributeRules = function () {\n this.rules = {}\n };\n\n $.validator.dataRules = this.arrayRules;\n $.validator.prototype.arrayRulesCache = {};\n // Register validations methods\n this.setupValidations();\n },\n\n arrayRules: function(element) {\n\n var rules = {},\n validator = $.data( element.form, \"validator\"),\n cache = validator.arrayRulesCache;\n\n // Is not an Array\n if (element.name.indexOf('[') === -1 ) {\n return rules;\n }\n\n if (! (element.name in cache) ) {\n cache[element.name]={};\n }\n\n $.each(validator.settings.rules, function(name, tmpRules){\n if (name in cache[element.name]) {\n $.extend(rules, cache[element.name][name]);\n } else {\n cache[element.name][name]={};\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(name);\n if (element.name.match(nameRegExp)) {\n var newRules = $.validator.normalizeRule( tmpRules ) || {};\n cache[element.name][name]=newRules;\n $.extend(rules, newRules);\n }\n }\n });\n\n return rules;\n },\n\n setupValidations: function () {\n\n /**\n * Create JQueryValidation check to validate Laravel rules.\n */\n\n $.validator.addMethod(\"laravelValidation\", function (value, element, params) {\n var validator = this;\n var validated = true;\n var previous = this.previousValue( element );\n\n // put Implicit rules in front\n var rules=[];\n $.each(params, function (i, param) {\n if (param[3] || laravelValidation.implicitRules.indexOf(param[0])!== -1) {\n rules.unshift(param);\n } else {\n rules.push(param);\n }\n });\n\n $.each(rules, function (i, param) {\n var implicit = param[3] || laravelValidation.implicitRules.indexOf(param[0])!== -1;\n var rule = param[0];\n var message = param[2];\n\n if ( !implicit && validator.optional( element ) ) {\n validated=\"dependency-mismatch\";\n return false;\n }\n\n if (laravelValidation.methods[rule]!==undefined) {\n validated = laravelValidation.methods[rule].call(validator, value, element, param[1], function(valid) {\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n if ( valid ) {\n var submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n var errors = {};\n errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n });\n } else {\n validated=false;\n }\n\n if (validated !== true) {\n if (!validator.settings.messages[ element.name ] ) {\n validator.settings.messages[ element.name ] = {};\n }\n validator.settings.messages[element.name].laravelValidation= message;\n return false;\n }\n\n });\n return validated;\n\n }, '');\n\n\n /**\n * Create JQueryValidation check to validate Remote Laravel rules.\n */\n $.validator.addMethod(\"laravelValidationRemote\", function (value, element, params) {\n\n var implicit = false,\n check = params[0][1],\n attribute = element.name,\n token = check[1],\n validateAll = check[2];\n\n $.each(params, function (i, parameters) {\n implicit = implicit || parameters[3];\n });\n\n\n if ( !implicit && this.optional( element ) ) {\n return \"dependency-mismatch\";\n }\n\n var previous = this.previousValue( element ),\n validator, data;\n\n if (!this.settings.messages[ element.name ] ) {\n this.settings.messages[ element.name ] = {};\n }\n previous.originalMessage = this.settings.messages[ element.name ].laravelValidationRemote;\n this.settings.messages[ element.name ].laravelValidationRemote = previous.message;\n\n var param = typeof param === \"string\" && { url: param } || param;\n\n if (laravelValidation.helpers.arrayEquals(previous.old, value) || previous.old === value) {\n return previous.valid;\n }\n\n previous.old = value;\n validator = this;\n this.startRequest( element );\n\n data = $(validator.currentForm).serializeArray();\n\n data.push({\n 'name': '_jsvalidation',\n 'value': attribute\n });\n\n data.push({\n 'name': '_jsvalidation_validate_all',\n 'value': validateAll\n });\n\n var formMethod = $(validator.currentForm).attr('method');\n if($(validator.currentForm).find('input[name=\"_method\"]').length) {\n formMethod = $(validator.currentForm).find('input[name=\"_method\"]').val();\n }\n\n $.ajax( $.extend( true, {\n mode: \"abort\",\n port: \"validate\" + element.name,\n dataType: \"json\",\n data: data,\n context: validator.currentForm,\n url: $(validator.currentForm).attr('action'),\n type: formMethod,\n\n beforeSend: function (xhr) {\n if ($(validator.currentForm).attr('method').toLowerCase() !== 'get' && token) {\n return xhr.setRequestHeader('X-XSRF-TOKEN', token);\n }\n }\n }, param )\n ).always(function( response, textStatus ) {\n var errors, message, submitted, valid;\n\n if (textStatus === 'error') {\n valid = false;\n response = laravelValidation.helpers.parseErrorResponse(response);\n } else if (textStatus === 'success') {\n valid = response === true || response === \"true\";\n } else {\n return;\n }\n\n validator.settings.messages[ element.name ].laravelValidationRemote = previous.originalMessage;\n\n if ( valid ) {\n submitted = validator.formSubmitted;\n validator.prepareElement( element );\n validator.formSubmitted = submitted;\n validator.successList.push( element );\n delete validator.invalid[ element.name ];\n validator.showErrors();\n } else {\n errors = {};\n message = response || validator.defaultMessage( element, \"remote\" );\n errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message[0];\n validator.invalid[ element.name ] = true;\n validator.showErrors( errors );\n }\n validator.showErrors(validator.errorMap);\n previous.valid = valid;\n validator.stopRequest( element, valid );\n }\n );\n return \"pending\";\n }, '');\n }\n};\n\n$(function() {\n laravelValidation.init();\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Numeric rules\n */\n numericRules: ['Integer', 'Numeric'],\n\n /**\n * Gets the file information from file input.\n *\n * @param fieldObj\n * @param index\n * @returns {{file: *, extension: string, size: number}}\n */\n fileinfo: function (fieldObj, index) {\n var FileName = fieldObj.value;\n index = typeof index !== 'undefined' ? index : 0;\n if ( fieldObj.files !== null ) {\n if (typeof fieldObj.files[index] !== 'undefined') {\n return {\n file: FileName,\n extension: FileName.substr(FileName.lastIndexOf('.') + 1),\n size: fieldObj.files[index].size / 1024,\n type: fieldObj.files[index].type\n };\n }\n }\n return false;\n },\n\n\n /**\n * Gets the selectors for th specified field names.\n *\n * @param names\n * @returns {string}\n */\n selector: function (names) {\n var selector = [];\n if (!$.isArray(names)) {\n names = [names];\n }\n for (var i = 0; i < names.length; i++) {\n selector.push(\"[name='\" + names[i] + \"']\");\n }\n return selector.join();\n },\n\n\n /**\n * Check if element has numeric rules.\n *\n * @param element\n * @returns {boolean}\n */\n hasNumericRules: function (element) {\n return this.hasRules(element, this.numericRules);\n },\n\n /**\n * Check if element has passed rules.\n *\n * @param element\n * @param rules\n * @returns {boolean}\n */\n hasRules: function (element, rules) {\n\n var found = false;\n if (typeof rules === 'string') {\n rules = [rules];\n }\n\n var validator = $.data(element.form, \"validator\");\n var listRules = [];\n var cache = validator.arrayRulesCache;\n if (element.name in cache) {\n $.each(cache[element.name], function (index, arrayRule) {\n listRules.push(arrayRule);\n });\n }\n if (element.name in validator.settings.rules) {\n listRules.push(validator.settings.rules[element.name]);\n }\n $.each(listRules, function(index,objRules){\n if ('laravelValidation' in objRules) {\n var _rules=objRules.laravelValidation;\n for (var i = 0; i < _rules.length; i++) {\n if ($.inArray(_rules[i][0],rules) !== -1) {\n found = true;\n return false;\n }\n }\n }\n });\n\n return found;\n },\n\n /**\n * Return the string length using PHP function.\n * http://php.net/manual/en/function.strlen.php\n * http://phpjs.org/functions/strlen/\n *\n * @param string\n */\n strlen: function (string) {\n return strlen(string);\n },\n\n /**\n * Get the size of the object depending of his type.\n *\n * @param obj\n * @param element\n * @param value\n * @returns int\n */\n getSize: function getSize(obj, element, value) {\n\n if (this.hasNumericRules(element) && this.is_numeric(value)) {\n return parseFloat(value);\n } else if ($.isArray(value)) {\n return parseFloat(value.length);\n } else if (element.type === 'file') {\n return parseFloat(Math.floor(this.fileinfo(element).size));\n }\n\n return parseFloat(this.strlen(value));\n },\n\n\n /**\n * Return specified rule from element.\n *\n * @param rule\n * @param element\n * @returns object\n */\n getLaravelValidation: function(rule, element) {\n\n var found = undefined;\n $.each($.validator.staticRules(element), function(key, rules) {\n if (key===\"laravelValidation\") {\n $.each(rules, function (i, value) {\n if (value[0]===rule) {\n found=value;\n }\n });\n }\n });\n\n return found;\n },\n\n /**\n * Return he timestamp of value passed using format or default format in element.\n *\n * @param value\n * @param format\n * @returns {boolean|int}\n */\n parseTime: function (value, format) {\n\n var timeValue = false;\n var fmt = new DateFormatter();\n\n if ($.type(format) === 'object') {\n var dateRule=this.getLaravelValidation('DateFormat', format);\n if (dateRule !== undefined) {\n format = dateRule[1][0];\n } else {\n format = null;\n }\n }\n\n if (format == null) {\n timeValue = this.strtotime(value);\n } else {\n timeValue = fmt.parseDate(value, format);\n if (timeValue) {\n timeValue = Math.round((timeValue.getTime() / 1000));\n }\n }\n\n return timeValue;\n },\n\n /**\n * This method allows you to intelligently guess the date by closely matching the specific format.\n *\n * @param value\n * @param format\n * @returns {Date}\n */\n guessDate: function (value, format) {\n var fmt = new DateFormatter();\n return fmt.guessDate(value, format)\n },\n\n /**\n * Returns Unix timestamp based on PHP function strototime.\n * http://php.net/manual/es/function.strtotime.php\n * http://phpjs.org/functions/strtotime/\n *\n * @param text\n * @param now\n * @returns {*}\n */\n strtotime: function (text, now) {\n return strtotime(text, now)\n },\n\n /**\n * Returns if value is numeric.\n * http://php.net/manual/es/var.is_numeric.php\n * http://phpjs.org/functions/is_numeric/\n *\n * @param mixed_var\n * @returns {*}\n */\n is_numeric: function (mixed_var) {\n return is_numeric(mixed_var)\n },\n\n /**\n * Returns Array diff based on PHP function array_diff.\n * http://php.net/manual/es/function.array_diff.php\n * http://phpjs.org/functions/array_diff/\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayDiff: function (arr1, arr2) {\n return array_diff(arr1, arr2);\n },\n\n /**\n * Check whether two arrays are equal to one another.\n *\n * @param arr1\n * @param arr2\n * @returns {*}\n */\n arrayEquals: function (arr1, arr2) {\n if (! $.isArray(arr1) || ! $.isArray(arr2)) {\n return false;\n }\n \n if (arr1.length !== arr2.length) {\n return false;\n }\n \n return $.isEmptyObject(this.arrayDiff(arr1, arr2));\n },\n\n /**\n * Makes element dependant from other.\n *\n * @param validator\n * @param element\n * @param name\n * @returns {*}\n */\n dependentElement: function(validator, element, name) {\n\n var el=validator.findByName(name);\n\n if ( el[0]!==undefined && validator.settings.onfocusout ) {\n var event = 'blur';\n if (el[0].tagName === 'SELECT' ||\n el[0].tagName === 'OPTION' ||\n el[0].type === 'checkbox' ||\n el[0].type === 'radio'\n ) {\n event = 'click';\n }\n\n var ruleName = '.validate-laravelValidation';\n el.off( ruleName )\n .off(event + ruleName + '-' + element.name)\n .on( event + ruleName + '-' + element.name, function() {\n $( element ).valid();\n });\n }\n\n return el[0];\n },\n\n /**\n * Parses error Ajax response and gets the message.\n *\n * @param response\n * @returns {string[]}\n */\n parseErrorResponse: function (response) {\n var newResponse = ['Whoops, looks like something went wrong.'];\n if ('responseText' in response) {\n var errorMsg = response.responseText.match(/(.*)<\\/h1\\s*>/i);\n if ($.isArray(errorMsg)) {\n newResponse = [errorMsg[1]];\n }\n }\n return newResponse;\n },\n\n /**\n * Escape string to use as Regular Expression.\n *\n * @param str\n * @returns string\n */\n escapeRegExp: function (str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n\n /**\n * Generate RegExp from wildcard attributes.\n *\n * @param name\n * @returns {RegExp}\n */\n regexFromWildcard: function(name) {\n var nameParts = name.split(\"[*]\");\n if (nameParts.length === 1) {\n nameParts.push('');\n }\n var regexpParts = nameParts.map(function(currentValue, index) {\n if (index % 2 === 0) {\n currentValue = currentValue + '[';\n } else {\n currentValue = ']' +currentValue;\n }\n\n return laravelValidation.helpers.escapeRegExp(currentValue);\n });\n\n return new RegExp('^'+regexpParts.join('.*')+'$');\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Timezone Helper functions used by validators\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n helpers: {\n\n /**\n * Check if the specified timezone is valid.\n *\n * @param value\n * @returns {boolean}\n */\n isTimezone: function (value) {\n\n var timezones={\n \"africa\": [\n \"abidjan\",\n \"accra\",\n \"addis_ababa\",\n \"algiers\",\n \"asmara\",\n \"bamako\",\n \"bangui\",\n \"banjul\",\n \"bissau\",\n \"blantyre\",\n \"brazzaville\",\n \"bujumbura\",\n \"cairo\",\n \"casablanca\",\n \"ceuta\",\n \"conakry\",\n \"dakar\",\n \"dar_es_salaam\",\n \"djibouti\",\n \"douala\",\n \"el_aaiun\",\n \"freetown\",\n \"gaborone\",\n \"harare\",\n \"johannesburg\",\n \"juba\",\n \"kampala\",\n \"khartoum\",\n \"kigali\",\n \"kinshasa\",\n \"lagos\",\n \"libreville\",\n \"lome\",\n \"luanda\",\n \"lubumbashi\",\n \"lusaka\",\n \"malabo\",\n \"maputo\",\n \"maseru\",\n \"mbabane\",\n \"mogadishu\",\n \"monrovia\",\n \"nairobi\",\n \"ndjamena\",\n \"niamey\",\n \"nouakchott\",\n \"ouagadougou\",\n \"porto-novo\",\n \"sao_tome\",\n \"tripoli\",\n \"tunis\",\n \"windhoek\"\n ],\n \"america\": [\n \"adak\",\n \"anchorage\",\n \"anguilla\",\n \"antigua\",\n \"araguaina\",\n \"argentina\\/buenos_aires\",\n \"argentina\\/catamarca\",\n \"argentina\\/cordoba\",\n \"argentina\\/jujuy\",\n \"argentina\\/la_rioja\",\n \"argentina\\/mendoza\",\n \"argentina\\/rio_gallegos\",\n \"argentina\\/salta\",\n \"argentina\\/san_juan\",\n \"argentina\\/san_luis\",\n \"argentina\\/tucuman\",\n \"argentina\\/ushuaia\",\n \"aruba\",\n \"asuncion\",\n \"atikokan\",\n \"bahia\",\n \"bahia_banderas\",\n \"barbados\",\n \"belem\",\n \"belize\",\n \"blanc-sablon\",\n \"boa_vista\",\n \"bogota\",\n \"boise\",\n \"cambridge_bay\",\n \"campo_grande\",\n \"cancun\",\n \"caracas\",\n \"cayenne\",\n \"cayman\",\n \"chicago\",\n \"chihuahua\",\n \"costa_rica\",\n \"creston\",\n \"cuiaba\",\n \"curacao\",\n \"danmarkshavn\",\n \"dawson\",\n \"dawson_creek\",\n \"denver\",\n \"detroit\",\n \"dominica\",\n \"edmonton\",\n \"eirunepe\",\n \"el_salvador\",\n \"fortaleza\",\n \"glace_bay\",\n \"godthab\",\n \"goose_bay\",\n \"grand_turk\",\n \"grenada\",\n \"guadeloupe\",\n \"guatemala\",\n \"guayaquil\",\n \"guyana\",\n \"halifax\",\n \"havana\",\n \"hermosillo\",\n \"indiana\\/indianapolis\",\n \"indiana\\/knox\",\n \"indiana\\/marengo\",\n \"indiana\\/petersburg\",\n \"indiana\\/tell_city\",\n \"indiana\\/vevay\",\n \"indiana\\/vincennes\",\n \"indiana\\/winamac\",\n \"inuvik\",\n \"iqaluit\",\n \"jamaica\",\n \"juneau\",\n \"kentucky\\/louisville\",\n \"kentucky\\/monticello\",\n \"kralendijk\",\n \"la_paz\",\n \"lima\",\n \"los_angeles\",\n \"lower_princes\",\n \"maceio\",\n \"managua\",\n \"manaus\",\n \"marigot\",\n \"martinique\",\n \"matamoros\",\n \"mazatlan\",\n \"menominee\",\n \"merida\",\n \"metlakatla\",\n \"mexico_city\",\n \"miquelon\",\n \"moncton\",\n \"monterrey\",\n \"montevideo\",\n \"montreal\",\n \"montserrat\",\n \"nassau\",\n \"new_york\",\n \"nipigon\",\n \"nome\",\n \"noronha\",\n \"north_dakota\\/beulah\",\n \"north_dakota\\/center\",\n \"north_dakota\\/new_salem\",\n \"ojinaga\",\n \"panama\",\n \"pangnirtung\",\n \"paramaribo\",\n \"phoenix\",\n \"port-au-prince\",\n \"port_of_spain\",\n \"porto_velho\",\n \"puerto_rico\",\n \"rainy_river\",\n \"rankin_inlet\",\n \"recife\",\n \"regina\",\n \"resolute\",\n \"rio_branco\",\n \"santa_isabel\",\n \"santarem\",\n \"santiago\",\n \"santo_domingo\",\n \"sao_paulo\",\n \"scoresbysund\",\n \"shiprock\",\n \"sitka\",\n \"st_barthelemy\",\n \"st_johns\",\n \"st_kitts\",\n \"st_lucia\",\n \"st_thomas\",\n \"st_vincent\",\n \"swift_current\",\n \"tegucigalpa\",\n \"thule\",\n \"thunder_bay\",\n \"tijuana\",\n \"toronto\",\n \"tortola\",\n \"vancouver\",\n \"whitehorse\",\n \"winnipeg\",\n \"yakutat\",\n \"yellowknife\"\n ],\n \"antarctica\": [\n \"casey\",\n \"davis\",\n \"dumontdurville\",\n \"macquarie\",\n \"mawson\",\n \"mcmurdo\",\n \"palmer\",\n \"rothera\",\n \"south_pole\",\n \"syowa\",\n \"vostok\"\n ],\n \"arctic\": [\n \"longyearbyen\"\n ],\n \"asia\": [\n \"aden\",\n \"almaty\",\n \"amman\",\n \"anadyr\",\n \"aqtau\",\n \"aqtobe\",\n \"ashgabat\",\n \"baghdad\",\n \"bahrain\",\n \"baku\",\n \"bangkok\",\n \"beirut\",\n \"bishkek\",\n \"brunei\",\n \"choibalsan\",\n \"chongqing\",\n \"colombo\",\n \"damascus\",\n \"dhaka\",\n \"dili\",\n \"dubai\",\n \"dushanbe\",\n \"gaza\",\n \"harbin\",\n \"hebron\",\n \"ho_chi_minh\",\n \"hong_kong\",\n \"hovd\",\n \"irkutsk\",\n \"jakarta\",\n \"jayapura\",\n \"jerusalem\",\n \"kabul\",\n \"kamchatka\",\n \"karachi\",\n \"kashgar\",\n \"kathmandu\",\n \"khandyga\",\n \"kolkata\",\n \"krasnoyarsk\",\n \"kuala_lumpur\",\n \"kuching\",\n \"kuwait\",\n \"macau\",\n \"magadan\",\n \"makassar\",\n \"manila\",\n \"muscat\",\n \"nicosia\",\n \"novokuznetsk\",\n \"novosibirsk\",\n \"omsk\",\n \"oral\",\n \"phnom_penh\",\n \"pontianak\",\n \"pyongyang\",\n \"qatar\",\n \"qyzylorda\",\n \"rangoon\",\n \"riyadh\",\n \"sakhalin\",\n \"samarkand\",\n \"seoul\",\n \"shanghai\",\n \"singapore\",\n \"taipei\",\n \"tashkent\",\n \"tbilisi\",\n \"tehran\",\n \"thimphu\",\n \"tokyo\",\n \"ulaanbaatar\",\n \"urumqi\",\n \"ust-nera\",\n \"vientiane\",\n \"vladivostok\",\n \"yakutsk\",\n \"yekaterinburg\",\n \"yerevan\"\n ],\n \"atlantic\": [\n \"azores\",\n \"bermuda\",\n \"canary\",\n \"cape_verde\",\n \"faroe\",\n \"madeira\",\n \"reykjavik\",\n \"south_georgia\",\n \"st_helena\",\n \"stanley\"\n ],\n \"australia\": [\n \"adelaide\",\n \"brisbane\",\n \"broken_hill\",\n \"currie\",\n \"darwin\",\n \"eucla\",\n \"hobart\",\n \"lindeman\",\n \"lord_howe\",\n \"melbourne\",\n \"perth\",\n \"sydney\"\n ],\n \"europe\": [\n \"amsterdam\",\n \"andorra\",\n \"athens\",\n \"belgrade\",\n \"berlin\",\n \"bratislava\",\n \"brussels\",\n \"bucharest\",\n \"budapest\",\n \"busingen\",\n \"chisinau\",\n \"copenhagen\",\n \"dublin\",\n \"gibraltar\",\n \"guernsey\",\n \"helsinki\",\n \"isle_of_man\",\n \"istanbul\",\n \"jersey\",\n \"kaliningrad\",\n \"kiev\",\n \"lisbon\",\n \"ljubljana\",\n \"london\",\n \"luxembourg\",\n \"madrid\",\n \"malta\",\n \"mariehamn\",\n \"minsk\",\n \"monaco\",\n \"moscow\",\n \"oslo\",\n \"paris\",\n \"podgorica\",\n \"prague\",\n \"riga\",\n \"rome\",\n \"samara\",\n \"san_marino\",\n \"sarajevo\",\n \"simferopol\",\n \"skopje\",\n \"sofia\",\n \"stockholm\",\n \"tallinn\",\n \"tirane\",\n \"uzhgorod\",\n \"vaduz\",\n \"vatican\",\n \"vienna\",\n \"vilnius\",\n \"volgograd\",\n \"warsaw\",\n \"zagreb\",\n \"zaporozhye\",\n \"zurich\"\n ],\n \"indian\": [\n \"antananarivo\",\n \"chagos\",\n \"christmas\",\n \"cocos\",\n \"comoro\",\n \"kerguelen\",\n \"mahe\",\n \"maldives\",\n \"mauritius\",\n \"mayotte\",\n \"reunion\"\n ],\n \"pacific\": [\n \"apia\",\n \"auckland\",\n \"chatham\",\n \"chuuk\",\n \"easter\",\n \"efate\",\n \"enderbury\",\n \"fakaofo\",\n \"fiji\",\n \"funafuti\",\n \"galapagos\",\n \"gambier\",\n \"guadalcanal\",\n \"guam\",\n \"honolulu\",\n \"johnston\",\n \"kiritimati\",\n \"kosrae\",\n \"kwajalein\",\n \"majuro\",\n \"marquesas\",\n \"midway\",\n \"nauru\",\n \"niue\",\n \"norfolk\",\n \"noumea\",\n \"pago_pago\",\n \"palau\",\n \"pitcairn\",\n \"pohnpei\",\n \"port_moresby\",\n \"rarotonga\",\n \"saipan\",\n \"tahiti\",\n \"tarawa\",\n \"tongatapu\",\n \"wake\",\n \"wallis\"\n ],\n \"utc\": [\n \"\"\n ]\n };\n\n var tzparts= value.split('/',2);\n var continent=tzparts[0].toLowerCase();\n var city='';\n if (tzparts[1]) {\n city=tzparts[1].toLowerCase();\n }\n\n return (continent in timezones && ( timezones[continent].length===0 || timezones[continent].indexOf(city)!==-1))\n }\n }\n});\n","/*!\n * Laravel Javascript Validation\n *\n * https://github.com/proengsoft/laravel-jsvalidation\n *\n * Methods that implement Laravel Validations\n *\n * Copyright (c) 2017 Proengsoft\n * Released under the MIT license\n */\n\n$.extend(true, laravelValidation, {\n\n methods:{\n\n helpers: laravelValidation.helpers,\n\n jsRemoteTimer:0,\n\n /**\n * \"Validate\" optional attributes.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Sometimes: function() {\n return true;\n },\n\n /**\n * Bail This is the default behaivour os JSValidation.\n * Always returns true, just lets us put sometimes in rules.\n *\n * @return {boolean}\n */\n Bail: function() {\n return true;\n },\n\n /**\n * \"Indicate\" validation should pass if value is null.\n * Always returns true, just lets us put \"nullable\" in rules.\n *\n * @return {boolean}\n */\n Nullable: function() {\n return true;\n },\n\n /**\n * Validate the given attribute is filled if it is present.\n */\n Filled: function(value, element) {\n return $.validator.methods.required.call(this, value, element, true);\n },\n\n\n /**\n * Validate that a required attribute exists.\n */\n Required: function(value, element) {\n return $.validator.methods.required.call(this, value, element);\n },\n\n /**\n * Validate that an attribute exists when any other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWith: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required=required || (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute exists.\n *\n * @return {boolean}\n */\n RequiredWithAll: function(value, element, params) {\n var validator=this,\n required=true;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target!==undefined &&\n $.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when any other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithout: function(value, element, params) {\n var validator=this,\n required=false;\n var currentObject=this;\n\n $.each(params,function(i,param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required ||\n target===undefined||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n );\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when all other attribute does not exists.\n *\n * @return {boolean}\n */\n RequiredWithoutAll: function(value, element, params) {\n var validator=this,\n required=true,\n currentObject=this;\n\n $.each(params,function(i, param) {\n var target=laravelValidation.helpers.dependentElement(\n currentObject, element, param\n );\n required = required && (\n target===undefined ||\n !$.validator.methods.required.call(\n validator,\n currentObject.elementValue(target),\n target,true\n ));\n });\n\n if (required) {\n return $.validator.methods.required.call(this, value, element, true);\n }\n return true;\n },\n\n /**\n * Validate that an attribute exists when another attribute has a given value.\n *\n * @return {boolean}\n */\n RequiredIf: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return $.validator.methods.required.call(\n this, value, element, true\n );\n }\n }\n }\n\n return true;\n },\n\n /**\n * Validate that an attribute exists when another\n * attribute does not have a given value.\n *\n * @return {boolean}\n */\n RequiredUnless: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n var val=String(this.elementValue(target));\n if (typeof val !== 'undefined') {\n var data = params.slice(1);\n if ($.inArray(val, data) !== -1) {\n return true;\n }\n }\n }\n\n return $.validator.methods.required.call(\n this, value, element, true\n );\n\n },\n\n /**\n * Validate that an attribute has a matching confirmation.\n *\n * @return {boolean}\n */\n Confirmed: function(value, element, params) {\n return laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that two attributes match.\n *\n * @return {boolean}\n */\n Same: function(value, element, params) {\n\n var target=laravelValidation.helpers.dependentElement(\n this, element, params[0]\n );\n\n if (target!==undefined) {\n return String(value) === String(this.elementValue(target));\n }\n return false;\n },\n\n /**\n * Validate that the values of an attribute is in another attribute.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n * @constructor\n */\n InArray: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return found;\n },\n\n /**\n * Validate an attribute is unique among other values.\n *\n * @param value\n * @param element\n * @param params\n * @returns {boolean}\n */\n Distinct: function (value, element, params) {\n if (typeof params[0] === 'undefined') {\n return false;\n }\n\n var elements = this.elements();\n var found = false;\n var nameRegExp = laravelValidation.helpers.regexFromWildcard(params[0]);\n\n for ( var i = 0; i < elements.length ; i++ ) {\n var targetName = elements[i].name;\n if (targetName !== element.name && targetName.match(nameRegExp)) {\n var equals = laravelValidation.methods.Same.call(this,value, element, [targetName]);\n found = found || equals;\n }\n }\n\n return !found;\n },\n\n\n /**\n * Validate that an attribute is different from another attribute.\n *\n * @return {boolean}\n */\n Different: function(value, element, params) {\n return ! laravelValidation.methods.Same.call(this,value, element, params);\n },\n\n /**\n * Validate that an attribute was \"accepted\".\n * This validation rule implies the attribute is \"required\".\n *\n * @return {boolean}\n */\n Accepted: function(value) {\n var regex = new RegExp(\"^(?:(yes|on|1|true))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an array.\n *\n * @param value\n * @param element\n */\n Array: function(value, element) {\n if (element.name.indexOf('[') !== -1 && element.name.indexOf(']') !== -1) {\n return true;\n }\n\n return $.isArray(value);\n },\n\n /**\n * Validate that an attribute is a boolean.\n *\n * @return {boolean}\n */\n Boolean: function(value) {\n var regex= new RegExp(\"^(?:(true|false|1|0))$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is an integer.\n *\n * @return {boolean}\n */\n Integer: function(value) {\n var regex= new RegExp(\"^(?:-?\\\\d+)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute is numeric.\n */\n Numeric: function(value, element) {\n return $.validator.methods.number.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a string.\n *\n * @return {boolean}\n */\n String: function(value) {\n return typeof value === 'string';\n },\n\n /**\n * The field under validation must be numeric and must have an exact length of value.\n */\n Digits: function(value, element, params) {\n return (\n $.validator.methods.number.call(this, value, element, true) &&\n value.length === parseInt(params, 10)\n );\n },\n\n /**\n * The field under validation must have a length between the given min and max.\n */\n DigitsBetween: function(value, element, params) {\n return ($.validator.methods.number.call(this, value, element, true)\n && value.length>=parseFloat(params[0]) && value.length<=parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute.\n *\n * @return {boolean}\n */\n Size: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) === parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is between a set of values.\n *\n * @return {boolean}\n */\n Between: function(value, element, params) {\n return ( laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]) &&\n laravelValidation.helpers.getSize(this,element,value) <= parseFloat(params[1]));\n },\n\n /**\n * Validate the size of an attribute is greater than a minimum value.\n *\n * @return {boolean}\n */\n Min: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) >= parseFloat(params[0]);\n },\n\n /**\n * Validate the size of an attribute is less than a maximum value.\n *\n * @return {boolean}\n */\n Max: function(value, element, params) {\n return laravelValidation.helpers.getSize(this, element,value) <= parseFloat(params[0]);\n },\n\n /**\n * Validate an attribute is contained within a list of values.\n *\n * @return {boolean}\n */\n In: function(value, element, params) {\n if ($.isArray(value) && laravelValidation.helpers.hasRules(element, \"Array\")) {\n var diff = laravelValidation.helpers.arrayDiff(value, params);\n return Object.keys(diff).length === 0;\n }\n return params.indexOf(value.toString()) !== -1;\n },\n\n /**\n * Validate an attribute is not contained within a list of values.\n *\n * @return {boolean}\n */\n NotIn: function(value, element, params) {\n return params.indexOf(value.toString()) === -1;\n },\n\n /**\n * Validate that an attribute is a valid IP.\n *\n * @return {boolean}\n */\n Ip: function(value) {\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(value) ||\n /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n\n /**\n * Validate that an attribute is a valid e-mail address.\n */\n Email: function(value, element) {\n return $.validator.methods.email.call(this, value, element, true);\n },\n\n /**\n * Validate that an attribute is a valid URL.\n */\n Url: function(value, element) {\n return $.validator.methods.url.call(this, value, element, true);\n },\n\n /**\n * The field under validation must be a successfully uploaded file.\n *\n * @return {boolean}\n */\n File: function(value, element) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if ('files' in element ) {\n return (element.files.length > 0);\n }\n return false;\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n *\n * @return {boolean}\n */\n Mimes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n return (fileinfo !== false && lowerParams.indexOf(fileinfo.extension.toLowerCase())!==-1);\n },\n\n /**\n * The file under validation must match one of the given MIME types.\n *\n * @return {boolean}\n */\n Mimetypes: function(value, element, params) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n var lowerParams = $.map(params, function(item) {\n return item.toLowerCase();\n });\n\n var fileinfo = laravelValidation.helpers.fileinfo(element);\n\n if (fileinfo === false) {\n return false;\n }\n return (lowerParams.indexOf(fileinfo.type.toLowerCase())!==-1);\n },\n\n /**\n * Validate the MIME type of a file upload attribute is in a set of MIME types.\n */\n Image: function(value, element) {\n return laravelValidation.methods.Mimes.call(this, value, element, [\n 'jpg', 'png', 'gif', 'bmp', 'svg', 'jpeg'\n ]);\n },\n\n /**\n * Validate dimensions of Image.\n *\n * @return {boolean|string}\n */\n Dimensions: function(value, element, params, callback) {\n if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\n return true;\n }\n if (element.files === null || typeof element.files[0] === 'undefined') {\n return false;\n }\n\n var fr = new FileReader;\n fr.onload = function () {\n var img = new Image();\n img.onload = function () {\n var height = parseFloat(img.naturalHeight);\n var width = parseFloat(img.naturalWidth);\n var ratio = width / height;\n var notValid = ((params['width']) && parseFloat(params['width'] !== width)) ||\n ((params['min_width']) && parseFloat(params['min_width']) > width) ||\n ((params['max_width']) && parseFloat(params['max_width']) < width) ||\n ((params['height']) && parseFloat(params['height']) !== height) ||\n ((params['min_height']) && parseFloat(params['min_height']) > height) ||\n ((params['max_height']) && parseFloat(params['max_height']) < height) ||\n ((params['ratio']) && ratio !== parseFloat(eval(params['ratio']))\n );\n callback(! notValid);\n };\n img.onerror = function() {\n callback(false);\n };\n img.src = fr.result;\n };\n fr.readAsDataURL(element.files[0]);\n\n return 'pending';\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n Alpha: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n\n var regex = new RegExp(\"^(?:^[a-z\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n\n },\n\n /**\n * Validate that an attribute contains only alpha-numeric characters.\n *\n * @return {boolean}\n */\n AlphaNum: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute contains only alphabetic characters.\n *\n * @return {boolean}\n */\n AlphaDash: function(value) {\n if (typeof value !== 'string') {\n return false;\n }\n var regex = new RegExp(\"^(?:^[a-z0-9\\u00E0-\\u00FC_-]+$)$\",'i');\n return regex.test(value);\n },\n\n /**\n * Validate that an attribute passes a regular expression check.\n *\n * @return {boolean}\n */\n Regex: function(value, element, params) {\n var invalidModifiers=['x','s','u','X','U','A'];\n // Converting php regular expression\n var phpReg= new RegExp('^(?:\\/)(.*\\\\\\/?[^\\/]*|[^\\/]*)(?:\\/)([gmixXsuUAJ]*)?$');\n var matches=params[0].match(phpReg);\n if (matches === null) {\n return false;\n }\n // checking modifiers\n var php_modifiers=[];\n if (matches[2]!==undefined) {\n php_modifiers=matches[2].split('');\n for (var i=0; i timeCompare);\n\n },\n\n\n /**\n * Validate that an attribute is a valid date.\n */\n Timezone: function(value) {\n return laravelValidation.helpers.isTimezone(value);\n },\n\n\n /**\n * Validate the attribute is a valid JSON string.\n *\n * @param value\n * @return bool\n */\n Json: function(value) {\n var result = true;\n try {\n JSON.parse(value);\n } catch (e) {\n result = false;\n }\n return result;\n }\n }\n});\n"]}