{"version":3,"sources":["jquery-migrate-1.3.0.min.js","globalize.js","underscore-min.js","knockout.mapping.js","knockout_bindings.js","knockout_stopbindings.js","jog.js","jquery.ui.selectmenu.js","Utypia.js","jquery.loading.min.js","jquery.blockUI.js","jquery.timers-1.0.0.js","jquery.ba-bbq.min.js","jquery.ddslick.js","jquery.hoverIntent.minified.js","tooltip.js","Translate.js","cookieEnabled.js","jquery.dump.js","UB4next.util.js","utils.js","GlobalHandlers.js"],"names":[],"mappings":"AAAA;AACA;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACljDA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":"lib.js","sourcesContent":["/*! jQuery Migrate v1.3.0 | (c) jQuery Foundation and other contributors | jquery.org/license */\n\"undefined\"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn(\"JQMIGRATE: \"+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}a.migrateVersion=\"1.3.0\";var f={};a.migrateWarnings=[],!a.migrateMute&&b.console&&b.console.log&&b.console.log(\"JQMIGRATE: Logging is active\"),a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},\"BackCompat\"===document.compatMode&&d(\"jQuery is not compatible with Quirks Mode\");var g=a(\"\",{size:1}).attr(\"size\")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,\"attrFn\",g||{},\"jQuery.attrFn is deprecated\"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d(\"jQuery.fn.attr( props, pass ) is deprecated\"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):(\"type\"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d(\"Can't change the 'type' of an input or button in IE 6/7/8\"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||\"boolean\"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d(\"jQuery.fn.attr('\"+j+\"') might use property instead of attribute\")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||\"\").toLowerCase();return\"button\"===c?i.apply(this,arguments):(\"input\"!==c&&\"option\"!==c&&d(\"jQuery.fn.attr('value') no longer gets properties\"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||\"\").toLowerCase();return\"button\"===c?j.apply(this,arguments):(\"input\"!==c&&\"option\"!==c&&d(\"jQuery.fn.attr('value', val) no longer sets properties\"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.parseJSON,s=/^\\s*,t=/^([^<]*)(<[\\w\\W]+>)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&\"string\"==typeof b&&!a.isPlainObject(e)&&(g=t.exec(a.trim(b)))&&g[0]&&(s.test(b)||d(\"$(html) HTML strings must start with '<' character\"),g[3]&&d(\"$(html) HTML text after last tag is ignored\"),\"#\"===g[0].charAt(0)&&(d(\"HTML string cannot start with a '#' character\"),a.error(\"JQMIGRATE: Invalid selector string (XSS)\")),e&&e.context&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):(\"#\"===b&&(d(\"jQuery( '#' ) is not a valid selector\"),b=[]),h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector=\"string\"==typeof b?b:\"\",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.parseJSON=function(a){return a?r.apply(this,arguments):(d(\"jQuery.parseJSON requires a valid JSON string\"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \\/]([\\w.]+)/.exec(a)||/(webkit)[ \\/]([\\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(a)||/(msie) ([\\w.]+)/.exec(a)||a.indexOf(\"compatible\")<0&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,\"browser\",a.browser,\"jQuery.browser is deprecated\"),a.boxModel=a.support.boxModel=\"CSS1Compat\"===document.compatMode,e(a,\"boxModel\",a.boxModel,\"jQuery.boxModel is deprecated\"),e(a.support,\"boxModel\",a.support.boxModel,\"jQuery.support.boxModel is deprecated\"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d(\"jQuery.sub() is deprecated\"),b},a.fn.size=function(){return d(\"jQuery.fn.size() is deprecated; use the .length property\"),this.length};var u=!1;a.swap&&a.each([\"height\",\"width\",\"reliableMarginRight\"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return u=!0,a=d.apply(this,arguments),u=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};u||d(\"jQuery.swap() is undocumented and deprecated\");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{\"text json\":a.parseJSON}});var v=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||\"events\"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?v.apply(this,arguments):(d(\"Use of jQuery.fn.data('events') is deprecated\"),f)};var w=/\\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d(\"jQuery.clean() is deprecated\");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||w.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,\"script\")&&i(h)||(e.appendChild(h),\"undefined\"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName(\"script\")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var x=a.event.add,y=a.event.remove,z=a.event.trigger,A=a.fn.toggle,B=a.fn.live,C=a.fn.die,D=a.fn.load,E=\"ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess\",F=new RegExp(\"\\\\b(?:\"+E+\")\\\\b\"),G=/(?:^|\\s)hover(\\.\\S+|)\\b/,H=function(b){return\"string\"!=typeof b||a.event.special.hover?b:(G.test(b)&&d(\"'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'\"),b&&b.replace(G,\"mouseenter$1 mouseleave$1\"))};a.event.props&&\"attrChange\"!==a.event.props[0]&&a.event.props.unshift(\"attrChange\",\"attrName\",\"relatedNode\",\"srcElement\"),a.event.dispatch&&e(a.event,\"handle\",a.event.dispatch,\"jQuery.event.handle is undocumented and deprecated\"),a.event.add=function(a,b,c,e,f){a!==document&&F.test(b)&&d(\"AJAX events should be attached to document: \"+b),x.call(this,a,H(b||\"\"),c,e,f)},a.event.remove=function(a,b,c,d,e){y.call(this,a,H(b)||\"\",c,d,e)},a.each([\"load\",\"unload\",\"error\"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return d(\"jQuery.fn.\"+c+\"() is deprecated\"),\"load\"===c&&\"string\"==typeof arguments[0]?D.apply(this,arguments):(a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return A.apply(this,arguments);d(\"jQuery.fn.toggle(handler, handler...) is deprecated\");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,\"lastToggle\"+b.guid)||0)%g;return a._data(this,\"lastToggle\"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g-\n\tname: \"en\",\n\t// the name of the culture in the english language\n\tenglishName: \"English\",\n\t// the name of the culture in its own language\n\tnativeName: \"English\",\n\t// whether the culture uses right-to-left text\n\tisRTL: false,\n\t// \"language\" is used for so-called \"specific\" cultures.\n\t// For example, the culture \"es-CL\" means \"Spanish, in Chili\".\n\t// It represents the Spanish-speaking culture as it is in Chili,\n\t// which might have different formatting rules or even translations\n\t// than Spanish in Spain. A \"neutral\" culture is one that is not\n\t// specific to a region. For example, the culture \"es\" is the generic\n\t// Spanish culture, which may be a more generalized version of the language\n\t// that may or may not be what a specific culture expects.\n\t// For a specific culture like \"es-CL\", the \"language\" field refers to the\n\t// neutral, generic culture information for the language it is using.\n\t// This is not always a simple matter of the string before the dash.\n\t// For example, the \"zh-Hans\" culture is netural (Simplified Chinese).\n\t// And the \"zh-SG\" culture is Simplified Chinese in Singapore, whose lanugage\n\t// field is \"zh-CHS\", not \"zh\".\n\t// This field should be used to navigate from a specific culture to it's\n\t// more general, neutral culture. If a culture is already as general as it\n\t// can get, the language may refer to itself.\n\tlanguage: \"en\",\n\t// numberFormat defines general number formatting rules, like the digits in\n\t// each grouping, the group separator, and how negative numbers are displayed.\n\tnumberFormat: {\n\t\t// [negativePattern]\n\t\t// Note, numberFormat.pattern has no \"positivePattern\" unlike percent and currency,\n\t\t// but is still defined as an array for consistency with them.\n\t\t// negativePattern: one of \"(n)|-n|- n|n-|n -\"\n\t\tpattern: [ \"-n\" ],\n\t\t// number of decimal places normally shown\n\t\tdecimals: 2,\n\t\t// string that separates number groups, as in 1,000,000\n\t\t\",\": \",\",\n\t\t// string that separates a number from the fractional portion, as in 1.99\n\t\t\".\": \".\",\n\t\t// array of numbers indicating the size of each number group.\n\t\t// TODO: more detailed description and example\n\t\tgroupSizes: [ 3 ],\n\t\t// symbol used for positive numbers\n\t\t\"+\": \"+\",\n\t\t// symbol used for negative numbers\n\t\t\"-\": \"-\",\n\t\t// symbol used for NaN (Not-A-Number)\n\t\t\"NaN\": \"NaN\",\n\t\t// symbol used for Negative Infinity\n\t\tnegativeInfinity: \"-Infinity\",\n\t\t// symbol used for Positive Infinity\n\t\tpositiveInfinity: \"Infinity\",\n\t\tpercent: {\n\t\t\t// [negativePattern, positivePattern]\n\t\t\t// negativePattern: one of \"-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %\"\n\t\t\t// positivePattern: one of \"n %|n%|%n|% n\"\n\t\t\tpattern: [ \"-n %\", \"n %\" ],\n\t\t\t// number of decimal places normally shown\n\t\t\tdecimals: 2,\n\t\t\t// array of numbers indicating the size of each number group.\n\t\t\t// TODO: more detailed description and example\n\t\t\tgroupSizes: [ 3 ],\n\t\t\t// string that separates number groups, as in 1,000,000\n\t\t\t\",\": \",\",\n\t\t\t// string that separates a number from the fractional portion, as in 1.99\n\t\t\t\".\": \".\",\n\t\t\t// symbol used to represent a percentage\n\t\t\tsymbol: \"%\"\n\t\t},\n\t\tcurrency: {\n\t\t\t// [negativePattern, positivePattern]\n\t\t\t// negativePattern: one of \"($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)\"\n\t\t\t// positivePattern: one of \"$n|n$|$ n|n $\"\n\t\t\tpattern: [ \"($n)\", \"$n\" ],\n\t\t\t// number of decimal places normally shown\n\t\t\tdecimals: 2,\n\t\t\t// array of numbers indicating the size of each number group.\n\t\t\t// TODO: more detailed description and example\n\t\t\tgroupSizes: [ 3 ],\n\t\t\t// string that separates number groups, as in 1,000,000\n\t\t\t\",\": \",\",\n\t\t\t// string that separates a number from the fractional portion, as in 1.99\n\t\t\t\".\": \".\",\n\t\t\t// symbol used to represent currency\n\t\t\tsymbol: \"$\"\n\t\t}\n\t},\n\t// calendars defines all the possible calendars used by this culture.\n\t// There should be at least one defined with name \"standard\", and is the default\n\t// calendar used by the culture.\n\t// A calendar contains information about how dates are formatted, information about\n\t// the calendar's eras, a standard set of the date formats,\n\t// translations for day and month names, and if the calendar is not based on the Gregorian\n\t// calendar, conversion functions to and from the Gregorian calendar.\n\tcalendars: {\n\t\tstandard: {\n\t\t\t// name that identifies the type of calendar this is\n\t\t\tname: \"Gregorian_USEnglish\",\n\t\t\t// separator of parts of a date (e.g. \"/\" in 11/05/1955)\n\t\t\t\"/\": \"/\",\n\t\t\t// separator of parts of a time (e.g. \":\" in 05:44 PM)\n\t\t\t\":\": \":\",\n\t\t\t// the first day of the week (0 = Sunday, 1 = Monday, etc)\n\t\t\tfirstDay: 0,\n\t\t\tdays: {\n\t\t\t\t// full day names\n\t\t\t\tnames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n\t\t\t\t// abbreviated day names\n\t\t\t\tnamesAbbr: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n\t\t\t\t// shortest day names\n\t\t\t\tnamesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n\t\t\t},\n\t\t\tmonths: {\n\t\t\t\t// full month names (13 months for lunar calendards -- 13th month should be \"\" if not lunar)\n\t\t\t\tnames: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\", \"\" ],\n\t\t\t\t// abbreviated month names\n\t\t\t\tnamesAbbr: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"\" ]\n\t\t\t},\n\t\t\t// AM and PM designators in one of these forms:\n\t\t\t// The usual view, and the upper and lower case versions\n\t\t\t// [ standard, lowercase, uppercase ]\n\t\t\t// The culture does not use AM or PM (likely all standard date formats use 24 hour time)\n\t\t\t// null\n\t\t\tAM: [ \"AM\", \"am\", \"AM\" ],\n\t\t\tPM: [ \"PM\", \"pm\", \"PM\" ],\n\t\t\teras: [\n\t\t\t\t// eras in reverse chronological order.\n\t\t\t\t// name: the name of the era in this culture (e.g. A.D., C.E.)\n\t\t\t\t// start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.\n\t\t\t\t// offset: offset in years from gregorian calendar\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"A.D.\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"offset\": 0\n\t\t\t\t}\n\t\t\t],\n\t\t\t// when a two digit year is given, it will never be parsed as a four digit\n\t\t\t// year greater than this year (in the appropriate era for the culture)\n\t\t\t// Set it as a full year (e.g. 2029) or use an offset format starting from\n\t\t\t// the current year: \"+19\" would correspond to 2029 if the current year 2010.\n\t\t\ttwoDigitYearMax: 2029,\n\t\t\t// set of predefined date and time patterns used by the culture\n\t\t\t// these represent the format someone in this culture would expect\n\t\t\t// to see given the portions of the date that are shown.\n\t\t\tpatterns: {\n\t\t\t\t// short date pattern\n\t\t\t\td: \"M/d/yyyy\",\n\t\t\t\t// long date pattern\n\t\t\t\tD: \"dddd, MMMM dd, yyyy\",\n\t\t\t\t// short time pattern\n\t\t\t\tt: \"h:mm tt\",\n\t\t\t\t// long time pattern\n\t\t\t\tT: \"h:mm:ss tt\",\n\t\t\t\t// long date, short time pattern\n\t\t\t\tf: \"dddd, MMMM dd, yyyy h:mm tt\",\n\t\t\t\t// long date, long time pattern\n\t\t\t\tF: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\t// month/day pattern\n\t\t\t\tM: \"MMMM dd\",\n\t\t\t\t// month/year pattern\n\t\t\t\tY: \"yyyy MMMM\",\n\t\t\t\t// S is a sortable format that does not vary by culture\n\t\t\t\tS: \"yyyy\\u0027-\\u0027MM\\u0027-\\u0027dd\\u0027T\\u0027HH\\u0027:\\u0027mm\\u0027:\\u0027ss\"\n\t\t\t}\n\t\t\t// optional fields for each calendar:\n\t\t\t/*\n\t\t\tmonthsGenitive:\n\t\t\t\tSame as months but used when the day preceeds the month.\n\t\t\t\tOmit if the culture has no genitive distinction in month names.\n\t\t\t\tFor an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx\n\t\t\tconvert:\n\t\t\t\tAllows for the support of non-gregorian based calendars. This convert object is used to\n\t\t\t\tto convert a date to and from a gregorian calendar date to handle parsing and formatting.\n\t\t\t\tThe two functions:\n\t\t\t\t\tfromGregorian( date )\n\t\t\t\t\t\tGiven the date as a parameter, return an array with parts [ year, month, day ]\n\t\t\t\t\t\tcorresponding to the non-gregorian based year, month, and day for the calendar.\n\t\t\t\t\ttoGregorian( year, month, day )\n\t\t\t\t\t\tGiven the non-gregorian year, month, and day, return a new Date() object\n\t\t\t\t\t\tset to the corresponding date in the gregorian calendar.\n\t\t\t*/\n\t\t}\n\t},\n\t// For localized strings\n\tmessages: {}\n};\n\nGlobalize.cultures[ \"default\" ].calendar = Globalize.cultures[ \"default\" ].calendars.standard;\n\nGlobalize.cultures.en = Globalize.cultures[ \"default\" ];\n\nGlobalize.cultureSelector = \"en\";\n\n//\n// private variables\n//\n\nregexHex = /^0x[a-f0-9]+$/i;\nregexInfinity = /^[+\\-]?infinity$/i;\nregexParseFloat = /^[+\\-]?\\d*\\.?\\d*(e[+\\-]?\\d+)?$/;\nregexTrim = /^\\s+|\\s+$/g;\n\n//\n// private JavaScript utility functions\n//\n\narrayIndexOf = function( array, item ) {\n\tif ( array.indexOf ) {\n\t\treturn array.indexOf( item );\n\t}\n\tfor ( var i = 0, length = array.length; i < length; i++ ) {\n\t\tif ( array[i] === item ) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nendsWith = function( value, pattern ) {\n\treturn value.substr( value.length - pattern.length ) === pattern;\n};\n\nextend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && isObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\nisArray = Array.isArray || function( obj ) {\n\treturn Object.prototype.toString.call( obj ) === \"[object Array]\";\n};\n\nisFunction = function( obj ) {\n\treturn Object.prototype.toString.call( obj ) === \"[object Function]\";\n};\n\nisObject = function( obj ) {\n\treturn Object.prototype.toString.call( obj ) === \"[object Object]\";\n};\n\nstartsWith = function( value, pattern ) {\n\treturn value.indexOf( pattern ) === 0;\n};\n\ntrim = function( value ) {\n\treturn ( value + \"\" ).replace( regexTrim, \"\" );\n};\n\ntruncate = function( value ) {\n\tif ( isNaN( value ) ) {\n\t\treturn NaN;\n\t}\n\treturn Math[ value < 0 ? \"ceil\" : \"floor\" ]( value );\n};\n\nzeroPad = function( str, count, left ) {\n\tvar l;\n\tfor ( l = str.length; l < count; l += 1 ) {\n\t\tstr = ( left ? (\"0\" + str) : (str + \"0\") );\n\t}\n\treturn str;\n};\n\n//\n// private Globalization utility functions\n//\n\nappendPreOrPostMatch = function( preMatch, strings ) {\n\t// appends pre- and post- token match strings while removing escaped characters.\n\t// Returns a single quote count which is used to determine if the token occurs\n\t// in a string literal.\n\tvar quoteCount = 0,\n\t\tescaped = false;\n\tfor ( var i = 0, il = preMatch.length; i < il; i++ ) {\n\t\tvar c = preMatch.charAt( i );\n\t\tswitch ( c ) {\n\t\t\tcase \"\\'\":\n\t\t\t\tif ( escaped ) {\n\t\t\t\t\tstrings.push( \"\\'\" );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tquoteCount++;\n\t\t\t\t}\n\t\t\t\tescaped = false;\n\t\t\t\tbreak;\n\t\t\tcase \"\\\\\":\n\t\t\t\tif ( escaped ) {\n\t\t\t\t\tstrings.push( \"\\\\\" );\n\t\t\t\t}\n\t\t\t\tescaped = !escaped;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tstrings.push( c );\n\t\t\t\tescaped = false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn quoteCount;\n};\n\nexpandFormat = function( cal, format ) {\n\t// expands unspecified or single character date formats into the full pattern.\n\tformat = format || \"F\";\n\tvar pattern,\n\t\tpatterns = cal.patterns,\n\t\tlen = format.length;\n\tif ( len === 1 ) {\n\t\tpattern = patterns[ format ];\n\t\tif ( !pattern ) {\n\t\t\tthrow \"Invalid date format string \\'\" + format + \"\\'.\";\n\t\t}\n\t\tformat = pattern;\n\t}\n\telse if ( len === 2 && format.charAt(0) === \"%\" ) {\n\t\t// %X escape format -- intended as a custom format string that is only one character, not a built-in format.\n\t\tformat = format.charAt( 1 );\n\t}\n\treturn format;\n};\n\nformatDate = function( value, format, culture ) {\n\tvar cal = culture.calendar,\n\t\tconvert = cal.convert,\n\t\tret;\n\n\tif ( !format || !format.length || format === \"i\" ) {\n\t\tif ( culture && culture.name.length ) {\n\t\t\tif ( convert ) {\n\t\t\t\t// non-gregorian calendar, so we cannot use built-in toLocaleString()\n\t\t\t\tret = formatDate( value, cal.patterns.F, culture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar eraDate = new Date( value.getTime() ),\n\t\t\t\t\tera = getEra( value, cal.eras );\n\t\t\t\teraDate.setFullYear( getEraYear(value, cal, era) );\n\t\t\t\tret = eraDate.toLocaleString();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tret = value.toString();\n\t\t}\n\t\treturn ret;\n\t}\n\n\tvar eras = cal.eras,\n\t\tsortable = format === \"s\";\n\tformat = expandFormat( cal, format );\n\n\t// Start with an empty string\n\tret = [];\n\tvar hour,\n\t\tzeros = [ \"0\", \"00\", \"000\" ],\n\t\tfoundDay,\n\t\tcheckedDay,\n\t\tdayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g,\n\t\tquoteCount = 0,\n\t\ttokenRegExp = getTokenRegExp(),\n\t\tconverted;\n\n\tfunction padZeros( num, c ) {\n\t\tvar r, s = num + \"\";\n\t\tif ( c > 1 && s.length < c ) {\n\t\t\tr = ( zeros[c - 2] + s);\n\t\t\treturn r.substr( r.length - c, c );\n\t\t}\n\t\telse {\n\t\t\tr = s;\n\t\t}\n\t\treturn r;\n\t}\n\n\tfunction hasDay() {\n\t\tif ( foundDay || checkedDay ) {\n\t\t\treturn foundDay;\n\t\t}\n\t\tfoundDay = dayPartRegExp.test( format );\n\t\tcheckedDay = true;\n\t\treturn foundDay;\n\t}\n\n\tfunction getPart( date, part ) {\n\t\tif ( converted ) {\n\t\t\treturn converted[ part ];\n\t\t}\n\t\tswitch ( part ) {\n\t\t\tcase 0:\n\t\t\t\treturn date.getFullYear();\n\t\t\tcase 1:\n\t\t\t\treturn date.getMonth();\n\t\t\tcase 2:\n\t\t\t\treturn date.getDate();\n\t\t\tdefault:\n\t\t\t\tthrow \"Invalid part value \" + part;\n\t\t}\n\t}\n\n\tif ( !sortable && convert ) {\n\t\tconverted = convert.fromGregorian( value );\n\t}\n\n\tfor ( ; ; ) {\n\t\t// Save the current index\n\t\tvar index = tokenRegExp.lastIndex,\n\t\t\t// Look for the next pattern\n\t\t\tar = tokenRegExp.exec( format );\n\n\t\t// Append the text before the pattern (or the end of the string if not found)\n\t\tvar preMatch = format.slice( index, ar ? ar.index : format.length );\n\t\tquoteCount += appendPreOrPostMatch( preMatch, ret );\n\n\t\tif ( !ar ) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// do not replace any matches that occur inside a string literal.\n\t\tif ( quoteCount % 2 ) {\n\t\t\tret.push( ar[0] );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar current = ar[ 0 ],\n\t\t\tclength = current.length;\n\n\t\tswitch ( current ) {\n\t\t\tcase \"ddd\":\n\t\t\t\t//Day of the week, as a three-letter abbreviation\n\t\t\tcase \"dddd\":\n\t\t\t\t// Day of the week, using the full name\n\t\t\t\tvar names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names;\n\t\t\t\tret.push( names[value.getDay()] );\n\t\t\t\tbreak;\n\t\t\tcase \"d\":\n\t\t\t\t// Day of month, without leading zero for single-digit days\n\t\t\tcase \"dd\":\n\t\t\t\t// Day of month, with leading zero for single-digit days\n\t\t\t\tfoundDay = true;\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( getPart(value, 2), clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"MMM\":\n\t\t\t\t// Month, as a three-letter abbreviation\n\t\t\tcase \"MMMM\":\n\t\t\t\t// Month, using the full name\n\t\t\t\tvar part = getPart( value, 1 );\n\t\t\t\tret.push(\n\t\t\t\t\t( cal.monthsGenitive && hasDay() ) ?\n\t\t\t\t\t( cal.monthsGenitive[ clength === 3 ? \"namesAbbr\" : \"names\" ][ part ] ) :\n\t\t\t\t\t( cal.months[ clength === 3 ? \"namesAbbr\" : \"names\" ][ part ] )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"M\":\n\t\t\t\t// Month, as digits, with no leading zero for single-digit months\n\t\t\tcase \"MM\":\n\t\t\t\t// Month, as digits, with leading zero for single-digit months\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( getPart(value, 1) + 1, clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"y\":\n\t\t\t\t// Year, as two digits, but with no leading zero for years less than 10\n\t\t\tcase \"yy\":\n\t\t\t\t// Year, as two digits, with leading zero for years less than 10\n\t\t\tcase \"yyyy\":\n\t\t\t\t// Year represented by four full digits\n\t\t\t\tpart = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable );\n\t\t\t\tif ( clength < 4 ) {\n\t\t\t\t\tpart = part % 100;\n\t\t\t\t}\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( part, clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"h\":\n\t\t\t\t// Hours with no leading zero for single-digit hours, using 12-hour clock\n\t\t\tcase \"hh\":\n\t\t\t\t// Hours with leading zero for single-digit hours, using 12-hour clock\n\t\t\t\thour = value.getHours() % 12;\n\t\t\t\tif ( hour === 0 ) hour = 12;\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( hour, clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\t// Hours with no leading zero for single-digit hours, using 24-hour clock\n\t\t\tcase \"HH\":\n\t\t\t\t// Hours with leading zero for single-digit hours, using 24-hour clock\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( value.getHours(), clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\t// Minutes with no leading zero for single-digit minutes\n\t\t\tcase \"mm\":\n\t\t\t\t// Minutes with leading zero for single-digit minutes\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( value.getMinutes(), clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"s\":\n\t\t\t\t// Seconds with no leading zero for single-digit seconds\n\t\t\tcase \"ss\":\n\t\t\t\t// Seconds with leading zero for single-digit seconds\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( value.getSeconds(), clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"t\":\n\t\t\t\t// One character am/pm indicator (\"a\" or \"p\")\n\t\t\tcase \"tt\":\n\t\t\t\t// Multicharacter am/pm indicator\n\t\t\t\tpart = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : \" \" ) : ( cal.PM ? cal.PM[0] : \" \" );\n\t\t\t\tret.push( clength === 1 ? part.charAt(0) : part );\n\t\t\t\tbreak;\n\t\t\tcase \"f\":\n\t\t\t\t// Deciseconds\n\t\t\tcase \"ff\":\n\t\t\t\t// Centiseconds\n\t\t\tcase \"fff\":\n\t\t\t\t// Milliseconds\n\t\t\t\tret.push(\n\t\t\t\t\tpadZeros( value.getMilliseconds(), 3 ).substr( 0, clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"z\":\n\t\t\t\t// Time zone offset, no leading zero\n\t\t\tcase \"zz\":\n\t\t\t\t// Time zone offset with leading zero\n\t\t\t\thour = value.getTimezoneOffset() / 60;\n\t\t\t\tret.push(\n\t\t\t\t\t( hour <= 0 ? \"+\" : \"-\" ) + padZeros( Math.floor(Math.abs(hour)), clength )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"zzz\":\n\t\t\t\t// Time zone offset with leading zero\n\t\t\t\thour = value.getTimezoneOffset() / 60;\n\t\t\t\tret.push(\n\t\t\t\t\t( hour <= 0 ? \"+\" : \"-\" ) + padZeros( Math.floor(Math.abs(hour)), 2 ) +\n\t\t\t\t\t// Hard coded \":\" separator, rather than using cal.TimeSeparator\n\t\t\t\t\t// Repeated here for consistency, plus \":\" was already assumed in date parsing.\n\t\t\t\t\t\":\" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 )\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"g\":\n\t\t\tcase \"gg\":\n\t\t\t\tif ( cal.eras ) {\n\t\t\t\t\tret.push(\n\t\t\t\t\t\tcal.eras[ getEra(value, eras) ].name\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\tcase \"/\":\n\t\t\tret.push( cal[\"/\"] );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow \"Invalid date format pattern \\'\" + current + \"\\'.\";\n\t\t}\n\t}\n\treturn ret.join( \"\" );\n};\n\n// formatNumber\n(function() {\n\tvar expandNumber;\n\n\texpandNumber = function( number, precision, formatInfo ) {\n\t\tvar groupSizes = formatInfo.groupSizes,\n\t\t\tcurSize = groupSizes[ 0 ],\n\t\t\tcurGroupIndex = 1,\n\t\t\tfactor = Math.pow( 10, precision ),\n\t\t\trounded = Math.round( number * factor ) / factor;\n\n\t\tif ( !isFinite(rounded) ) {\n\t\t\trounded = number;\n\t\t}\n\t\tnumber = rounded;\n\n\t\tvar numberString = number+\"\",\n\t\t\tright = \"\",\n\t\t\tsplit = numberString.split( /e/i ),\n\t\t\texponent = split.length > 1 ? parseInt( split[1], 10 ) : 0;\n\t\tnumberString = split[ 0 ];\n\t\tsplit = numberString.split( \".\" );\n\t\tnumberString = split[ 0 ];\n\t\tright = split.length > 1 ? split[ 1 ] : \"\";\n\n\t\tvar l;\n\t\tif ( exponent > 0 ) {\n\t\t\tright = zeroPad( right, exponent, false );\n\t\t\tnumberString += right.slice( 0, exponent );\n\t\t\tright = right.substr( exponent );\n\t\t}\n\t\telse if ( exponent < 0 ) {\n\t\t\texponent = -exponent;\n\t\t\tnumberString = zeroPad( numberString, exponent + 1, true );\n\t\t\tright = numberString.slice( -exponent, numberString.length ) + right;\n\t\t\tnumberString = numberString.slice( 0, -exponent );\n\t\t}\n\n\t\tif ( precision > 0 ) {\n\t\t\tright = formatInfo[ \".\" ] +\n\t\t\t\t( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) );\n\t\t}\n\t\telse {\n\t\t\tright = \"\";\n\t\t}\n\n\t\tvar stringIndex = numberString.length - 1,\n\t\t\tsep = formatInfo[ \",\" ],\n\t\t\tret = \"\";\n\n\t\twhile ( stringIndex >= 0 ) {\n\t\t\tif ( curSize === 0 || curSize > stringIndex ) {\n\t\t\t\treturn numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right );\n\t\t\t}\n\t\t\tret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : \"\" );\n\n\t\t\tstringIndex -= curSize;\n\n\t\t\tif ( curGroupIndex < groupSizes.length ) {\n\t\t\t\tcurSize = groupSizes[ curGroupIndex ];\n\t\t\t\tcurGroupIndex++;\n\t\t\t}\n\t\t}\n\n\t\treturn numberString.slice( 0, stringIndex + 1 ) + sep + ret + right;\n\t};\n\n\tformatNumber = function( value, format, culture ) {\n\t\tif ( !isFinite(value) ) {\n\t\t\tif ( value === Infinity ) {\n\t\t\t\treturn culture.numberFormat.positiveInfinity;\n\t\t\t}\n\t\t\tif ( value === -Infinity ) {\n\t\t\t\treturn culture.numberFormat.negativeInfinity;\n\t\t\t}\n\t\t\treturn culture.numberFormat[ \"NaN\" ];\n\t\t}\n\t\tif ( !format || format === \"i\" ) {\n\t\t\treturn culture.name.length ? value.toLocaleString() : value.toString();\n\t\t}\n\t\tformat = format || \"D\";\n\n\t\tvar nf = culture.numberFormat,\n\t\t\tnumber = Math.abs( value ),\n\t\t\tprecision = -1,\n\t\t\tpattern;\n\t\tif ( format.length > 1 ) precision = parseInt( format.slice(1), 10 );\n\n\t\tvar current = format.charAt( 0 ).toUpperCase(),\n\t\t\tformatInfo;\n\n\t\tswitch ( current ) {\n\t\t\tcase \"D\":\n\t\t\t\tpattern = \"n\";\n\t\t\t\tnumber = truncate( number );\n\t\t\t\tif ( precision !== -1 ) {\n\t\t\t\t\tnumber = zeroPad( \"\" + number, precision, true );\n\t\t\t\t}\n\t\t\t\tif ( value < 0 ) number = \"-\" + number;\n\t\t\t\tbreak;\n\t\t\tcase \"N\":\n\t\t\t\tformatInfo = nf;\n\t\t\t\t/* falls through */\n\t\t\tcase \"C\":\n\t\t\t\tformatInfo = formatInfo || nf.currency;\n\t\t\t\t/* falls through */\n\t\t\tcase \"P\":\n\t\t\t\tformatInfo = formatInfo || nf.percent;\n\t\t\t\tpattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || \"n\" );\n\t\t\t\tif ( precision === -1 ) precision = formatInfo.decimals;\n\t\t\t\tnumber = expandNumber( number * (current === \"P\" ? 100 : 1), precision, formatInfo );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Bad number format specifier: \" + current;\n\t\t}\n\n\t\tvar patternParts = /n|\\$|-|%/g,\n\t\t\tret = \"\";\n\t\tfor ( ; ; ) {\n\t\t\tvar index = patternParts.lastIndex,\n\t\t\t\tar = patternParts.exec( pattern );\n\n\t\t\tret += pattern.slice( index, ar ? ar.index : pattern.length );\n\n\t\t\tif ( !ar ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tswitch ( ar[0] ) {\n\t\t\t\tcase \"n\":\n\t\t\t\t\tret += number;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"$\":\n\t\t\t\t\tret += nf.currency.symbol;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"-\":\n\t\t\t\t\t// don't make 0 negative\n\t\t\t\t\tif ( /[1-9]/.test(number) ) {\n\t\t\t\t\t\tret += nf[ \"-\" ];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%\":\n\t\t\t\t\tret += nf.percent.symbol;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n\n}());\n\ngetTokenRegExp = function() {\n\t// regular expression for matching date and time tokens in format strings.\n\treturn (/\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g);\n};\n\ngetEra = function( date, eras ) {\n\tif ( !eras ) return 0;\n\tvar start, ticks = date.getTime();\n\tfor ( var i = 0, l = eras.length; i < l; i++ ) {\n\t\tstart = eras[ i ].start;\n\t\tif ( start === null || ticks >= start ) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn 0;\n};\n\ngetEraYear = function( date, cal, era, sortable ) {\n\tvar year = date.getFullYear();\n\tif ( !sortable && cal.eras ) {\n\t\t// convert normal gregorian year to era-shifted gregorian\n\t\t// year by subtracting the era offset\n\t\tyear -= cal.eras[ era ].offset;\n\t}\n\treturn year;\n};\n\n// parseExact\n(function() {\n\tvar expandYear,\n\t\tgetDayIndex,\n\t\tgetMonthIndex,\n\t\tgetParseRegExp,\n\t\toutOfRange,\n\t\ttoUpper,\n\t\ttoUpperArray;\n\n\texpandYear = function( cal, year ) {\n\t\t// expands 2-digit year into 4 digits.\n\t\tif ( year < 100 ) {\n\t\t\tvar now = new Date(),\n\t\t\t\tera = getEra( now ),\n\t\t\t\tcurr = getEraYear( now, cal, era ),\n\t\t\t\ttwoDigitYearMax = cal.twoDigitYearMax;\n\t\t\ttwoDigitYearMax = typeof twoDigitYearMax === \"string\" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax;\n\t\t\tyear += curr - ( curr % 100 );\n\t\t\tif ( year > twoDigitYearMax ) {\n\t\t\t\tyear -= 100;\n\t\t\t}\n\t\t}\n\t\treturn year;\n\t};\n\n\tgetDayIndex = function\t( cal, value, abbr ) {\n\t\tvar ret,\n\t\t\tdays = cal.days,\n\t\t\tupperDays = cal._upperDays;\n\t\tif ( !upperDays ) {\n\t\t\tcal._upperDays = upperDays = [\n\t\t\t\ttoUpperArray( days.names ),\n\t\t\t\ttoUpperArray( days.namesAbbr ),\n\t\t\t\ttoUpperArray( days.namesShort )\n\t\t\t];\n\t\t}\n\t\tvalue = toUpper( value );\n\t\tif ( abbr ) {\n\t\t\tret = arrayIndexOf( upperDays[1], value );\n\t\t\tif ( ret === -1 ) {\n\t\t\t\tret = arrayIndexOf( upperDays[2], value );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tret = arrayIndexOf( upperDays[0], value );\n\t\t}\n\t\treturn ret;\n\t};\n\n\tgetMonthIndex = function( cal, value, abbr ) {\n\t\tvar months = cal.months,\n\t\t\tmonthsGen = cal.monthsGenitive || cal.months,\n\t\t\tupperMonths = cal._upperMonths,\n\t\t\tupperMonthsGen = cal._upperMonthsGen;\n\t\tif ( !upperMonths ) {\n\t\t\tcal._upperMonths = upperMonths = [\n\t\t\t\ttoUpperArray( months.names ),\n\t\t\t\ttoUpperArray( months.namesAbbr )\n\t\t\t];\n\t\t\tcal._upperMonthsGen = upperMonthsGen = [\n\t\t\t\ttoUpperArray( monthsGen.names ),\n\t\t\t\ttoUpperArray( monthsGen.namesAbbr )\n\t\t\t];\n\t\t}\n\t\tvalue = toUpper( value );\n\t\tvar i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value );\n\t\tif ( i < 0 ) {\n\t\t\ti = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value );\n\t\t}\n\t\treturn i;\n\t};\n\n\tgetParseRegExp = function( cal, format ) {\n\t\t// converts a format string into a regular expression with groups that\n\t\t// can be used to extract date fields from a date string.\n\t\t// check for a cached parse regex.\n\t\tvar re = cal._parseRegExp;\n\t\tif ( !re ) {\n\t\t\tcal._parseRegExp = re = {};\n\t\t}\n\t\telse {\n\t\t\tvar reFormat = re[ format ];\n\t\t\tif ( reFormat ) {\n\t\t\t\treturn reFormat;\n\t\t\t}\n\t\t}\n\n\t\t// expand single digit formats, then escape regular expression characters.\n\t\tvar expFormat = expandFormat( cal, format ).replace( /([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g, \"\\\\\\\\$1\" ),\n\t\t\tregexp = [ \"^\" ],\n\t\t\tgroups = [],\n\t\t\tindex = 0,\n\t\t\tquoteCount = 0,\n\t\t\ttokenRegExp = getTokenRegExp(),\n\t\t\tmatch;\n\n\t\t// iterate through each date token found.\n\t\twhile ( (match = tokenRegExp.exec(expFormat)) !== null ) {\n\t\t\tvar preMatch = expFormat.slice( index, match.index );\n\t\t\tindex = tokenRegExp.lastIndex;\n\n\t\t\t// don't replace any matches that occur inside a string literal.\n\t\t\tquoteCount += appendPreOrPostMatch( preMatch, regexp );\n\t\t\tif ( quoteCount % 2 ) {\n\t\t\t\tregexp.push( match[0] );\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// add a regex group for the token.\n\t\t\tvar m = match[ 0 ],\n\t\t\t\tlen = m.length,\n\t\t\t\tadd;\n\t\t\tswitch ( m ) {\n\t\t\t\tcase \"dddd\": case \"ddd\":\n\t\t\t\tcase \"MMMM\": case \"MMM\":\n\t\t\t\tcase \"gg\": case \"g\":\n\t\t\t\t\tadd = \"(\\\\D+)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"tt\": case \"t\":\n\t\t\t\t\tadd = \"(\\\\D*)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"yyyy\":\n\t\t\t\tcase \"fff\":\n\t\t\t\tcase \"ff\":\n\t\t\t\tcase \"f\":\n\t\t\t\t\tadd = \"(\\\\d{\" + len + \"})\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dd\": case \"d\":\n\t\t\t\tcase \"MM\": case \"M\":\n\t\t\t\tcase \"yy\": case \"y\":\n\t\t\t\tcase \"HH\": case \"H\":\n\t\t\t\tcase \"hh\": case \"h\":\n\t\t\t\tcase \"mm\": case \"m\":\n\t\t\t\tcase \"ss\": case \"s\":\n\t\t\t\t\tadd = \"(\\\\d\\\\d?)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zzz\":\n\t\t\t\t\tadd = \"([+-]?\\\\d\\\\d?:\\\\d{2})\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zz\": case \"z\":\n\t\t\t\t\tadd = \"([+-]?\\\\d\\\\d?)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\":\n\t\t\t\t\tadd = \"(\\\\/)\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Invalid date format pattern \\'\" + m + \"\\'.\";\n\t\t\t}\n\t\t\tif ( add ) {\n\t\t\t\tregexp.push( add );\n\t\t\t}\n\t\t\tgroups.push( match[0] );\n\t\t}\n\t\tappendPreOrPostMatch( expFormat.slice(index), regexp );\n\t\tregexp.push( \"$\" );\n\n\t\t// allow whitespace to differ when matching formats.\n\t\tvar regexpStr = regexp.join( \"\" ).replace( /\\s+/g, \"\\\\s+\" ),\n\t\t\tparseRegExp = { \"regExp\": regexpStr, \"groups\": groups };\n\n\t\t// cache the regex for this format.\n\t\treturn re[ format ] = parseRegExp;\n\t};\n\n\toutOfRange = function( value, low, high ) {\n\t\treturn value < low || value > high;\n\t};\n\n\ttoUpper = function( value ) {\n\t\t// \"he-IL\" has non-breaking space in weekday names.\n\t\treturn value.split( \"\\u00A0\" ).join( \" \" ).toUpperCase();\n\t};\n\n\ttoUpperArray = function( arr ) {\n\t\tvar results = [];\n\t\tfor ( var i = 0, l = arr.length; i < l; i++ ) {\n\t\t\tresults[ i ] = toUpper( arr[i] );\n\t\t}\n\t\treturn results;\n\t};\n\n\tparseExact = function( value, format, culture ) {\n\t\t// try to parse the date string by matching against the format string\n\t\t// while using the specified culture for date field names.\n\t\tvalue = trim( value );\n\t\tvar cal = culture.calendar,\n\t\t\t// convert date formats into regular expressions with groupings.\n\t\t\t// use the regexp to determine the input format and extract the date fields.\n\t\t\tparseInfo = getParseRegExp( cal, format ),\n\t\t\tmatch = new RegExp( parseInfo.regExp ).exec( value );\n\t\tif ( match === null ) {\n\t\t\treturn null;\n\t\t}\n\t\t// found a date format that matches the input.\n\t\tvar groups = parseInfo.groups,\n\t\t\tera = null, year = null, month = null, date = null, weekDay = null,\n\t\t\thour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,\n\t\t\tpmHour = false;\n\t\t// iterate the format groups to extract and set the date fields.\n\t\tfor ( var j = 0, jl = groups.length; j < jl; j++ ) {\n\t\t\tvar matchGroup = match[ j + 1 ];\n\t\t\tif ( matchGroup ) {\n\t\t\t\tvar current = groups[ j ],\n\t\t\t\t\tclength = current.length,\n\t\t\t\t\tmatchInt = parseInt( matchGroup, 10 );\n\t\t\t\tswitch ( current ) {\n\t\t\t\t\tcase \"dd\": case \"d\":\n\t\t\t\t\t\t// Day of month.\n\t\t\t\t\t\tdate = matchInt;\n\t\t\t\t\t\t// check that date is generally in valid range, also checking overflow below.\n\t\t\t\t\t\tif ( outOfRange(date, 1, 31) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"MMM\": case \"MMMM\":\n\t\t\t\t\t\tmonth = getMonthIndex( cal, matchGroup, clength === 3 );\n\t\t\t\t\t\tif ( outOfRange(month, 0, 11) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\": case \"MM\":\n\t\t\t\t\t\t// Month.\n\t\t\t\t\t\tmonth = matchInt - 1;\n\t\t\t\t\t\tif ( outOfRange(month, 0, 11) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\": case \"yy\":\n\t\t\t\t\tcase \"yyyy\":\n\t\t\t\t\t\tyear = clength < 4 ? expandYear( cal, matchInt ) : matchInt;\n\t\t\t\t\t\tif ( outOfRange(year, 0, 9999) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"h\": case \"hh\":\n\t\t\t\t\t\t// Hours (12-hour clock).\n\t\t\t\t\t\thour = matchInt;\n\t\t\t\t\t\tif ( hour === 12 ) hour = 0;\n\t\t\t\t\t\tif ( outOfRange(hour, 0, 11) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"H\": case \"HH\":\n\t\t\t\t\t\t// Hours (24-hour clock).\n\t\t\t\t\t\thour = matchInt;\n\t\t\t\t\t\tif ( outOfRange(hour, 0, 23) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\": case \"mm\":\n\t\t\t\t\t\t// Minutes.\n\t\t\t\t\t\tmin = matchInt;\n\t\t\t\t\t\tif ( outOfRange(min, 0, 59) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"s\": case \"ss\":\n\t\t\t\t\t\t// Seconds.\n\t\t\t\t\t\tsec = matchInt;\n\t\t\t\t\t\tif ( outOfRange(sec, 0, 59) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tt\": case \"t\":\n\t\t\t\t\t\t// AM/PM designator.\n\t\t\t\t\t\t// see if it is standard, upper, or lower case PM. If not, ensure it is at least one of\n\t\t\t\t\t\t// the AM tokens. If not, fail the parse for this format.\n\t\t\t\t\t\tpmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] );\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!pmHour && (\n\t\t\t\t\t\t\t\t!cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"f\":\n\t\t\t\t\t\t// Deciseconds.\n\t\t\t\t\tcase \"ff\":\n\t\t\t\t\t\t// Centiseconds.\n\t\t\t\t\tcase \"fff\":\n\t\t\t\t\t\t// Milliseconds.\n\t\t\t\t\t\tmsec = matchInt * Math.pow( 10, 3 - clength );\n\t\t\t\t\t\tif ( outOfRange(msec, 0, 999) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ddd\":\n\t\t\t\t\t\t// Day of week.\n\t\t\t\t\tcase \"dddd\":\n\t\t\t\t\t\t// Day of week.\n\t\t\t\t\t\tweekDay = getDayIndex( cal, matchGroup, clength === 3 );\n\t\t\t\t\t\tif ( outOfRange(weekDay, 0, 6) ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"zzz\":\n\t\t\t\t\t\t// Time zone offset in +/- hours:min.\n\t\t\t\t\t\tvar offsets = matchGroup.split( /:/ );\n\t\t\t\t\t\tif ( offsets.length !== 2 ) return null;\n\t\t\t\t\t\thourOffset = parseInt( offsets[0], 10 );\n\t\t\t\t\t\tif ( outOfRange(hourOffset, -12, 13) ) return null;\n\t\t\t\t\t\tvar minOffset = parseInt( offsets[1], 10 );\n\t\t\t\t\t\tif ( outOfRange(minOffset, 0, 59) ) return null;\n\t\t\t\t\t\ttzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, \"-\") ? -minOffset : minOffset );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"z\": case \"zz\":\n\t\t\t\t\t\t// Time zone offset in +/- hours.\n\t\t\t\t\t\thourOffset = matchInt;\n\t\t\t\t\t\tif ( outOfRange(hourOffset, -12, 13) ) return null;\n\t\t\t\t\t\ttzMinOffset = hourOffset * 60;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"g\": case \"gg\":\n\t\t\t\t\t\tvar eraName = matchGroup;\n\t\t\t\t\t\tif ( !eraName || !cal.eras ) return null;\n\t\t\t\t\t\teraName = trim( eraName.toLowerCase() );\n\t\t\t\t\t\tfor ( var i = 0, l = cal.eras.length; i < l; i++ ) {\n\t\t\t\t\t\t\tif ( eraName === cal.eras[i].name.toLowerCase() ) {\n\t\t\t\t\t\t\t\tera = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// could not find an era with that name\n\t\t\t\t\t\tif ( era === null ) return null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar result = new Date(), defaultYear, convert = cal.convert;\n\t\tdefaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear();\n\t\tif ( year === null ) {\n\t\t\tyear = defaultYear;\n\t\t}\n\t\telse if ( cal.eras ) {\n\t\t\t// year must be shifted to normal gregorian year\n\t\t\t// but not if year was not specified, its already normal gregorian\n\t\t\t// per the main if clause above.\n\t\t\tyear += cal.eras[( era || 0 )].offset;\n\t\t}\n\t\t// set default day and month to 1 and January, so if unspecified, these are the defaults\n\t\t// instead of the current day/month.\n\t\tif ( month === null ) {\n\t\t\tmonth = 0;\n\t\t}\n\t\tif ( date === null ) {\n\t\t\tdate = 1;\n\t\t}\n\t\t// now have year, month, and date, but in the culture's calendar.\n\t\t// convert to gregorian if necessary\n\t\tif ( convert ) {\n\t\t\tresult = convert.toGregorian( year, month, date );\n\t\t\t// conversion failed, must be an invalid match\n\t\t\tif ( result === null ) return null;\n\t\t}\n\t\telse {\n\t\t\t// have to set year, month and date together to avoid overflow based on current date.\n\t\t\tresult.setFullYear( year, month, date );\n\t\t\t// check to see if date overflowed for specified month (only checked 1-31 above).\n\t\t\tif ( result.getDate() !== date ) return null;\n\t\t\t// invalid day of week.\n\t\t\tif ( weekDay !== null && result.getDay() !== weekDay ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t// if pm designator token was found make sure the hours fit the 24-hour clock.\n\t\tif ( pmHour && hour < 12 ) {\n\t\t\thour += 12;\n\t\t}\n\t\tresult.setHours( hour, min, sec, msec );\n\t\tif ( tzMinOffset !== null ) {\n\t\t\t// adjust timezone to utc before applying local offset.\n\t\t\tvar adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() );\n\t\t\t// Safari limits hours and minutes to the range of -127 to 127. We need to use setHours\n\t\t\t// to ensure both these fields will not exceed this range.\tadjustedMin will range\n\t\t\t// somewhere between -1440 and 1500, so we only need to split this into hours.\n\t\t\tresult.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 );\n\t\t}\n\t\treturn result;\n\t};\n}());\n\nparseNegativePattern = function( value, nf, negativePattern ) {\n\tvar neg = nf[ \"-\" ],\n\t\tpos = nf[ \"+\" ],\n\t\tret;\n\tswitch ( negativePattern ) {\n\t\tcase \"n -\":\n\t\t\tneg = \" \" + neg;\n\t\t\tpos = \" \" + pos;\n\t\t\t/* falls through */\n\t\tcase \"n-\":\n\t\t\tif ( endsWith(value, neg) ) {\n\t\t\t\tret = [ \"-\", value.substr(0, value.length - neg.length) ];\n\t\t\t}\n\t\t\telse if ( endsWith(value, pos) ) {\n\t\t\t\tret = [ \"+\", value.substr(0, value.length - pos.length) ];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"- n\":\n\t\t\tneg += \" \";\n\t\t\tpos += \" \";\n\t\t\t/* falls through */\n\t\tcase \"-n\":\n\t\t\tif ( startsWith(value, neg) ) {\n\t\t\t\tret = [ \"-\", value.substr(neg.length) ];\n\t\t\t}\n\t\t\telse if ( startsWith(value, pos) ) {\n\t\t\t\tret = [ \"+\", value.substr(pos.length) ];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"(n)\":\n\t\t\tif ( startsWith(value, \"(\") && endsWith(value, \")\") ) {\n\t\t\t\tret = [ \"-\", value.substr(1, value.length - 2) ];\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn ret || [ \"\", value ];\n};\n\n//\n// public instance functions\n//\n\nGlobalize.prototype.findClosestCulture = function( cultureSelector ) {\n\treturn Globalize.findClosestCulture.call( this, cultureSelector );\n};\n\nGlobalize.prototype.format = function( value, format, cultureSelector ) {\n\treturn Globalize.format.call( this, value, format, cultureSelector );\n};\n\nGlobalize.prototype.localize = function( key, cultureSelector ) {\n\treturn Globalize.localize.call( this, key, cultureSelector );\n};\n\nGlobalize.prototype.parseInt = function( value, radix, cultureSelector ) {\n\treturn Globalize.parseInt.call( this, value, radix, cultureSelector );\n};\n\nGlobalize.prototype.parseFloat = function( value, radix, cultureSelector ) {\n\treturn Globalize.parseFloat.call( this, value, radix, cultureSelector );\n};\n\nGlobalize.prototype.culture = function( cultureSelector ) {\n\treturn Globalize.culture.call( this, cultureSelector );\n};\n\n//\n// public singleton functions\n//\n\nGlobalize.addCultureInfo = function( cultureName, baseCultureName, info ) {\n\n\tvar base = {},\n\t\tisNew = false;\n\n\tif ( typeof cultureName !== \"string\" ) {\n\t\t// cultureName argument is optional string. If not specified, assume info is first\n\t\t// and only argument. Specified info deep-extends current culture.\n\t\tinfo = cultureName;\n\t\tcultureName = this.culture().name;\n\t\tbase = this.cultures[ cultureName ];\n\t} else if ( typeof baseCultureName !== \"string\" ) {\n\t\t// baseCultureName argument is optional string. If not specified, assume info is second\n\t\t// argument. Specified info deep-extends specified culture.\n\t\t// If specified culture does not exist, create by deep-extending default\n\t\tinfo = baseCultureName;\n\t\tisNew = ( this.cultures[ cultureName ] == null );\n\t\tbase = this.cultures[ cultureName ] || this.cultures[ \"default\" ];\n\t} else {\n\t\t// cultureName and baseCultureName specified. Assume a new culture is being created\n\t\t// by deep-extending an specified base culture\n\t\tisNew = true;\n\t\tbase = this.cultures[ baseCultureName ];\n\t}\n\n\tthis.cultures[ cultureName ] = extend(true, {},\n\t\tbase,\n\t\tinfo\n\t);\n\t// Make the standard calendar the current culture if it's a new culture\n\tif ( isNew ) {\n\t\tthis.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard;\n\t}\n};\n\nGlobalize.findClosestCulture = function( name ) {\n\tvar match;\n\tif ( !name ) {\n\t\treturn this.findClosestCulture( this.cultureSelector ) || this.cultures[ \"default\" ];\n\t}\n\tif ( typeof name === \"string\" ) {\n\t\tname = name.split( \",\" );\n\t}\n\tif ( isArray(name) ) {\n\t\tvar lang,\n\t\t\tcultures = this.cultures,\n\t\t\tlist = name,\n\t\t\ti, l = list.length,\n\t\t\tprioritized = [];\n\t\tfor ( i = 0; i < l; i++ ) {\n\t\t\tname = trim( list[i] );\n\t\t\tvar pri, parts = name.split( \";\" );\n\t\t\tlang = trim( parts[0] );\n\t\t\tif ( parts.length === 1 ) {\n\t\t\t\tpri = 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tname = trim( parts[1] );\n\t\t\t\tif ( name.indexOf(\"q=\") === 0 ) {\n\t\t\t\t\tname = name.substr( 2 );\n\t\t\t\t\tpri = parseFloat( name );\n\t\t\t\t\tpri = isNaN( pri ) ? 0 : pri;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpri = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprioritized.push({ lang: lang, pri: pri });\n\t\t}\n\t\tprioritized.sort(function( a, b ) {\n\t\t\tif ( a.pri < b.pri ) {\n\t\t\t\treturn 1;\n\t\t\t} else if ( a.pri > b.pri ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\t\t// exact match\n\t\tfor ( i = 0; i < l; i++ ) {\n\t\t\tlang = prioritized[ i ].lang;\n\t\t\tmatch = cultures[ lang ];\n\t\t\tif ( match ) {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t}\n\n\t\t// neutral language match\n\t\tfor ( i = 0; i < l; i++ ) {\n\t\t\tlang = prioritized[ i ].lang;\n\t\t\tdo {\n\t\t\t\tvar index = lang.lastIndexOf( \"-\" );\n\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// strip off the last part. e.g. en-US => en\n\t\t\t\tlang = lang.substr( 0, index );\n\t\t\t\tmatch = cultures[ lang ];\n\t\t\t\tif ( match ) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( 1 );\n\t\t}\n\n\t\t// last resort: match first culture using that language\n\t\tfor ( i = 0; i < l; i++ ) {\n\t\t\tlang = prioritized[ i ].lang;\n\t\t\tfor ( var cultureKey in cultures ) {\n\t\t\t\tvar culture = cultures[ cultureKey ];\n\t\t\t\tif ( culture.language == lang ) {\n\t\t\t\t\treturn culture;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse if ( typeof name === \"object\" ) {\n\t\treturn name;\n\t}\n\treturn match || null;\n};\n\nGlobalize.format = function( value, format, cultureSelector ) {\n\tvar culture = this.findClosestCulture( cultureSelector );\n\tif ( value instanceof Date ) {\n\t\tvalue = formatDate( value, format, culture );\n\t}\n\telse if ( typeof value === \"number\" ) {\n\t\tvalue = formatNumber( value, format, culture );\n\t}\n\treturn value;\n};\n\nGlobalize.localize = function( key, cultureSelector ) {\n\treturn this.findClosestCulture( cultureSelector ).messages[ key ] ||\n\t\tthis.cultures[ \"default\" ].messages[ key ];\n};\n\nGlobalize.parseDate = function( value, formats, culture ) {\n\tculture = this.findClosestCulture( culture );\n\n\tvar date, prop, patterns;\n\tif ( formats ) {\n\t\tif ( typeof formats === \"string\" ) {\n\t\t\tformats = [ formats ];\n\t\t}\n\t\tif ( formats.length ) {\n\t\t\tfor ( var i = 0, l = formats.length; i < l; i++ ) {\n\t\t\t\tvar format = formats[ i ];\n\t\t\t\tif ( format ) {\n\t\t\t\t\tdate = parseExact( value, format, culture );\n\t\t\t\t\tif ( date ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tpatterns = culture.calendar.patterns;\n\t\tfor ( prop in patterns ) {\n\t\t\tdate = parseExact( value, patterns[prop], culture );\n\t\t\tif ( date ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn date || null;\n};\n\nGlobalize.parseInt = function( value, radix, cultureSelector ) {\n\treturn truncate( Globalize.parseFloat(value, radix, cultureSelector) );\n};\n\nGlobalize.parseFloat = function( value, radix, cultureSelector ) {\n\t// radix argument is optional\n\tif ( typeof radix !== \"number\" ) {\n\t\tcultureSelector = radix;\n\t\tradix = 10;\n\t}\n\n\tvar culture = this.findClosestCulture( cultureSelector );\n\tvar ret = NaN,\n\t\tnf = culture.numberFormat;\n\n\tif ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) {\n\t\t// remove currency symbol\n\t\tvalue = value.replace( culture.numberFormat.currency.symbol, \"\" );\n\t\t// replace decimal seperator\n\t\tvalue = value.replace( culture.numberFormat.currency[\".\"], culture.numberFormat[\".\"] );\n\t}\n\n\t//Remove percentage character from number string before parsing\n\tif ( value.indexOf(culture.numberFormat.percent.symbol) > -1){\n\t\tvalue = value.replace( culture.numberFormat.percent.symbol, \"\" );\n\t}\n\n\t// remove spaces: leading, trailing and between - and number. Used for negative currency pt-BR\n\tvalue = value.replace( / /g, \"\" );\n\n\t// allow infinity or hexidecimal\n\tif ( regexInfinity.test(value) ) {\n\t\tret = parseFloat( value );\n\t}\n\telse if ( !radix && regexHex.test(value) ) {\n\t\tret = parseInt( value, 16 );\n\t}\n\telse {\n\n\t\t// determine sign and number\n\t\tvar signInfo = parseNegativePattern( value, nf, nf.pattern[0] ),\n\t\t\tsign = signInfo[ 0 ],\n\t\t\tnum = signInfo[ 1 ];\n\n\t\t// #44 - try parsing as \"(n)\"\n\t\tif ( sign === \"\" && nf.pattern[0] !== \"(n)\" ) {\n\t\t\tsignInfo = parseNegativePattern( value, nf, \"(n)\" );\n\t\t\tsign = signInfo[ 0 ];\n\t\t\tnum = signInfo[ 1 ];\n\t\t}\n\n\t\t// try parsing as \"-n\"\n\t\tif ( sign === \"\" && nf.pattern[0] !== \"-n\" ) {\n\t\t\tsignInfo = parseNegativePattern( value, nf, \"-n\" );\n\t\t\tsign = signInfo[ 0 ];\n\t\t\tnum = signInfo[ 1 ];\n\t\t}\n\n\t\tsign = sign || \"+\";\n\n\t\t// determine exponent and number\n\t\tvar exponent,\n\t\t\tintAndFraction,\n\t\t\texponentPos = num.indexOf( \"e\" );\n\t\tif ( exponentPos < 0 ) exponentPos = num.indexOf( \"E\" );\n\t\tif ( exponentPos < 0 ) {\n\t\t\tintAndFraction = num;\n\t\t\texponent = null;\n\t\t}\n\t\telse {\n\t\t\tintAndFraction = num.substr( 0, exponentPos );\n\t\t\texponent = num.substr( exponentPos + 1 );\n\t\t}\n\t\t// determine decimal position\n\t\tvar integer,\n\t\t\tfraction,\n\t\t\tdecSep = nf[ \".\" ],\n\t\t\tdecimalPos = intAndFraction.indexOf( decSep );\n\t\tif ( decimalPos < 0 ) {\n\t\t\tinteger = intAndFraction;\n\t\t\tfraction = null;\n\t\t}\n\t\telse {\n\t\t\tinteger = intAndFraction.substr( 0, decimalPos );\n\t\t\tfraction = intAndFraction.substr( decimalPos + decSep.length );\n\t\t}\n\t\t// handle groups (e.g. 1,000,000)\n\t\tvar groupSep = nf[ \",\" ];\n\t\tinteger = integer.split( groupSep ).join( \"\" );\n\t\tvar altGroupSep = groupSep.replace( /\\u00A0/g, \" \" );\n\t\tif ( groupSep !== altGroupSep ) {\n\t\t\tinteger = integer.split( altGroupSep ).join( \"\" );\n\t\t}\n\t\t// build a natively parsable number string\n\t\tvar p = sign + integer;\n\t\tif ( fraction !== null ) {\n\t\t\tp += \".\" + fraction;\n\t\t}\n\t\tif ( exponent !== null ) {\n\t\t\t// exponent itself may have a number patternd\n\t\t\tvar expSignInfo = parseNegativePattern( exponent, nf, \"-n\" );\n\t\t\tp += \"e\" + ( expSignInfo[0] || \"+\" ) + expSignInfo[ 1 ];\n\t\t}\n\t\tif ( regexParseFloat.test(p) ) {\n\t\t\tret = parseFloat( p );\n\t\t}\n\t}\n\treturn ret;\n};\n\nGlobalize.culture = function( cultureSelector ) {\n\t// setter\n\tif ( typeof cultureSelector !== \"undefined\" ) {\n\t\tthis.cultureSelector = cultureSelector;\n\t}\n\t// getter\n\treturn this.findClosestCulture( cultureSelector ) || this.cultures[ \"default\" ];\n};\n\n}( this ));\n","// Underscore.js 1.8.2\r\n// http://underscorejs.org\r\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\r\n// Underscore may be freely distributed under the MIT license.\r\n(function () { function n(n) { function t(t, r, e, u, i, o) { for (; i >= 0 && o > i; i += n) { var a = u ? u[i] : i; e = r(e, t[a], a, t) } return e } return function (r, e, u, i) { e = d(e, i, 4); var o = !w(r) && m.keys(r), a = (o || r).length, c = n > 0 ? 0 : a - 1; return arguments.length < 3 && (u = r[o ? o[c] : c], c += n), t(r, e, u, o, c, a) } } function t(n) { return function (t, r, e) { r = b(r, e); for (var u = null != t && t.length, i = n > 0 ? 0 : u - 1; i >= 0 && u > i; i += n) if (r(t[i], i, t)) return i; return -1 } } function r(n, t) { var r = S.length, e = n.constructor, u = m.isFunction(e) && e.prototype || o, i = \"constructor\"; for (m.has(n, i) && !m.contains(t, i) && t.push(i) ; r--;) i = S[r], i in n && n[i] !== u[i] && !m.contains(t, i) && t.push(i) } var e = this, u = e._, i = Array.prototype, o = Object.prototype, a = Function.prototype, c = i.push, l = i.slice, f = o.toString, s = o.hasOwnProperty, p = Array.isArray, h = Object.keys, v = a.bind, g = Object.create, y = function () { }, m = function (n) { return n instanceof m ? n : this instanceof m ? void (this._wrapped = n) : new m(n) }; \"undefined\" != typeof exports ? (\"undefined\" != typeof module && module.exports && (exports = module.exports = m), exports._ = m) : e._ = m, m.VERSION = \"1.8.2\"; var d = function (n, t, r) { if (t === void 0) return n; switch (null == r ? 3 : r) { case 1: return function (r) { return n.call(t, r) }; case 2: return function (r, e) { return n.call(t, r, e) }; case 3: return function (r, e, u) { return n.call(t, r, e, u) }; case 4: return function (r, e, u, i) { return n.call(t, r, e, u, i) } } return function () { return n.apply(t, arguments) } }, b = function (n, t, r) { return null == n ? m.identity : m.isFunction(n) ? d(n, t, r) : m.isObject(n) ? m.matcher(n) : m.property(n) }; m.iteratee = function (n, t) { return b(n, t, 1 / 0) }; var x = function (n, t) { return function (r) { var e = arguments.length; if (2 > e || null == r) return r; for (var u = 1; e > u; u++) for (var i = arguments[u], o = n(i), a = o.length, c = 0; a > c; c++) { var l = o[c]; t && r[l] !== void 0 || (r[l] = i[l]) } return r } }, _ = function (n) { if (!m.isObject(n)) return {}; if (g) return g(n); y.prototype = n; var t = new y; return y.prototype = null, t }, j = Math.pow(2, 53) - 1, w = function (n) { var t = n && n.length; return \"number\" == typeof t && t >= 0 && j >= t }; m.each = m.forEach = function (n, t, r) { t = d(t, r); var e, u; if (w(n)) for (e = 0, u = n.length; u > e; e++) t(n[e], e, n); else { var i = m.keys(n); for (e = 0, u = i.length; u > e; e++) t(n[i[e]], i[e], n) } return n }, m.map = m.collect = function (n, t, r) { t = b(t, r); for (var e = !w(n) && m.keys(n), u = (e || n).length, i = Array(u), o = 0; u > o; o++) { var a = e ? e[o] : o; i[o] = t(n[a], a, n) } return i }, m.reduce = m.foldl = m.inject = n(1), m.reduceRight = m.foldr = n(-1), m.find = m.detect = function (n, t, r) { var e; return e = w(n) ? m.findIndex(n, t, r) : m.findKey(n, t, r), e !== void 0 && e !== -1 ? n[e] : void 0 }, m.filter = m.select = function (n, t, r) { var e = []; return t = b(t, r), m.each(n, function (n, r, u) { t(n, r, u) && e.push(n) }), e }, m.reject = function (n, t, r) { return m.filter(n, m.negate(b(t)), r) }, m.every = m.all = function (n, t, r) { t = b(t, r); for (var e = !w(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) { var o = e ? e[i] : i; if (!t(n[o], o, n)) return !1 } return !0 }, m.some = m.any = function (n, t, r) { t = b(t, r); for (var e = !w(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) { var o = e ? e[i] : i; if (t(n[o], o, n)) return !0 } return !1 }, m.contains = m.includes = m.include = function (n, t, r) { return w(n) || (n = m.values(n)), m.indexOf(n, t, \"number\" == typeof r && r) >= 0 }, m.invoke = function (n, t) { var r = l.call(arguments, 2), e = m.isFunction(t); return m.map(n, function (n) { var u = e ? t : n[t]; return null == u ? u : u.apply(n, r) }) }, m.pluck = function (n, t) { return m.map(n, m.property(t)) }, m.where = function (n, t) { return m.filter(n, m.matcher(t)) }, m.findWhere = function (n, t) { return m.find(n, m.matcher(t)) }, m.max = function (n, t, r) { var e, u, i = -1 / 0, o = -1 / 0; if (null == t && null != n) { n = w(n) ? n : m.values(n); for (var a = 0, c = n.length; c > a; a++) e = n[a], e > i && (i = e) } else t = b(t, r), m.each(n, function (n, r, e) { u = t(n, r, e), (u > o || u === -1 / 0 && i === -1 / 0) && (i = n, o = u) }); return i }, m.min = function (n, t, r) { var e, u, i = 1 / 0, o = 1 / 0; if (null == t && null != n) { n = w(n) ? n : m.values(n); for (var a = 0, c = n.length; c > a; a++) e = n[a], i > e && (i = e) } else t = b(t, r), m.each(n, function (n, r, e) { u = t(n, r, e), (o > u || 1 / 0 === u && 1 / 0 === i) && (i = n, o = u) }); return i }, m.shuffle = function (n) { for (var t, r = w(n) ? n : m.values(n), e = r.length, u = Array(e), i = 0; e > i; i++) t = m.random(0, i), t !== i && (u[i] = u[t]), u[t] = r[i]; return u }, m.sample = function (n, t, r) { return null == t || r ? (w(n) || (n = m.values(n)), n[m.random(n.length - 1)]) : m.shuffle(n).slice(0, Math.max(0, t)) }, m.sortBy = function (n, t, r) { return t = b(t, r), m.pluck(m.map(n, function (n, r, e) { return { value: n, index: r, criteria: t(n, r, e) } }).sort(function (n, t) { var r = n.criteria, e = t.criteria; if (r !== e) { if (r > e || r === void 0) return 1; if (e > r || e === void 0) return -1 } return n.index - t.index }), \"value\") }; var A = function (n) { return function (t, r, e) { var u = {}; return r = b(r, e), m.each(t, function (e, i) { var o = r(e, i, t); n(u, e, o) }), u } }; m.groupBy = A(function (n, t, r) { m.has(n, r) ? n[r].push(t) : n[r] = [t] }), m.indexBy = A(function (n, t, r) { n[r] = t }), m.countBy = A(function (n, t, r) { m.has(n, r) ? n[r]++ : n[r] = 1 }), m.toArray = function (n) { return n ? m.isArray(n) ? l.call(n) : w(n) ? m.map(n, m.identity) : m.values(n) : [] }, m.size = function (n) { return null == n ? 0 : w(n) ? n.length : m.keys(n).length }, m.partition = function (n, t, r) { t = b(t, r); var e = [], u = []; return m.each(n, function (n, r, i) { (t(n, r, i) ? e : u).push(n) }), [e, u] }, m.first = m.head = m.take = function (n, t, r) { return null == n ? void 0 : null == t || r ? n[0] : m.initial(n, n.length - t) }, m.initial = function (n, t, r) { return l.call(n, 0, Math.max(0, n.length - (null == t || r ? 1 : t))) }, m.last = function (n, t, r) { return null == n ? void 0 : null == t || r ? n[n.length - 1] : m.rest(n, Math.max(0, n.length - t)) }, m.rest = m.tail = m.drop = function (n, t, r) { return l.call(n, null == t || r ? 1 : t) }, m.compact = function (n) { return m.filter(n, m.identity) }; var k = function (n, t, r, e) { for (var u = [], i = 0, o = e || 0, a = n && n.length; a > o; o++) { var c = n[o]; if (w(c) && (m.isArray(c) || m.isArguments(c))) { t || (c = k(c, t, r)); var l = 0, f = c.length; for (u.length += f; f > l;) u[i++] = c[l++] } else r || (u[i++] = c) } return u }; m.flatten = function (n, t) { return k(n, t, !1) }, m.without = function (n) { return m.difference(n, l.call(arguments, 1)) }, m.uniq = m.unique = function (n, t, r, e) { if (null == n) return []; m.isBoolean(t) || (e = r, r = t, t = !1), null != r && (r = b(r, e)); for (var u = [], i = [], o = 0, a = n.length; a > o; o++) { var c = n[o], l = r ? r(c, o, n) : c; t ? (o && i === l || u.push(c), i = l) : r ? m.contains(i, l) || (i.push(l), u.push(c)) : m.contains(u, c) || u.push(c) } return u }, m.union = function () { return m.uniq(k(arguments, !0, !0)) }, m.intersection = function (n) { if (null == n) return []; for (var t = [], r = arguments.length, e = 0, u = n.length; u > e; e++) { var i = n[e]; if (!m.contains(t, i)) { for (var o = 1; r > o && m.contains(arguments[o], i) ; o++); o === r && t.push(i) } } return t }, m.difference = function (n) { var t = k(arguments, !0, !0, 1); return m.filter(n, function (n) { return !m.contains(t, n) }) }, m.zip = function () { return m.unzip(arguments) }, m.unzip = function (n) { for (var t = n && m.max(n, \"length\").length || 0, r = Array(t), e = 0; t > e; e++) r[e] = m.pluck(n, e); return r }, m.object = function (n, t) { for (var r = {}, e = 0, u = n && n.length; u > e; e++) t ? r[n[e]] = t[e] : r[n[e][0]] = n[e][1]; return r }, m.indexOf = function (n, t, r) { var e = 0, u = n && n.length; if (\"number\" == typeof r) e = 0 > r ? Math.max(0, u + r) : r; else if (r && u) return e = m.sortedIndex(n, t), n[e] === t ? e : -1; if (t !== t) return m.findIndex(l.call(n, e), m.isNaN); for (; u > e; e++) if (n[e] === t) return e; return -1 }, m.lastIndexOf = function (n, t, r) { var e = n ? n.length : 0; if (\"number\" == typeof r && (e = 0 > r ? e + r + 1 : Math.min(e, r + 1)), t !== t) return m.findLastIndex(l.call(n, 0, e), m.isNaN); for (; --e >= 0;) if (n[e] === t) return e; return -1 }, m.findIndex = t(1), m.findLastIndex = t(-1), m.sortedIndex = function (n, t, r, e) { r = b(r, e, 1); for (var u = r(t), i = 0, o = n.length; o > i;) { var a = Math.floor((i + o) / 2); r(n[a]) < u ? i = a + 1 : o = a } return i }, m.range = function (n, t, r) { arguments.length <= 1 && (t = n || 0, n = 0), r = r || 1; for (var e = Math.max(Math.ceil((t - n) / r), 0), u = Array(e), i = 0; e > i; i++, n += r) u[i] = n; return u }; var O = function (n, t, r, e, u) { if (!(e instanceof t)) return n.apply(r, u); var i = _(n.prototype), o = n.apply(i, u); return m.isObject(o) ? o : i }; m.bind = function (n, t) { if (v && n.bind === v) return v.apply(n, l.call(arguments, 1)); if (!m.isFunction(n)) throw new TypeError(\"Bind must be called on a function\"); var r = l.call(arguments, 2), e = function () { return O(n, e, t, this, r.concat(l.call(arguments))) }; return e }, m.partial = function (n) { var t = l.call(arguments, 1), r = function () { for (var e = 0, u = t.length, i = Array(u), o = 0; u > o; o++) i[o] = t[o] === m ? arguments[e++] : t[o]; for (; e < arguments.length;) i.push(arguments[e++]); return O(n, r, this, this, i) }; return r }, m.bindAll = function (n) { var t, r, e = arguments.length; if (1 >= e) throw new Error(\"bindAll must be passed function names\"); for (t = 1; e > t; t++) r = arguments[t], n[r] = m.bind(n[r], n); return n }, m.memoize = function (n, t) { var r = function (e) { var u = r.cache, i = \"\" + (t ? t.apply(this, arguments) : e); return m.has(u, i) || (u[i] = n.apply(this, arguments)), u[i] }; return r.cache = {}, r }, m.delay = function (n, t) { var r = l.call(arguments, 2); return setTimeout(function () { return n.apply(null, r) }, t) }, m.defer = m.partial(m.delay, m, 1), m.throttle = function (n, t, r) { var e, u, i, o = null, a = 0; r || (r = {}); var c = function () { a = r.leading === !1 ? 0 : m.now(), o = null, i = n.apply(e, u), o || (e = u = null) }; return function () { var l = m.now(); a || r.leading !== !1 || (a = l); var f = t - (l - a); return e = this, u = arguments, 0 >= f || f > t ? (o && (clearTimeout(o), o = null), a = l, i = n.apply(e, u), o || (e = u = null)) : o || r.trailing === !1 || (o = setTimeout(c, f)), i } }, m.debounce = function (n, t, r) { var e, u, i, o, a, c = function () { var l = m.now() - o; t > l && l >= 0 ? e = setTimeout(c, t - l) : (e = null, r || (a = n.apply(i, u), e || (i = u = null))) }; return function () { i = this, u = arguments, o = m.now(); var l = r && !e; return e || (e = setTimeout(c, t)), l && (a = n.apply(i, u), i = u = null), a } }, m.wrap = function (n, t) { return m.partial(t, n) }, m.negate = function (n) { return function () { return !n.apply(this, arguments) } }, m.compose = function () { var n = arguments, t = n.length - 1; return function () { for (var r = t, e = n[t].apply(this, arguments) ; r--;) e = n[r].call(this, e); return e } }, m.after = function (n, t) { return function () { return --n < 1 ? t.apply(this, arguments) : void 0 } }, m.before = function (n, t) { var r; return function () { return --n > 0 && (r = t.apply(this, arguments)), 1 >= n && (t = null), r } }, m.once = m.partial(m.before, 2); var F = !{ toString: null }.propertyIsEnumerable(\"toString\"), S = [\"valueOf\", \"isPrototypeOf\", \"toString\", \"propertyIsEnumerable\", \"hasOwnProperty\", \"toLocaleString\"]; m.keys = function (n) { if (!m.isObject(n)) return []; if (h) return h(n); var t = []; for (var e in n) m.has(n, e) && t.push(e); return F && r(n, t), t }, m.allKeys = function (n) { if (!m.isObject(n)) return []; var t = []; for (var e in n) t.push(e); return F && r(n, t), t }, m.values = function (n) { for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = n[t[u]]; return e }, m.mapObject = function (n, t, r) { t = b(t, r); for (var e, u = m.keys(n), i = u.length, o = {}, a = 0; i > a; a++) e = u[a], o[e] = t(n[e], e, n); return o }, m.pairs = function (n) { for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = [t[u], n[t[u]]]; return e }, m.invert = function (n) { for (var t = {}, r = m.keys(n), e = 0, u = r.length; u > e; e++) t[n[r[e]]] = r[e]; return t }, m.functions = m.methods = function (n) { var t = []; for (var r in n) m.isFunction(n[r]) && t.push(r); return t.sort() }, m.extend = x(m.allKeys), m.extendOwn = m.assign = x(m.keys), m.findKey = function (n, t, r) { t = b(t, r); for (var e, u = m.keys(n), i = 0, o = u.length; o > i; i++) if (e = u[i], t(n[e], e, n)) return e }, m.pick = function (n, t, r) { var e, u, i = {}, o = n; if (null == o) return i; m.isFunction(t) ? (u = m.allKeys(o), e = d(t, r)) : (u = k(arguments, !1, !1, 1), e = function (n, t, r) { return t in r }, o = Object(o)); for (var a = 0, c = u.length; c > a; a++) { var l = u[a], f = o[l]; e(f, l, o) && (i[l] = f) } return i }, m.omit = function (n, t, r) { if (m.isFunction(t)) t = m.negate(t); else { var e = m.map(k(arguments, !1, !1, 1), String); t = function (n, t) { return !m.contains(e, t) } } return m.pick(n, t, r) }, m.defaults = x(m.allKeys, !0), m.clone = function (n) { return m.isObject(n) ? m.isArray(n) ? n.slice() : m.extend({}, n) : n }, m.tap = function (n, t) { return t(n), n }, m.isMatch = function (n, t) { var r = m.keys(t), e = r.length; if (null == n) return !e; for (var u = Object(n), i = 0; e > i; i++) { var o = r[i]; if (t[o] !== u[o] || !(o in u)) return !1 } return !0 }; var E = function (n, t, r, e) { if (n === t) return 0 !== n || 1 / n === 1 / t; if (null == n || null == t) return n === t; n instanceof m && (n = n._wrapped), t instanceof m && (t = t._wrapped); var u = f.call(n); if (u !== f.call(t)) return !1; switch (u) { case \"[object RegExp]\": case \"[object String]\": return \"\" + n == \"\" + t; case \"[object Number]\": return +n !== +n ? +t !== +t : 0 === +n ? 1 / +n === 1 / t : +n === +t; case \"[object Date]\": case \"[object Boolean]\": return +n === +t } var i = \"[object Array]\" === u; if (!i) { if (\"object\" != typeof n || \"object\" != typeof t) return !1; var o = n.constructor, a = t.constructor; if (o !== a && !(m.isFunction(o) && o instanceof o && m.isFunction(a) && a instanceof a) && \"constructor\" in n && \"constructor\" in t) return !1 } r = r || [], e = e || []; for (var c = r.length; c--;) if (r[c] === n) return e[c] === t; if (r.push(n), e.push(t), i) { if (c = n.length, c !== t.length) return !1; for (; c--;) if (!E(n[c], t[c], r, e)) return !1 } else { var l, s = m.keys(n); if (c = s.length, m.keys(t).length !== c) return !1; for (; c--;) if (l = s[c], !m.has(t, l) || !E(n[l], t[l], r, e)) return !1 } return r.pop(), e.pop(), !0 }; m.isEqual = function (n, t) { return E(n, t) }, m.isEmpty = function (n) { return null == n ? !0 : w(n) && (m.isArray(n) || m.isString(n) || m.isArguments(n)) ? 0 === n.length : 0 === m.keys(n).length }, m.isElement = function (n) { return !(!n || 1 !== n.nodeType) }, m.isArray = p || function (n) { return \"[object Array]\" === f.call(n) }, m.isObject = function (n) { var t = typeof n; return \"function\" === t || \"object\" === t && !!n }, m.each([\"Arguments\", \"Function\", \"String\", \"Number\", \"Date\", \"RegExp\", \"Error\"], function (n) { m[\"is\" + n] = function (t) { return f.call(t) === \"[object \" + n + \"]\" } }), m.isArguments(arguments) || (m.isArguments = function (n) { return m.has(n, \"callee\") }), \"function\" != typeof /./ && \"object\" != typeof Int8Array && (m.isFunction = function (n) { return \"function\" == typeof n || !1 }), m.isFinite = function (n) { return isFinite(n) && !isNaN(parseFloat(n)) }, m.isNaN = function (n) { return m.isNumber(n) && n !== +n }, m.isBoolean = function (n) { return n === !0 || n === !1 || \"[object Boolean]\" === f.call(n) }, m.isNull = function (n) { return null === n }, m.isUndefined = function (n) { return n === void 0 }, m.has = function (n, t) { return null != n && s.call(n, t) }, m.noConflict = function () { return e._ = u, this }, m.identity = function (n) { return n }, m.constant = function (n) { return function () { return n } }, m.noop = function () { }, m.property = function (n) { return function (t) { return null == t ? void 0 : t[n] } }, m.propertyOf = function (n) { return null == n ? function () { } : function (t) { return n[t] } }, m.matcher = m.matches = function (n) { return n = m.extendOwn({}, n), function (t) { return m.isMatch(t, n) } }, m.times = function (n, t, r) { var e = Array(Math.max(0, n)); t = d(t, r, 1); for (var u = 0; n > u; u++) e[u] = t(u); return e }, m.random = function (n, t) { return null == t && (t = n, n = 0), n + Math.floor(Math.random() * (t - n + 1)) }, m.now = Date.now || function () { return (new Date).getTime() }; var M = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"`\": \"`\" }, N = m.invert(M), I = function (n) { var t = function (t) { return n[t] }, r = \"(?:\" + m.keys(n).join(\"|\") + \")\", e = RegExp(r), u = RegExp(r, \"g\"); return function (n) { return n = null == n ? \"\" : \"\" + n, e.test(n) ? n.replace(u, t) : n } }; m.escape = I(M), m.unescape = I(N), m.result = function (n, t, r) { var e = null == n ? void 0 : n[t]; return e === void 0 && (e = r), m.isFunction(e) ? e.call(n) : e }; var B = 0; m.uniqueId = function (n) { var t = ++B + \"\"; return n ? n + t : t }, m.templateSettings = { evaluate: /<%([\\s\\S]+?)%>/g, interpolate: /<%=([\\s\\S]+?)%>/g, escape: /<%-([\\s\\S]+?)%>/g }; var T = /(.)^/, R = { \"'\": \"'\", \"\\\\\": \"\\\\\", \"\\r\": \"r\", \"\\n\": \"n\", \"\\u2028\": \"u2028\", \"\\u2029\": \"u2029\" }, q = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g, K = function (n) { return \"\\\\\" + R[n] }; m.template = function (n, t, r) { !t && r && (t = r), t = m.defaults({}, t, m.templateSettings); var e = RegExp([(t.escape || T).source, (t.interpolate || T).source, (t.evaluate || T).source].join(\"|\") + \"|$\", \"g\"), u = 0, i = \"__p+='\"; n.replace(e, function (t, r, e, o, a) { return i += n.slice(u, a).replace(q, K), u = a + t.length, r ? i += \"'+\\n((__t=(\" + r + \"))==null?'':_.escape(__t))+\\n'\" : e ? i += \"'+\\n((__t=(\" + e + \"))==null?'':__t)+\\n'\" : o && (i += \"';\\n\" + o + \"\\n__p+='\"), t }), i += \"';\\n\", t.variable || (i = \"with(obj||{}){\\n\" + i + \"}\\n\"), i = \"var __t,__p='',__j=Array.prototype.join,\" + \"print=function(){__p+=__j.call(arguments,'');};\\n\" + i + \"return __p;\\n\"; try { var o = new Function(t.variable || \"obj\", \"_\", i) } catch (a) { throw a.source = i, a } var c = function (n) { return o.call(this, n, m) }, l = t.variable || \"obj\"; return c.source = \"function(\" + l + \"){\\n\" + i + \"}\", c }, m.chain = function (n) { var t = m(n); return t._chain = !0, t }; var z = function (n, t) { return n._chain ? m(t).chain() : t }; m.mixin = function (n) { m.each(m.functions(n), function (t) { var r = m[t] = n[t]; m.prototype[t] = function () { var n = [this._wrapped]; return c.apply(n, arguments), z(this, r.apply(m, n)) } }) }, m.mixin(m), m.each([\"pop\", \"push\", \"reverse\", \"shift\", \"sort\", \"splice\", \"unshift\"], function (n) { var t = i[n]; m.prototype[n] = function () { var r = this._wrapped; return t.apply(r, arguments), \"shift\" !== n && \"splice\" !== n || 0 !== r.length || delete r[0], z(this, r) } }), m.each([\"concat\", \"join\", \"slice\"], function (n) { var t = i[n]; m.prototype[n] = function () { return z(this, t.apply(this._wrapped, arguments)) } }), m.prototype.value = function () { return this._wrapped }, m.prototype.valueOf = m.prototype.toJSON = m.prototype.value, m.prototype.toString = function () { return \"\" + this._wrapped }, \"function\" == typeof define && define.amd && define(\"underscore\", [], function () { return m }) }).call(this);\r\n//# sourceMappingURL=underscore-min.map","/// Knockout Mapping plugin v2.3.5\r\n/// (c) 2012 Steven Sanderson, Roy Jacobs - http://knockoutjs.com/\r\n/// License: MIT (http://www.opensource.org/licenses/mit-license.php)\r\n(function (e) { \"function\" === typeof require && \"object\" === typeof exports && \"object\" === typeof module ? e(require(\"knockout\"), exports) : \"function\" === typeof define && define.amd ? define([\"knockout\", \"exports\"], e) : e(ko, ko.mapping = {}) })(function (e, f) {\r\n function x(b, c) {\r\n var a, d; for (d in c) if (c.hasOwnProperty(d) && c[d]) if (a = f.getType(b[d]), d && b[d] && \"array\" !== a && \"string\" !== a) x(b[d], c[d]); else if (\"array\" === f.getType(b[d]) && \"array\" === f.getType(c[d])) {\r\n a = b; for (var e = d, k = b[d], m = c[d], s = {}, g = k.length - 1; 0 <= g; --g) s[k[g]] = k[g]; for (g =\r\nm.length - 1; 0 <= g; --g) s[m[g]] = m[g]; k = []; m = void 0; for (m in s) k.push(s[m]); a[e] = k\r\n } else b[d] = c[d]\r\n } function D(b, c) { var a = {}; x(a, b); x(a, c); return a } function y(b, c) {\r\n for (var a = D({}, b), e = K.length - 1; 0 <= e; e--) { var f = K[e]; a[f] && (a[\"\"] instanceof Object || (a[\"\"] = {}), a[\"\"][f] = a[f], delete a[f]) } c && (a.ignore = h(c.ignore, a.ignore), a.include = h(c.include, a.include), a.copy = h(c.copy, a.copy), a.observe = h(c.observe, a.observe)); a.ignore = h(a.ignore, i.ignore); a.include = h(a.include, i.include); a.copy = h(a.copy, i.copy); a.observe = h(a.observe,\r\ni.observe); a.mappedProperties = a.mappedProperties || {}; a.copiedProperties = a.copiedProperties || {}; return a\r\n } function h(b, c) { \"array\" !== f.getType(b) && (b = \"undefined\" === f.getType(b) ? [] : [b]); \"array\" !== f.getType(c) && (c = \"undefined\" === f.getType(c) ? [] : [c]); return e.utils.arrayGetDistinctValues(b.concat(c)) } function E(b, c, a, d, j, k, m) {\r\n var s = \"array\" === f.getType(e.utils.unwrapObservable(c)), k = k || \"\"; if (f.isMapped(b)) var g = e.utils.unwrapObservable(b)[n], a = D(g, a); var i = m || j, h = function () {\r\n return a[d] && a[d].create instanceof\r\nFunction\r\n }, w = function (b) {\r\n var f = F, g = e.dependentObservable; e.dependentObservable = function (a, b, c) { c = c || {}; a && \"object\" == typeof a && (c = a); var d = c.deferEvaluation, L = !1; c.deferEvaluation = !0; a = new G(a, b, c); if (!d) { var g = a, d = e.dependentObservable; e.dependentObservable = G; a = e.isWriteableObservable(g); e.dependentObservable = d; a = G({ read: function () { L || (e.utils.arrayRemoveItem(f, g), L = !0); return g.apply(g, arguments) }, write: a && function (a) { return g(a) }, deferEvaluation: !0 }); f.push(a) } return a }; e.dependentObservable.fn =\r\nG.fn; e.computed = e.dependentObservable; b = e.utils.unwrapObservable(j) instanceof Array ? a[d].create({ data: b || c, parent: i, skip: M }) : a[d].create({ data: b || c, parent: i }); e.dependentObservable = g; e.computed = e.dependentObservable; return b\r\n }, t = function () { return a[d] && a[d].update instanceof Function }, u = function (b, f) { var g = { data: f || c, parent: i, target: e.utils.unwrapObservable(b) }; e.isWriteableObservable(b) && (g.observable = b); return a[d].update(g) }; if (m = H.get(c)) return m; d = d || \"\"; if (s) {\r\n var s = [], r = !1, l = function (a) { return a };\r\n a[d] && a[d].key && (l = a[d].key, r = !0); e.isObservable(b) || (b = e.observableArray([]), b.mappedRemove = function (a) { var c = \"function\" == typeof a ? a : function (b) { return b === l(a) }; return b.remove(function (a) { return c(l(a)) }) }, b.mappedRemoveAll = function (a) { var c = B(a, l); return b.remove(function (a) { return -1 != e.utils.arrayIndexOf(c, l(a)) }) }, b.mappedDestroy = function (a) { var c = \"function\" == typeof a ? a : function (b) { return b === l(a) }; return b.destroy(function (a) { return c(l(a)) }) }, b.mappedDestroyAll = function (a) {\r\n var c = B(a, l); return b.destroy(function (a) {\r\n return -1 !=\r\ne.utils.arrayIndexOf(c, l(a))\r\n })\r\n }, b.mappedIndexOf = function (a) { var c = B(b(), l), a = l(a); return e.utils.arrayIndexOf(c, a) }, b.mappedCreate = function (a) { if (-1 !== b.mappedIndexOf(a)) throw Error(\"There already is an object with the key that you specified.\"); var c = h() ? w(a) : a; t() && (a = u(c, a), e.isWriteableObservable(c) ? c(a) : c = a); b.push(c); return c }); m = B(e.utils.unwrapObservable(b), l).sort(); g = B(c, l); r && g.sort(); var r = e.utils.compareArrays(m, g), m = {}, I, z = e.utils.unwrapObservable(c), x = {}, y = !0, g = 0; for (I = z.length; g < I; g++) {\r\n var q =\r\nl(z[g]); if (void 0 === q || q instanceof Object) { y = !1; break } x[q] = z[g]\r\n } var z = [], A = 0, g = 0; for (I = r.length; g < I; g++) {\r\n var q = r[g], p, v = k + \"[\" + g + \"]\"; switch (q.status) {\r\n case \"added\": var C = y ? x[q.value] : J(e.utils.unwrapObservable(c), q.value, l); p = E(void 0, C, a, d, b, v, j); h() || (p = e.utils.unwrapObservable(p)); v = N(e.utils.unwrapObservable(c), C, m); p === M ? A++ : z[v - A] = p; m[v] = !0; break; case \"retained\": C = y ? x[q.value] : J(e.utils.unwrapObservable(c), q.value, l); p = J(b, q.value, l); E(p, C, a, d, b, v, j); v = N(e.utils.unwrapObservable(c), C, m); z[v] =\r\np; m[v] = !0; break; case \"deleted\": p = J(b, q.value, l)\r\n } s.push({ event: q.status, item: p })\r\n } b(z); a[d] && a[d].arrayChanged && e.utils.arrayForEach(s, function (b) { a[d].arrayChanged(b.event, b.item) })\r\n } else if (O(c)) {\r\n b = e.utils.unwrapObservable(b); if (!b) { if (h()) return r = w(), t() && (r = u(r)), r; if (t()) return u(r); b = {} } t() && (b = u(b)); H.save(c, b); if (t()) return b; P(c, function (d) {\r\n var f = k.length ? k + \".\" + d : d; if (-1 == e.utils.arrayIndexOf(a.ignore, f)) if (-1 != e.utils.arrayIndexOf(a.copy, f)) b[d] = c[d]; else if (\"object\" != typeof c[d] && \"array\" !=\r\ntypeof c[d] && 0 < a.observe.length && -1 == e.utils.arrayIndexOf(a.observe, f)) b[d] = c[d], a.copiedProperties[f] = !0; else { var g = H.get(c[d]), j = E(b[d], c[d], a, d, b, f, b), g = g || j; if (0 < a.observe.length && -1 == e.utils.arrayIndexOf(a.observe, f)) b[d] = g(), a.copiedProperties[f] = !0; else { if (e.isWriteableObservable(b[d])) b[d](e.utils.unwrapObservable(g)); else g = void 0 === b[d] ? g : e.utils.unwrapObservable(g), b[d] = g; a.mappedProperties[f] = !0 } } \r\n })\r\n } else switch (f.getType(c)) {\r\n case \"function\": t() ? e.isWriteableObservable(c) ? (c(u(c)), b = c) :\r\nb = u(c) : b = c; break; default: if (e.isWriteableObservable(b)) return p = t() ? u(b) : e.utils.unwrapObservable(c), b(p), p; h() || t(); b = h() ? w() : e.observable(e.utils.unwrapObservable(c)); t() && b(u(b))\r\n } return b\r\n } function N(b, c, a) { for (var d = 0, e = b.length; d < e; d++) if (!0 !== a[d] && b[d] === c) return d; return null } function Q(b, c) { var a; c && (a = c(b)); \"undefined\" === f.getType(a) && (a = b); return e.utils.unwrapObservable(a) } function J(b, c, a) {\r\n for (var b = e.utils.unwrapObservable(b), d = 0, f = b.length; d < f; d++) { var k = b[d]; if (Q(k, a) === c) return k } throw Error(\"When calling ko.update*, the key '\" +\r\nc + \"' was not found!\");\r\n } function B(b, c) { return e.utils.arrayMap(e.utils.unwrapObservable(b), function (a) { return c ? Q(a, c) : a }) } function P(b, c) { if (\"array\" === f.getType(b)) for (var a = 0; a < b.length; a++) c(a); else for (a in b) c(a) } function O(b) { var c = f.getType(b); return (\"object\" === c || \"array\" === c) && null !== b } function S() { var b = [], c = []; this.save = function (a, d) { var f = e.utils.arrayIndexOf(b, a); 0 <= f ? c[f] = d : (b.push(a), c.push(d)) }; this.get = function (a) { a = e.utils.arrayIndexOf(b, a); return 0 <= a ? c[a] : void 0 } } function R() {\r\n var b =\r\n{}, c = function (a) { var c; try { c = a } catch (e) { c = \"$$$\" } a = b[c]; void 0 === a && (a = new S, b[c] = a); return a }; this.save = function (a, b) { c(a).save(a, b) }; this.get = function (a) { return c(a).get(a) } \r\n } var n = \"__ko_mapping__\", G = e.dependentObservable, A = 0, F, H, K = [\"create\", \"update\", \"key\", \"arrayChanged\"], M = {}, w = { include: [\"_destroy\"], ignore: [], copy: [], observe: [] }, i = w; f.isMapped = function (b) { return (b = e.utils.unwrapObservable(b)) && b[n] }; f.fromJS = function (b) {\r\n if (0 == arguments.length) throw Error(\"When calling ko.fromJS, pass the object you want to convert.\");\r\n window.setTimeout(function () { A = 0 }, 0); A++ || (F = [], H = new R); var c, a; 2 == arguments.length && (arguments[1][n] ? a = arguments[1] : c = arguments[1]); 3 == arguments.length && (c = arguments[1], a = arguments[2]); a && (c = D(c, a[n])); c = y(c); var d = E(a, b, c); a && (d = a); --A || window.setTimeout(function () { for (; F.length; ) { var a = F.pop(); a && a() } }, 0); d[n] = D(d[n], c); return d\r\n }; f.fromJSON = function (b) { var c = e.utils.parseJson(b); arguments[0] = c; return f.fromJS.apply(this, arguments) }; f.updateFromJS = function () {\r\n throw Error(\"ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!\");\r\n }; f.updateFromJSON = function () { throw Error(\"ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!\"); }; f.toJS = function (b, c) {\r\n i || f.resetDefaultOptions(); if (0 == arguments.length) throw Error(\"When calling ko.mapping.toJS, pass the object you want to convert.\"); if (\"array\" !== f.getType(i.ignore)) throw Error(\"ko.mapping.defaultOptions().ignore should be an array.\"); if (\"array\" !== f.getType(i.include)) throw Error(\"ko.mapping.defaultOptions().include should be an array.\");\r\n if (\"array\" !== f.getType(i.copy)) throw Error(\"ko.mapping.defaultOptions().copy should be an array.\"); c = y(c, b[n]); return f.visitModel(b, function (a) { return e.utils.unwrapObservable(a) }, c)\r\n }; f.toJSON = function (b, c) { var a = f.toJS(b, c); return e.utils.stringifyJson(a) }; f.defaultOptions = function () { if (0 < arguments.length) i = arguments[0]; else return i }; f.resetDefaultOptions = function () { i = { include: w.include.slice(0), ignore: w.ignore.slice(0), copy: w.copy.slice(0)} }; f.getType = function (b) {\r\n if (b && \"object\" === typeof b) {\r\n if (b.constructor ==\r\n(new Date).constructor) return \"date\"; if (\"[object Array]\" === Object.prototype.toString.call(b)) return \"array\"\r\n } return typeof b\r\n }; f.visitModel = function (b, c, a) {\r\n a = a || {}; a.visitedObjects = a.visitedObjects || new R; var d, j = e.utils.unwrapObservable(b); if (O(j)) a = y(a, j[n]), c(b, a.parentName), d = \"array\" === f.getType(j) ? [] : {}; else return c(b, a.parentName); a.visitedObjects.save(b, d); var k = a.parentName; P(j, function (b) {\r\n if (!(a.ignore && -1 != e.utils.arrayIndexOf(a.ignore, b))) {\r\n var i = j[b], g = a, h = k || \"\"; \"array\" === f.getType(j) ? k &&\r\n(h += \"[\" + b + \"]\") : (k && (h += \".\"), h += b); g.parentName = h; if (!(-1 === e.utils.arrayIndexOf(a.copy, b) && -1 === e.utils.arrayIndexOf(a.include, b) && j[n] && j[n].mappedProperties && !j[n].mappedProperties[b] && j[n].copiedProperties && !j[n].copiedProperties[b] && \"array\" !== f.getType(j))) switch (f.getType(e.utils.unwrapObservable(i))) { case \"object\": case \"array\": case \"undefined\": g = a.visitedObjects.get(i); d[b] = \"undefined\" !== f.getType(g) ? g : f.visitModel(i, c, a); break; default: d[b] = c(i, a.parentName) } \r\n } \r\n }); return d\r\n } \r\n});\r\n\r\n","ko.bindingHandlers.numericValue = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n var underlyingObservable = valueAccessor();\r\n var interceptor = ko.dependentObservable({\r\n read: underlyingObservable,\r\n write: function (value) {\r\n if (!isNaN(value)) {\r\n underlyingObservable(parseFloat(value));\r\n }\r\n }\r\n });\r\n ko.bindingHandlers.value.init(element, function () { return interceptor }, allBindingsAccessor);\r\n },\r\n update: ko.bindingHandlers.value.update\r\n};\r\n\r\n\r\n/** Binding for inline validation - jQuery Validation Plugin\r\n* http://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n*/\r\nko.bindingHandlers.valueWithAutoValidation = {\r\n init: ko.bindingHandlers.value.init,\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n ko.bindingHandlers.value.update.apply(this, arguments);\r\n $(element).valid();\r\n var form = $(element.form);\r\n form.trigger('invalid-form.validate', [form.data(\"validator\")]);\r\n }\r\n};\r\n\r\n/** Binding for form validation - jQuery Validation Plugin\r\n* http://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n*/\r\nko.bindingHandlers.jqValidate = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n $(element).validate(options);\r\n }\r\n};\r\n\r\nko.bindingHandlers.masked = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n var mask = allBindingsAccessor().mask || {};\r\n var placeholder = allBindingsAccessor().placeholder;\r\n if (placeholder) {\r\n $(element).mask(mask, { placeholder: placeholder });\r\n } else {\r\n $(element).mask(mask);\r\n }\r\n ko.utils.registerEventHandler(element, \"blur\", function () {\r\n var observable = valueAccessor();\r\n observable($(element).val());\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor());\r\n $(element).val(value);\r\n }\r\n};\r\n \r\n\r\n/** Binding to make content appear with 'fade' effect */\r\nko.bindingHandlers['fadeIn'] = {\r\n 'update': function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n if (options() === true)\r\n $(element).fadeIn('slow');\r\n }\r\n};\r\n/** Binding to make content disappear with 'fade' effect */\r\nko.bindingHandlers['fadeOut'] = {\r\n 'update': function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n if (options() === true)\r\n $(element).fadeOut('slow');\r\n }\r\n};\r\n\r\n/** Binding for stylized buttons - jQuery UI Button Widget\r\n* http://jqueryui.com/demos/button/\r\n*/\r\nko.bindingHandlers.jqButton = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n $(element).button(options);\r\n }\r\n};\r\n\r\n/**\r\n* Binding for jQuery Datatables\r\n* http://datatables.net\r\n*/\r\nko.bindingHandlers.dataTable = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n var defaults = {\r\n \"aaData\": options[\"data\"](),\r\n \"bJQueryUI\": true,\r\n \"bFilter\": true,\r\n \"bAutoWidth\": false,\r\n \"bLengthChange\": false,\r\n \"bRetrieve\": true,\r\n \"bSortClasses\": false,\r\n \"fnRowCallback\": function (nRow, aData, iDisplayIndex) {\r\n $(nRow).mouseover(function () {\r\n $(nRow).attr(\"style\", \"background-color:yellow !important;\");\r\n });\r\n $(nRow).mouseout(function () {\r\n $(nRow).removeAttr(\"style\");\r\n });\r\n if (typeof options[\"rowClick\"] === \"function\") {\r\n $(nRow).unbind('click').click(function () {\r\n options[\"rowClick\"](aData);\r\n });\r\n }\r\n return nRow;\r\n },\r\n \"oLanguage\": TABLE_LANGUAGE\r\n }\r\n var tableOptions = $.extend(defaults, options[\"options\"]);\r\n options[\"object\"]($(element).dataTable(tableOptions).css(\"width\", \"99.5%\"));\r\n },\r\n update: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n options[\"object\"]().fnClearTable();\r\n options[\"object\"]().fnAddData(options[\"data\"](), true);\r\n }\r\n};\r\n\r\n/** Binding for stylized tabs - jQuery UI Tabs Widget\r\n* http://jqueryui.com/demos/tabs/\r\n*/\r\nko.bindingHandlers.jqTabs = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n $(element).tabs(ko.utils.unwrapObservable(options));\r\n },\r\n update: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n $(element).tabs('option', ko.utils.unwrapObservable(options));\r\n }\r\n};\r\n\r\n/** Binding for strict MVVM use, associating an observable with the jQuery object of the element */\r\nko.bindingHandlers.jqElement = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n options($(element));\r\n }\r\n}\r\n\r\n/** Binding for accordion widget - jQuery UI Accordion Widget\r\n* http://jqueryui.com/demos/accordion/\r\n*/\r\nko.bindingHandlers.jqAccordion = {\r\n init: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n var jqElement = $(element);\r\n jqElement.accordion(options);\r\n jqElement.bind(\"valueChanged\", function () {\r\n ko.bindingHandlers.jqAccordion.update(element, valueAccessor);\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var options = valueAccessor();\r\n $(element).accordion('destroy').accordion(options);\r\n }\r\n};\r\n\r\n/** Binding for adding stylized and rich multiselect - jQuery UI MultiSelect Widget\r\n* http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/\r\n*/\r\nko.bindingHandlers.jqMultiSelect = {\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n var defaults = {\r\n click: function (event, ui) {\r\n var selected_options = $.map($(element).multiselect(\"getChecked\"), function (a) { return $(a).val() });\r\n allBindingsAccessor()['selectedOptions'](selected_options);\r\n }\r\n };\r\n var options = $.extend(defaults, valueAccessor());\r\n allBindingsAccessor()['options'].subscribe(function (value) {\r\n ko.bindingHandlers.jqMultiSelect.regenerateMultiselect(element, options, viewModel);\r\n });\r\n allBindingsAccessor()['selectedOptions'].subscribe(function (value) {\r\n ko.bindingHandlers.jqMultiSelect.regenerateMultiselect(element, options, viewModel);\r\n });\r\n },\r\n regenerateMultiselect: function (element, options, viewModel) {\r\n if ($(element).next().hasClass(\"ui-multiselect\")) {\r\n setTimeout(function () {\r\n return $(element).multiselect(\"refresh\").multiselectfilter({\r\n label: options['filterLabel'] || \"Search: \"\r\n }); ;\r\n }, 0);\r\n } else {\r\n setTimeout(function () {\r\n if (options['filter'] === true) {\r\n $(element).multiselect(options).multiselectfilter({\r\n label: options['filterLabel'] || \"Search: \"\r\n });\r\n } else {\r\n $(element).multiselect(options);\r\n }\r\n if (options['noChecks'] === true) {\r\n $(element).next().next().find(\".ui-helper-reset:first\").remove();\r\n }\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/** Binding for window dialogs - jQuery UI Dialog Widget\r\n* http://jqueryui.com/demos/dialog/\r\n*/\r\nko.bindingHandlers.jqDialog = {\r\n init: function (element, valueAccessor) {\r\n var defaults = {\r\n modal: true,\r\n autoOpen: false,\r\n closeOnEscape: false\r\n }\r\n var options = $.extend(defaults, valueAccessor());\r\n $(element).dialog(options);\r\n }\r\n};\r\n\r\n/** jqueryui datepicker\r\n* http://stackoverflow.com/questions/6612705/jquery-ui-datepicker-change-event-not-caught-by-knockoutjs\r\n*/\r\nko.bindingHandlers.datepicker = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n //initialize datepicker with some optional options\r\n var options = allBindingsAccessor().datepickerOptions || {},\r\n $el = $(element);\r\n\r\n $el.datepicker(options);\r\n\r\n //handle the field changing\r\n ko.utils.registerEventHandler(element, \"change\", function () {\r\n var observable = valueAccessor();\r\n observable($el.datepicker(\"getDate\"));\r\n });\r\n\r\n //handle disposal (if KO removes by the template binding)\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n $el.datepicker(\"destroy\");\r\n });\r\n\r\n },\r\n update: function (element, valueAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor()),\r\n $el = $(element);\r\n\r\n //handle date data coming via json from Microsoft\r\n if (String(value).indexOf('/Date(') == 0) {\r\n value = new Date(parseInt(value.replace(/\\/Date\\((.*?)\\)\\//gi, \"$1\")));\r\n }\r\n\r\n var current = $el.datepicker(\"getDate\");\r\n\r\n if (value - current !== 0) {\r\n $el.datepicker(\"setDate\", value);\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.enterkey = {\r\n init: function (element, valueAccessor, allBindings, viewModel) {\r\n var callback = valueAccessor();\r\n $(element).keypress(function (event) {\r\n var keyCode = (event.which ? event.which : event.keyCode);\r\n if (keyCode === 13) {\r\n callback.call(viewModel);\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n};\r\n\r\n/** Binding for delayed value update - only fired if user does not hit any key for 300ms.\r\n* \r\n*/\r\nko.bindingHandlers.debounceValue = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n var currel = element;\r\n var underlyingObservable = valueAccessor();\r\n var interceptor = ko.pureComputed({\r\n read: underlyingObservable,\r\n write: function (value) {\r\n clearTimeout(interceptor.timerHandle);\r\n interceptor.timerHandle = setTimeout(function () {\r\n var oldval = underlyingObservable();\r\n var currval = currel.value;\r\n if (oldval != value && oldval != currval) {\r\n underlyingObservable(currval);//currval is the very current value of the input element.\r\n //if (console)\r\n // console.log('oldval: ' + oldval + '; currval: ' + currval + '; value: ' + value);\r\n }\r\n }, 300);\r\n }\r\n });\r\n ko.bindingHandlers.value.init(element, function () { return interceptor }, allBindingsAccessor);\r\n },\r\n update: ko.bindingHandlers.value.update\r\n};\r\n","//let KO know that we will take care of managing the bindings of our children\r\nko.bindingHandlers.stopBindings = {\r\n init: function () {\r\n return { controlsDescendantBindings: true };\r\n }\r\n};\r\n\r\n//KO 2.1, now allows you to add containerless support for custom bindings\r\nko.virtualElements.allowedBindings.stopBindings = true;","/*\r\n * The MIT License\r\n *\r\n * Copyright (c) 2011 Ken Arnold\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n\r\n(function($) {\r\n $.jog = jog;\r\n\r\n var n = 0;\r\n //noinspection JSUnusedGlobalSymbols\r\n var levels = {\r\n Fine: n++,\r\n Debug: n++,\r\n Info: n++,\r\n Config:n++,\r\n Warning:n++,\r\n Severe: n++,\r\n Alert: n++,\r\n Off: n++\r\n };\r\n $.extend($.jog, levels); // create $.jog.Info, etc.\r\n $.jog.levels = levels; // create $.jog.levels.Info, etc.\r\n\r\n var levelNameToNum = {};\r\n var levelNumToName = {};\r\n\r\n var uniqueIdSequence = 0;\r\n\r\n function newUniqueId(name) {\r\n var time = new Date().getTime();\r\n var random = Math.random().toPrecision(21);\r\n var sequence = uniqueIdSequence++;\r\n return name + ':' + time + ':' + random + ':' + sequence;\r\n }\r\n\r\n /**\r\n * The handler base class. Takes care of the config() method and settings\r\n * field.\r\n */\r\n function Handler(name) {\r\n this.name = name;\r\n\r\n this._handlerId = newUniqueId(name);\r\n this._settings = {};\r\n\r\n // The method that modifies the configuration fields \r\n this.config = function(properties, replace) {\r\n replace = replace != undefined ? replace : false;\r\n if (properties) {\r\n if (replace) {\r\n this._settings = {};\r\n }\r\n $.extend(this._settings, properties);\r\n }\r\n return $.extend({}, this._settings);\r\n };\r\n\r\n this.copy = function(name) {\r\n name = name || this.name + 'Copy';\r\n var dup = $.extend(true, {}, this);\r\n dup._handlerId = newUniqueId(name);\r\n if (this.copyCleanup) {\r\n this.copyCleanup(dup);\r\n }\r\n return dup;\r\n };\r\n\r\n this.level = function(level) {\r\n if (level != undefined) this._settings.level = level;\r\n return this._settings.level;\r\n }\r\n }\r\n\r\n function newHandler(name, properties) {\r\n if (!name) return undefined;\r\n var handler = new Handler(name);\r\n if (!properties) {\r\n throw new Error(\"Property object must be specified\");\r\n }\r\n if (typeof(properties.publish) != 'function') {\r\n throw new Error(\"Handler must have a publish() method\");\r\n }\r\n $.extend(handler, properties);\r\n return handler;\r\n }\r\n\r\n $.jog.newHandler = newHandler;\r\n\r\n // The popup handler needs the location of this jog.js file so it can find the\r\n // companion logPopup.html file. The following code is borrowed from\r\n // http://stackoverflow.com/questions/984510/what-is-my-script-src-url/3865126#3865126\r\n var scriptDir = (function() {\r\n var scripts = document.getElementsByTagName('script'),\r\n script = scripts[scripts.length - 1];\r\n\r\n return script.getAttribute('src', 2).replace('/\\/+[^/]*\\/*$/', '/');\r\n //this works in all browser even in FF/Chrome/Safari\r\n }());\r\n\r\n // The function used by default to insert a container for the log table\r\n function defaultInsertHtml() {\r\n var top = $('');\r\n $(document.body).append(top);\r\n return top;\r\n }\r\n\r\n var knownHandlers = {\r\n html: newHandler(\"html\", {\r\n _settings: {\r\n idPrefix: 'jog',\r\n classPrefix: 'jog',\r\n htmlId: undefined, // by default this is generated from idPrefix\r\n insertHtml: defaultInsertHtml\r\n },\r\n publish: function(area, levelNum, levelName, when, message) {\r\n this._ensureTable();\r\n var clsPrefix = this._settings.classPrefix;\r\n\r\n var levelClass = clsPrefix + '-level-' + levelName;\r\n var row = $('
').addClass(levelClass);\r\n var areaParts = area.split('.');\r\n var lineage = '';\r\n for (var i = 0; i < areaParts.length; i++) {\r\n lineage += '-' + areaParts[i];\r\n var areaClass = clsPrefix + '-area' + lineage;\r\n row.addClass(areaClass);\r\n }\r\n row.append($('
').text(area));\r\n row.append($('
').text(levelName));\r\n row.append($('
').text(when));\r\n row.append($('
').html(message));\r\n this._tableBody.prepend(row);\r\n },\r\n // Ensure that the table exists, adding it if needed\r\n _ensureTable: function() {\r\n if (this._tableBody) return this._tableBody;\r\n\r\n var idPrefix = this._settings.idPrefix;\r\n var classPrefix = this._settings.classPrefix;\r\n\r\n var htmlId = this._settings.htmlId;\r\n if (!htmlId) {\r\n htmlId = idPrefix + '-html';\r\n }\r\n\r\n // If the top does not exist, create it and add it\r\n var top = $('#' + htmlId);\r\n if (!top || top.length == 0) {\r\n top = this._settings.insertHtml();\r\n if (top) {\r\n top = $(top); // make sure it's JQuery-able\r\n }\r\n if (!top || top.length == 0) {\r\n throw Error(\"insertHtml for '\" + htmlId + \"' returns no node\");\r\n }\r\n top.attr('id', htmlId);\r\n this._addedTop = top;\r\n }\r\n top.addClass(classPrefix + \"-html\");\r\n\r\n // If the table already exists, then use it. This typically would only\r\n // happen if two differently-configured html publishers were writing to\r\n // the same table; if so, the second one would see the table already\r\n // existing. I don't recommend that people build pages with this already\r\n // set up themselves, so I don't document this behavior -- it's internal\r\n // and subject to change.\r\n var tableId = idPrefix + '-' + 'table';\r\n var table = $('#' + tableId);\r\n if (!table || table.length == 0) {\r\n // common code for some nodes\r\n function setup(node, suffix) {\r\n node.addClass(classPrefix + '-' + suffix);\r\n node.attr('id', idPrefix + '-' + suffix);\r\n return node;\r\n }\r\n\r\n table = setup($('
'), 'table');\r\n var header = setup($('
'), 'header');\r\n\r\n function headerCell(colName) {\r\n var cell = $('
');\r\n cell.text(colName);\r\n cell.attr('id', idPrefix + '-' + colName.toLowerCase());\r\n header.append(cell);\r\n }\r\n\r\n headerCell('Area');\r\n headerCell('Level');\r\n headerCell('When');\r\n headerCell('Message');\r\n\r\n top.append(table);\r\n table.append(header);\r\n if (!this._addedTop) {\r\n // If we didn't add the top, the top-most thing added is the table\r\n this._addedTop = table;\r\n }\r\n }\r\n this._tableBody = top.find('table > tbody');\r\n },\r\n destroy: function() {\r\n if (!this._addedTop) return;\r\n this._addedTop.remove();\r\n this.cleanupCopy();\r\n delete this._addedTop;\r\n delete this._tableBody;\r\n },\r\n cleanupCopy: function() {\r\n delete this._addedTop;\r\n delete this._tableBody;\r\n }\r\n }),\r\n popup: newHandler(\"popup\", {\r\n _settings: {\r\n title: 'Log Messages',\r\n css: 'jog.css'\r\n },\r\n publish: function(area, levelNum, levelName, when, message) {\r\n // The message record for sending logs to the popup window\r\n var logRecord = {\r\n area: area,\r\n levelNum: levelNum,\r\n levelName: levelName,\r\n when: when,\r\n message: message\r\n };\r\n\r\n // If the window is already up and ready, send it the new log\r\n if (this._windowReady) {\r\n this._sendLog(logRecord);\r\n } else {\r\n // If the \"pending\" list doesn't exist, this is the first log, so\r\n // we want to get the popup window started. this.pending holds all log\r\n // messages that arrive before the popup window is ready to take them.\r\n if (!this._pending) {\r\n this._pending = [];\r\n var self = this;\r\n var popup;\r\n // Listen for 'readyMessage' event the popup uses to say it's ready\r\n $.pm.bind('readyMessage.jog', function() {\r\n self._popup = popup;\r\n // When the popup has said it's ready, send the settings ...\r\n $.pm({\r\n target: popup,\r\n type: \"logOptions.jog\",\r\n data: self._settings\r\n });\r\n // ... and then send all pending messages\r\n self._consumePending();\r\n });\r\n // Now that we're ready to receive the 'ready' message, pop it up\r\n popup = window.open(scriptDir + \"jogPopup.html\", \"Log\");\r\n }\r\n // Put the log message in the pending queue until the popup is ready\r\n this._pending.push(logRecord);\r\n }\r\n },\r\n _consumePending: function() {\r\n this._windowReady = true;\r\n while (this._pending.length > 0) {\r\n var logRecord = this._pending.shift();\r\n this._sendLog(logRecord);\r\n }\r\n },\r\n _sendLog: function(logRecord) {\r\n // send a log message to the popup for it to display\r\n $.pm({\r\n target: this._popup,\r\n type: \"logRecord.jog\",\r\n data: logRecord\r\n });\r\n },\r\n destroy: function() {\r\n if (!this._popup) return;\r\n this._popup.close();\r\n $.pm.unbind('.jog');\r\n delete this._popup;\r\n delete this._windowReady;\r\n delete this._pending;\r\n },\r\n cleanupCopy: function() {\r\n throw Error(\"Popup handler not ready (yet) for multiple copies\");\r\n }\r\n }),\r\n console: newHandler(\"console\", {\r\n _settings: {\r\n prefix: '',\r\n separator: ' - '\r\n },\r\n publish: function(area, levelNum, levelName, when, message) {\r\n if (typeof console === 'undefined'){\r\n return;\r\n }\r\n if (!this._levelMethod) {\r\n this._levelMethod = [];\r\n this._levelMethod[levels.Fine] = \"debug\";\r\n this._levelMethod[levels.Debug] = \"debug\";\r\n this._levelMethod[levels.Info] = \"info\";\r\n this._levelMethod[levels.Warning] = \"warn\";\r\n this._levelMethod[levels.Config] = \"warn\";\r\n this._levelMethod[levels.Severe] = \"error\";\r\n this._levelMethod[levels.Alert] = \"error\";\r\n }\r\n var prefix = this._settings.prefix;\r\n if (!prefix) prefix = '';\r\n if (prefix.length > 0) prefix += ':';\r\n message = messageText(message);\r\n var sep = this._settings.separator;\r\n var method = this._levelMethod[levelNum];\r\n if (!method || !console[method]) {\r\n method = \"log\";\r\n }\r\n //console[method](prefix + area + sep + levelName + sep + when + sep +\r\n // message);\r\n }\r\n }),\r\n alert: newHandler(\"alert\", {\r\n _settings: {\r\n level: levels.Alert\r\n },\r\n publish: function(area, levelNum, levelName, when, message) {\r\n message = messageText(message);\r\n alert(\"Area: \" + area + \"\\n\" + \"Level: \" + levelName + \"\\n\" + \"When: \" +\r\n when + \"\\n\" + \"Message: \" + message + \"\\n\");\r\n }\r\n })\r\n };\r\n $.jog.knownHandlers = knownHandlers;\r\n\r\n // Convert a message to just its text\r\n function messageText(message) {\r\n // If it's HTML, extract the text part\r\n return $('' + message + '').text();\r\n }\r\n\r\n // The default time format\r\n function defaultTimeFormat(when) {\r\n return when.toLocaleTimeString();\r\n }\r\n\r\n // Create the name-to-number and number-to-name maps\r\n for (var levelName in levels) {\r\n var levelNum = levels[levelName];\r\n\r\n levelNumToName[levelNum] = levelName;\r\n\r\n var ch = levelName.charAt(0);\r\n levelNameToNum[levelName] = levelNum;\r\n levelNameToNum[levelName.toUpperCase()] = levelNum;\r\n levelNameToNum[levelName.toLowerCase()] = levelNum;\r\n levelNameToNum[ch.toUpperCase()] = levelNum;\r\n levelNameToNum[ch.toLowerCase()] = levelNum;\r\n }\r\n\r\n // Set up the root of all areas, and thereby the default area settings\r\n var areas = {};\r\n var areaRoot = new Area('');\r\n areaRoot.level(levels.Info);\r\n areaRoot.handlers(knownHandlers.console, knownHandlers.alert);\r\n areaRoot.toTimeString = defaultTimeFormat;\r\n\r\n // Reliably convert any string or number to its level number, if it has one\r\n function toLevelNum(level) {\r\n if (typeof(level) == 'number') {\r\n if (level >= levels.Fine && level <= levels.Off) {\r\n return level;\r\n }\r\n throw new Error(\"Level out of range Fine..Off (\" + levels.Fine + \"..\" +\r\n levels.Off + \")\");\r\n }\r\n\r\n // Undefined is sometimes a reasonable value (and we'll accept null)\r\n if (!level) return undefined;\r\n\r\n if (typeof(level) == 'object') {\r\n level = level.toString();\r\n }\r\n\r\n if (typeof(level) == 'string') {\r\n // See if it's \"3\", etc.\r\n var num = parseInt(level);\r\n if (!isNaN(num)) {\r\n // This enforces the validity check for numbers\r\n return toLevelNum(num);\r\n }\r\n num = levelNameToNum[level.charAt(0)];\r\n if (num == undefined) {\r\n throw new Error(\"Invalid level name: '\" + level + \"'\");\r\n }\r\n return num;\r\n }\r\n throw Error(\"Invalid level specifier type: \" + typeof(level));\r\n }\r\n\r\n // Reliably convert any string or number to its level name, if it has one\r\n function toLevelName(level) {\r\n var levelNum = toLevelNum(level);\r\n return levelNumToName[levelNum];\r\n }\r\n\r\n $.jog.levelName = toLevelName;\r\n\r\n // Return the object that represents an area\r\n function jog(area) {\r\n if (!area)\r\n return areaRoot;\r\n\r\n var areaInfo = areas[area];\r\n if (!areaInfo) {\r\n areaInfo = new Area(area);\r\n areas[area] = areaInfo;\r\n }\r\n return areaInfo;\r\n }\r\n\r\n // The area object represents the behavior of a given area. They are stored\r\n // for each area, and jog() returns a temporary version that has the current\r\n // values for an area, including the inherited ones. The methods of this\r\n // object can be invoked by users directly, so method should be exposed with\r\n // careful consideration.\r\n function Area(name) {\r\n var self = this;\r\n\r\n this.name = name;\r\n this._handlers = {}; // the handlers set specifically on this area\r\n this._useParentHandlers = true;\r\n this._lineage = []; // the cumulative area names from root to me (see below)\r\n\r\n function notDerived() {\r\n if (self._isDerived) throw Error(\"Operation not allowed on derived area\");\r\n }\r\n\r\n this.useParentHandlers = function(value) {\r\n if (value != undefined) {\r\n notDerived();\r\n this._useParentHandlers = value;\r\n }\r\n return this._useParentHandlers;\r\n };\r\n\r\n // Calculate this area's lineage (except for root, which is\r\n // implicit). This sets the _lineage field to a series of names, from\r\n // the top down through this area. For example, for the area \"x.y.z\",\r\n // _lineage would have [\"x\", \"x.y\", \"x.y.z\"].\r\n (function() {\r\n var parts = name.split(/\\./);\r\n for (var i = 0; i < parts.length; i++) {\r\n if (i == 0) {\r\n self._lineage.push(parts[i]);\r\n } else {\r\n self._lineage.push(self._lineage[i - 1] + '.' + parts[i]);\r\n }\r\n }\r\n })();\r\n\r\n // Build up the current settings for the area by extending values from\r\n // ancestors.\r\n //\r\n // This is done on the fly for each log message. It could be calculated\r\n // only if there has been an ancestor changed. That would be faster, but\r\n // maybe not worth the complexity. (something like how swing components\r\n // invalidate their layout and those of their descendants if they are\r\n // changed, and then are recalculated if they are needed but invalid.)\r\n this.derive = function() {\r\n // We start at the top (root), and then merge in more and more specific\r\n // values.\r\n var info = $.extend(true, {}, areaRoot);\r\n info._isDerived = true;\r\n\r\n for (var i = 0; i < this._lineage.length; i++) {\r\n var areaName = this._lineage[i];\r\n var areaInfo = areas[areaName];\r\n if (areaInfo) {\r\n // If this area cuts off its parent, use only its own handlers\r\n if (!areaInfo._useParentHandlers) {\r\n info._handlers = {};\r\n }\r\n $.extend(true, info, areaInfo);\r\n }\r\n }\r\n return info;\r\n };\r\n\r\n // The actual logging function\r\n this.log = function(level, message) {\r\n var levelNum = toLevelNum(level);\r\n\r\n // Special case, and not just for speed -- An Off shouldn't be shown\r\n if (levelNum == levels.Off) return false;\r\n\r\n var derived = (this._isDerived ? this : this.derive());\r\n if (levelNum < derived._level) return false;\r\n\r\n // This is how the user can check if a certain level would be logged\r\n if (!message) return true;\r\n\r\n notDerived();\r\n \r\n // Resolve the message into a simple string so we do it exactly once\r\n if (typeof(message) == 'function') {\r\n message = message();\r\n }\r\n if (typeof(message) == 'object') {\r\n message = message.toString();\r\n }\r\n\r\n // Generate the messages\r\n var levelName = levelNumToName[levelNum];\r\n var when = derived.toTimeString(new Date());\r\n for (var id in derived._handlers) {\r\n var handler = derived._handlers[id];\r\n var handlerLevel = handler._settings.level;\r\n if (!handlerLevel || handlerLevel <= levelNum) {\r\n handler.publish(this.name, levelNum, levelName, when, message);\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n this.level = function(level) {\r\n // we check with \"arguments.length\" because \"undefined\" is a valid value\r\n if (arguments.length == 1) {\r\n notDerived();\r\n this._level = toLevelNum(level);\r\n }\r\n return this._level;\r\n };\r\n\r\n this.addHandlers = function() {\r\n notDerived();\r\n for (var i = 0; i < arguments.length; i++) {\r\n var handler = arguments[i];\r\n this._handlers[handler._handlerId] = handler;\r\n }\r\n };\r\n\r\n this.removeHandlers = function() {\r\n notDerived();\r\n for (var i = 0; i < arguments.length; i++) {\r\n var handler = arguments[i];\r\n delete this._handlers[handler._handlerId];\r\n }\r\n };\r\n\r\n this.handlers = function() {\r\n if (arguments.length != 0) {\r\n notDerived();\r\n // set the list of handlers\r\n this._handlers = {};\r\n this.addHandlers.apply(this, arguments);\r\n }\r\n var current = [];\r\n for (var id in this._handlers) {\r\n current.push(this._handlers[id]);\r\n }\r\n return current;\r\n };\r\n\r\n // Function to implement error(), info(), etc.\r\n function levelNameFunction(levelNum) {\r\n return function(message) {\r\n return this.log(levelNum, message);\r\n }\r\n }\r\n\r\n // Add functions for levels, (area.error(), area.info(), ...).\r\n for (levelName in levels) {\r\n // Don't create off() function\r\n if (levelName == 'Off') continue;\r\n var functionName = levelName.toLowerCase();\r\n var levelNum = levelNameToNum[levelName];\r\n this[functionName] = levelNameFunction(levelNum);\r\n }\r\n\r\n this.destroy = function() {\r\n notDerived();\r\n for (var id in this._handlers) {\r\n var handler = this._handlers[id];\r\n if (handler.destroy) {\r\n handler.destroy();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function destroy() {\r\n for (var areaName in areas) {\r\n var areaInfo = areas[areaName];\r\n areaInfo.destroy();\r\n }\r\n areaRoot.destroy();\r\n }\r\n\r\n $.jog.destroy = destroy;\r\n\r\n})(jQuery);\r\n"," /*\r\n * jQuery UI selectmenu\r\n *\r\n * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\r\n * Dual licensed under the MIT (MIT-LICENSE.txt)\r\n * and GPL (GPL-LICENSE.txt) licenses.\r\n *\r\n * http://docs.jquery.com/UI\r\n */\r\n\r\n(function ($) {\r\n\r\n $.widget(\"ui.selectmenu\", {\r\n getter: \"value\",\r\n version: \"1.8\",\r\n eventPrefix: \"selectmenu\",\r\n options: {\r\n transferClasses: true,\r\n style: 'popup',\r\n width: null,\r\n menuWidth: null,\r\n handleWidth: 26,\r\n maxHeight: null,\r\n icons: null,\r\n format: null\r\n },\r\n\r\n _create: function () {\r\n var self = this, o = this.options;\r\n\r\n //quick array of button and menu id's\r\n this.ids = [this.element.attr('id') + '-' + 'button', this.element.attr('id') + '-' + 'menu'];\r\n\r\n //define safe mouseup for future toggling\r\n this._safemouseup = true;\r\n\r\n //create menu button wrapper\r\n this.newelement = $('')\r\n\t\t\t.insertAfter(this.element);\r\n\r\n //transfer tabindex\r\n var tabindex = this.element.attr('tabindex');\r\n if (tabindex) { this.newelement.attr('tabindex', tabindex); }\r\n\r\n //save reference to select in data for ease in calling methods\r\n this.newelement.data('selectelement', this.element);\r\n\r\n //menu icon\r\n this.selectmenuIcon = $('')\r\n\t\t\t.prependTo(this.newelement)\r\n\t\t\t.addClass((o.style == \"popup\") ? 'ui-icon-triangle-2-n-s' : 'ui-icon-triangle-1-s');\r\n\r\n\r\n //make associated form label trigger focus\r\n $('label[for=' + this.element.attr('id') + ']')\r\n\t\t\t.attr('for', this.ids[0])\r\n\t\t\t.bind('click', function () {\r\n\t\t\t self.newelement[0].focus();\r\n\t\t\t return false;\r\n\t\t\t});\r\n\r\n //click toggle for menu visibility\r\n this.newelement\r\n\t\t\t.bind('mousedown', function (event) {\r\n\t\t\t self._toggle(event);\r\n\t\t\t //make sure a click won't open/close instantly\r\n\t\t\t //if (o.style == \"popup\") {\r\n\t\t\t self._safemouseup = false;\r\n\t\t\t setTimeout(function () { self._safemouseup = true; }, 300);\r\n\t\t\t //}\r\n\t\t\t return false;\r\n\t\t\t})\r\n\t\t\t.bind('click', function () {\r\n\t\t\t return false;\r\n\t\t\t})\r\n\t\t\t.keydown(function (event) {\r\n\t\t\t var ret = true;\r\n\t\t\t switch (event.keyCode) {\r\n\t\t\t case $.ui.keyCode.ENTER:\r\n\t\t\t ret = true;\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.SPACE:\r\n\t\t\t ret = false;\r\n\t\t\t self._toggle(event);\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.UP:\r\n\t\t\t case $.ui.keyCode.LEFT:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveSelection(-1);\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.DOWN:\r\n\t\t\t case $.ui.keyCode.RIGHT:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveSelection(1);\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.TAB:\r\n\t\t\t ret = true;\r\n\t\t\t break;\r\n\t\t\t default:\r\n\t\t\t ret = false;\r\n\t\t\t self._typeAhead(event.keyCode, 'mouseup');\r\n\t\t\t break;\r\n\t\t\t }\r\n\t\t\t return ret;\r\n\t\t\t})\r\n\t\t\t.bind('mouseover focus', function () {\r\n\t\t\t $(this).addClass(self.widgetFullName + '-focus ui-state-hover');\r\n\t\t\t})\r\n\t\t\t.bind('mouseout blur', function () {\r\n\t\t\t $(this).removeClass(self.widgetFullName + '-focus ui-state-hover');\r\n\t\t\t});\r\n\r\n //document click closes menu\r\n $(document).mousedown(function (event) {\r\n self.close(event);\r\n });\r\n\r\n //change event on original selectmenu\r\n this.element\r\n\t\t\t.click(function () { this._refreshValue(); })\r\n // newelement can be null under unclear circumstances in IE8 \r\n\t\t\t.focus(function () { if (this.newelement) { this.newelement[0].focus(); } });\r\n\r\n //create menu portion, append to body\r\n var cornerClass = (o.style == \"dropdown\") ? \" ui-corner-bottom\" : \" ui-corner-all\";\r\n this.list = $('
').appendTo('body');\r\n\r\n //serialize selectmenu element options\t\r\n var selectOptionData = [];\r\n this.element\r\n\t\t\t.find('option')\r\n\t\t\t.each(function () {\r\n\t\t\t selectOptionData.push({\r\n\t\t\t value: $(this).attr('value'),\r\n\t\t\t text: self._formatText(jQuery(this).text(), this),\r\n\t\t\t selected: $(this).attr('selected'),\r\n\t\t\t classes: $(this).attr('class'),\r\n\t\t\t styles: $(this).attr('style'),\r\n\t\t\t parentOptGroup: $(this).parent('optgroup').attr('label'),\r\n\t\t\t title: $(this).attr('title')\r\n\t\t\t });\r\n\t\t\t});\r\n\r\n //active state class is only used in popup style\r\n var activeClass = (self.options.style == \"popup\") ? \" ui-state-active\" : \"\";\r\n\r\n //write li's\r\n for (var i = 0; i < selectOptionData.length; i++) {\r\n var thisLi = $('
')\r\n\t\t\t\t.data('index', i)\r\n\t\t\t\t.addClass(selectOptionData[i].classes)\r\n\t\t\t\t.data('optionClasses', selectOptionData[i].classes || '')\r\n\t\t\t\t.mouseup(function (event) {\r\n\t\t\t\t if (self._safemouseup) {\r\n\t\t\t\t var changed = $(this).data('index') != self._selectedIndex();\r\n\t\t\t\t self.value($(this).data('index'));\r\n\t\t\t\t self.select(event);\r\n\t\t\t\t if (changed) { self.change(event); }\r\n\t\t\t\t self.close(event, true);\r\n\t\t\t\t }\t\t\t\t \r\n\t\t\t\t return false;\r\n\t\t\t\t})\r\n\t\t\t\t.click(function () {\r\n\t\t\t\t return false;\r\n\t\t\t\t})\r\n\t\t\t\t.bind('mouseover focus', function () {\r\n\t\t\t\t self._selectedOptionLi().addClass(activeClass);\r\n\t\t\t\t self._focusedOptionLi().removeClass(self.widgetFullName + '-item-focus ui-state-hover');\r\n\t\t\t\t $(this).removeClass('ui-state-active').addClass(self.widgetFullName + '-item-focus ui-state-hover');\r\n\t\t\t\t})\r\n\t\t\t\t.bind('mouseout blur', function () {\r\n\t\t\t\t if ($(this).is(self._selectedOptionLi())) { $(this).addClass(activeClass); }\r\n\t\t\t\t $(this).removeClass(self.widgetFullName + '-item-focus ui-state-hover');\r\n\t\t\t\t});\r\n\r\n //optgroup or not...\r\n if (selectOptionData[i].parentOptGroup) {\r\n // whitespace in the optgroupname must be replaced, otherwise the li of existing optgroups are never found\r\n var optGroupName = self.widgetFullName + '-group-' + selectOptionData[i].parentOptGroup.replace(/[^a-zA-Z0-9]/g, \"\");\r\n if (this.list.find('li.' + optGroupName).size()) {\r\n this.list.find('li.' + optGroupName + ':last ul').append(thisLi);\r\n }\r\n else {\r\n $('
' + selectOptionData[i].parentOptGroup + '
')\r\n\t\t\t\t\t\t.appendTo(this.list)\r\n\t\t\t\t\t\t.find('ul')\r\n\t\t\t\t\t\t.append(thisLi);\r\n }\r\n }\r\n else {\r\n thisLi.appendTo(this.list);\r\n }\r\n\r\n //this allows for using the scrollbar in an overflowed list\r\n this.list.bind('mousedown mouseup', function () { return false; });\r\n\r\n //append icon if option is specified\r\n if (o.icons) {\r\n for (var j in o.icons) {\r\n if (thisLi.is(o.icons[j].find)) {\r\n thisLi\r\n\t\t\t\t\t\t\t.data('optionClasses', selectOptionData[i].classes + ' ' + self.widgetFullName + '-hasIcon')\r\n\t\t\t\t\t\t\t.addClass(self.widgetFullName + '-hasIcon');\r\n var iconClass = o.icons[j].icon || \"\";\r\n\r\n thisLi\r\n\t\t\t\t\t\t\t.find('a:eq(0)')\r\n //\t\t\t\t\t\t\t.prepend('');\r\n\r\n // TODO: Should make using value in title as an image URL an optional feature.\r\n // If option has a title attribute, assumes it is a URL to an image. \r\n if (selectOptionData[i].title) {\r\n // thisLi.find(\"span\").css(\"background-image\", \"url(\"+selectOptionData[i].title+\")\");\r\n thisLi.find(\"a\").empty().append(\"\");\r\n\r\n // thisLi.prepend(\"\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n //set dynamic width to fix IE7 bug\r\n var maxwidth = 0;\r\n this.list.find('li a').each(function () {\r\n var currwidth = $(this).width() + 10;\r\n if (currwidth > maxwidth) maxwidth = currwidth;\r\n });\r\n this.newelement.css(\"display\", \"block\");\r\n var pl = this.newelement.css(\"padding-left\");\r\n var pr = this.newelement.css(\"padding-right\");\r\n if ((this.newelement.width() - 10) > maxwidth) maxwidth = this.newelement.width() - 10; //the menu must be at least as long as the status row itself\r\n this.list.find('li a').width(maxwidth);\r\n\r\n //add corners to top and bottom menu items\r\n this.list.find('li:last').addClass(\"ui-corner-bottom\");\r\n if (o.style == 'popup') { this.list.find('li:first').addClass(\"ui-corner-top\"); }\r\n\r\n //transfer classes to selectmenu and list\r\n if (o.transferClasses) {\r\n var transferClasses = this.element.attr('class') || '';\r\n this.newelement.add(this.list).addClass(transferClasses);\r\n }\r\n\r\n //original selectmenu width\r\n var selectWidth = this.element.width();\r\n\r\n //set menu button width\r\n this.newelement.width((o.width) ? o.width : selectWidth);\r\n\r\n //set menu width to either menuWidth option value, width option value, or select width \r\n if (o.style == 'dropdown') { this.list.width((o.menuWidth) ? o.menuWidth : ((o.width) ? o.width : selectWidth)); }\r\n else { this.list.width((o.menuWidth) ? o.menuWidth : ((o.width) ? o.width - o.handleWidth : selectWidth - o.handleWidth)); }\r\n\r\n //set max height from option \r\n if (o.maxHeight && o.maxHeight < this.list.height()) { this.list.height(o.maxHeight); }\r\n\r\n //save reference to actionable li's (not group label li's)\r\n this._optionLis = this.list.find('li:not(.' + self.widgetFullName + '-group)');\r\n\r\n //transfer menu click to menu button\r\n this.list\r\n\t\t\t.keydown(function (event) {\r\n\t\t\t var ret = true;\r\n\t\t\t switch (event.keyCode) {\r\n\t\t\t // this needs to be fixed as _moveFocus doesnt work correctly \r\n\t\t\t /*\r\n\t\t\t case $.ui.keyCode.UP:\r\n\t\t\t case $.ui.keyCode.LEFT:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveFocus(-1);\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.DOWN:\r\n\t\t\t case $.ui.keyCode.RIGHT:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveFocus(1);\r\n\t\t\t break;\t\r\n\t\t\t */ \r\n\t\t\t case $.ui.keyCode.HOME:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveFocus(':first');\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.PAGE_UP:\r\n\t\t\t ret = false;\r\n\t\t\t self._scrollPage('up');\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.PAGE_DOWN:\r\n\t\t\t ret = false;\r\n\t\t\t self._scrollPage('down');\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.END:\r\n\t\t\t ret = false;\r\n\t\t\t self._moveFocus(':last');\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.ENTER:\r\n\t\t\t case $.ui.keyCode.SPACE:\r\n\t\t\t ret = false;\r\n\t\t\t self.close(event, true);\r\n\t\t\t $(event.target).parents('li:eq(0)').trigger('mouseup');\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.TAB:\r\n\t\t\t ret = true;\r\n\t\t\t self.close(event, true);\r\n\t\t\t break;\r\n\t\t\t case $.ui.keyCode.ESCAPE:\r\n\t\t\t ret = false;\r\n\t\t\t self.close(event, true);\r\n\t\t\t break;\r\n\t\t\t default:\r\n\t\t\t ret = false;\r\n\t\t\t self._typeAhead(event.keyCode, 'focus');\r\n\t\t\t break;\r\n\t\t\t }\r\n\t\t\t return ret;\r\n\t\t\t});\r\n\r\n //selectmenu style\r\n if (o.style == 'dropdown') {\r\n this.newelement\r\n\t\t\t\t.addClass(self.widgetFullName + \"-dropdown\");\r\n this.list\r\n\t\t\t\t.addClass(self.widgetFullName + \"-menu-dropdown\");\r\n }\r\n else {\r\n this.newelement\r\n\t\t\t\t.addClass(self.widgetFullName + \"-popup\");\r\n this.list\r\n\t\t\t\t.addClass(self.widgetFullName + \"-menu-popup\");\r\n }\r\n\r\n //append status span to button\r\n this.newelement.prepend('' + selectOptionData[this._selectedIndex()].text + '');\r\n\r\n //hide original selectmenu element\r\n this.element.hide();\r\n\r\n //transfer disabled state\r\n if (this.element.attr('disabled') == true) { this.disable(); }\r\n\r\n //update value\r\n this.value(this._selectedIndex());\r\n\r\n // needed when window is resized\r\n $(window).resize(function () {\r\n self._refreshPosition();\r\n });\r\n },\r\n destroy: function () {\r\n this.element.removeData(this.widgetName)\r\n\t\t\t.removeClass(this.widgetFullName + '-disabled' + ' ' + this.namespace + '-state-disabled')\r\n\t\t\t.removeAttr('aria-disabled')\r\n\t\t\t.unbind(\"click\");\r\n\r\n //unbind click on label, reset its for attr\r\n $('label[for=' + this.newelement.attr('id') + ']')\r\n\t\t\t.attr('for', this.element.attr('id'))\r\n\t\t\t.unbind('click');\r\n this.newelement.remove();\r\n this.list.remove();\r\n this.element.show();\r\n\r\n // call widget destroy function\r\n $.Widget.prototype.destroy.apply(this, arguments);\r\n },\r\n _typeAhead: function (code, eventType) {\r\n var self = this;\r\n //define self._prevChar if needed\r\n if (!self._prevChar) { self._prevChar = ['', 0]; }\r\n var C = String.fromCharCode(code);\r\n c = C.toLowerCase();\r\n var focusFound = false;\r\n function focusOpt(elem, ind) {\r\n focusFound = true;\r\n $(elem).trigger(eventType);\r\n self._prevChar[1] = ind;\r\n }\r\n this.list.find('li a').each(function (i) {\r\n if (!focusFound) {\r\n var thisText = $(this).text();\r\n if (thisText.indexOf(C) == 0 || thisText.indexOf(c) == 0) {\r\n if (self._prevChar[0] == C) {\r\n if (self._prevChar[1] < i) { focusOpt(this, i); }\r\n }\r\n else { focusOpt(this, i); }\r\n }\r\n }\r\n });\r\n this._prevChar[0] = C;\r\n },\r\n _uiHash: function () {\r\n var index = this.value();\r\n return {\r\n index: index,\r\n option: $(\"option\", this.element).get(index),\r\n value: this.element[0].value\r\n };\r\n },\r\n open: function (event) {\r\n var self = this;\r\n var disabledStatus = this.newelement.attr(\"aria-disabled\");\r\n if (disabledStatus != 'true') {\r\n this._refreshPosition();\r\n this._closeOthers(event);\r\n this.newelement\r\n\t\t\t\t.addClass('ui-state-active');\r\n\r\n this.list\r\n\t\t\t\t.appendTo('body')\r\n\t\t\t\t.addClass(self.widgetFullName + '-open')\r\n\t\t\t\t.attr('aria-hidden', false)\r\n\t\t\t\t.find('li:not(.' + self.widgetFullName + '-group):eq(' + this._selectedIndex() + ') a')[0].focus();\r\n if (this.options.style == \"dropdown\") { this.newelement.removeClass('ui-corner-all').addClass('ui-corner-top'); }\r\n this._refreshPosition();\r\n this._trigger(\"open\", event, this._uiHash());\r\n }\r\n },\r\n close: function (event, retainFocus) {\r\n if (this.newelement.is('.ui-state-active')) {\r\n this.newelement\r\n\t\t\t\t.removeClass('ui-state-active');\r\n this.list\r\n\t\t\t\t.attr('aria-hidden', true)\r\n\t\t\t\t.removeClass(this.widgetFullName + '-open');\r\n if (this.options.style == \"dropdown\") { this.newelement.removeClass('ui-corner-top').addClass('ui-corner-all'); }\r\n if (retainFocus) { this.newelement[0].focus(); }\r\n this._trigger(\"close\", event, this._uiHash());\r\n }\r\n },\r\n change: function (event) {\r\n this.element.trigger('change');\r\n this._trigger(\"change\", event, this._uiHash());\r\n },\r\n select: function (event) {\r\n this._trigger(\"select\", event, this._uiHash());\r\n },\r\n _closeOthers: function (event) {\r\n $('.' + this.widgetFullName + '.ui-state-active').not(this.newelement).each(function () {\r\n if (($(this).data !== 'undefined') && ($(this).data('selectelement') != null))\r\n $(this).data('selectelement').selectmenu('close', event);\r\n });\r\n $('.' + this.widgetFullName + '.ui-state-hover').trigger('mouseout');\r\n },\r\n _toggle: function (event, retainFocus) {\r\n if (this.list.is('.' + this.widgetFullName + '-open')) { this.close(event, retainFocus); }\r\n else { this.open(event); }\r\n },\r\n _formatText: function (text, el) {\r\n return this.options.format ? this.options.format(text, el) : text;\r\n },\r\n _selectedIndex: function () {\r\n return this.element[0].selectedIndex;\r\n },\r\n _selectedOptionLi: function () {\r\n return this._optionLis.eq(this._selectedIndex());\r\n },\r\n _focusedOptionLi: function () {\r\n return this.list.find('.' + this.widgetFullName + '-item-focus');\r\n },\r\n _moveSelection: function (amt) {\r\n var currIndex = parseInt(this._selectedOptionLi().data('index'), 10);\r\n var newIndex = currIndex + amt;\r\n return this._optionLis.eq(newIndex).trigger('mouseup');\r\n },\r\n _moveFocus: function (amt) {\r\n if (!isNaN(amt)) {\r\n var currIndex = parseInt(this._focusedOptionLi().data('index'), 10);\r\n var newIndex = currIndex + amt;\r\n }\r\n else { var newIndex = parseInt(this._optionLis.filter(amt).data('index'), 10); }\r\n\r\n if (newIndex < 0) { newIndex = 0; }\r\n if (newIndex > this._optionLis.size() - 1) {\r\n newIndex = this._optionLis.size() - 1;\r\n }\r\n var activeID = this.widgetFullName + '-item-' + Math.round(Math.random() * 1000);\r\n\r\n this._focusedOptionLi().find('a:eq(0)').attr('id', '');\r\n this._optionLis.eq(newIndex).find('a:eq(0)').attr('id', activeID)[0].focus();\r\n this.list.attr('aria-activedescendant', activeID);\r\n },\r\n _scrollPage: function (direction) {\r\n var numPerPage = Math.floor(this.list.outerHeight() / this.list.find('li:first').outerHeight());\r\n numPerPage = (direction == 'up') ? -numPerPage : numPerPage;\r\n this._moveFocus(numPerPage);\r\n },\r\n _setOption: function (key, value) {\r\n this.options[key] = value;\r\n if (key == 'disabled') {\r\n this.close();\r\n this.element\r\n\t\t\t\t.add(this.newelement)\r\n\t\t\t\t.add(this.list)\r\n\t\t\t\t\t[value ? 'addClass' : 'removeClass'](\r\n\t\t\t\t\t\tthis.widgetFullName + '-disabled' + ' ' +\r\n\t\t\t\t\t\tthis.namespace + '-state-disabled')\r\n\t\t\t\t\t.attr(\"aria-disabled\", value);\r\n }\r\n },\r\n value: function (newValue) {\r\n if (arguments.length) {\r\n this.element[0].selectedIndex = newValue;\r\n this._refreshValue();\r\n this._refreshPosition();\r\n }\r\n return this.element[0].selectedIndex;\r\n },\r\n _refreshValue: function () {\r\n var activeClass = (this.options.style == \"popup\") ? \" ui-state-active\" : \"\";\r\n var activeID = this.widgetFullName + '-item-' + Math.round(Math.random() * 1000);\r\n //deselect previous\r\n this.list\r\n\t\t\t.find('.' + this.widgetFullName + '-item-selected')\r\n\t\t\t.removeClass(this.widgetFullName + \"-item-selected\" + activeClass)\r\n\t\t\t.find('a')\r\n\t\t\t.attr('aria-selected', 'false')\r\n\t\t\t.attr('id', '');\r\n //select new\r\n this._selectedOptionLi()\r\n\t\t\t.addClass(this.widgetFullName + \"-item-selected\" + activeClass)\r\n\t\t\t.find('a')\r\n\t\t\t.attr('aria-selected', 'true')\r\n\t\t\t.attr('id', activeID);\r\n\r\n //toggle any class brought in from option\r\n var currentOptionClasses = this.newelement.data('optionClasses') ? this.newelement.data('optionClasses') : \"\";\r\n var newOptionClasses = this._selectedOptionLi().data('optionClasses') ? this._selectedOptionLi().data('optionClasses') : \"\";\r\n var optionStyles = '';\r\n if (('' + this._selectedOptionLi().find('a').attr('style')).length > 0 && this._selectedOptionLi().find('a').attr('style') != undefined)\r\n optionStyles = 'background:none;' + this._selectedOptionLi().find('a').attr('style');\r\n \r\n //ensure no width-style is propagated to the status element\r\n var tmpoptionstyles = optionStyles.split(\";\");\r\n var tosi = 0;\r\n optionStyles = '';\r\n for (tosi = 0; tosi < tmpoptionstyles.length; tosi++) {\r\n var curroptst = tmpoptionstyles[tosi];\r\n if (curroptst != null && curroptst.toLowerCase().indexOf(\"width\") < 0) {\r\n optionStyles = optionStyles + curroptst + \";\"\r\n }\r\n }\r\n\r\n this.newelement\r\n\t\t\t.removeClass(currentOptionClasses)\r\n\t\t\t.data('optionClasses', newOptionClasses)\r\n\t\t\t.addClass(newOptionClasses)\r\n .attr('style', optionStyles)\r\n\t\t\t.find('.' + this.widgetFullName + '-status')\r\n .attr('style', optionStyles)\r\n\t\t\t.html(\r\n\t\t\t\tthis._selectedOptionLi()\r\n\t\t\t\t\t.find('a:eq(0)')\r\n\t\t\t\t\t.html()\r\n\t\t\t);\r\n\r\n this.list.attr('aria-activedescendant', activeID);\r\n\r\n },\r\n _refreshPosition: function () {\r\n var self = this, o = this.options;\r\n\r\n // get some vars\r\n var pageScroll = self._pageScroll();\r\n var menuTop = this.newelement.offset().top;\r\n var viewportHeight = $(window).height();\r\n var listHeight = $(this.list[0]).outerHeight();\r\n\r\n // check if there's enough room to expand to the bottom\r\n if ((menuTop + listHeight) > (viewportHeight + pageScroll)) {\r\n menuTop -= listHeight;\r\n } else {\r\n if (this.newelement.is('.' + this.widgetFullName + '-popup')) {\r\n var scrolledAmt = this.list[0].scrollTop;\r\n this.list.find('li:lt(' + this._selectedIndex() + ')').each(function () {\r\n scrolledAmt -= $(this).outerHeight();\r\n });\r\n menuTop += scrolledAmt;\r\n } else {\r\n menuTop += this.newelement.height();\r\n }\r\n }\r\n // set values\r\n this.list.css({\r\n top: menuTop,\r\n left: this.newelement.offset().left\r\n });\r\n },\r\n _pageScroll: function () {\r\n var yScroll;\r\n if (self.pageYOffset) {\r\n yScroll = self.pageYOffset;\r\n // Explorer 6 Strict\r\n } else if (document.documentElement && document.documentElement.scrollTop) {\r\n yScroll = document.documentElement.scrollTop;\r\n // all other Explorers\r\n } else if (document.body) {\r\n yScroll = document.body.scrollTop;\r\n }\r\n return yScroll;\r\n }\r\n });\r\n})(jQuery);","/*############################################################################*/\r\n/*\r\nJS STARTUP\r\n*/\r\n/*############################################################################*/\r\n\r\n$(document).ready(function () {\r\n //Initialize Dropdowns\r\n Log_Initialize();\r\n DropDown_Initialize();\r\n \r\n Responsive_Initialize();\r\n});\r\n\r\n//init Responsive Actions\r\nResponsive_Initialize = function () {\r\n $('#hamburger').each(function () {\r\n $(this).click(function (e) {\r\n $(this).parent().toggleClass(\"eat\");\r\n });\r\n });\r\n};\r\n\r\n// init the jog plugin\r\nLog_Initialize = function() {\r\n //if enabled in appsettings\r\n $.jog().removeHandlers(\"console\");\r\n\r\n if (enableLogView) {\r\n $.jog.knownHandlers.html.config({ htmlId: 'logView', insertHtml: Log_InsertHtml() });\r\n $.jog().handlers($.jog.knownHandlers.html);\r\n\r\n //postition logview window\r\n $(\"#logView\").dialog({ position: ['right', 'top'], width: 450, height: 800, maxHeight: 1024 });\r\n }\r\n};\r\n\r\nLog_InsertHtml = function() {\r\n var top = $(\"\");\r\n $(document.body).append(top);\r\n return top;\r\n};\r\n\r\nDropDown_Initialize = function () {\r\n var theQueue = $({});\r\n\r\n $.theQueue = function(dropDown) {\r\n theQueue.queue(function() {\r\n try {\r\n dropDown.selectmenu({\r\n style: 'dropdown',\r\n maxHeight: 400,\r\n icons: [\r\n { find: '.fontOption' }\r\n ]\r\n });\r\n\r\n } catch(e) {\r\n alert(e.message);\r\n }\r\n $(this).dequeue();\r\n });\r\n };\r\n\r\n $(\"select.smdd\").each(function (idx) {\r\n $.theQueue($(this));\r\n });\r\n};\r\n\r\n/**\r\n * Adds a new parameter to url. \r\n * Decides how to join the parameter to the url (? vs &).\r\n *\r\n * @param url\r\n * @param param e.g. 'q=test'\r\n */\r\naddParameterToUrl = function (url, param) {\r\n _url = url;\r\n _url += (_url.split('?')[1] ? '&' : '?') + param;\r\n return _url;\r\n}\r\n\r\n\r\n/** \r\n* Returns true if the user hit Esc or navigated away from the\r\n* current page before an AJAX call was done. (The response\r\n* headers will be null or empty, depending on the browser.) \r\n* \r\n* NOTE: this function is only meaningful when called from \r\n* inside an AJAX \"error\" callback! \r\n* \r\n* The 'xhr' param is an XMLHttpRequest instance. \r\n*/\r\nfunction userAborted(xhr) {\r\n if (typeof xhr.getAllResponseHeaders === \"function\") {\r\n return !xhr.getAllResponseHeaders();\r\n\r\n }\r\n}\r\n",";(function($){var L=$.loading=function(show,opts){return $('body').loading(show,opts,true);};$.fn.loading=function(show,opts,page){opts=toOpts(show,opts);var base=page?$.extend(true,{},L,L.pageOptions):L;return this.each(function(){var $el=$(this),l=$.extend(true,{},base,$.metadata?$el.metadata():null,opts);if(typeof l.onAjax==\"boolean\"){L.setAjax.call($el,l);}else{L.toggle.call($el,l);}});};var fixed={position:$.browser.msie?'absolute':'fixed'};$.extend(L,{version:\"1.5\",align:'top-left',pulse:'working error',mask:false,img:null,element:null,text:'Loading...',onAjax:undefined,delay:0,classname:'loading',imgClass:'loading-img',elementClass:'loading-element',maskClass:'loading-mask',css:{position:'absolute',whiteSpace:'nowrap',zIndex:1001},maskCss:{position:'absolute',opacity:.15,background:'#333',zIndex:101,display:'block',cursor:'wait'},cloneEvents:true,pageOptions:{page:true,align:'top-center',css:fixed,maskCss:fixed},html:'',maskHtml:'',maskedClass:'loading-masked',maskEvents:'mousedown mouseup keydown keypress',resizeEvents:'resize',working:{time:10000,text:'Still working...',run:function(l){var w=l.working,self=this;w.timeout=setTimeout(function(){self.height('auto').width('auto').text(l.text=w.text);l.place.call(self,l);},w.time);}},error:{time:100000,text:'Task may have failed...',classname:'loading-error',run:function(l){var e=l.error,self=this;e.timeout=setTimeout(function(){self.height('auto').width('auto').text(l.text=e.text).addClass(e.classname);l.place.call(self,l);},e.time);}},fade:{time:800,speed:'slow',run:function(l){var f=l.fade,s=f.speed,self=this;f.interval=setInterval(function(){self.fadeOut(s).fadeIn(s);},f.time);}},ellipsis:{time:300,run:function(l){var e=l.ellipsis,self=this;e.interval=setInterval(function(){var et=self.text(),t=l.text,i=dotIndex(t);self.text((et.length-i)<3?et+'.':t.substring(0,i));},e.time);function dotIndex(t){var x=t.indexOf('.');return x<0?t.length:x;}}},type:{time:100,run:function(l){var t=l.type,self=this;t.interval=setInterval(function(){var e=self.text(),el=e.length,txt=l.text;self.text(el==txt.length?txt.charAt(0):txt.substring(0,el+1));},t.time);}},toggle:function(l){var old=this.data('loading');if(old){if(l.show!==true)old.off.call(this,old,l);}else{if(l.show!==false)l.on.call(this,l);}},setAjax:function(l){if(l.onAjax){var self=this,A=l.ajax={start:function(){l.on.call(self,l);},stop:function(){l.off.call(self,l,l);}};this.bind('ajaxStart.loading',A.start).bind('ajaxStop.loading',A.stop);}else{this.unbind('ajaxStart.loading ajaxStop.loading');}},on:function(l,force){if(l.delay&&!run){var self=this;return l.timeout=setTimeout(function(){l.on.call(self,l,force);delete l.timeout;},l.delay);}\r\nl.parent=this;if(l.mask)l.mask=l.createMask.call(this,l);l.display=l.create.call(this,l);if(l.img){l.initImg.call(this,l);}else if(l.element){l.initElement.call(this,l);}else{l.init.call(this,l);}\r\nthis.trigger('loadingStart',[l]);},initImg:function(l){var self=this;l.img=$('').bind('load',function(){l.init.call(self,l);});l.display.addClass(l.imgClass).append(l.img);},initElement:function(l){l.element=$(l.element).clone(l.cloneEvents).show();l.display.addClass(l.elementClass).append(l.element);l.init.call(this,l);},init:function(l){l.place.call(l.display,l);this.data('loading',l);if(l.pulse)l.initPulse.call(this,l);},initPulse:function(l){$.each(l.pulse.split(' '),function(){l[this].run.call(l.display,l);});},create:function(l){var el=$(l.html).addClass(l.classname).css(l.css).appendTo(this);if(l.text&&!l.img&&!l.element)el.text(l.text);$(window).bind(l.resizeEvents,l.resizer=function(){l.resize(l);});return el;},resize:function(l){l.parent.box=null;if(l.mask)l.mask.hide();l.place.call(l.display.hide(),l);if(l.mask)l.mask.show().css(l.parent.box);},createMask:function(l){var box=l.measure.call(this.addClass(l.maskedClass),l);l.handler=function(e){return l.maskHandler(e,l);};$(document).bind(l.maskEvents,l.handler);return $(l.maskHtml).addClass(l.maskClass).css(box).css(l.maskCss).appendTo(this);},maskHandler:function(e,l){var $els=$(e.target).parents().andSelf();if($els.filter('.'+l.classname).length!=0)return true;return!l.page&&$els.filter('.'+l.maskedClass).length==0;},place:function(l){var box=l.align,v='top',h='left';if(typeof box==\"object\"){box=$.extend(l.calc.call(this,v,h,l),box);}else{if(box!='top-left'){var s=box.split('-');if(s.length==1){v=h=s[0];}else{v=s[0];h=s[1];}}\r\nif(!this.hasClass(v))this.addClass(v);if(!this.hasClass(h))this.addClass(h);box=l.calc.call(this,v,h,l);}\r\nthis.show().css(l.box=box);},calc:function(v,h,l){var box=$.extend({},l.measure.call(l.parent,l)),H=$.boxModel?this.height():this.innerHeight(),W=$.boxModel?this.width():this.innerWidth();if(v!='top'){var d=box.height-H;if(v=='center'){d/=2;}else if(v!='bottom'){d=0;}else if($.boxModel){d-=css(this,'paddingTop')+css(this,'paddingBottom');}\r\nbox.top+=d;}\r\nif(h!='left'){var d=box.width-W;if(h=='center'){d/=2;}else if(h!='right'){d=0;}else if($.boxModel){d-=css(this,'paddingLeft')+css(this,'paddingRight');}\r\nbox.left+=d;}\r\nbox.height=H;box.width=W;return box;},measure:function(l){return this.box||(this.box=l.page?l.pageBox(l):l.elementBox(this,l));},elementBox:function(e,l){var box=e.position();box.top+=css(e,'marginTop');box.left+=css(e,'marginLeft');box.height=e.outerHeight();box.width=e.outerWidth();return box;},pageBox:function(l){var d=document,b=d.body,full=$.boxModel&&l.css.position!='fixed',h=full?$(d).height():b.clientHeight,w=full?$(d).width():b.clientWidth;return{top:0,left:0,height:h,width:w};},off:function(old,l){if(old.timeout)return clearTimeout(old.timeout);this.data('loading',null);if(old.pulse)old.stopPulse.call(this,old,l);if(old.mask)old.stopMask.call(this,old,l);$(window).unbind(old.resizeEvents,old.resizer);if(old.display)old.display.remove();if(old.parent)old.parent.trigger('loadingEnd',[old]);},stopPulse:function(old,l){$.each(old.pulse.split(' '),function(){var p=old[this];if(p.end)p.end.call(l.display,old,l);if(p.interval)clearInterval(p.interval);if(p.timeout)clearTimeout(p.timeout);});},stopMask:function(old,l){this.removeClass(l.maskedClass);$(document).unbind(old.maskEvents,old.handler);old.mask.remove();}});L.onAjax=function(opts){$.loading($.extend({onAjax:true},opts));};function toOpts(s,l){if(l===undefined){l=(typeof s==\"boolean\")?{show:s}:s;}else{l.show=s;}\r\nif(l&&(l.img||l.element)&&!l.pulse)l.pulse=false;if(l&&l.onAjax!==undefined&&l.show===undefined)l.show=false;return l;}\r\nfunction css(el,prop){var val=el.css(prop);return val=='auto'?0:parseFloat(val,10);}})(jQuery);","/*!\r\n* jQuery blockUI plugin\r\n* Version 2.65.0-2013.09.02\r\n* Requires jQuery v1.7 or later\r\n*\r\n* Examples at: http://malsup.com/jquery/block/\r\n* Copyright (c) 2007-2013 M. Alsup\r\n* Dual licensed under the MIT and GPL licenses:\r\n* http://www.opensource.org/licenses/mit-license.php\r\n* http://www.gnu.org/licenses/gpl.html\r\n*\r\n* Thanks to Amir-Hossein Sobhi for some excellent contributions!\r\n*/\r\n\r\n; (function () {\r\n /*jshint eqeqeq:false curly:false latedef:false */\r\n \"use strict\";\r\n\r\n function setup($) {\r\n $.fn._fadeIn = $.fn.fadeIn;\r\n\r\n var noOp = $.noop || function () { };\r\n\r\n // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\r\n // confusing userAgent strings on Vista)\r\n var msie = /MSIE/.test(navigator.userAgent);\r\n var ie6 = /MSIE 6.0/.test(navigator.userAgent) && !/MSIE 8.0/.test(navigator.userAgent);\r\n var mode = document.documentMode || 0;\r\n var setExpr = $.isFunction(document.createElement('div').style.setExpression);\r\n\r\n // global $ methods for blocking/unblocking the entire page\r\n $.blockUI = function (opts) { install(window, opts); };\r\n $.unblockUI = function (opts) { remove(window, opts); };\r\n\r\n // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\r\n $.growlUI = function (title, message, timeout, onClose) {\r\n var $m = $('');\r\n if (title) $m.append('
' + title + '
');\r\n if (message) $m.append('
' + message + '
');\r\n if (timeout === undefined) timeout = 3000;\r\n\r\n // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\r\n var callBlock = function (opts) {\r\n opts = opts || {};\r\n\r\n $.blockUI({\r\n message: $m,\r\n fadeIn: typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,\r\n fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\r\n timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\r\n centerY: false,\r\n showOverlay: false,\r\n onUnblock: onClose,\r\n css: $.blockUI.defaults.growlCSS\r\n });\r\n };\r\n\r\n callBlock();\r\n var nonmousedOpacity = $m.css('opacity');\r\n $m.mouseover(function () {\r\n callBlock({\r\n fadeIn: 0,\r\n timeout: 30000\r\n });\r\n\r\n var displayBlock = $('.blockMsg');\r\n displayBlock.stop(); // cancel fadeout if it has started\r\n displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\r\n }).mouseout(function () {\r\n $('.blockMsg').fadeOut(1000);\r\n });\r\n // End konapun additions\r\n };\r\n\r\n // plugin method for blocking element content\r\n $.fn.block = function (opts) {\r\n if (this[0] === window) {\r\n $.blockUI(opts);\r\n return this;\r\n }\r\n var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\r\n this.each(function () {\r\n var $el = $(this);\r\n if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\r\n return;\r\n $el.unblock({ fadeOut: 0 });\r\n });\r\n\r\n return this.each(function () {\r\n if ($.css(this, 'position') == 'static') {\r\n this.style.position = 'relative';\r\n $(this).data('blockUI.static', true);\r\n }\r\n this.style.zoom = 1; // force 'hasLayout' in ie\r\n install(this, opts);\r\n });\r\n };\r\n\r\n // plugin method for unblocking element content\r\n $.fn.unblock = function (opts) {\r\n if (this[0] === window) {\r\n $.unblockUI(opts);\r\n return this;\r\n }\r\n return this.each(function () {\r\n remove(this, opts);\r\n });\r\n };\r\n\r\n $.blockUI.version = 2.65; // 2nd generation blocking at no extra cost!\r\n\r\n // override these in your code to change the default behavior and style\r\n $.blockUI.defaults = {\r\n // message displayed when blocking (use null for no message)\r\n message: '
Please wait...
',\r\n\r\n title: null, \t// title string; only used when theme == true\r\n draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)\r\n\r\n theme: false, // set to true to use with jQuery UI themes\r\n\r\n // styles for the message when blocking; if you wish to disable\r\n // these and use an external stylesheet then do this in your code:\r\n // $.blockUI.defaults.css = {};\r\n css: {\r\n padding: 0,\r\n margin: 0,\r\n width: '30%',\r\n top: '40%',\r\n left: '35%',\r\n textAlign: 'center',\r\n color: '#000',\r\n border: '3px solid #aaa',\r\n backgroundColor: '#fff',\r\n cursor: 'wait'\r\n },\r\n\r\n // minimal style set used when themes are used\r\n themedCSS: {\r\n width: '30%',\r\n top: '40%',\r\n left: '35%'\r\n },\r\n\r\n // styles for the overlay\r\n overlayCSS: {\r\n backgroundColor: '#000',\r\n opacity: 0.6,\r\n cursor: 'wait'\r\n },\r\n\r\n // style to replace wait cursor before unblocking to correct issue\r\n // of lingering wait cursor\r\n cursorReset: 'default',\r\n\r\n // styles applied when using $.growlUI\r\n growlCSS: {\r\n width: '350px',\r\n top: '10px',\r\n left: '',\r\n right: '10px',\r\n border: 'none',\r\n padding: '5px',\r\n opacity: 0.6,\r\n cursor: 'default',\r\n color: '#fff',\r\n backgroundColor: '#000',\r\n '-webkit-border-radius': '10px',\r\n '-moz-border-radius': '10px',\r\n 'border-radius': '10px'\r\n },\r\n\r\n // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\r\n // (hat tip to Jorge H. N. de Vasconcelos)\r\n /*jshint scripturl:true */\r\n iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\r\n\r\n // force usage of iframe in non-IE browsers (handy for blocking applets)\r\n forceIframe: false,\r\n\r\n // z-index for the blocking overlay\r\n baseZ: 1000,\r\n\r\n // set these to true to have the message automatically centered\r\n centerX: true, // <-- only effects element blocking (page block controlled via css above)\r\n centerY: true,\r\n\r\n // allow body element to be stetched in ie6; this makes blocking look better\r\n // on \"short\" pages. disable if you wish to prevent changes to the body height\r\n allowBodyStretch: true,\r\n\r\n // enable if you want key and mouse events to be disabled for content that is blocked\r\n bindEvents: true,\r\n\r\n // be default blockUI will supress tab navigation from leaving blocking content\r\n // (if bindEvents is true)\r\n constrainTabKey: true,\r\n\r\n // fadeIn time in millis; set to 0 to disable fadeIn on block\r\n fadeIn: 200,\r\n\r\n // fadeOut time in millis; set to 0 to disable fadeOut on unblock\r\n fadeOut: 400,\r\n\r\n // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\r\n timeout: 0,\r\n\r\n // disable if you don't want to show the overlay\r\n showOverlay: true,\r\n\r\n // if true, focus will be placed in the first available input field when\r\n // page blocking\r\n focusInput: true,\r\n\r\n // elements that can receive focus\r\n focusableElements: ':input:enabled:visible',\r\n\r\n // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\r\n // no longer needed in 2012\r\n // applyPlatformOpacityRules: true,\r\n\r\n // callback method invoked when fadeIn has completed and blocking message is visible\r\n onBlock: null,\r\n\r\n // callback method invoked when unblocking has completed; the callback is\r\n // passed the element that has been unblocked (which is the window object for page\r\n // blocks) and the options that were passed to the unblock call:\r\n //\tonUnblock(element, options)\r\n onUnblock: null,\r\n\r\n // callback method invoked when the overlay area is clicked.\r\n // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\r\n onOverlayClick: null,\r\n\r\n // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\r\n quirksmodeOffsetHack: 4,\r\n\r\n // class name of the message block\r\n blockMsgClass: 'blockMsg',\r\n\r\n // if it is already blocked, then ignore it (don't unblock and reblock)\r\n ignoreIfBlocked: false\r\n };\r\n\r\n // private data and functions follow...\r\n\r\n var pageBlock = null;\r\n var pageBlockEls = [];\r\n\r\n function install(el, opts) {\r\n var css, themedCSS;\r\n var full = (el == window);\r\n var msg = (opts && opts.message !== undefined ? opts.message : undefined);\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n\r\n if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\r\n return;\r\n\r\n opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\r\n css = $.extend({}, $.blockUI.defaults.css, opts.css || {});\r\n if (opts.onOverlayClick)\r\n opts.overlayCSS.cursor = 'pointer';\r\n\r\n themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\r\n msg = msg === undefined ? opts.message : msg;\r\n\r\n // remove the current block (if there is one)\r\n if (full && pageBlock)\r\n remove(window, { fadeOut: 0 });\r\n\r\n // if an existing element is being used as the blocking content then we capture\r\n // its current place in the DOM (and current display style) so we can restore\r\n // it when we unblock\r\n if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\r\n var node = msg.jquery ? msg[0] : msg;\r\n var data = {};\r\n $(el).data('blockUI.history', data);\r\n data.el = node;\r\n data.parent = node.parentNode;\r\n data.display = node.style.display;\r\n data.position = node.style.position;\r\n if (data.parent)\r\n data.parent.removeChild(node);\r\n }\r\n\r\n $(el).data('blockUI.onUnblock', opts.onUnblock);\r\n var z = opts.baseZ;\r\n\r\n // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\r\n // layer1 is the iframe layer which is used to supress bleed through of underlying content\r\n // layer2 is the overlay layer which has opacity and a wait cursor (by default)\r\n // layer3 is the message content that is displayed while blocking\r\n var lyr1, lyr2, lyr3, s;\r\n if (msie || opts.forceIframe)\r\n lyr1 = $('');\r\n else\r\n lyr1 = $('');\r\n\r\n if (opts.theme)\r\n lyr2 = $('');\r\n else\r\n lyr2 = $('');\r\n\r\n if (opts.theme && full) {\r\n s = '
';\r\n if (opts.title) {\r\n s += '
' + (opts.title || ' ') + '
';\r\n }\r\n s += '';\r\n s += '
';\r\n }\r\n else if (opts.theme) {\r\n s = '
';\r\n if (opts.title) {\r\n s += '
' + (opts.title || ' ') + '
';\r\n }\r\n s += '';\r\n s += '
';\r\n }\r\n else if (full) {\r\n s = '';\r\n }\r\n else {\r\n s = '';\r\n }\r\n lyr3 = $(s);\r\n\r\n // if we have a message, style it\r\n if (msg) {\r\n if (opts.theme) {\r\n lyr3.css(themedCSS);\r\n lyr3.addClass('ui-widget-content');\r\n }\r\n else\r\n lyr3.css(css);\r\n }\r\n\r\n // style the overlay\r\n if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\r\n lyr2.css(opts.overlayCSS);\r\n lyr2.css('position', full ? 'fixed' : 'absolute');\r\n\r\n // make iframe layer transparent in IE\r\n if (msie || opts.forceIframe)\r\n lyr1.css('opacity', 0.0);\r\n\r\n //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\r\n var layers = [lyr1, lyr2, lyr3], $par = full ? $('body') : $(el);\r\n $.each(layers, function () {\r\n this.appendTo($par);\r\n });\r\n\r\n if (opts.theme && opts.draggable && $.fn.draggable) {\r\n lyr3.draggable({\r\n handle: '.ui-dialog-titlebar',\r\n cancel: 'li'\r\n });\r\n }\r\n\r\n // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\r\n var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\r\n if (ie6 || expr) {\r\n // give body 100% height\r\n if (full && opts.allowBodyStretch && $.support.boxModel)\r\n $('html,body').css('height', '100%');\r\n\r\n // fix ie6 issue when blocked element has a border width\r\n if ((ie6 || !$.support.boxModel) && !full) {\r\n var t = sz(el, 'borderTopWidth'), l = sz(el, 'borderLeftWidth');\r\n var fixT = t ? '(0 - ' + t + ')' : 0;\r\n var fixL = l ? '(0 - ' + l + ')' : 0;\r\n }\r\n\r\n // simulate fixed position\r\n $.each(layers, function (i, o) {\r\n var s = o[0].style;\r\n s.position = 'absolute';\r\n if (i < 2) {\r\n if (full)\r\n s.setExpression('height', 'Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:' + opts.quirksmodeOffsetHack + ') + \"px\"');\r\n else\r\n s.setExpression('height', 'this.parentNode.offsetHeight + \"px\"');\r\n if (full)\r\n s.setExpression('width', 'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\r\n else\r\n s.setExpression('width', 'this.parentNode.offsetWidth + \"px\"');\r\n if (fixL) s.setExpression('left', fixL);\r\n if (fixT) s.setExpression('top', fixT);\r\n }\r\n else if (opts.centerY) {\r\n if (full) s.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\r\n s.marginTop = 0;\r\n }\r\n else if (!opts.centerY && full) {\r\n var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\r\n var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + ' + top + ') + \"px\"';\r\n s.setExpression('top', expression);\r\n }\r\n });\r\n }\r\n\r\n // show the message\r\n if (msg) {\r\n if (opts.theme)\r\n lyr3.find('.ui-widget-content').append(msg);\r\n else\r\n lyr3.append(msg);\r\n if (msg.jquery || msg.nodeType)\r\n $(msg).show();\r\n }\r\n\r\n if ((msie || opts.forceIframe) && opts.showOverlay)\r\n lyr1.show(); // opacity is zero\r\n if (opts.fadeIn) {\r\n var cb = opts.onBlock ? opts.onBlock : noOp;\r\n var cb1 = (opts.showOverlay && !msg) ? cb : noOp;\r\n var cb2 = msg ? cb : noOp;\r\n if (opts.showOverlay)\r\n lyr2._fadeIn(opts.fadeIn, cb1);\r\n if (msg)\r\n lyr3._fadeIn(opts.fadeIn, cb2);\r\n }\r\n else {\r\n if (opts.showOverlay)\r\n lyr2.show();\r\n if (msg)\r\n lyr3.show();\r\n if (opts.onBlock)\r\n opts.onBlock();\r\n }\r\n\r\n // bind key and mouse events\r\n bind(1, el, opts);\r\n\r\n if (full) {\r\n pageBlock = lyr3[0];\r\n pageBlockEls = $(opts.focusableElements, pageBlock);\r\n if (opts.focusInput)\r\n setTimeout(focus, 20);\r\n }\r\n else\r\n center(lyr3[0], opts.centerX, opts.centerY);\r\n\r\n if (opts.timeout) {\r\n // auto-unblock\r\n var to = setTimeout(function () {\r\n if (full)\r\n $.unblockUI(opts);\r\n else\r\n $(el).unblock(opts);\r\n }, opts.timeout);\r\n $(el).data('blockUI.timeout', to);\r\n }\r\n }\r\n\r\n // remove the block\r\n function remove(el, opts) {\r\n var count;\r\n var full = (el == window);\r\n var $el = $(el);\r\n var data = $el.data('blockUI.history');\r\n var to = $el.data('blockUI.timeout');\r\n if (to) {\r\n clearTimeout(to);\r\n $el.removeData('blockUI.timeout');\r\n }\r\n opts = $.extend({}, $.blockUI.defaults, opts || {});\r\n bind(0, el, opts); // unbind events\r\n\r\n if (opts.onUnblock === null) {\r\n opts.onUnblock = $el.data('blockUI.onUnblock');\r\n $el.removeData('blockUI.onUnblock');\r\n }\r\n\r\n var els;\r\n if (full) // crazy selector to handle odd field errors in ie6/7\r\n els = $('body').children().filter('.blockUI').add('body > .blockUI');\r\n else\r\n els = $el.find('>.blockUI');\r\n\r\n // fix cursor issue\r\n if (opts.cursorReset) {\r\n if (els.length > 1)\r\n els[1].style.cursor = opts.cursorReset;\r\n if (els.length > 2)\r\n els[2].style.cursor = opts.cursorReset;\r\n }\r\n\r\n if (full)\r\n pageBlock = pageBlockEls = null;\r\n\r\n if (opts.fadeOut) {\r\n count = els.length;\r\n els.stop().fadeOut(opts.fadeOut, function () {\r\n if (--count === 0)\r\n reset(els, data, opts, el);\r\n });\r\n }\r\n else\r\n reset(els, data, opts, el);\r\n }\r\n\r\n // move blocking element back into the DOM where it started\r\n function reset(els, data, opts, el) {\r\n var $el = $(el);\r\n if ($el.data('blockUI.isBlocked'))\r\n return;\r\n\r\n els.each(function (i, o) {\r\n // remove via DOM calls so we don't lose event handlers\r\n if (this.parentNode)\r\n this.parentNode.removeChild(this);\r\n });\r\n\r\n if (data && data.el) {\r\n data.el.style.display = data.display;\r\n data.el.style.position = data.position;\r\n if (data.parent)\r\n data.parent.appendChild(data.el);\r\n $el.removeData('blockUI.history');\r\n }\r\n\r\n if ($el.data('blockUI.static')) {\r\n $el.css('position', 'static'); // #22\r\n }\r\n\r\n if (typeof opts.onUnblock == 'function')\r\n opts.onUnblock(el, opts);\r\n\r\n // fix issue in Safari 6 where block artifacts remain until reflow\r\n var body = $(document.body), w = body.width(), cssW = body[0].style.width;\r\n body.width(w - 1).width(w);\r\n body[0].style.width = cssW;\r\n }\r\n\r\n // bind/unbind the handler\r\n function bind(b, el, opts) {\r\n var full = el == window, $el = $(el);\r\n\r\n // don't bother unbinding if there is nothing to unbind\r\n if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\r\n return;\r\n\r\n $el.data('blockUI.isBlocked', b);\r\n\r\n // don't bind events when overlay is not in use or if bindEvents is false\r\n if (!full || !opts.bindEvents || (b && !opts.showOverlay))\r\n return;\r\n\r\n // bind anchors and inputs for mouse and key events\r\n var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\r\n if (b)\r\n $(document).bind(events, opts, handler);\r\n else\r\n $(document).unbind(events, handler);\r\n\r\n // former impl...\r\n //\t\tvar $e = $('a,:input');\r\n //\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\r\n }\r\n\r\n // event handler to suppress keyboard/mouse events when blocking\r\n function handler(e) {\r\n // allow tab navigation (conditionally)\r\n if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\r\n if (pageBlock && e.data.constrainTabKey) {\r\n var els = pageBlockEls;\r\n var fwd = !e.shiftKey && e.target === els[els.length - 1];\r\n var back = e.shiftKey && e.target === els[0];\r\n if (fwd || back) {\r\n setTimeout(function () { focus(back); }, 10);\r\n return false;\r\n }\r\n }\r\n }\r\n var opts = e.data;\r\n var target = $(e.target);\r\n if (target.hasClass('blockOverlay') && opts.onOverlayClick)\r\n opts.onOverlayClick();\r\n\r\n // allow events within the message content\r\n if (target.parents('div.' + opts.blockMsgClass).length > 0)\r\n return true;\r\n\r\n // allow events for content that is not being blocked\r\n return target.parents().children().filter('div.blockUI').length === 0;\r\n }\r\n\r\n function focus(back) {\r\n if (!pageBlockEls)\r\n return;\r\n var e = pageBlockEls[back === true ? pageBlockEls.length - 1 : 0];\r\n if (e)\r\n e.focus();\r\n }\r\n\r\n function center(el, x, y) {\r\n var p = el.parentNode, s = el.style;\r\n var l = ((p.offsetWidth - el.offsetWidth) / 2) - sz(p, 'borderLeftWidth');\r\n var t = ((p.offsetHeight - el.offsetHeight) / 2) - sz(p, 'borderTopWidth');\r\n if (x) s.left = l > 0 ? (l + 'px') : '0';\r\n if (y) s.top = t > 0 ? (t + 'px') : '0';\r\n }\r\n\r\n function sz(el, p) {\r\n return parseInt($.css(el, p), 10) || 0;\r\n }\r\n\r\n }\r\n\r\n\r\n /*global define:true */\r\n if (typeof define === 'function' && define.amd && define.amd.jQuery) {\r\n define(['jquery'], setup);\r\n } else {\r\n setup(jQuery);\r\n }\r\n\r\n})();\r\n\r\n","jQuery.fn.extend({\r\n\teveryTime: function(interval, label, fn, times, belay) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.timer.add(this, interval, label, fn, times, belay);\r\n\t\t});\r\n\t},\r\n\toneTime: function(interval, label, fn) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.timer.add(this, interval, label, fn, 1);\r\n\t\t});\r\n\t},\r\n\tstopTime: function(label, fn) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.timer.remove(this, label, fn);\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\ttimer: {\r\n\t\tguid: 1,\r\n\t\tglobal: {},\r\n\t\tregex: /^([0-9]+)\\s*(.*s)?$/,\r\n\t\tpowers: {\r\n\t\t\t// Yeah this is major overkill...\r\n\t\t\t'ms': 1,\r\n\t\t\t'cs': 10,\r\n\t\t\t'ds': 100,\r\n\t\t\t's': 1000,\r\n\t\t\t'das': 10000,\r\n\t\t\t'hs': 100000,\r\n\t\t\t'ks': 1000000\r\n\t\t},\r\n\t\ttimeParse: function(value) {\r\n\t\t\tif (value == undefined || value == null)\r\n\t\t\t\treturn null;\r\n\t\t\tvar result = this.regex.exec(jQuery.trim(value.toString()));\r\n\t\t\tif (result[2]) {\r\n\t\t\t\tvar num = parseInt(result[1], 10);\r\n\t\t\t\tvar mult = this.powers[result[2]] || 1;\r\n\t\t\t\treturn num * mult;\r\n\t\t\t} else {\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tadd: function(element, interval, label, fn, times, belay) {\r\n\t\t\tvar counter = 0;\r\n\t\t\t\r\n\t\t\tif (jQuery.isFunction(label)) {\r\n\t\t\t\tif (!times) \r\n\t\t\t\t\ttimes = fn;\r\n\t\t\t\tfn = label;\r\n\t\t\t\tlabel = interval;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tinterval = jQuery.timer.timeParse(interval);\r\n\r\n\t\t\tif (typeof interval != 'number' || isNaN(interval) || interval <= 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (times && times.constructor != Number) {\r\n\t\t\t\tbelay = !!times;\r\n\t\t\t\ttimes = 0;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\ttimes = times || 0;\r\n\t\t\tbelay = belay || false;\r\n\t\t\t\r\n\t\t\tif (!element.$timers) \r\n\t\t\t\telement.$timers = {};\r\n\t\t\t\r\n\t\t\tif (!element.$timers[label])\r\n\t\t\t\telement.$timers[label] = {};\r\n\t\t\t\r\n\t\t\tfn.$timerID = fn.$timerID || this.guid++;\r\n\t\t\t\r\n\t\t\tvar handler = function() {\r\n\t\t\t\tif (belay && this.inProgress) \r\n\t\t\t\t\treturn;\r\n\t\t\t\tthis.inProgress = true;\r\n\t\t\t\tif ((++counter > times && times !== 0) || fn.call(element, counter) === false)\r\n\t\t\t\t\tjQuery.timer.remove(element, label, fn);\r\n\t\t\t\tthis.inProgress = false;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\thandler.$timerID = fn.$timerID;\r\n\t\t\t\r\n\t\t\tif (!element.$timers[label][fn.$timerID]) \r\n\t\t\t\telement.$timers[label][fn.$timerID] = window.setInterval(handler,interval);\r\n\t\t\t\r\n\t\t\tif ( !this.global[label] )\r\n\t\t\t\tthis.global[label] = [];\r\n\t\t\tthis.global[label].push( element );\r\n\t\t\t\r\n\t\t},\r\n\t\tremove: function(element, label, fn) {\r\n\t\t\tvar timers = element.$timers, ret;\r\n\t\t\t\r\n\t\t\tif ( timers ) {\r\n\t\t\t\t\r\n\t\t\t\tif (!label) {\r\n\t\t\t\t\tfor ( label in timers )\r\n\t\t\t\t\t\tthis.remove(element, label, fn);\r\n\t\t\t\t} else if ( timers[label] ) {\r\n\t\t\t\t\tif ( fn ) {\r\n\t\t\t\t\t\tif ( fn.$timerID ) {\r\n\t\t\t\t\t\t\twindow.clearInterval(timers[label][fn.$timerID]);\r\n\t\t\t\t\t\t\tdelete timers[label][fn.$timerID];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor ( var fn in timers[label] ) {\r\n\t\t\t\t\t\t\twindow.clearInterval(timers[label][fn]);\r\n\t\t\t\t\t\t\tdelete timers[label][fn];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor ( ret in timers[label] ) break;\r\n\t\t\t\t\tif ( !ret ) {\r\n\t\t\t\t\t\tret = null;\r\n\t\t\t\t\t\tdelete timers[label];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tfor ( ret in timers ) break;\r\n\t\t\t\tif ( !ret ) \r\n\t\t\t\t\telement.$timers = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nif (jQuery.browser.msie)\r\n\tjQuery(window).one(\"unload\", function() {\r\n\t\tvar global = jQuery.timer.global;\r\n\t\tfor ( var label in global ) {\r\n\t\t\tvar els = global[label], i = els.length;\r\n\t\t\twhile ( --i )\r\n\t\t\t\tjQuery.timer.remove(els[i], label);\r\n\t\t}\r\n\t});\r\n\r\n\r\n","/*\r\n * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010\r\n * http://benalman.com/projects/jquery-bbq-plugin/\r\n * \r\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\r\n * Dual licensed under the MIT and GPL licenses.\r\n * http://benalman.com/about/license/\r\n */\r\n(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d=\"hashchange\",A=\"querystring\",D=\"fragment\",y=\"elemUrlAttr\",g=\"location\",k=\"href\",t=\"src\",x=/^.*\\?|#.*$/g,w=/^.*\\#/,h,C={};function E(F){return typeof F===\"string\"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,\"$1\")}function o(F){return F.replace(/(?:^[^?#]*\\?([^#]*).*$)?.*/,\"$1\")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\\#?(.*)$/:/^([^#?]*)\\??([^#]*)(#?.*)/);J=K[3]||\"\";if(G===2&&E(I)){L=I.replace(H?w:x,\"\")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?\"#\":L||!K[1]?\"?\":\"\")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||\"\";var F=$.map(G.split(\"\"),encodeURIComponent);h=new RegExp(F.join(\"|\"),\"g\")};c.noEscape(\",/\");$.deparam=l=function(I,F){var H={},G={\"true\":!0,\"false\":!1,\"null\":null};$.each(I.replace(/\\+/g,\" \").split(\"&\"),function(L,Q){var K=Q.split(\"=\"),P=r(K[0]),J,O=H,M=0,R=P.split(\"][\"),N=R.length-1;if(/\\[/.test(R[0])&&/\\]$/.test(R[N])){R[N]=R[N].replace(/\\]$/,\"\");R=R.shift().split(\"[\").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J===\"undefined\"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===\"\"?O.length:R[M];O=O[P]=M').hide().insertAfter(\"body\")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash=\"#\"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,\"\")+\"#\"+u}}r=setTimeout(s,$[d+\"Delay\"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);","//Title: Custom DropDown plugin by PC\r\n//Documentation: http://designwithpc.com/Plugins/ddslick\r\n//Author: PC \r\n//Website: http://designwithpc.com\r\n//Twitter: http://twitter.com/chaudharyp\r\n\r\n(function ($) {\r\n\r\n $.fn.ddslick = function (method) {\r\n if (methods[method]) {\r\n return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method) {\r\n return methods.init.apply(this, arguments);\r\n } else {\r\n $.error('Method ' + method + ' does not exists.');\r\n }\r\n };\r\n\r\n var methods = {},\r\n\r\n //Set defauls for the control\r\n defaults = {\r\n data: [],\r\n keepJSONItemsOnTop: false,\r\n width: 260,\r\n height: null,\r\n background: \"#eee\",\r\n selectText: \"\",\r\n defaultSelectedIndex: null,\r\n truncateDescription: true,\r\n imagePosition: \"left\",\r\n showSelectedHTML: true,\r\n clickOffToClose: true,\r\n onSelected: function () { }\r\n },\r\n\r\n ddSelectHtml = '
',\r\n ddOptionsHtml = '
';\r\n\r\n //CSS for ddSlick\r\n // ddslickCSS = '';\r\n\r\n //CSS styles are only added once.\r\n // if ($('#css-ddslick').length <= 0) {\r\n // $(ddslickCSS).appendTo('head');\r\n // }\r\n\r\n //Public methods \r\n methods.init = function (options) {\r\n //Preserve the original defaults by passing an empty object as the target\r\n var options = $.extend({}, defaults, options);\r\n\r\n //Apply on all selected elements\r\n return this.each(function () {\r\n var obj = $(this),\r\n data = obj.data('ddslick');\r\n //If the plugin has not been initialized yet\r\n if (!data) {\r\n\r\n var ddSelect = [], ddJson = options.data;\r\n\r\n //Get data from HTML select options\r\n obj.find('option').each(function () {\r\n var $this = $(this), thisData = $this.data();\r\n ddSelect.push({\r\n text: $.trim($this.text()),\r\n value: $this.val(),\r\n selected: $this.is(':selected'),\r\n description: thisData.description,\r\n imageSrc: thisData.imagesrc //keep it lowercase for HTML5 data-attributes\r\n });\r\n });\r\n\r\n //Update Plugin data merging both HTML select data and JSON data for the dropdown\r\n if (options.keepJSONItemsOnTop)\r\n $.merge(options.data, ddSelect);\r\n else options.data = $.merge(ddSelect, options.data);\r\n\r\n //Replace HTML select with empty placeholder, keep the original\r\n var original = obj, placeholder = $('');\r\n obj.replaceWith(placeholder);\r\n obj = placeholder;\r\n\r\n //Add classes and append ddSelectHtml & ddOptionsHtml to the container\r\n // obj.addClass('dd-container').append(ddSelectHtml).append(ddOptionsHtml);\r\n obj.addClass('dd-container').append(ddSelectHtml).after(ddOptionsHtml);\r\n\r\n //Get newly created ddOptions and ddSelect to manipulate\r\n var ddSelect = obj.find('.dd-select'),\r\n // ddOptions = obj.find('.dd-options');\r\n ddOptions = obj.parent().find('.dd-options');\r\n\r\n //Set widths\r\n // ddOptions.css({ width: options.width });\r\n // ddSelect.css({ width: options.width, background: options.background });\r\n // obj.css({ width: options.width });\r\n ddSelect.css({ background: options.background });\r\n\r\n //Set height\r\n if (options.height != null)\r\n ddOptions.css({ height: options.height, overflow: 'auto' });\r\n\r\n //Add ddOptions to the container. Replace with template engine later.\r\n $.each(options.data, function (index, item) {\r\n if (item.selected) options.defaultSelectedIndex = index;\r\n ddOptions.append('
');\r\n });\r\n\r\n //Save plugin data.\r\n var pluginData = {\r\n settings: options,\r\n original: original,\r\n selectedIndex: -1,\r\n selectedItem: null,\r\n selectedData: null\r\n }\r\n obj.data('ddslick', pluginData);\r\n\r\n //Check if needs to show the select text, otherwise show selected or default selection\r\n if (options.selectText.length > 0 && options.defaultSelectedIndex == null) {\r\n obj.find('.dd-selected').html(options.selectText);\r\n }\r\n else {\r\n var index = (options.defaultSelectedIndex != null && options.defaultSelectedIndex >= 0 && options.defaultSelectedIndex < options.data.length)\r\n ? options.defaultSelectedIndex\r\n : 0;\r\n selectIndex(obj, index);\r\n }\r\n\r\n //EVENTS\r\n //Displaying options\r\n obj.find('.dd-select').on('click.ddslick', function () {\r\n open(obj);\r\n });\r\n\r\n //Selecting an option\r\n obj.parent().find('.dd-option').on('click.ddslick', function () {\r\n selectIndex(obj, $(this).closest('li').index());\r\n });\r\n\r\n //Click anywhere to close\r\n if (options.clickOffToClose) {\r\n ddOptions.addClass('dd-click-off-close');\r\n obj.on('click.ddslick', function (e) { e.stopPropagation(); });\r\n $('body').on('click', function () {\r\n $('.dd-click-off-close').slideUp(50).siblings('.dd-select').find('.dd-pointer').removeClass('dd-pointer-up');\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n //Public method to select an option by its index\r\n methods.select = function (options) {\r\n return this.each(function () {\r\n if (options.index)\r\n selectIndex($(this), options.index);\r\n });\r\n }\r\n\r\n //Public method to open drop down\r\n methods.open = function () {\r\n return this.each(function () {\r\n var $this = $(this),\r\n pluginData = $this.data('ddslick');\r\n\r\n //Check if plugin is initialized\r\n if (pluginData)\r\n open($this);\r\n });\r\n };\r\n\r\n //Public method to close drop down\r\n methods.close = function () {\r\n return this.each(function () {\r\n var $this = $(this),\r\n pluginData = $this.data('ddslick');\r\n\r\n //Check if plugin is initialized\r\n if (pluginData)\r\n close($this);\r\n });\r\n };\r\n\r\n //Public method to destroy. Unbind all events and restore the original Html select/options\r\n methods.destroy = function () {\r\n return this.each(function () {\r\n var $this = $(this),\r\n pluginData = $this.data('ddslick');\r\n\r\n //Check if already destroyed\r\n if (pluginData) {\r\n var originalElement = pluginData.original;\r\n $this.next().remove();\r\n $this.removeData('ddslick').unbind('.ddslick').replaceWith(originalElement);\r\n }\r\n });\r\n }\r\n\r\n //Private: Select index\r\n function selectIndex(obj, index) {\r\n\r\n //Get plugin data\r\n var pluginData = obj.data('ddslick');\r\n\r\n //Get required elements\r\n var ddSelected = obj.find('.dd-selected');\r\n var ddSelectedValue = ddSelected.siblings('.dd-selected-value');\r\n var ddOptions = obj.parent().find('.dd-options');\r\n var ddPointer = ddSelected.siblings('.dd-pointer');\r\n var selectedOption = obj.parent().find('.dd-option').eq(index);\r\n var selectedLiItem = selectedOption.closest('li');\r\n var settings = pluginData.settings;\r\n var selectedData = pluginData.settings.data[index];\r\n\r\n //Highlight selected option\r\n obj.parent().find('.dd-option').removeClass('dd-option-selected');\r\n selectedOption.addClass('dd-option-selected');\r\n\r\n //Update or Set plugin data with new selection\r\n pluginData.selectedIndex = index;\r\n pluginData.selectedItem = selectedLiItem;\r\n pluginData.selectedData = selectedData;\r\n\r\n //Callback function on selection\r\n if (typeof settings.onSelected == 'function') {\r\n settings.onSelected.call(this, pluginData);\r\n }\r\n\r\n //If set to display to full html, add html\r\n if (settings.showSelectedHTML) {\r\n ddSelected.html(\r\n (selectedData.imageSrc ? '' : '') +\r\n (selectedData.text ? '' : '') +\r\n (selectedData.description ? '' + selectedData.description + '' : '')\r\n );\r\n\r\n }\r\n //Else only display text as selection\r\n else ddSelected.html(selectedData.text);\r\n\r\n //Updating selected option value\r\n ddSelectedValue.val(selectedData.value);\r\n\r\n //BONUS! Update the original element attribute with the new selection\r\n pluginData.original.val(selectedData.value);\r\n obj.data('ddslick', pluginData);\r\n\r\n //Close options on selection\r\n close(obj);\r\n\r\n //Adjust appearence for selected option\r\n adjustSelectedHeight(obj);\r\n\r\n \r\n }\r\n\r\n //Private: Close the drop down options\r\n function open(obj) {\r\n\r\n var $this = obj.find('.dd-select'),\r\n ddOptions = $this.parent().siblings('.dd-options'),\r\n ddPointer = $this.find('.dd-pointer'),\r\n wasOpen = ddOptions.is(':visible');\r\n\r\n //Close all open options (multiple plugins) on the page\r\n $('.dd-click-off-close').not(ddOptions).slideUp(50);\r\n $('.dd-pointer').removeClass('dd-pointer-up');\r\n\r\n if (wasOpen) {\r\n ddOptions.slideUp('fast');\r\n ddPointer.removeClass('dd-pointer-up');\r\n }\r\n else {\r\n ddOptions.slideDown('fast');\r\n ddPointer.addClass('dd-pointer-up');\r\n }\r\n\r\n //Fix text height (i.e. display title in center), if there is no description\r\n adjustOptionsHeight(obj);\r\n }\r\n\r\n //Private: Close the drop down options\r\n function close(obj) {\r\n //Close drop down and adjust pointer direction\r\n obj.parent().find('.dd-options').slideUp(50);\r\n obj.find('.dd-pointer').removeClass('dd-pointer-up').removeClass('dd-pointer-up');\r\n }\r\n\r\n //Private: Adjust appearence for selected option (move title to middle), when no desripction\r\n function adjustSelectedHeight(obj) {\r\n\r\n //Get height of dd-selected\r\n var lSHeight = obj.find('.dd-select').css('height');\r\n\r\n //Check if there is selected description\r\n var descriptionSelected = obj.find('.dd-selected-description');\r\n var imgSelected = obj.find('.dd-selected-image');\r\n if (descriptionSelected.length <= 0 && imgSelected.length > 0) {\r\n obj.find('.dd-selected-text').css('lineHeight', lSHeight);\r\n }\r\n }\r\n\r\n //Private: Adjust appearence for drop down options (move title to middle), when no desripction\r\n function adjustOptionsHeight(obj) {\r\n obj.parent().find('.dd-option').each(function () {\r\n var $this = $(this);\r\n var lOHeight = $this.css('height');\r\n var descriptionOption = $this.find('.dd-option-description');\r\n var imgOption = obj.parent().find('.dd-option-image');\r\n if (descriptionOption.length <= 0 && imgOption.length > 0) {\r\n $this.find('.dd-option-text').css('lineHeight', lOHeight);\r\n }\r\n });\r\n }\r\n\r\n})(jQuery);","/**\r\n* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+\r\n* \r\n* \r\n* @param f onMouseOver function || An object with configuration options\r\n* @param g onMouseOut function || Nothing (use configuration options object)\r\n* @author Brian Cherne brian(at)cherne(dot)net\r\n*/\r\n(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))',\r\n tipClass: 'tooltip'\r\n },\r\n\r\n addEffect: function (name, loadFn, hideFn) {\r\n effects[name] = [loadFn, hideFn];\r\n }\r\n };\r\n\r\n\r\n var effects = {\r\n toggle: [\r\n\t\t\tfunction (done) {\r\n\t\t\t var conf = this.getConf(), tip = this.getTip(), o = conf.opacity;\r\n\t\t\t if (o < 1) { tip.css({ opacity: o }); }\r\n\t\t\t tip.show();\r\n\t\t\t done.call();\r\n\t\t\t},\r\n\r\n\t\t\tfunction (done) {\r\n\t\t\t this.getTip().hide();\r\n\t\t\t done.call();\r\n\t\t\t}\r\n\t\t],\r\n\r\n fade: [\r\n\t\t\tfunction (done) {\r\n\t\t\t var conf = this.getConf();\r\n\t\t\t this.getTip().fadeTo(conf.fadeInSpeed, conf.opacity, done);\r\n\t\t\t},\r\n\t\t\tfunction (done) {\r\n\t\t\t this.getTip().fadeOut(this.getConf().fadeOutSpeed, done);\r\n\t\t\t}\r\n\t\t]\r\n };\r\n\r\n\r\n /* calculate tip position relative to the trigger */\r\n function getPosition(trigger, tip, conf) {\r\n\r\n\r\n // get origin top/left position \r\n var top = conf.relative ? trigger.position().top : trigger.offset().top,\r\n\t\t\t left = conf.relative ? trigger.position().left : trigger.offset().left,\r\n\t\t\t pos = conf.position[0];\r\n\r\n top -= tip.outerHeight() - conf.offset[0];\r\n left += trigger.outerWidth() + conf.offset[1];\r\n\r\n // iPad position fix\r\n if (/iPad/i.test(navigator.userAgent)) {\r\n top -= $(window).scrollTop();\r\n }\r\n\r\n // adjust Y\t\t\r\n var height = tip.outerHeight() + trigger.outerHeight();\r\n if (pos == 'center') { top += height / 2; }\r\n if (pos == 'bottom') { top += height; }\r\n\r\n\r\n // adjust X\r\n pos = conf.position[1];\r\n var width = tip.outerWidth() + trigger.outerWidth();\r\n if (pos == 'center') { left -= width / 2; }\r\n if (pos == 'left') { left -= width; }\r\n\r\n return { top: top, left: left };\r\n }\r\n\r\n\r\n\r\n function Tooltip(trigger, conf) {\r\n\r\n var self = this,\r\n\t\t\t fire = trigger.add(self),\r\n\t\t\t tip,\r\n\t\t\t timer = 0,\r\n\t\t\t pretimer = 0,\r\n\t\t\t title = trigger.attr(\"title\"),\r\n\t\t\t tipAttr = trigger.attr(\"data-tooltip\"),\r\n\t\t\t effect = effects[conf.effect],\r\n\t\t\t shown,\r\n\r\n // get show/hide configuration\r\n\t\t\t isInput = trigger.is(\":input\"),\r\n\t\t\t isWidget = isInput && trigger.is(\":checkbox, :radio, select, :button, :submit\"),\r\n\t\t\t type = trigger.attr(\"type\"),\r\n\t\t\t evt = conf.events[type] || conf.events[isInput ? (isWidget ? 'widget' : 'input') : 'def'];\r\n\r\n\r\n // check that configuration is sane\r\n if (!effect) { throw \"Nonexistent effect \\\"\" + conf.effect + \"\\\"\"; }\r\n\r\n evt = evt.split(/,\\s*/);\r\n if (evt.length != 2) { throw \"Tooltip: bad events configuration for \" + type; }\r\n\r\n\r\n // trigger --> show \r\n trigger.bind(evt[0], function (e) {\r\n\r\n clearTimeout(timer);\r\n if (conf.predelay) {\r\n pretimer = setTimeout(function () { self.show(e); }, conf.predelay);\r\n\r\n } else {\r\n self.show(e);\r\n }\r\n\r\n // trigger --> hide\r\n }).bind(evt[1], function (e) {\r\n clearTimeout(pretimer);\r\n if (conf.delay) {\r\n timer = setTimeout(function () { self.hide(e); }, conf.delay);\r\n\r\n } else {\r\n self.hide(e);\r\n }\r\n\r\n });\r\n\r\n\r\n // remove default title\r\n if (title && conf.cancelDefault) {\r\n trigger.removeAttr(\"title\");\r\n trigger.data(\"title\", title);\r\n }\r\n\r\n $.extend(self, {\r\n\r\n show: function (e) {\r\n\r\n // tip not initialized yet\r\n if (!tip) {\r\n\r\n // data-tooltip \r\n if (tipAttr) {\r\n tip = $(tipAttr);\r\n\r\n // single tip element for all\r\n } else if (conf.tip) {\r\n tip = $(conf.tip).eq(0);\r\n\r\n // autogenerated tooltip\r\n } else if (title) {\r\n tip = $(conf.layout).addClass(conf.tipClass).appendTo(document.body)\r\n\t\t\t\t\t\t\t.hide().append(title);\r\n\r\n // manual tooltip\r\n } else {\r\n tip = trigger.next();\r\n if (!tip.length) { tip = trigger.parent().next(); }\r\n }\r\n\r\n if (!tip.length) { throw \"Cannot find tooltip for \" + trigger; }\r\n }\r\n\r\n if (self.isShown()) { return self; }\r\n\r\n // stop previous animation\r\n tip.stop(true, true);\r\n\r\n // get position\r\n var pos = getPosition(trigger, tip, conf);\r\n\r\n // restore title for single tooltip element\r\n if (conf.tip) {\r\n tip.find(\".tpmain\").html(trigger.data(\"title\"));\r\n }\r\n\r\n // onBeforeShow\r\n e = e || $.Event();\r\n e.type = \"onBeforeShow\";\r\n fire.trigger(e, [pos]);\r\n if (e.isDefaultPrevented()) { return self; }\r\n\r\n\r\n // onBeforeShow may have altered the configuration\r\n pos = getPosition(trigger, tip, conf);\r\n\r\n // set position\r\n tip.css({ position: 'absolute', top: pos.top, left: pos.left });\r\n\r\n shown = true;\r\n\r\n // invoke effect \r\n effect[0].call(self, function () {\r\n e.type = \"onShow\";\r\n shown = 'full';\r\n fire.trigger(e);\r\n });\r\n\r\n\r\n // tooltip events \r\n var event = conf.events.tooltip.split(/,\\s*/);\r\n\r\n if (!tip.data(\"__set\")) {\r\n\r\n tip.bind(event[0], function () {\r\n clearTimeout(timer);\r\n clearTimeout(pretimer);\r\n });\r\n\r\n if (event[1] && !trigger.is(\"input:not(:checkbox, :radio), textarea\")) {\r\n tip.bind(event[1], function (e) {\r\n\r\n // being moved to the trigger element\r\n if (e.relatedTarget != trigger[0]) {\r\n trigger.trigger(evt[1].split(\" \")[0]);\r\n }\r\n });\r\n }\r\n\r\n tip.data(\"__set\", true);\r\n }\r\n\r\n return self;\r\n },\r\n\r\n hide: function (e) {\r\n\r\n if (!tip || !self.isShown()) { return self; }\r\n\r\n // onBeforeHide\r\n e = e || $.Event();\r\n e.type = \"onBeforeHide\";\r\n fire.trigger(e);\r\n if (e.isDefaultPrevented()) { return; }\r\n\r\n shown = false;\r\n\r\n effects[conf.effect][1].call(self, function () {\r\n e.type = \"onHide\";\r\n fire.trigger(e);\r\n });\r\n\r\n return self;\r\n },\r\n\r\n isShown: function (fully) {\r\n return fully ? shown == 'full' : shown;\r\n },\r\n\r\n getConf: function () {\r\n return conf;\r\n },\r\n\r\n getTip: function () {\r\n return tip;\r\n },\r\n\r\n getTrigger: function () {\r\n return trigger;\r\n }\r\n\r\n });\r\n\r\n // callbacks\t\r\n $.each(\"onHide,onBeforeShow,onShow,onBeforeHide\".split(\",\"), function (i, name) {\r\n\r\n // configuration\r\n if ($.isFunction(conf[name])) {\r\n $(self).bind(name, conf[name]);\r\n }\r\n\r\n // API\r\n self[name] = function (fn) {\r\n if (fn) { $(self).bind(name, fn); }\r\n return self;\r\n };\r\n });\r\n\r\n }\r\n\r\n\r\n // jQuery plugin implementation\r\n $.fn.tooltip = function (conf) {\r\n\r\n // return existing instance\r\n var api = this.data(\"tooltip\");\r\n if (api) { return api; }\r\n\r\n conf = $.extend(true, {}, $.tools.tooltip.conf, conf);\r\n\r\n // position can also be given as string\r\n if (typeof conf.position == 'string') {\r\n conf.position = conf.position.split(/,?\\s/);\r\n }\r\n\r\n // install tooltip for each entry in jQuery object\r\n this.each(function () {\r\n api = new Tooltip($(this), conf);\r\n $(this).data(\"tooltip\", api);\r\n });\r\n\r\n return conf.api ? api : this;\r\n };\r\n\r\n})(jQuery);\r\n\r\n\t\t\r\n\r\n","/// \r\n/// \r\n/// \r\n/// \r\n\r\n//function Apple(type) {\r\n// this.type = type;\r\n// this.color = \"red\";\r\n// this.getInfo = function () {\r\n// return this.color + ' ' + this.type + ' apple';\r\n// };\r\n//}\r\n\r\n$(document).ready(function () {\r\n Translate_InitDialog();\r\n});\r\n\r\nTranslate_InitDialog = function () {\r\n var $dialog = $('');\r\n $('.translateDialog a').click(function () {\r\n var $link = $(this);\r\n $dialog\r\n\t\t\t\t.empty()\r\n\t\t\t\t.append($loading.clone())\r\n\t\t\t\t.dialog({\r\n\t\t\t\t title: $link.attr('title'),\r\n\t\t\t\t modal: true,\r\n position: top,\r\n\t\t\t\t buttons: {\r\n\t\t\t\t 'Update': function () { Translate_Update($(this).find('form'), $dialog); },\r\n\t\t\t\t 'Close': function () { $(this).dialog('close'); }\r\n\t\t\t\t },\r\n\t\t\t\t close: function () { $(this).closest(); },\r\n\t\t\t\t width: '800px',\r\n height: 600\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$dialog\r\n\t\t\t\t\t.load($link.attr('href'), function (response, status, xhr) {\r\n\t\t\t\t\t if (status == \"error\") {\r\n\t\t\t\t\t $.blockUI({\r\n\t\t\t\t\t message: xhr.status + ' ' + xhr.statusText + '\\n\\n' + response,\r\n\t\t\t\t\t centerY: false,\r\n\t\t\t\t\t centerX: false\r\n\t\t\t\t\t });\r\n\t\t\t\t\t }\r\n\t\t\t\t\t else {\r\n\t\t\t\t\t // It seems jQuery 1.4.1 & 1.4.2 has a problem in IE with .text() on script nodes… so do the loop ourselves…\r\n\t\t\t\t\t // execute the js that was loadad by ajax\r\n\t\t\t\t\t var scripts = $dialog.find(\"script\");\r\n\t\t\t\t\t var allScriptText = \"\";\r\n\t\t\t\t\t for (var i = 0; i < scripts.length; i++) {\r\n\t\t\t\t\t allScriptText += scripts[i].text;\r\n\t\t\t\t\t }\r\n\t\t\t\t\t jQuery.globalEval(allScriptText);\r\n\t\t\t\t\t $(this).dialog('option', 'position', 'center') //recenter the dialog\r\n\t\t\t\t\t }\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.dialog('open');\r\n\t\t\t\treturn false;\r\n });\r\n}\r\n\r\nTranslate_Update = function (form, dialog) {\r\n form = $(form);\r\n $.ajax({\r\n url: form.attr('action'),\r\n data: form.serialize(),\r\n type: (form.attr('method')),\r\n success: function (data, message) {\r\n dialog.dialog('close');\r\n $.blockUI({ message: '
Changes saved!\\n Page is reloading, please wait!
' });\r\n setTimeout(function () { location.reload(); }, 1000);\r\n },\r\n error: function (data) {\r\n $.blockUI({\r\n message: data.ResponseText,\r\n centerY: false,\r\n centerX: false\r\n });\r\n },\r\n dataType: 'json'\r\n });\r\n return false;\r\n}","//first we must set a cookie to check if it's possible writing there\r\nfunction Set_Cookie(name, value, expires, path, domain, secure) {\r\n // set time, it's in milliseconds\r\n var today = new Date();\r\n today.setTime(today.getTime());\r\n // if the expires variable is set, make the correct expires time, the\r\n // current script below will set it for x number of days, to make it\r\n // for hours, delete * 24, for minutes, delete * 60 * 24\r\n if (expires) {\r\n expires = expires * 1000 * 60 * 60 * 24;\r\n }\r\n //alert( 'today ' + today.toGMTString() );// this is for testing purpose only\r\n var expires_date = new Date(today.getTime() + (expires));\r\n //alert('expires ' + expires_date.toGMTString());// this is for testing purposes only\r\n\r\n document.cookie = name + \"=\" + escape(value) +\r\n\t\t((expires) ? \";expires=\" + expires_date.toGMTString() : \"\") + //expires.toGMTString()\r\n\t\t((path) ? \";path=\" + path : \"\") +\r\n\t\t((domain) ? \";domain=\" + domain : \"\") +\r\n\t\t((secure) ? \";secure\" : \"\");\r\n}\r\n\r\n// to use, simple do: Get_Cookie('cookie_name'); \r\n// replace cookie_name with the real cookie name, '' are required\r\nfunction Get_Cookie(check_name) {\r\n // first we'll split this cookie up into name/value pairs\r\n // note: document.cookie only returns name=value, not the other components\r\n var a_all_cookies = document.cookie.split(';');\r\n var a_temp_cookie = '';\r\n var cookie_name = '';\r\n var cookie_value = '';\r\n var b_cookie_found = false; // set boolean t/f default f\r\n var i = '';\r\n\r\n for (i = 0; i < a_all_cookies.length; i++) {\r\n // now we'll split apart each name=value pair\r\n a_temp_cookie = a_all_cookies[i].split('=');\r\n\r\n\r\n // and trim left/right whitespace while we're at it\r\n cookie_name = a_temp_cookie[0].replace(/^\\s+|\\s+$/g, '');\r\n\r\n // if the extracted name matches passed check_name\r\n if (cookie_name == check_name) {\r\n b_cookie_found = true;\r\n // we need to handle case where cookie has no value but exists (no = sign, that is):\r\n if (a_temp_cookie.length > 1) {\r\n cookie_value = unescape(a_temp_cookie[1].replace(/^\\s+|\\s+$/g, ''));\r\n }\r\n // note that in cases where cookie is initialized but no value, null is returned\r\n return cookie_value;\r\n break;\r\n }\r\n a_temp_cookie = null;\r\n cookie_name = '';\r\n }\r\n if (!b_cookie_found) {\r\n return null;\r\n }\r\n}\r\n\r\n// this deletes the cookie when called\r\nfunction Delete_Cookie(name, path, domain) {\r\n if (Get_Cookie(name)) document.cookie = name + \"=\" +\r\n\t\t\t((path) ? \";path=\" + path : \"\") +\r\n\t\t\t((domain) ? \";domain=\" + domain : \"\") +\r\n\t\t\t\";expires=Thu, 01-Jan-1970 00:00:01 GMT\";\r\n}\r\n\r\n//set info dialog\r\nfunction SetDialog(_title, content) {\r\n $('
' + content + '
').dialog({\r\n resizable: false,\r\n title: _title,\r\n width: 400,\r\n modal: true,\r\n buttons: {\r\n \"OK\": function () {\r\n $(this).block();\r\n $(this).dialog(\"close\");\r\n }\r\n }\r\n });\r\n}\r\n\r\n//call cookie Check\r\nfunction DoCookieCheck() {\r\n Set_Cookie('test', 'none', '', '/', '', '');\r\n // if Get_Cookie succeeds, cookies are enabled, since\r\n if (!Get_Cookie('test')) {\r\n cookie_set = false;\r\n //open a window\r\n var title = UIHeaderTitleCookieCheck;\r\n var content = UIContentCookieCheck; \r\n SetDialog(title, content);\r\n }\r\n else {\r\n cookie_set = true;\r\n Delete_Cookie('test', '/', '');\r\n }\r\n}\r\n\r\n\r\n\r\n","/**\r\n* jquery.dump.js\r\n* @author Torkild Dyvik Olsen\r\n* @version 1.0\r\n* \r\n* A simple debug function to gather information about an object.\r\n* Returns a nested tree with information.\r\n* \r\n*/\r\n(function($) {\r\n\r\n $.fn.dump = function() {\r\n return $.dump(this);\r\n }\r\n\r\n $.dump = function(object) {\r\n var recursion = function(obj, level) {\r\n if (!level) level = 0;\r\n var dump = '', p = '';\r\n for (i = 0; i < level; i++) p += \"\\t\";\r\n\r\n t = type(obj);\r\n switch (t) {\r\n case \"string\":\r\n return '\"' + obj + '\"';\r\n break;\r\n case \"number\":\r\n return obj.toString();\r\n break;\r\n case \"boolean\":\r\n return obj ? 'true' : 'false';\r\n case \"date\":\r\n return \"Date: \" + obj.toLocaleString();\r\n case \"array\":\r\n dump += 'Array ( \\n';\r\n $.each(obj, function(k, v) {\r\n dump += p + '\\t' + k + ' => ' + recursion(v, level + 1) + '\\n';\r\n });\r\n dump += p + ')';\r\n break;\r\n case \"object\":\r\n dump += 'Object { \\n';\r\n $.each(obj, function(k, v) {\r\n dump += p + '\\t' + k + ': ' + recursion(v, level + 1) + '\\n';\r\n });\r\n dump += p + '}';\r\n break;\r\n case \"jquery\":\r\n dump += 'jQuery Object { \\n';\r\n $.each(obj, function(k, v) {\r\n dump += p + '\\t' + k + ' = ' + recursion(v, level + 1) + '\\n';\r\n });\r\n dump += p + '}';\r\n break;\r\n case \"regexp\":\r\n return \"RegExp: \" + obj.toString();\r\n case \"error\":\r\n return obj.toString();\r\n case \"document\":\r\n case \"domelement\":\r\n dump += 'DOMElement [ \\n'\r\n + p + '\\tnodeName: ' + obj.nodeName + '\\n'\r\n + p + '\\tnodeValue: ' + obj.nodeValue + '\\n'\r\n + p + '\\tinnerHTML: [ \\n';\r\n $.each(obj.childNodes, function(k, v) {\r\n if (k < 1) var r = 0;\r\n if (type(v) == \"string\") {\r\n if (v.textContent.match(/[^\\s]/)) {\r\n dump += p + '\\t\\t' + (k - (r || 0)) + ' = String: ' + trim(v.textContent) + '\\n';\r\n } else {\r\n r--;\r\n }\r\n } else {\r\n dump += p + '\\t\\t' + (k - (r || 0)) + ' = ' + recursion(v, level + 2) + '\\n';\r\n }\r\n });\r\n dump += p + '\\t]\\n'\r\n + p + ']';\r\n break;\r\n case \"function\":\r\n var match = obj.toString().match(/^(.*)\\(([^\\)]*)\\)/im);\r\n match[1] = trim(match[1].replace(new RegExp(\"[\\\\s]+\", \"g\"), \" \"));\r\n match[2] = trim(match[2].replace(new RegExp(\"[\\\\s]+\", \"g\"), \" \"));\r\n return match[1] + \"(\" + match[2] + \")\";\r\n case \"window\":\r\n default:\r\n dump += 'N/A: ' + t;\r\n break;\r\n }\r\n\r\n return dump;\r\n }\r\n\r\n var type = function(obj) {\r\n var type = typeof (obj);\r\n\r\n if (type != \"object\") {\r\n return type;\r\n }\r\n\r\n switch (obj) {\r\n case null:\r\n return 'null';\r\n case window:\r\n return 'window';\r\n case document:\r\n return 'document';\r\n case window.event:\r\n return 'event';\r\n default:\r\n break;\r\n }\r\n\r\n if (obj.jquery) {\r\n return 'jquery';\r\n }\r\n\r\n switch (obj.constructor) {\r\n case Array:\r\n return 'array';\r\n case Boolean:\r\n return 'boolean';\r\n case Date:\r\n return 'date';\r\n case Object:\r\n return 'object';\r\n case RegExp:\r\n return 'regexp';\r\n case ReferenceError:\r\n case Error:\r\n return 'error';\r\n case null:\r\n default:\r\n break;\r\n }\r\n\r\n switch (obj.nodeType) {\r\n case 1:\r\n return 'domelement';\r\n case 3:\r\n return 'string';\r\n case null:\r\n default:\r\n break;\r\n }\r\n\r\n return 'Unknown';\r\n }\r\n\r\n return recursion(object);\r\n }\r\n\r\n function trim(str) {\r\n return ltrim(rtrim(str));\r\n }\r\n\r\n function ltrim(str) {\r\n return str.replace(new RegExp(\"^[\\\\s]+\", \"g\"), \"\");\r\n }\r\n\r\n function rtrim(str) {\r\n return str.replace(new RegExp(\"[\\\\s]+$\", \"g\"), \"\");\r\n }\r\n\r\n})(jQuery);\r\n","$(document).ready(function () {\r\n util.init();\r\n});\r\n\r\n\r\nvar isIpad = navigator.userAgent.match(/iPad/i) != null;\r\nvar isIphone = navigator.userAgent.match(/iPhone/i) != null;\r\nvar isIE = navigator.userAgent.match(/msie/i) != null;\r\nvar isIE7 = (navigator.appVersion.indexOf(\"MSIE 7.\") != -1) /*($.browser.msie && parseInt($.browser.version, 10) == 7)*/;\r\nvar isIE9 = (navigator.appVersion.indexOf(\"MSIE 9.\") != -1) /*($.browser.msie && parseInt($.browser.version, 10) == 9)*/;\r\n\r\n\r\nfunction isTouchDevice() {\r\n return \"ontouchstart\" in window;\r\n}\r\n\r\nvar hasTouch = isTouchDevice();\r\n\r\n\r\n/*******************************************************************************\r\nutil\r\n*******************************************************************************/\r\n\r\nvar utilFired = false;\r\n\r\nfunction util() {\r\n\r\n var self = this;\r\n\r\n this.init = function () {\r\n\r\n if (utilFired === false) {\r\n\r\n utilFired = true;\r\n\r\n try {\r\n\r\n for (u in this) {\r\n\r\n if (u != 'init' && self[u]['init'])\r\n eval('util.' + u + '.init();');\r\n }\r\n\r\n }\r\n\r\n catch (e) {\r\n\r\n }\r\n }\r\n\r\n\r\n /* ensure top menu click events in ie7 */\r\n if ($.browser.msie && $.browser.version == \"7.0\") {\r\n $('#mainNav img.icon').click(function (e) {\r\n e.preventDefault();\r\n var anc = $(this).parent().parent();\r\n //perform redirect only if SetConfirm is undefined\r\n if (typeof(SetConfirm) != 'function') {\r\n $(window.location).attr('href', anc.attr('href'));\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n};\r\n\r\n\r\n/*****************************\r\n* AUTO-LOAD CLASSES\r\n*****************************/\r\n\r\nutil.prototype.autoLoadClasses = {\r\n\r\n init: function () {\r\n\r\n if (isIE9) {\r\n $('.button').wrap('');\r\n\r\n $('.buttonMask').each(function () {\r\n\r\n var button = $(this).find('.button');\r\n\r\n $(this).css({\r\n 'marginTop': button.css('margin-top'),\r\n 'marginBottom': button.css('margin-Bottom'),\r\n 'marginLeft': button.css('margin-left'),\r\n 'marginRight': button.css('margin-right'),\r\n 'float': button.css('float'),\r\n 'display': button.css('display')\r\n });\r\n\r\n button.css({\r\n 'marginTop': 0,\r\n 'marginBottom': 0,\r\n 'marginLeft': 0,\r\n 'marginRight': 0,\r\n 'float': 'none'\r\n });\r\n });\r\n }\r\n\r\n }\r\n};\r\n\r\n/*****************************\r\n* ADJUST ORDERBOX INPUT\r\n*****************************/\r\n\r\nutil.prototype.adjustOrderbox = {\r\n\r\n init: function () {\r\n if ($('.orderBox').length > 0) {\r\n\r\n $('.orderBox').each(function () {\r\n var totalWidth = $(this).find('label').width();\r\n var textWidth = $(this).find('label span').width();\r\n var inputWidth = totalWidth - textWidth - 45; //2*15 px margin, 2*5px padding, 2*1px border, 3px puffer\r\n\r\n $(this).find('.textfield').css('width', inputWidth + 'px');\r\n\r\n });\r\n\r\n }\r\n\r\n }\r\n};\r\n\r\n\r\n/*****************************\r\n* ADJUST TextBox HEIGHTS\r\n*****************************/\r\nutil.prototype.adjustTextboxHeight = function () {\r\n $(\".autoHeightOnLoad\").each(function () {\r\n var el = $(this);\r\n if ($(el)[0].scrollHeight > $(el).height() && $(el).is(\":visible\")) {\r\n $(el).height($(el)[0].scrollHeight);\r\n }\r\n })\r\n}\r\n\r\n/*****************************\r\n* ADJUST TEASER HEIGHTS\r\n*****************************/\r\n\r\nutil.prototype.adjustTeaser = {\r\n\r\n init: function () {\r\n\r\n if ($('.teaserRow').length > 0) {\r\n\r\n $(window).load(function () {\r\n $('.teaserRow').each(function () {\r\n //only adjust height of teasers if the current teaser row is not hidden; otherwise height would be 0px\r\n if (!$(this).hasClass('additionalHidden') && $(this).is(\":visible\")) {\r\n var maxHeight = 0;\r\n var teaser = $(this).find('.contentBox');\r\n\r\n teaser.each(function () {\r\n var height = $(this).height();\r\n if (height > maxHeight) maxHeight = height;\r\n });\r\n\r\n teaser.each(function () {\r\n $(this).css('height', maxHeight + 'px');\r\n });\r\n }\r\n });\r\n\r\n });\r\n\r\n }\r\n },\r\n\r\n redo: function () {\r\n\r\n if ($('.teaserRow').length > 0) {\r\n\r\n $('.teaserRow').each(function () {\r\n //only adjust height of teasers if the current teaser row is not hidden; otherwise height would be 0px\r\n if (!$(this).hasClass('additionalHidden')) {\r\n var maxHeight = 0;\r\n var teaser = $(this).find('.contentBox');\r\n\r\n teaser.each(function () {\r\n var height = $(this).height();\r\n if (height > maxHeight) maxHeight = height;\r\n });\r\n\r\n teaser.each(function () {\r\n $(this).css('height', maxHeight + 'px');\r\n });\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n};\r\n\r\n/*****************************\r\n* ADJUST MAINNAV HEIGHTS\r\n*****************************/\r\n\r\nutil.prototype.adjustMainnav = {\r\n\r\n init: function () {\r\n\r\n if ($('#mainNav').length > 0) {\r\n var maxHeight = 0;\r\n\r\n var link = $('#mainNav li a');\r\n\r\n link.each(function () {\r\n var height = $(this).height();\r\n if (height > maxHeight) maxHeight = height;\r\n });\r\n\r\n link.each(function () {\r\n $(this).css('height', maxHeight + 'px');\r\n });\r\n\r\n }\r\n }\r\n};\r\n\r\n/*******************************************************************************\r\ntab box\r\n*******************************************************************************/\r\n\r\n//util.prototype.tabBox = {\r\n\r\n// init: function () {\r\n\r\n// if ($('.tabbox').length > 0) {\r\n\r\n// $('.tabbox').find('.tab').hide();\r\n// $('.tabbox').find('.tab.active').show();\r\n\r\n// $('.tabLink').each(function () {\r\n// var twoLine = false;\r\n// var content = $(this).html();\r\n\r\n// if ($(this).find('br').length > 0 || content.length > 14) {\r\n// $(this).addClass('twoliner');\r\n// }\r\n\r\n// });\r\n\r\n// $('.tabLink').click(function () {\r\n\r\n// if (!$(this).hasClass('active')) {\r\n// var tabBox = $(this).parents('.tabbox');\r\n// var tabID = $(this).attr('href');\r\n\r\n// tabBox.find('.tabLink.active').removeClass('active');\r\n// $(this).addClass('active');\r\n\r\n// tabBox.find('.tab.active').hide().removeClass('active');\r\n\r\n// $(tabID).show().addClass('active');\r\n// }\r\n\r\n// return false;\r\n// });\r\n// }\r\n\r\n// }\r\n\r\n//};\r\n\r\nvar util = new util();\r\n\r\n\r\n\r\n\r\n/** \r\n* Returns true if the user hit Esc or navigated away from the\r\n* current page before an AJAX call was done. (The response\r\n* headers will be null or empty, depending on the browser.) \r\n* \r\n* NOTE: this function is only meaningful when called from \r\n* inside an AJAX \"error\" callback! \r\n* \r\n* The 'xhr' param is an XMLHttpRequest instance. \r\n*/\r\n//function userAborted(xhr) {\r\n// return !xhr.getAllResponseHeaders();\r\n//}\r\n","function existy(x) { return x != null };\r\n\r\nfunction cat() {\r\n var head = _.first(arguments);\r\n if (existy(head))\r\n return head.concat.apply(head, _.rest(arguments));\r\n else\r\n return [];\r\n}\r\n\r\nfunction checker(/* validators */) {\r\n var validators = _.toArray(arguments);\r\n\r\n return function (obj) {\r\n return _.reduce(validators, function (errs, check) {\r\n if (check(obj))\r\n return errs\r\n else\r\n return _.chain(errs).push(check.message).value();\r\n }, []);\r\n };\r\n}\r\n\r\nfunction validator(message, fun) {\r\n var f = function (/* args */) {\r\n return fun.apply(fun, arguments);\r\n };\r\n\r\n f['message'] = message;\r\n return f;\r\n}\r\n\r\nfunction aMap(obj) {\r\n return _.isObject(obj);\r\n}\r\n\r\nfunction anArray(obj) {\r\n return _.isArray(obj);\r\n}\r\n\r\nfunction aFunction(obj) {\r\n return _.isFunction(obj);\r\n}\r\n\r\nfunction anObservable(obj) {\r\n return ko.isObservable(obj);\r\n}\r\n\r\nfunction hasKeys() {\r\n var KEYS = _.toArray(arguments);\r\n\r\n var fun = function (obj) {\r\n return _.every(KEYS, function (k) {\r\n return _.has(obj, k);\r\n });\r\n };\r\n\r\n fun.message = cat([\"Must have values for keys:\"], KEYS).join(\" \");\r\n return fun;\r\n}\r\n\r\nfunction must(/*data, cmd*/) {\r\n var ps = _.toArray(arguments),\r\n\t\tdata = ps[0],\r\n\t\tcmd = checker.apply(checker, _(ps).rest(1)),\r\n\t\terrors = cmd(data);\r\n\r\n if (!_.isEmpty(errors)) {\r\n throw errors.join(\". \");\r\n }\r\n}\r\n\r\n/**\r\n * Mixin Funktionalität.\r\n */\r\nfunction mixin(to, from) {\r\n from.call(to.prototype);\r\n}\r\n\r\nfunction showAlertDialog(data) {\r\n var dummyElement = document.createElement(\"div\");\r\n var $dialog = $(dummyElement)\r\n .html(\"