{"version":3,"file":"modules.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;ACvBA;AACA;AASA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;;;;AAIA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnCA;AACA;AACA;AAOA;AAEA;AACA;AACA;AAEA;AAGA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AC1JA;AACA;AACA;AAeA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAQA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAGA;AAGA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AAIA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC9HA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5qBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3YA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AA6BA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjbA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAKA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAGA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAGA;AACA;AAGA;AAGA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClhDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;AChPA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;;AAIA;;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AC9hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;ACvGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACxCA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AClCA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAEA;AAGA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AAGA;AAWA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAIA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC5IA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;;;;;;;AC5GA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1KA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAOA;AAAA;AAEA;AACA;AAsBA;AAAA;AAEA;AACA;;;;;;;AC/OA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACtFA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AAYA;AACA;AAIA;AAEA;AAQA;AACA;AAGA;AACA;AACA;AAIA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACzkBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClCA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAMA;AAEA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAcA;AAEA;AACA;AACA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC37BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;ACvCA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxPA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAuBA;AAIA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAsCA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAaA;AAEA;AACA;AAEA;AACA;AAEA;AAKA;AAyBA;AACA;AAyBA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACzRA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;AC7CA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtCA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA","sources":["webpack:///./Frontend/src/Shared/Modules/Broadcast.ts","webpack:///./Frontend/src/Shared/Modules/ContentSlider.ts","webpack:///./Frontend/src/Shared/Modules/About.js","webpack:///./Frontend/src/Shared/Modules/AccountMessage.js","webpack:///./Frontend/src/Shared/Modules/AwesomeHorizontalScrollbar.js","webpack:///./Frontend/src/Shared/Modules/AwesomeScrollbar.js","webpack:///./Frontend/src/Shared/Modules/Balance.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/BettingCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/Freebet.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/OneclickCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCart.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCartCalc.js","webpack:///./Frontend/src/Shared/Modules/BettingCart/StandardCartItem.js","webpack:///./Frontend/src/Shared/Modules/BookmakerPromocode.js","webpack:///./Frontend/src/Shared/Modules/Combobox.js","webpack:///./Frontend/src/Shared/Modules/ConfirmButton.js","webpack:///./Frontend/src/Shared/Modules/CurrentDatetime.js","webpack:///./Frontend/src/Shared/Modules/CustomSelect.js","webpack:///./Frontend/src/Shared/Modules/Favorites.js","webpack:///./Frontend/src/Shared/Modules/Help.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/HomeWidgets.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetBanners.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetHelp.js","webpack:///./Frontend/src/Shared/Modules/HomeWidgets/WidgetPromo.js","webpack:///./Frontend/src/Shared/Modules/LayoutResolver.js","webpack:///./Frontend/src/Shared/Modules/LayoutRightColumn.js","webpack:///./Frontend/src/Shared/Modules/LiveTimer.js","webpack:///./Frontend/src/Shared/Modules/MainNavigation.js","webpack:///./Frontend/src/Shared/Modules/MobileAppDownloadButton.js","webpack:///./Frontend/src/Shared/Modules/ModalMarkets.js","webpack:///./Frontend/src/Shared/Modules/ModalWindow.js","webpack:///./Frontend/src/Shared/Modules/PageContent.js","webpack:///./Frontend/src/Shared/Modules/PageNavigation.js","webpack:///./Frontend/src/Shared/Modules/Search.js","webpack:///./Frontend/src/Shared/Modules/Shared/ErrorHandler.js","webpack:///./Frontend/src/Shared/Modules/StatisticsSingle.js","webpack:///./Frontend/src/Shared/Modules/Superexpress.js","webpack:///./Frontend/src/Shared/Modules/SuperexpressPagination.js","webpack:///./Frontend/src/Shared/Modules/TimeZone.js","webpack:///./Frontend/src/Shared/Modules/Tooltip.js","webpack:///./Frontend/src/Shared/Modules/TooltipEventInfo.js","webpack:///./Frontend/src/Shared/Modules/TooltipEventScore.js","webpack:///./Frontend/src/Shared/Modules/UpButton.js","webpack:///./Frontend/src/Shared/Modules/VerticalMenu.js","webpack:///./Frontend/src/Shared/app.js","webpack:///webpack/bootstrap","webpack:///./Frontend/src/modules.ts"],"sourcesContent":["var Broadcast = window.Broadcast = (function () {\n function init() {\n $(document).on('click', '[broadcast-button]', function(this: JQuery) {\n const data = $(this).attr('t-data');\n\n if (data) {\n const parsedData: { [key: string]: any } = JSON.parse(data); // fix any\n parsedData.button = $(this);\n\n document.dispatchEvent(new CustomEvent('openBroadcast', {\n detail: parsedData\n }));\n }\n });\n }\n\n return {\n init\n }\n}())\n\n$(() => {\n Broadcast.init();\n});\n","window.ContentSlider = (function () {\n class ContentSlider {\n private mainContainer: any;\n private outerContainer: any;\n private innerContainer: any;\n private leftArrow: any;\n private rightArrow: any;\n\n private scrollStep: number;\n\n constructor(mainContainer, scrollStep: any = 0) {\n this.mainContainer = $(mainContainer);\n\n this.mainContainer.addClass('content-slider');\n\n this.outerContainer = $('
', {\n 'class': 'content-slider__outer'\n });\n\n this.innerContainer = $('
', {\n 'class': 'content-slider__inner'\n });\n\n this.mainContainer.html(this.outerContainer.append(this.innerContainer.append(this.mainContainer.html())));\n\n if (scrollStep) {\n if (scrollStep === '100%') {\n this.scrollStep = this.outerContainer.width()\n } else {\n this.scrollStep = parseInt(scrollStep);\n }\n } else {\n this.scrollStep = this.outerContainer.width() / 2;\n }\n\n this.createArrows();\n this.bindUI();\n\n this.update();\n }\n\n private createArrows() {\n this.leftArrow = $('
', {\n 'class' : 'content-slider__arrow m-left'\n });\n this.rightArrow = $('
', {\n 'class' : 'content-slider__arrow m-right'\n });\n\n this.leftArrow.append('');\n this.rightArrow.append('');\n\n this.mainContainer.append(this.leftArrow);\n this.mainContainer.append(this.rightArrow);\n }\n\n private bindUI() {\n let self = this;\n\n self.leftArrow.on('click', function () {\n self.handleScroll(-self.scrollStep);\n });\n\n self.rightArrow.on('click', function () {\n self.handleScroll(self.scrollStep);\n });\n }\n\n private handleScroll(step) {\n let currentScrollLeft = this.outerContainer.scrollLeft();\n let newScrollPosition = currentScrollLeft + step;\n\n this.toggleArrowsVisibility(newScrollPosition);\n this.outerContainer.scrollLeft(newScrollPosition);\n }\n\n private toggleArrowsVisibility(scrollLeft) {\n if (scrollLeft <= 0) {\n this.leftArrow.removeClass('m-visible');\n } else {\n this.leftArrow.addClass('m-visible');\n }\n\n if (scrollLeft >= (this.innerContainer.width() - this.outerContainer.width())) {\n this.rightArrow.removeClass('m-visible');\n } else {\n this.rightArrow.addClass('m-visible');\n }\n }\n\n public update() {\n if (this.outerContainer.width() < this.innerContainer.width()) {\n this.toggleArrowsVisibility(this.outerContainer.scrollLeft());\n }\n }\n }\n\n $(function () {\n /*$('[content-slider]').each(function () {\n if ($(this).children(':first-child').hasClass('content-slider__outer') === false) {\n new ContentSlider(this, $(this).attr('content-slider-scroll-step'));\n }\n });*/\n });\n\n return {\n ContentSlider\n }\n}());","window.About = (function () {\n var dom = {};\n var selectors = {\n scrollArea: '#m-page-content-scrollbar-scrollarea',\n scrollAreaMobile: window,\n pageNavigation: '#page-navigation-about',\n pageNavigationLinks: '.page-navigation__link',\n aboutContent: '#about-content'\n };\n var pageNavigation = {};\n var pageNavigationOffsetTop = 0;\n\n return {\n init: function () {\n dom.scrollArea = $(selectors.scrollArea); \n dom.pageNavigation = $(selectors.pageNavigation);\n dom.aboutContent = $(selectors.aboutContent);\n\n pageNavigationOffsetTop = dom.pageNavigation.position().top - (dom.scrollArea.length > 0 ? dom.scrollArea.position().top : 0);\n\n this.hideMassMedia();\n this.updateBlocksTopOffset(); \n\n if (window.location.hash) {\n hashBlock = $(window.location.hash);\n if (hashBlock.length > 0) {\n $(selectors.scrollArea).scrollTop(hashBlock.position().top);\n }\n } else {\n this.setActiveNavigationItem(0);\n }\n\n this.bindUI();\n },\n bindUI: function () {\n var self = this;\n\n var scrollTimer;\n\n if (globalAppSettings.isMobileDevice) {\n currentArrea = $(selectors.scrollAreaMobile);\n } else {\n currentArrea = $(selectors.scrollArea);\n }\n \n currentArrea.on('scroll.pageAbout', function (event) {\n var scrollTop = $(this).scrollTop();\n\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n \n scrollTimer = setTimeout(function () { \n self.setActiveNavigationItem(scrollTop);\n }, 50);\n });\n\n $(window).on('resize.pageAbout', function () {\n self.updateBlocksTopOffset();\n });\n\n $(document).on('click', '[about-cooperation-item]', function () { \n var title = $(this).find('[about-cooperation-item-title]').text();\n var descr = $(this).find('[about-cooperation-item-description-text]');\n\n if (descr.html()) {\n new ModalWindow({\n title: title,\n content: descr.parent().html()\n }).show();\n }\n });\n },\n unbindUI: function () {\n $(selectors.scrollArea).off('scroll.pageAbout');\n $(window).off('resize.pageAbout');\n },\n updateBlocksTopOffset: function () {\n var scrollAreaTopOffset = (dom.scrollArea.length > 0 ? dom.scrollArea.position().top : 0);\n\n $(selectors.pageNavigationLinks).each(function (index) {\n var id = $(this).attr('href');\n var block = $(id);\n\n if (block.length > 0) {\n pageNavigation[id] = {\n offsetTop: index === 0 ? 0 : block.position().top - scrollAreaTopOffset - 80,\n blockHeight: block.outerHeight()\n }\n }\n });\n },\n setActiveNavigationItem: function (scrollTop) {\n for (key in pageNavigation) {\n if (scrollTop >= pageNavigation[key].offsetTop && scrollTop < pageNavigation[key].offsetTop + pageNavigation[key].blockHeight) {\n $(selectors.pageNavigationLinks).removeClass('m-active');\n $(selectors.pageNavigationLinks).filter('[href=\"' + key + '\"]').addClass('m-active');\n \n if (history.pushState && window.location.hash !== key) {\n history.pushState(null, null, key);\n }\n }\n }\n },\n hideMassMedia: function () {\n var container = $('#about-mass-media-items-container');\n var containerWrapper = $('#about-mass-media-items-container-wrapper');\n var items = $('[js-node=\"about-mass-media-item\"]');\n var itemsCnt = items.length;\n var showMoreButton = $('#about-mass-media-show-more-button');\n var self = this;\n\n if (container.height() > containerWrapper.height()) {\n showMoreButton.removeClass('m-hidden');\n\n $(document).on('click', '#about-mass-media-show-more-button', function () {\n containerWrapper.removeClass('m-collapsed');\n $(this).addClass('m-hidden');\n self.updateBlocksTopOffset();\n });\n }\n }\n }\n}());\n\n$(function () {\n if ($('[data-page=\"about\"]').length > 0) {\n window.About.init();\n\n if (globalAppSettings.isMobileDevice && UpButton) {\n UpButton.init();\n if ($('#contentEl').length > 0) {\n var point = $('.about__content').offset().top;\n $(window).scrollTop(point - 50);\n }\n }\n }\n\n});","window.AccountMessage = (function () {\n const selectors = {\n LIST_ITEM: \".infocenter-messagelist__list-item\",\n M_COLLAPSE_BUTTON: \".infocenter-messagelist__message-collapse-button\",\n M_ITEMS_BODY: \".infocenter-messagelist__items-body\",\n M_MESSAGE_ROW: \"#message-row-\"\n }\n return {\n readMessage: function (id) {\n $(selectors.LIST_ITEM).removeClass('m-active');\n $(\"#message-container-\" + id).addClass(\"m-active\");\n var readed = \"
\" + window.Localization.getString('Scripts_Shared_Modules.AccountMessage_18', 'Прочитано') + \"
\";\n $(\"#message-status-\" + id).replaceWith(readed);\n },\n readMessageMobile: function (id) {\n\n $(selectors.M_MESSAGE_ROW + id + \" a\").on('click', function (e) {\n e.stopPropagation();\n });\n\n var isExpanded = $(selectors.M_MESSAGE_ROW + id).hasClass(\"expanded\");\n\n $(selectors.LIST_ITEM).removeClass(\"expanded\");\n $(selectors.M_COLLAPSE_BUTTON).removeClass(\"expanded\");\n $(selectors.M_ITEMS_BODY).removeClass(\"expanded\");\n\n if (!isExpanded) {\n $(selectors.M_MESSAGE_ROW + id).addClass(\"expanded\");\n $(selectors.M_MESSAGE_ROW + id + \" \" + selectors.M_COLLAPSE_BUTTON).addClass(\"expanded\");\n $(selectors.M_MESSAGE_ROW + id + \" \" + selectors.M_ITEMS_BODY).addClass(\"expanded\");\n }\n var readedMobile = \"
\" + window.Localization.getString('Scripts_Shared_Modules.AccountMessage_18', 'Прочитано') + \"
\";\n $(selectors.M_MESSAGE_ROW + id + \" \" + \".infocenter-messagelist__list-item-status-new\").replaceWith(readedMobile);\n }\n };\n}());","window.AwesomeHorizontalScrollbar = (function () {\n\tvar generateDom = function () {\n\t\treturn [\n\t\t\t'
',\n\t\t\t\t'
',\n\t\t\t\t\t'
',\n\t\t\t\t'
',\n\t\t\t'
'\n\t\t].join('\\n');\n\t};\n\n\tvar AwesomeHorizontalScrollbar = function (containerSelector, addClass) {\n\t\taddClass = ' ' + addClass || '';\n\t\tthis.container = $(containerSelector);\n\n\t\tif (this.container.length < 1)\n\t\t\treturn null;\n\n\t\tthis.prevPageX = 0;\n\n\t\tthis.container.wrap('
');\n\n\t\tthis.innerContainer = this.container.parent();\n\t\tthis.outerContainer = this.innerContainer.parent();\n\n\t\tthis.outerContainer.append(generateDom());\n\n\t\tthis.scrollbarArea = this.outerContainer;\n\t\tthis.scrollbarTrack = this.outerContainer.find('[js-node=\"awesome-scrollbar__track\"]');\n\t\tthis.scrollbarThumb = this.outerContainer.find('[js-node=\"awesome-scrollbar__thumb\"]');\n\t\tthis.scrollbarTrackWidth = this.scrollbarTrack.width();\t\t\n\n\t\tvar self = this;\n\n\t\tthis.update();\n\t};\t\n\n\tAwesomeHorizontalScrollbar.prototype.update = function () {\n\n\t\tvar outerContainerWidth = this.outerContainer.first().width(),\n\t\t\t\tinnerContainerWidth = this.innerContainer.first().width(),\n\t\t\t\ttrackWidth = this.scrollbarTrack.width();\n\n\t\tthis.unbindEvents();\n\n\t\tif (innerContainerWidth > outerContainerWidth) {\n\t\t\tthis.scrollbarArea.removeClass('disabled');\n\t\t\tvar thumbWidth = outerContainerWidth * 100 / innerContainerWidth;\n\t\t\tthis.scrollbarThumb.width(thumbWidth + '%');\n\t\t\tthis.bindEvents();\n\t\t} else {\n\t\t\tthis.scrollbarArea.addClass('disabled');\n\t\t}\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.bindEvents = function () {\n\t\tvar self = this;\n\n\t\tthis.outerContainer.first().on('scroll.table', function (e) {\n\t\t\tself.scrollHandler($(this).scrollLeft());\n\t\t});\n\n\t\tthis.scrollbarThumb.on('mousedown', function (e) {\n\t\t\tself.startDrag(e);\n\t\t\tself.prevPageX = (e.currentTarget.offsetWidth - (e.clientX - e.currentTarget.getBoundingClientRect().left));\n\t\t}).on('click', function (e) {\n\t\t e.stopImmediatePropagation();\n\t\t});\n\n\t\tthis.scrollbarArea.on('wheel', function (e) {\n\t\t\tself.scrollArea(e);\t\t\t\n\t\t\te.preventDefault();\t\t\t\n\t\t}).on('click', function (e) {\n\t\t\tself.clickTrack(e);\n\t\t});\n\n\t\treturn this;\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.unbindEvents = function () {\n\t\tvar self = this;\n\n\t\tthis.outerContainer.first().off('scroll.table');\n\t\tthis.scrollbarThumb.off('mousedown');\n\t\tthis.scrollbarArea.off('wheel').off('mouseenter').off('mouseleave').off('click').off('mousemove');\n\n\t\treturn this;\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.scrollArea = function (e) {\n\t\tvar scrollLeft;\n\t\tvar currentScrollLeft = this.outerContainer.first().scrollLeft();\n\n\t\tif (e.originalEvent.deltaY > 0) {\n\t\t\tscrollLeft = currentScrollLeft + 20;\n\t\t} else {\n\t\t\tscrollLeft = currentScrollLeft - 20;\n\t\t}\n\n\t\tthis.outerContainer.scrollLeft(scrollLeft);\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.clickTrack = function (e) {\n\t\tvar offset = Math.abs(e.target.getBoundingClientRect().left - e.clientX),\n\t\t\t\tthumbHalf = (this.scrollbarThumb.get(0).offsetWidth / 2),\n\t\t\t\tthumbPositionPercentage = ((offset - thumbHalf) * 100 / this.scrollbarTrack.get(0).offsetWidth);\n\n\t\tvar scrollLeft = (thumbPositionPercentage * this.outerContainer.get(0).scrollWidth / 100);\n\t\tthis.outerContainer.scrollLeft(scrollLeft);\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.scrollHandler = function (scrollTop) {\n\t\tvar x = scrollTop * 100 / this.outerContainer.first().width();\n\n\t\tthis.scrollbarThumb.css({\n\t\t\ttransform: 'translateX(' + x + '%)'\n\t\t});\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.clickThumbHandler = function (e) {\n\t\tthis.startDrag(e);\n\t\tthis.prevPageX = (e.currentTarget.offsetWidth - (e.clientX - e.currentTarget.getBoundingClientRect().left));\n\t};\n\n\tAwesomeHorizontalScrollbar.prototype.startDrag = function (e) {\n\t\tvar self = this;\n\t\te.stopImmediatePropagation();\n\t\t$('body').addClass('vertical-scroll-disable');\n\t\tself.scrollbarThumb.addClass('is-moving');\n\n\t\tfunction moveAt(e) {\n\t\t\tvar offset = ((self.scrollbarTrack.get(0).getBoundingClientRect().left - e.clientX) * -1),\n\t\t\t\t\tthumbClickPosition = (self.scrollbarThumb.get(0).offsetWidth - self.prevPageX),\n\t\t\t\t\tthumbPositionPercentage = ((offset - thumbClickPosition) * 100 / self.scrollbarTrack.get(0).offsetWidth);\n\n\t\t\tvar scrollLeft = thumbPositionPercentage * self.outerContainer.get(0).scrollWidth / 100;\n\n\t\t\tself.outerContainer.scrollLeft(scrollLeft);\n\t\t}\n\n\t\t$(document).on('mousemove', function (e) {\n\t\t\tmoveAt(e);\n\t\t});\n\n\t\t$(document).on('mouseup', function (e) {\n\t\t\t$(document).off('mousemove');\n\t\t\t$(document).off('mouseup');\n\t\t\t$('body').removeClass('vertical-scroll-disable');\n\t\t\tself.scrollbarThumb.removeClass('is-moving');\n\t\t\tself.prevPageX = 0;\n\t\t});\n\t};\n\n\treturn AwesomeHorizontalScrollbar;\n}());","window.AwesomeScrollbar = (function () {\n var generateDom = function (addClass, guid) {\n return [\n '
',\n '
',\n '
',\n '
',\n '
',\n ].join('\\n');\n };\n\n var AwesomeScrollbar = function (container, addClass) {\n addClass = addClass ? ' ' + addClass : '';\n\n this.container = $(container);\n this.guid = app.generateGUID();\n\n if (this.container.length < 1) return null;\n\n this.prevPageY = 0;\n\n this.container.wrap(\n '
'\n );\n\n this.innerContainer = this.container.parent();\n this.outerContainer = this.innerContainer.parent();\n\n this.outerContainer.append(generateDom(addClass, this.guid));\n\n this.scrollbar = $('#awesome-scrollbar-' + this.guid);\n this.scrollbarTrack = $('#awesome-scrollbar__track-' + this.guid);\n this.scrollbarThumb = $('#awesome-scrollbar__thumb-' + this.guid);\n\n var self = this;\n\n this.innerContainer.resize(function () {\n self.update();\n });\n\n var resizeTimer = null;\n this.outerContainer.parent().resize(function () {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(function () {\n self.update();\n }, 250);\n });\n\n this.update();\n };\n\n AwesomeScrollbar.prototype.getScrollProgress = function () {\n if (!this.outerContainer || !this.innerContainer) {\n return;\n }\n\n var innerContainerHeight = $(this.innerContainer).height();\n var outerContainerHeight = $(this.outerContainer).height();\n var diffHeight = innerContainerHeight - outerContainerHeight;\n var scrollTop = $(this.outerContainer).scrollTop();\n\n return ((scrollTop / diffHeight) * 100).toFixed(0);\n };\n\n AwesomeScrollbar.prototype.update = function () {\n if (!this.outerContainer) {\n return;\n }\n\n var outerContainerHeight = this.outerContainer.first().height(),\n innerContainerHeight = this.innerContainer.first().height();\n\n this.unbindEvents();\n\n if (innerContainerHeight > outerContainerHeight) {\n this.scrollbarTrack.removeClass('disabled');\n\n var thumbHeight =\n (outerContainerHeight * 100) / innerContainerHeight;\n\n var thumbHeightAbs = Math.round(\n (outerContainerHeight * thumbHeight) / 100\n );\n //thumbHeightAbs = thumbHeightAbs < 40 ? 40 : thumbHeightAbs;\n\n this.scrollbarThumb.css({\n height: thumbHeightAbs,\n });\n\n this.bindEvents();\n } else {\n this.scrollbarTrack.addClass('disabled');\n }\n };\n\n AwesomeScrollbar.prototype.bindEvents = function () {\n var self = this;\n\n this.outerContainer.first().on('scroll.table', function (e) {\n self.scrollHandler($(this).scrollTop());\n\n document.dispatchEvent(\n new CustomEvent('awesomeScrollbarScroll', {\n detail: {\n progress: self.getScrollProgress(),\n element: self.container[0],\n },\n })\n );\n });\n\n this.scrollbarThumb\n .on('mousedown', function (e) {\n self.startDrag(e);\n self.prevPageY =\n e.currentTarget.offsetHeight -\n (e.clientY - e.currentTarget.getBoundingClientRect().top);\n })\n .on('click', function (e) {\n e.stopImmediatePropagation();\n });\n\n this.scrollbarTrack\n .on('wheel', function (e) {\n self.scrollArea(e);\n e.preventDefault();\n })\n .on('click', function (e) {\n self.clickTrack(e);\n });\n\n document.dispatchEvent(\n new CustomEvent('awesomeScrollbarScroll', {\n detail: {\n progress: this.getScrollProgress(),\n element: this.container[0],\n },\n })\n );\n\n return this;\n };\n\n AwesomeScrollbar.prototype.unbindEvents = function () {\n this.outerContainer.first().off('scroll.table');\n this.scrollbarThumb.off('mousedown');\n this.scrollbarTrack\n .off('wheel')\n .off('mouseenter')\n .off('mouseleave')\n .off('click')\n .off('mousemove');\n\n return this;\n };\n\n AwesomeScrollbar.prototype.destroy = function () {\n if (this.outerContainer) {\n this.unbindEvents();\n\n this.container.insertBefore(this.outerContainer.parent());\n this.outerContainer.parent().remove();\n this.outerContainer = null;\n }\n };\n\n AwesomeScrollbar.prototype.scrollArea = function (e) {\n var scrollTop;\n var currentScrollTop = this.outerContainer.first().scrollTop();\n\n if (e.originalEvent.deltaY > 0) {\n scrollTop = currentScrollTop + 60;\n } else {\n scrollTop = currentScrollTop - 60;\n }\n\n this.outerContainer.scrollTop(scrollTop);\n };\n\n AwesomeScrollbar.prototype.clickTrack = function (e) {\n var offset = Math.abs(e.target.getBoundingClientRect().top - e.clientY),\n thumbHalf = this.scrollbarThumb.get(0).offsetHeight / 2,\n thumbPositionPercentage =\n ((offset - thumbHalf) * 100) /\n this.scrollbarTrack.get(0).offsetHeight;\n\n var scrollTop =\n (thumbPositionPercentage *\n this.outerContainer.get(0).scrollHeight) /\n 100;\n this.outerContainer.scrollTop(scrollTop);\n };\n\n AwesomeScrollbar.prototype.scrollHandler = function (scrollTop) {\n var y = (scrollTop / this.outerContainer.get(0).scrollHeight) * 100;\n\n this.scrollbarThumb.css({\n top: y + '%',\n });\n };\n\n AwesomeScrollbar.prototype.clickThumbHandler = function (e) {\n e.stopImmediatePropagation();\n this.startDrag(e);\n this.prevPageY =\n e.currentTarget.offsetHeight -\n (e.clientY - e.currentTarget.getBoundingClientRect().top);\n };\n\n AwesomeScrollbar.prototype.startDrag = function (e) {\n var self = this;\n e.stopImmediatePropagation();\n $('body').addClass('vertical-scroll-disable');\n self.scrollbarThumb.addClass('is-moving');\n self.scrollbar.addClass('is-moving');\n\n function moveAt(e) {\n const offset =\n (self.scrollbarTrack.get(0).getBoundingClientRect().top -\n e.clientY) *\n -1,\n thumbClickPosition =\n self.scrollbarThumb.get(0).offsetHeight - self.prevPageY,\n thumbPositionPercentage =\n ((offset - thumbClickPosition) * 100) /\n self.scrollbarTrack.get(0).offsetHeight;\n\n const scrollTop =\n (thumbPositionPercentage *\n self.outerContainer.get(0).scrollHeight) /\n 100;\n\n self.outerContainer.scrollTop(scrollTop);\n }\n\n $(document).on('mousemove', function (e) {\n moveAt(e);\n });\n\n $(document).on('mouseup', function (e) {\n $(document).off('mousemove');\n $(document).off('mouseup');\n $('body').removeClass('vertical-scroll-disable');\n self.scrollbarThumb.removeClass('is-moving');\n self.scrollbar.removeClass('is-moving');\n self.prevPageY = 0;\n\n e.stopImmediatePropagation();\n });\n };\n\n return AwesomeScrollbar;\n})();\n","window.Balance = (function () {\n var dom = {};\n var isVisibleViewBalance;\n var selectors = {\n viewBalanceIcon: '[js-node=\"view-balance__button\"]',\n viewBalanceSum: '[js-node=\"view-balance__sum\"]',\n viewBonusSum: '[js-node=\"view-bonus__sum\"]',\n viewBalanceInput: '[js-node=\"view-balance__input\"]',\n viewBalanceByIdButton: '.js-view-balance-by-id__button'\n };\n\n return {\n init: function () {\n if (!isVisibleViewBalance) {\n isVisibleViewBalance = window.globalAppSettings.showBalance;\n }\n\n if (isVisibleViewBalance === false) {\n $(selectors.viewBalanceByIdButton).show();\n }\n\n this.bindUI();\n },\n update: function () {\n if (isVisibleViewBalance === true) {\n this.showBalance();\n }\n else {\n this.hideBalance();\n }\n\n },\n bindUI: function () {\n var self = this;\n\n $(document).on('click', selectors.viewBalanceIcon, function () {\n self.toggleViewBalance();\n document.dispatchEvent(new CustomEvent('changeViewBalanceVisibility', {\n detail: {\n isVisibleViewBalance,\n }\n }))\n });\n\n $(document).on('click', selectors.viewBalanceByIdButton, function (e) {\n e.stopPropagation();\n }).on('mousedown', selectors.viewBalanceByIdButton, function () {\n var id = $(this).attr('view-balance-button');\n\n $('[view-balance-sum=\"' + id + '\"]').each(function () {\n $(this).removeClass('m-hidden');\n });\n }).on('mouseup mouseleave', selectors.viewBalanceByIdButton, function (e) {\n var id = $(this).attr('view-balance-button');\n\n $('[view-balance-sum=\"' + id + '\"]').each(function () {\n $(this).addClass('m-hidden');\n });\n });\n },\n toggleViewBalance: function () {\n if (isVisibleViewBalance) {\n this.hideBalance();\n } else {\n this.showBalance();\n }\n var profileСheckbox = document.getElementById('balance-checkbox');\n if (profileСheckbox != null) {\n profileСheckbox.checked = !isVisibleViewBalance;\n }\n\n $.ajax('/account/profile/edit/changebalancevisibility', {\n type: \"POST\",\n data: { isBalanceVisible: isVisibleViewBalance },\n });\n },\n showBalance: function () {\n //Баланс\n $(selectors.viewBalanceSum).each(function () {\n $(this).removeClass('m-hidden');\n });\n\n //Бонусные баллы\n $(selectors.viewBonusSum).each(function () {\n $(this).removeClass('m-hidden');\n });\n\n $(selectors.viewBalanceInput).each(function () {\n $(this).attr('type', 'text');\n });\n\n $(selectors.viewBalanceIcon).addClass('m-hide');\n $(selectors.viewBalanceByIdButton).hide();\n\n isVisibleViewBalance = true;\n },\n hideBalance: function () {\n\n $(selectors.viewBalanceSum).each(function () {\n $(this).addClass('m-hidden');\n });\n\n $(selectors.viewBonusSum).each(function () {\n $(this).addClass('m-hidden');\n });\n\n $(selectors.viewBalanceInput).each(function () {\n $(this).attr('data-sum', $(this).val());\n $(this).attr('type', 'password');\n });\n\n $(selectors.viewBalanceIcon).removeClass('m-hide');\n $(selectors.viewBalanceByIdButton).show();\n\n isVisibleViewBalance = false;\n },\n\n getIntBalance: function () {\n var sumWrapper = $(selectors.viewBalanceSum);\n if (sumWrapper.length > 0) {\n var res = parseInt(sumWrapper.text().replace(/[\\u00a0\\s]/g, ''));\n return res;\n }\n else return undefined;\n }\n }\n}());","window.BettingCart = (function () {\n\n var mode = 'Standard', // OneClick || Standard\n dom = {},\n isLoading = false,\n isSending = false,\n isCollapsed = false;\n\n var currencyMap = {\n CURRENCY: window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n BONUS: 'Bonuses'\n };\n\n var isWaitingForLiveBet = false,\n liveBetTimeout = undefined,\n sendingLiveIds = [];\n\n var isFirstCoefAdded = false;\n const NOTIFICATION_BEHAVIOUR_KEY = 'first-coef-added';\n var addItemObsolete = function (data) { // return false if cart is sending now or overflowed, return true if added or already added. Blink on false\n var result;\n\n data = {\n aId: data.aId,\n eId: data.eId,\n eTitle: data.eTitle || '',\n isLive: data.isLive,\n oId: data.oId,\n rTitle: data.rTitle || '',\n val: data.val,\n loadActualCoefValue: data.loadActualCoefValue || false\n };\n\n if (mode === 'Standard') {\n result = StandardCart.addItem(data);\n\n if (isCollapsed) {\n expand();\n }\n\n if (result === false)\n visual.blink();\n }\n else if (mode === 'Oneclick') {\n if (OneclickCart.isSending)\n visual.blink();\n result = OneclickCart.sendData(data);\n }\n\n if (result && !isFirstCoefAdded) {\n Behaviours.NotificationBehaviour.ShowModalWindow(NOTIFICATION_BEHAVIOUR_KEY);\n isFirstCoefAdded = true;\n }\n\n\n return result;\n };\n\n var addItem = function (itemData) {\n var result = false;\n\n var data = {\n oId: itemData.oId,\n aId: itemData.aId,\n val: itemData.val,\n eId: itemData.eId,\n isLive: itemData.isLive,\n loadActualCoefValue: true\n };\n\n if (mode === 'Standard') {\n result = StandardCart.addItem(data);\n\n if (isCollapsed) {\n expand();\n }\n\n if (result === false)\n visual.blink();\n }\n else if (mode === 'Oneclick') {\n if (OneclickCart.isSending)\n visual.blink();\n result = OneclickCart.sendData(data);\n }\n\n if (result && !isFirstCoefAdded) {\n Behaviours.NotificationBehaviour.ShowModalWindow(NOTIFICATION_BEHAVIOUR_KEY);\n isFirstCoefAdded = true;\n }\n\n return result;\n };\n\n\n var removeItem = function (originalId) { // return false if cart is sending now, return true if removed or already removed. Blink on false\n var result;\n\n if (mode === 'Standard') {\n if (isSending || isLoading) {\n result = false;\n }\n else {\n StandardCart.removeItem(originalId);\n result = true;\n }\n }\n else if (mode === 'Oneclick') {\n result = OneclickCart.removeItem(originalId);\n }\n\n if (result === false)\n visual.blink();\n\n return result;\n };\n\n var getItems = function () { //TODO: делать ветвление через switch\n if (mode === 'Standard') {\n return StandardCart.getItems();\n }\n else if (mode === 'Oneclick') {\n return OneclickCart.getItems();\n }\n };\n\n var hasItem = function (oid) {\n var currentItems = getItems();\n return currentItems.hasOwnProperty(oid);\n };\n\n //#region ПЛОХИЕ ФУНКЦИИ\n\n var Highlighting = (function () {\n const cellSelectors = {\n table: '.events-table__markets-cell',\n openEvent: '.event-markets__coef',\n accent: '.multi-event-coef',\n };\n\n function activate(cellSelector, activateAll) {\n activateAll === true ? true : false;\n var currentItems = getItems();\n if (Object.keys(currentItems).length > 0) {\n for (oid in currentItems) {\n if (activateAll) {\n for (key in cellSelectors) {\n $(cellSelectors[key] + '[data-oid=' + oid + ']').addClass('active');\n }\n }\n else {\n $(cellSelector + '[data-oid=' + oid + ']').addClass('active');\n }\n\n }\n }\n }\n\n function deactivateAllScopes(oid) {\n for (key in cellSelectors) {\n $(cellSelectors[key] + '[data-oid=' + oid + ']').removeClass('active');\n }\n\n $(document).trigger('deactivateCoefHightlight', [oid]);\n };\n\n function deactivateOtherModes() {\n var otherItems;\n if (mode === 'Standard') {\n otherItems = OneclickCart.getItems();\n }\n else if (mode === 'Oneclick') {\n otherItems = StandardCart.getItems();\n }\n for (oid in otherItems) {\n deactivateAllScopes(oid);\n }\n };\n\n return {\n activate: {\n table: function () { activate(cellSelectors.table) },\n openEvent: function () { activate(cellSelectors.openEvent) },\n accent: function () { activate(cellSelectors.accent) },\n allScopes: function () { activate(null, true) }\n },\n deactivate: {\n allScopes: deactivateAllScopes,\n otherModes: deactivateOtherModes\n }\n }\n\n })();\n //#endregion\n\n\n //центровка лодера на экране при большом кол-ве ставок\n function heightCorrectionLoader() {\n if ($('.cart__inner').height() > $('#layout-right-column').height()) {\n $('.betting-cart__loader-spiner-wrapper').addClass('m-sticky');\n } else if (globalAppSettings.isMobileDevice) {\n $('.betting-cart__loader-spiner-wrapper').addClass('m-sticky');\n };\n };\n\n var visual = {\n blink: function () {\n dom.container.animate({ opacity: 0 }, 100).animate({ opacity: 1 }, 100);\n },\n showLoader: function () {\n heightCorrectionLoader();\n dom.overlay.fadeIn(200);\n },\n hideLoader: function () {\n $('.betting-cart__loader-spiner-wrapper').removeClass('m-sticky');\n dom.overlay.fadeOut(200);\n }\n };\n\n const COEF_UPD_INFO = {\n ORIGINAL_ID: 'o',\n ACTUAL_ID: 'a',\n VALUE: 'v',\n STATE: 's'\n };\n\n var notification = {\n NotifyPackageBetResult: function (isSuccess, message) {\n var packageBetStatusElement = $('[package-bet-status-container]');\n if (packageBetStatusElement.length > 0) {\n app.enableLoading();\n Ajax.postJson(\"/baltsystem/showpackagebetstatus\", {\n success: function () {\n app.disableLoading();\n }\n });\n }\n },\n //v2.0\n updateAccountBonusPoints: function (val) {\n StandardCart.bonusExpress.checkIfIsAvailable();\n //TODO: обновлять ББ на странице баланса.\n }\n\n };\n\n var calc = function () {\n var type = '',\n items = {},\n betSum = 0,\n result = {};\n\n if (mode === 'Standard') {\n type = StandardCart.getType();\n items = StandardCart.getItems();\n betSum = StandardCart.getBetSum();\n currency = StandardCart.getCurrency();\n isBonusExpress = StandardCart.bonusExpress.isEnabled;\n\n if (Freebet.isSelected()) {\n var freebetSum = Freebet.getSum();\n\n if (StandardCart.isTypeSingle()) {\n items = {};\n\n var selectedItemForFreebet = StandardCart.getSelectedItemForFreebet();\n\n if (selectedItemForFreebet) {\n items[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n }\n }\n\n items = Object.values(items).reduce(function (acc, cur) {\n acc[cur.originalId] = Object.assign({}, cur);\n acc[cur.originalId].bet = freebetSum;\n return acc;\n }, {});\n\n betSum = freebetSum;\n }\n\n result = StandardCartCalc.calc(type, betSum, items, currency, isBonusExpress);\n StandardCart.updateCalcResults(result);\n }\n\n save();\n };\n\n var save = function () {\n if (isLoading === false) {\n var accountId = sessionStorage.getItem('accountId');\n var BettingCartData = {};\n\n app.console.log(mode);\n\n BettingCartData[accountId] = {\n timestamp: Date.now(),\n mode: mode,\n standardCartData: StandardCart.getData(),\n oneclickCartData: OneclickCart.getData(),\n isCollapsed: isCollapsed\n };\n\n localStorage.setItem('bettingCart', JSON.stringify(BettingCartData));\n }\n };\n\n var sendWithFreebetProposal = function () {\n if (mode === 'Standard' && StandardCart.canProposeFreeBet()) {\n Freebet.proposeCouponList();\n return false;\n }\n\n return send();\n };\n\n var initSendingLiveIds = function () {\n sendingLiveIds = Object.values(StandardCart.getItems()).filter(x => x.isLive).map(x => Number(x.originalId));\n };\n\n\n var cancelLiveBet = function (item) {\n if (StandardCart.getType() == 'Single') {\n var indexOfItem = sendingLiveIds.indexOf(Number(item.originalId));\n if (indexOfItem !== -1) {\n sendingLiveIds.splice(indexOfItem, 1);\n if (sendingLiveIds.length != 0)\n return;\n }\n }\n\n clearTimeout(liveBetTimeout);\n liveBetTimeout = undefined;\n isWaitingForLiveBet = false;\n\n BettingCart.visual.hideLoader();\n BettingCart.isSending = false;\n };\n\n\n var sendToServer = function (data) {\n Ajax.postJson(\"/BettingCart/SendBettingCart\", {\n data: {\n cartData: data,\n couponId: Freebet.isSelected() ? Freebet.getFreebetId() : null,\n duplicateToken: app.generateGUID() + ':' + Date.now()\n },\n success: function (resp) {\n\n if (resp.IsSuccess && resp.FailedPositions.length === 0) {\n StandardCart.removeAllItemsAfterSend(resp.CoefsToRemove);\n StandardCart.showSuccessMessage(resp.NeedConfirmation);\n if (Freebet.isSelected()) {\n Freebet.updateAfterSuccessSend();\n }\n } else {\n if (resp.FailedPositions && resp.FailedPositions.length > 0) {\n var badIds = [];\n var items = StandardCart.getItems();\n\n for (var i = 0; i < resp.FailedPositions.length; i++) {\n var oId = resp.FailedPositions[i].OriginalCoefId;\n\n if (items[oId]) {\n items[oId].errors.length = 0;\n items[oId].errors.push(resp.FailedPositions[i].ErrorMessage);\n items[oId].showErrors();\n items[oId].animateFail();\n badIds.push(parseInt(oId));\n }\n }\n\n for (key in items) {\n var item = items[key];\n if (badIds.indexOf(parseInt(item.originalId)) == -1) {\n var removeAfter = (resp.CoefsToRemove && resp.CoefsToRemove.indexOf(parseInt(item.originalId)) !== -1)\n item.animateSuccess(removeAfter);\n }\n }\n\n StandardCart.humanizeErors.items();\n\n } else {\n for (key in items) {\n items[key].animateFail();\n }\n }\n\n if (Freebet.isSelected()) {\n Freebet.updateAfterFailedSend();\n }\n\n if (resp.IsUnauthorized) {\n StandardCart.showErrors(Localization.getString('BettingCart.LoginToBet', 'Для совершения ставки необходимо авторизоваться.'));\n }\n\n if (resp.CommonErrorMessage) {\n StandardCart.showErrors([resp.CommonErrorMessage]);\n StandardCart.humanizeErors.general();\n }\n }\n\n BettingCart.visual.hideLoader();\n BettingCart.isSending = false;\n //TODO: 12min timer\n }\n });\n }\n\n var send = function () {\n if (BettingCart.isSendAllowed === false)\n return false;\n\n if (mode !== 'Standard')\n return false;\n\n var data = {\n type: StandardCart.getType(),\n bettingCartInfo: {\n TotalMoneyValue: 0,\n TotalMoneyCurrency: currencyMap.CURRENCY,\n NotWinEventCount: 0,\n },\n bettingCartPositions: [],\n };\n data = StandardCart.prepareData(data);\n\n BettingCart.isSending = true;\n BettingCart.visual.showLoader();\n\n return sendToServer(data);\n };\n\n var load = function () {\n var accountId = sessionStorage.getItem('accountId');\n isLoading = true;\n\n if (!globalAppSettings.isMobileDevice) {\n scrollbar = new AwesomeScrollbar('#betting-cart__scroll-area', 'betting-cart__scrollbar-area-wrapper');\n }\n dom = {\n container: $('[js-node=\"betting-cart\"]'),\n modeSwitcher: $('[js-node=\"betting-cart__mode-switcher\"]'),\n modeSwitcherWrapper: $('[js-node=\"betting-cart__mode-switcher-wrapper\"]'),\n overlay: $('[js-node=\"betting-cart__overlay\"]'),\n collapseButton: $('[js-node=\"cart__collapse-button\"]')\n };\n\n setTimeout(function () {\n dom.container.removeClass('is-loading');\n }, 500);\n\n\n var modeSwitcherWrapperSettings = globalAppSettings.currentUser.bettingCart.modeSwitcherWrapper;\n if (!!modeSwitcherWrapperSettings.IsEnabled) {\n dom.modeSwitcherWrapper.removeClass('m-disabled');\n }\n else {\n dom.modeSwitcherWrapper.addClass('m-disabled');\n }\n\n if (!!modeSwitcherWrapperSettings.Tooltip) {\n dom.modeSwitcherWrapper.attr('bb-tool', modeSwitcherWrapperSettings.Tooltip);\n }\n else {\n dom.modeSwitcherWrapper.removeAttr('bb-tool');\n }\n\n var cartSettingsButtonSettings = globalAppSettings.currentUser.bettingCart['cart-settings-button'];\n if (!!cartSettingsButtonSettings.IsEnabled) {\n $('#cart-settings-button').removeClass('m-disabled');\n }\n else {\n $('#cart-settings-button').addClass('m-disabled');\n }\n\n if (globalAppSettings.currentUser.isCaptchaRequired) {\n dom.modeSwitcherWrapper.addClass('m-disabled');\n }\n\n var cart = JSON.parse(localStorage.getItem('bettingCart')),\n oneclickCartData,\n standardCartData;\n\n if (cart) {\n if (cart.hasOwnProperty('unauthorized') && accountId !== 'unauthorized') {\n cart[accountId] = cart['unauthorized'];\n delete cart['unauthorized'];\n localStorage.setItem('bettingCart', JSON.stringify(cart));\n }\n\n if (cart[accountId]) {\n mode = cart[accountId].mode;\n\n if (cart[accountId].isCollapsed) {\n collapse();\n } else {\n expand();\n }\n\n if (cart[accountId].hasOwnProperty('oneclickCartData')) {\n oneclickCartData = cart[accountId]['oneclickCartData'];\n }\n\n if (cart[accountId].hasOwnProperty('standardCartData')) {\n standardCartData = cart[accountId]['standardCartData'];\n }\n }\n }\n\n StandardCart.load(standardCartData);\n OneclickCart.load(oneclickCartData);\n setMode(mode, true);\n\n if (validate()) {\n StandardCart.serverValidate();\n }\n\n bindUI();\n\n isLoading = false;\n document.dispatchEvent(new CustomEvent('bettingCartIsLoaded'))\n };\n\n var validate = function () {\n if (mode === 'Standard') {\n return StandardCart.validate();\n }\n };\n\n /**\n *\n * @param newMode String 'standard' || 'oneclick'\n */\n var setMode = function (newMode, justLoaded) {\n mode = newMode.toLowerCase() === 'oneclick' ? 'Oneclick' : 'Standard';\n\n if (mode === 'Oneclick') {\n dom.container\n .removeClass('standard')\n .addClass('oneclick');\n\n dom.modeSwitcher.prop('checked', true);\n } else {\n dom.container\n .addClass('standard')\n .removeClass('oneclick');\n\n dom.modeSwitcher.prop('checked', false);\n }\n\n if (justLoaded === undefined || justLoaded === false) {\n //deactivate prevState items. activate currentState\n Highlighting.deactivate.otherModes();\n Highlighting.activate.allScopes();\n }\n save();\n };\n\n var bindUI = function () {\n dom.modeSwitcher.on('change', function () {\n if (!globalAppSettings.currentUser.bettingCart.modeSwitcherWrapper.IsEnabled) return;\n\n var newMode = $(this).prop('checked') === true ? 'oneclick' : 'standard';\n setMode(newMode);\n });\n\n dom.collapseButton.on('click', function () {\n if (isCollapsed) {\n expand();\n } else {\n collapse();\n }\n });\n\n window.addEventListener('notificationBalanceUpdate', function (event) {\n const bonuses = 'detail' in event && event.detail.bonusPoints ? event.detail.bonusPoints : 0;\n\n notification.updateAccountBonusPoints(bonuses);\n });\n };\n\n var expand = function () {\n isCollapsed = false;\n dom.container.removeClass('collapsed');\n save();\n }\n\n var collapse = function () {\n isCollapsed = true;\n setMode('standard');\n dom.container.addClass('collapsed');\n save();\n };\n\n var getIsLoading = function () {\n return isLoading;\n };\n\n var settings = (function () {\n var selectors = {\n openButton: '#cart-settings-button',\n overlay: '#cart-settings-overlay'\n };\n\n var dom = {\n container: $('#cart-settings'),\n openButton: $(selectors.openButton),\n overlay: $('
', {\n class: 'cart-settings__overlay',\n id: 'cart-settings-overlay'\n })\n };\n\n var actions = {\n open: function () {\n if (dom.openButton.hasClass('m-disabled'))\n return false;\n\n document.dispatchEvent(\n new CustomEvent('mtmCustomEvent', {\n detail: {\n id: 'd-i06-e3',\n },\n })\n );\n\n dom.openButton.addClass('m-active');\n dom.container.addClass('m-opened');\n $('[js-node=\"betting-cart\"]').append(dom.overlay);\n $(document).on('click.cartSettingsClose, touchstart.cartSettingsClose', selectors.overlay + ',' + selectors.openButton, actions.close);\n },\n close: function () {\n document.dispatchEvent(\n new CustomEvent('mtmCustomEvent', {\n detail: {\n id: 'd-i06-e4',\n },\n })\n );\n dom.openButton.removeClass('m-active');\n dom.container.removeClass('m-opened');\n dom.overlay.remove();\n $(document).off('click.cartSettingsClose, touchstart.cartSettingsClose');\n }\n };\n\n var bindUI = function () {\n $(document).on('click.cartSettingsOpen', selectors.openButton, actions.open);\n };\n\n var unbindUI = function () {\n $(document).off('click.cartSettingsOpen');\n };\n\n return {\n bindUI: bindUI,\n open: actions.open,\n close: actions.close\n };\n }());\n\n return {\n addItemObsolete: addItemObsolete,\n addItem: addItem,\n calc: calc,\n currencyMap: currencyMap,\n removeItem: removeItem,\n getItems: getItems,\n getIsLoading: getIsLoading,\n hasItem: hasItem,\n load: load,\n save: save,\n send: send,\n sendWithFreebetProposal: sendWithFreebetProposal,\n settings: settings,\n setMode: setMode,\n validate: validate,\n visual: visual,\n isOneClick: function () { return (mode.toLowerCase() === 'oneclick') },\n notification: notification,\n Highlighting: Highlighting,\n isSendAllowed: true\n };\n}());","window.Freebet = (function () {\n\n var _avaliableCount = 0;\n var _number = 0;\n var _title;\n var _isActive = false;\n var _isSelected = false;\n var _sum = 0;\n var _dom = {};\n\n var init = function () {\n _dom = {\n container: $('[js-node=\"coupon__item__selected--wrapper\"]'),\n title: $('[js-node=\"coupon__item-body-title\"]'),\n clearBtn: $('[js-node=\"coupon__item__button--clear\"]'),\n activeSwitcherInput: $('[js-node=\"coupon__item-switcher\"]'),\n constraintsContainer: $('[js-node=\"coupon__constraints-wrapper\"]'),\n constraintsListContainer: $('[js-node=\"coupon__constraints-list\"]')\n };\n\n readAvaliableCount();\n bindUI();\n };\n\n var readAvaliableCount = function () {\n _avaliableCount = 0;\n var infoContainer = $('#cart-freebet-info');\n if (infoContainer.length) {\n var parsedAvaliableCount = parseInt(infoContainer.attr('data-freebet-count'));\n if (!isNaN(parsedAvaliableCount))\n _avaliableCount = parsedAvaliableCount;\n }\n }\n\n var bindUI = function () {\n $(document).off('click', '#activationCouponBtn');\n $(document).on('click', '#activationCouponBtn', function (e) {\n var checkedId = $('input[name=\"Id\"]:checked')[0].value;\n var container = $('.j-freebet-item[data-id=\"' + checkedId + '\"]').first();\n var title = container.find('.j-freebet-item-event-name').text();\n var sum = container.find('[data-freebet-sum]').attr('data-freebet-sum');\n\n $(document).trigger('notification_SetFreebet', {\n number: checkedId,\n title: title,\n sum: sum\n });\n\n Popup.Close(this);\n });\n\n $(document).off('click', '#useCouponBtn');\n $(document).on('click', '#useCouponBtn', function (e) {\n var checkedId = $('input[name=\"Id\"]:checked')[0].value;\n var container = $('.j-freebet-item[data-id=\"' + checkedId + '\"]').first();\n var title = container.find('.j-freebet-item-event-name').text();\n var sum = container.find('[data-freebet-sum]').attr('data-freebet-sum');\n\n $(document).trigger('notification_UseCouponBeforeBet', {\n number: checkedId,\n title: title,\n sum: sum\n });\n\n Popup.Close(this);\n });\n\n $(document).off('click', '#useCurrencyBtn');\n $(document).on('click', '#useCurrencyBtn', function (e) {\n $(document).trigger('notification_SendBettingCart');\n\n Popup.Close(this);\n });\n\n $(document).off('notification_UseCouponBeforeBet');\n $(document).on('notification_UseCouponBeforeBet', function (e, data) {\n setFreebet(data);\n validate();\n BettingCart.send();\n });\n\n $(document).off('notification_SendBettingCart');\n $(document).on('notification_SendBettingCart', function (e) {\n BettingCart.send();\n });\n\n $(document).off('notification_SetFreebet');\n $(document).on('notification_SetFreebet', function (e, data) {\n setFreebet(data);\n validate();\n });\n\n $(document).off('notificationCoefInCartUpdate notificationCoefIsAddedToCart notificationCoefIsRemovedFromCart notificationCartTypeIsChanged notificationCoefIsSelectedChanged notification_notWinEventCountChanged');\n $(document).on('notificationCoefInCartUpdate notificationCoefIsAddedToCart notificationCoefIsRemovedFromCart notificationCartTypeIsChanged notificationCoefIsSelectedChanged notification_notWinEventCountChanged', function (e, data) {\n if (_isSelected) {\n validate(); \n }\n\n e.stopImmediatePropagation();\n return false;\n });\n\n _dom.clearBtn.off('click');\n _dom.clearBtn.on('click', function () {\n clear();\n });\n\n _dom.activeSwitcherInput.off('change');\n _dom.activeSwitcherInput.on('change', function () {\n setIsSelected($(this).is(':checked'));\n });\n };\n\n var setIsSelected = function (isSelected) { \n if (isSelected) {\n _isSelected = true;\n _dom.activeSwitcherInput.prop('checked', true);\n $('#classic-betting-cart').addClass('m-freebet-is-active');\n _dom.constraintsContainer.show();\n } else {\n _isSelected = false;\n _dom.activeSwitcherInput.prop('checked', false);\n $('#classic-betting-cart').removeClass('m-freebet-is-active');\n _dom.constraintsContainer.hide();\n }\n\n BettingCart.calc();\n BettingCart.validate();\n }\n\n var setFreebet = function (data) {\n if (_avaliableCount === 0) {\n clear();\n return;\n }\n\n _number = data.number / 1;\n _title = data.title;\n _isActive = true;\n _isSelected = data.hasOwnProperty('isSelected') ? data.isSelected : true;\n _sum = parseInt(data.sum); \n _dom.title.text(_title);\n\n $('#cart__freebet-sum-value').html(_sum);\n $('#classic-betting-cart').addClass('m-freebet');\n\n setSingleItemAfterFreebetProposalSelect();\n setIsSelected(_isSelected);\n };\n\n var isActive = function () {\n return _isActive;\n };\n\n var isSelected = function () {\n return _isSelected;\n };\n\n var getTitle = function () {\n return _title;\n };\n\n var getSum = function () {\n return _sum;\n };\n\n var getAvaliableCount = function () {\n return _avaliableCount;\n };\n\n var clear = function () {\n _title = \"\";\n _number = 0;\n _isActive = false;\n _isSelected = false;\n\n $('#classic-betting-cart').removeClass('m-freebet');\n setIsSelected(false);\n\n _dom.constraintsListContainer.empty();\n };\n\n var convertCartTypeToInt = function (typeName) {\n //Single || Express || System\n\n switch (typeName) {\n case 'Single':\n return 4;\n case 'Express':\n return 1;\n case 'System':\n return 2;\n default:\n return 0;\n }\n };\n\n var humanizeCouponResult = function (code) {\n switch (code) {\n case 1: return window.Localization.getString('Scripts_Shared_Modules.Freebet_36', 'Успешно');\n case 2: return window.Localization.getString('Scripts_Shared_Modules.Freebet_37', 'Ставка не соотвествует купону');\n case 3: return window.Localization.getString('Scripts_Shared_Modules.Freebet_38', 'Срок действия купона истек');\n case 4: return window.Localization.getString('Scripts_Shared_Modules.Freebet_39', 'Не все условия выполнены');\n case 5: return window.Localization.getString('Scripts_Shared_Modules.Freebet_40', 'Корзина пуста');\n case 6: return window.Localization.getString('Scripts_Shared_Modules.Freebet_41', 'Некорректная область использования');\n default: return \"\";\n }\n }\n\n var renderConstraints = function (data) {\n let html = '';\n\n let hasRequirement = typeof (data.Requirement) !== \"undefined\" && data.Requirement !== null && data.Requirement.length > 0;\n let hasErrorMessage = typeof (data.ErrorMessage) !== \"undefined\" && data.ErrorMessage !== null && data.ErrorMessage.length > 0;\n\n if ((!hasRequirement && !hasErrorMessage) || !_isSelected) {\n _dom.constraintsContainer.hide();\n }\n else {\n _dom.constraintsContainer.show();\n }\n\n if (hasRequirement) {\n data.Requirement.forEach(r => {\n html += '
';\n html += r.IsValid ? app.htmlSvgIcon('ok', 'freebet-constrains-item__icon m-success') : app.htmlSvgIcon('error', 'freebet-constrains-item__icon m-fail');\n html += r.Description;\n html += '
';\n });\n }\n\n if (hasErrorMessage) {\n html += '
';\n html += app.htmlSvgIcon('error', 'freebet-constrains-item__icon m-fail');\n html += data.ErrorMessage;\n //html += humanizeCouponResult(data.Result);\n html += '
';\n }\n\n _dom.constraintsListContainer.html(html);\n };\n\n var setSingleItemAfterFreebetProposalSelect = function () {\n if (StandardCart.isTypeSingle()) {\n var selectedItemForFreebet = StandardCart.getSingleSelectedItemForFreebetProposal();\n if (selectedItemForFreebet) {\n setSelectetItem(selectedItemForFreebet.originalId);\n }\n }\n };\n\n var addPosition = function(items, item) {\n items.push({ CoefId: item.actualId, Value: item.originalCoefValue, EventId: item.eventId });\n return items;\n }\n\n var getPositionsForProposal = function () {\n var items = BettingCart.getItems();\n var positions = [];\n\n if (StandardCart.isTypeSingle()) {\n var selectedItemForFreebet = StandardCart.getSingleSelectedItemForFreebetProposal();\n if (selectedItemForFreebet) {\n addPosition(positions, selectedItemForFreebet);\n }\n } else {\n for (var key in items) {\n if (items[key].isSelected) {\n addPosition(positions, items[key]);\n }\n }\n }\n\n return positions;\n };\n\n var getPositions = function () {\n var items = BettingCart.getItems();\n var positions = [];\n\n if (StandardCart.isTypeSingle()) {\n var selectedItemForFreebet = StandardCart.getSelectedItemForFreebet();\n\n if (selectedItemForFreebet) {\n addPosition(positions, selectedItemForFreebet);\n }\n } else {\n for (var key in items) {\n if (items[key].isSelected) {\n addPosition(positions, items[key]);\n }\n }\n }\n\n return positions;\n };\n\n var getSelectedItemId = function () {\n return parseInt($('[name=\"cart-item-freebet-radio\"]:checked').val()) || null;\n };\n\n var setSelectetItem = function (originalId) {\n $('[name=\"cart-item-freebet-radio\"][value=' + originalId + ']').attr('checked', true);\n }\n\n var validate = function () {\n Ajax.postJson(\"/bettingcart/checkcoupon\", {\n data: {\n cartModel: {\n CartType: convertCartTypeToInt(StandardCart.getType()),\n NotWinEventCount: StandardCart.getNotWinEventsCount(),\n TotalConstantsCount: 0,\n Positions: getPositions()\n },\n couponId: _number\n },\n success: function (data) {\n if (StandardCart.isTypeSingle() && StandardCart.quantity() > 0 && !getSelectedItemId()) {\n data.ErrorMessage = window.Localization.getString('Scripts_Shared_Modules.Freebet_42', 'Выберите один из исходов в корзине');\n } \n\n renderConstraints(data);\n },\n error: function () { \n console.log('error checkCoupon');\n }\n });\n };\n\n var proposeCouponList = function () {\n Ajax.postJson(\"/bettingcart/proposesuitablecouponList\", {\n data: {\n cartModel: {\n CartType: convertCartTypeToInt(StandardCart.getType()),\n NotWinEventCount: StandardCart.getNotWinEventsCount(),\n TotalConstantsCount: 0,\n Positions: getPositionsForProposal()\n }\n },\n success: function (resp) {\n if (!resp.hasCoupons) {\n BettingCart.send();\n }\n else {\n new AwesomeScrollbar('#freebet-popup-list', 'freebet-popup__scrollarea');\n }\n }\n });\n };\n\n var getFreebetId = function () {\n return _number;\n };\n\n var updateFullCartBlock = function () {\n Ajax.postJson(\"/bettingcart/updatefreebet\", {\n success: function () {\n init();\n }\n });\n };\n\n var updateInfoRow = function () {\n Ajax.postJson(\"/bettingcart/updatefreebetinfo\", {\n success: function () {\n readAvaliableCount();\n }\n });\n };\n\n var updateAfterSuccessSend = function () {\n clear();\n updateInfoRow();\n };\n\n var updateAfterFailedSend = function () {\n updateInfoRow();\n };\n\n\n return {\n init: init,\n clear: clear,\n getSelectedItemId: getSelectedItemId,\n getFreebetId: getFreebetId,\n isActive: isActive,\n isSelected: isSelected,\n getSum: getSum,\n getTitle: getTitle,\n validate: validate,\n getAvaliableCount: getAvaliableCount,\n proposeCouponList: proposeCouponList,\n updateAfterSuccessSend: updateAfterSuccessSend,\n updateAfterFailedSend: updateAfterFailedSend\n };\n}());","window.OneclickCart = (function () {\n\n\tvar dom = {};\n\tvar baseSums = {};\n var items = {};\n\n var isSending = false;\n var sendingOriginalId = undefined, sendingEventId = undefined;\n\n function setSendingIds(oid, eid) {\n oid = Number(oid);\n if (oid != NaN)\n sendingOriginalId = oid;\n\n eid = Number(eid);\n if (eid != NaN)\n sendingEventId = eid;\n }\n\n function clearSendingIds() {\n sendingOriginalId = undefined;\n sendingEventId = undefined;\n }\n\n function cancelLiveBet() {\n var item = OneclickCart.items[sendingOriginalId];\n if (item.isLiveBetWaiting && typeof (item.liveBetTimeout) !== 'undefined') {\n clearTimeout(item.liveBetTimeout);\n\n item.isLiveBetWaiting = false;\n item.setErrorMessage(Localization.getString('BettingCart.CoefChanged', 'Коэффициент был изменен'));\n item.setRequestStatus('error');\n\n item.timeout = setTimeout(function () {\n item.remove();\n }, 10000);\n\n BettingCart.visual.hideLoader();\n OneclickCart.isSending = false;\n clearSendingIds();\n }\n }\n\n\tvar bindUIActions = function () {\n dom.sumInput.on('input change', function () {\n const filteredVal = $(this).val().replace(/\\D/g, ''); \n $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n if (OneclickCart.validate() === false) {\n dom.sumInput.addClass('error');\n OneclickCart.showErrors([100]);\n } else {\n BettingCart.save();\n }\n\t\t});\n\n\t\tdom.betSumButton.on('click', function () {\n\t\t\tvar button = $(this);\n\t\t\tvar sum = button.data('sum');\n\n\t\t\tif (sum) {\n\t\t\t\tdom.sumInput.val(sum).trigger('change');\n\n\t\t\t\tbutton.addClass('active');\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tbutton.removeClass('active');\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t});\n\n\t\tdom.addButton.on('click', function () {\n\t\t\tvar add = $(this).data('add');\n\t\t\tvar baseSum = parseInt(dom.sumInput.val().replace(/\\s+/g, '')) || 0;\n\n\t\t\tif (add) {\n\t\t\t\tdom.sumInput.val(baseSum + add).trigger('change');\n\t\t\t}\n\t\t});\n\n\t\tdom.automaxSwitcher.on('click', function () {\n\t\t\tBettingCart.save();\n\t\t});\n\t}; \n\n\treturn {\n\t\tload: function (data) { \n\t\t\t\tdom.betSumButton = $('[js-node=\"oneclick-cart__bet-sum\"]');\n\t\t\t\tdom.addButton = $('[js-node=\"oneclick-cart__add-to-sum\"]');\n\t\t\t\tdom.sumInput = $('[js-node=\"one-click__sum-input\"]');\n\t\t\t\tdom.automaxSwitcher = $('[js-node=\"oneclick-cart__automax-switcher\"]');\n\t\t\t\tdom.errorsContainer = $('[js-node=\"oneclick-cart__errors\"]');\n\n\t\t\t\tdom.betSumButton.each(function () {\n\t\t\t\t\tvar container = $(this);\n\t\t\t\t\tvar val = container.attr('data-sum');\n\n\t\t\t\t\tbaseSums[val] = container;\n\t\t\t\t});\n\n\t\t\t\tbindUIActions();\n\n\t\t\t\tif (data) {\n\t\t\t\t\tif (data.hasOwnProperty('betSum'))\n\t\t\t\t\t\tdom.sumInput.val(app.numberToString(data.betSum));\n\t\t\t\t\tif (data.hasOwnProperty('automax'))\n\t\t\t\t\t\tdom.automaxSwitcher.prop('checked', data.automax);\n\t\t\t\t}\n\n\t\t\t\tif (dom.sumInput.val() == '') {\n\t\t\t\t\tif (window.globalAppSettings.defaultBet) { \t\t\n\t\t\t\t\t\tdom.sumInput.val(window.globalAppSettings.defaultBetSum || '');\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\n\t\t\t\tdom.sumInput.trigger('change'); \n\t\t},\n\t\tgetData: function() {\n\t\t\tvar self = this;\n\n\t\t\treturn {\n\t\t\t\tbetSum: self.getSum(),\n\t\t\t\tautomax: self.getAutomaxValue()\n\t\t\t};\n\t\t},\n\t\tgetSum: function () {\n\t\t\treturn parseInt(dom.sumInput.val().replace(/\\s+/g, ''));\n\t\t},\n\t\tclearSum: function () {\n\t\t\tif (dom.hasOwnProperty('sumInput')) {\n\t\t\t\tdom.sumInput.val('');\n\t\t\t\tBettingCart.save();\n\t\t\t}\n\t\t},\n\t\tgetItems: function () {\n\t\t\treturn items;\n },\n getItem: function (oid) {\n return items[oid];\n },\n checkCoefForWaitingLiveBet: function (oid) {\n if (Number(oid) === sendingOriginalId)\n cancelLiveBet();\n },\n checkEventForWaitingLiveBet: function (eid) {\n if (Number(eid) === sendingEventId)\n cancelLiveBet();\n },\n\t\tgetAutomaxValue: function () {\n\t\t\treturn dom.automaxSwitcher.prop('checked');\n\t\t},\n\t\tvalidate: function () {\n\t\t\tif (dom.sumInput.val() === '') {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tdom.sumInput.removeClass('error');\n\t\t\t\tOneclickCart.hideErrors();\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tshowErrors: function (errors) {\n var errorsTexts = {\n 100: Localization.getString('BettingCart.AmountRequired', 'Необходимо указать сумму') \n\t\t\t};\n\t\t\terrors = errors || [];\n\n\t\t\tif (errors.length > 0) {\n\t\t\t\tvar text = '';\n dom.errorsContainer.attr('bb-tool', text);\n\n\t\t\t\tfor (var i = 0; i < errors.length; i++) {\n\t\t\t\t\ttext += errorsTexts[errors[i]] || errors[i];\n\t\t\t\t\tif (i != errors.length) text += '
';\n\t\t\t\t}\n\n dom.errorsContainer.attr('bb-tool', text);\n\t\t\t\t\n\t\t\t\tif (dom.errorsContainer.filter(':visible').length !== 0) \n\t\t\t\t\tdom.errorsContainer.animate({ opacity: 0.1 }, 100).animate({ opacity: 1 }, 100);\n\t\t\t\telse\n\t\t\t\t\tdom.errorsContainer.show();\n\n\t\t\t\tdom.sumInput.addClass('m-error');\n\t\t\t}\n\t\t},\n\t\thideErrors: function () {\n\t\t\tdom.errorsContainer.hide();\n\t\t\tdom.sumInput.removeClass('m-error');\n }, \n\t\taddItem: function (data) {\n\t\t\tif (data.oId) {\n var item = {\n actualData: {\n oId: data.oId,\n aId: data.aId,\n val: data.val,\n eId: data.eId\n },\n loadActualCoefValue: function (callback) {\n var self = this;\n Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n data: {\n coefs: [{\n coefid: self.actualData.oId,\n eventid: self.actualData.eId\n }]\n },\n success: function (resp) {\n if (Array.isArray(resp) && resp.length == 1) {\n let actual = resp[0];\n if (parseInt(actual.oid) === parseInt(self.actualData.oId)) {\n\n self.actualData.rTitle = actual.n;\n if (actual.hasOwnProperty('ht')) {\n self.actualData.eTitle = (actual.hasOwnProperty('at')) ? (actual.ht + ' — ' + actual.at) : actual.ht;\n }\n\n callback();\n }\n }\n }\n });\n },\n\t\t\t\t\tcreate: function () {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tself.container = $('
', {\n\t\t\t\t\t\t\t'class': 'b-cart-one-click-item'\n\t\t\t\t\t\t});\n self.container.attr('original-id', self.actualData.oId);\n\t\t\t\t\t\tvar html = [\n\t\t\t\t\t\t\t\t'
',\n '
' + self.actualData.eTitle + '
',\n '
' + Utils.svgHtml('close', 'modal__close-icon') + '
',\n\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t\t\t'
' + self.actualData.rTitle + '
',\n\t\t\t\t\t\t\t\t\t\t'
' + self.actualData.val + '
',\n\t\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t\t'
',\n '
' + Localization.getString('Shared.Amount', 'Сумма') + '
',\n '
' + data.betSum + ' ' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol + '
',\n\t\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t\t'
',\n '
' + Localization.getString('Profile.BetStatus') +'
',\n\t\t\t\t\t\t\t\t\t\t'
',\n '
' + Localization.getString('BettingCart.Accepted','Принято') + '
',\n '
',\n '
' + Utils.svgHtml('wait', 'icon-status-waiting-for-confirm') + '
',\n '
' + Localization.getString('Bets.BetConfirmation') +'
',\n '
',\n '
i
' + Localization.getString('Shared.Error','Ошибка') +'
',\n '
' + Localization.getString('BettingCart.Waiting','Ожидание') +'
',\n\t\t\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t\t\t'
',\n\t\t\t\t\t\t].join('\\n');\n\n\t\t\t\t\t\tself.container.append(html);\n\n\t\t\t\t\t\tself.container.find('.js-cart-one-click-item-remove').on('click', function () {\n\t\t\t\t\t\t\tself.remove();\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tsetResultMoneyValue: function (value) {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tself.container.find('.js-cart-one-click-item__value-bet-sum').html(value);\n\t\t\t\t\t},\n\t\t\t\t\tdraw: function () {\n var self = this;\n\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n $('body').append(self.container);\n\n self.container.css({\n opacity: 0, \n bottom: '-100px'\n }).animate({\n opacity: 1,\n bottom: 0\n }, 200);\n } else {\n $('[js-node=\"betting-cart\"]').append(self.container);\n\n self.container.css({\n opacity: 0,\n position: 'relative',\n top: '100px'\n }).animate({\n opacity: 1,\n top: 0\n }, 200);\n }\n\t\t\t\t\t},\n\t\t\t\t\tremove: function () {\n\t\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t\tif (self.timeout)\n\t\t\t\t\t\t\tclearTimeout(self.timeout);\n\n\t\t\t\t\t\tself.container.animate({\n\t\t\t\t\t\t\tleft: self.container.width(),\n\t\t\t\t\t\t\topacity: 0\n\t\t\t\t\t\t}, 200, function () {\n\t\t\t\t\t\t\tself.container.remove();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (items[data.oId]) delete items[data.oId];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (BettingCart.isOneClick())\n\t\t\t\t\t\t\tBettingCart.Highlighting.deactivate.allScopes(data.oId);\n\t\t\t\t\t},\n\t\t\t\t\tsetRequestStatus: function (status) {\n\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\tstatus = status || 'loading';\n\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item').removeClass('active');\n\n\t\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\t\tcase 'ok':\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.ok').addClass('active');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.error').addClass('active');\n break;\n case 'need-confirmation':\n self.container.find('.b-cart-one-click-item__status-item.need-confirmation').addClass('active');\n break;\n\t\t\t\t\t\t\tcase 'loading':\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tself.container.find('.b-cart-one-click-item__status-item.loading').addClass('active');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n setErrorMessage: function (message) {\n console.log(message)\n this.container.find('.js-cart-one-click-error-message-tooltip').attr('bb-tool', message);\n\t\t\t\t\t}\n\t\t\t\t};\n item.isLiveBetWaiting = false;\n item.loadActualCoefValue(function () {\n item.create();\n item.draw();\n });\n\n\t\t\t\titems[data.oId] = item;\n\t\t\t}\n\t\t},\n items: items,\n sendToServer: function (sendData) {\n Ajax.postJson('/BettingCart/SendOneClick', {\n data: {\n cartData: JSON.stringify(sendData),\n duplicateToken: app.generateGUID() + ':' + Date.now() \n },\n success: function (resp) {\n //CL-663 -----------------------\n BettingCart.visual.hideLoader();\n OneclickCart.isSending = false;\n clearSendingIds();\n //---------------------------------\n\n if (!OneclickCart.items.hasOwnProperty(resp.originalId)) {\n return;\n }\n\n OneclickCart.items[resp.originalId].isLiveBetWaiting = false;\n\n if (resp.isSuccessful === false) {\n OneclickCart.items[resp.originalId].setErrorMessage(resp.errorMessage);\n OneclickCart.items[resp.originalId].setRequestStatus('error');\n } else {\n OneclickCart.items[resp.originalId].setResultMoneyValue(resp.resultMoneyValue);\n var betStatus = (resp.needConfirmation) ? 'need-confirmation' : 'ok';\n OneclickCart.items[resp.originalId].setRequestStatus(betStatus);\n }\n\n if (OneclickCart.items[resp.originalId]) {\n OneclickCart.items[resp.originalId].timeout = setTimeout(function () {\n OneclickCart.items[resp.originalId].remove();\n }, 10000);\n }\n //BettingCart.deactivate(data.oId);\n }\n });\n },\n sendData: function (data) {\n if (!globalAppSettings.currentUser.bettingCart['one-click-send-button'].IsEnabled) return;\n \n\t\t\tif (!OneclickCart.validate()) {\n\t\t\t\t//BettingCart.deactivate(data.oId);\n\t\t\t\tdom.sumInput.addClass('error');\n\t\t\t\tOneclickCart.showErrors([100]);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (OneclickCart.isSending)\n\t\t\t\treturn false;\n\n\t\t\tdata.betSum = OneclickCart.getSum();\n data.automax = OneclickCart.getAutomaxValue() ? true : false;\n\n\t\t\t//CL-663 -----------------------\n\t\t\tBettingCart.visual.showLoader();\n OneclickCart.isSending = true;\n setSendingIds(data.oId, data.eId);\n\t\t\t//---------------------------------\n\n OneclickCart.addItem(data); \n\n var sendData = {\n coef: {\n eventid: data.eId,\n coefid: data.aId\n },\n coefVal: data.val,\n moneyVal: data.betSum,\n isAutoMax: data.automax,\n isLive: data.isLive\n };\n OneclickCart.sendToServer(sendData);\n\n\t\t\treturn true;\n\t\t},\n\t\tisSending: isSending,\n\t\tremoveItem: function (oid) {\n\t\t\tif (OneclickCart.isSending)\n\t\t\t\treturn false;\n\t\t\tOneclickCart.items[oid].remove();\n\t\t\treturn true;\n\t\t}\n\t};\n}());","window.StandardCart = (function () {\n\n var betDeletionModeMap = {\n DeleteOutcomes: 'DeleteOutcomes',\n NoDeleteOutComes: 'NoDeleteOutComes',\n NoDeleteOutComesWithMaxBet: 'NoDeleteOutComesWithMaxBet'\n };\n\n const MAX_CART_SIZE = 50;\n var items = {},\n dom = {},\n type = 'Single', // Single || Express || System\n state = 'Empty', // Empty || HasItems || Success\n activeCoefMode = 'Fix', // Fix || NotLess || Any\n currency = window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n betSum = 0,\n minMoneyValue = 20,\n betDeletionMode = betDeletionModeMap.DeleteOutcomes,\n betSumCombobox,\n bonusExpressAmountValue = 0,\n isBettingCartDOMReady = false;\n var typesMap = {\n single: 'single',\n express: 'express',\n system: 'system'\n };\n\n\n var getUnique = function (value, index, self) {\n return self.indexOf(value) === index;\n };\n var getDuplicates = function (value, index, self) {\n return self.indexOf(value) !== index\n };\n\n document.addEventListener('bettingCartIsLoaded', () => {\n isBettingCartDOMReady = true;\n document.dispatchEvent(new CustomEvent('cartIsReadyToAddOutcomes'));\n });\n\n var load = function (data) {\n dom = {\n betSumInput: $('#standard-cart__bet-sum-input'),\n betSumInputWrapper: $('#standard-cart__bet-sum-input-wrapper'),\n maxBetSumMoneyValueBtn: $('#standard-cart__bet-sum-max-money-value-btn'),\n possibleMoneyValue: $('[js-node=\"standard-cart__possible-money-value\"]'),\n calcBetSumSingle: $('[js-node=\"standard-cart__bet-sum-single-value\"]'),\n calcBetSumSingleBonus: $('[js-node=\"cart__bonus-bet-sum-value\"]'),\n bonusBetSumContainer: $('[js-node=\"cart__bonus-bet-sum-container\"]'),\n commonCoef: $('[js-node=\"standard-cart__common-coef\"]'),\n coefModeMenuItemCommon: $('[js-node=\"standard-cart__coef-mode-menu-item-common\"]'),\n container: $('[js-node=\"standard-cart\"]'),\n notWinEventsCount: $('[js-node=\"standard-cart__not-win-events-count\"]'),\n items: $('[js-node=\"standard-cart__items\"]'),\n itemsCount: $('[js-node=\"betting-cart__items-count\"]'),\n menuItems: $('[js-node=\"standard-cart__menu-item\"]'),\n optionCount: $('[js-node=\"standard-cart__option-count\"]'),\n removeAllItemsBtn: $('[js-node=\"betting-cart__remove-all-btn\"]'),\n betDeletionMode: $('[js-node=\"cart-settigns__remove-coefs-after-send\"]'),\n sendBtn: $('[js-node=\"standard-cart__send-btn\"]'),\n acceptBtn: $('[js-node=\"standard-cart__accept-btn\"]'),\n errorsIcon: $('[js-node=\"standard-cart__errors\"]'),\n successBtn: $('#cart__success-close'),\n betSumCurrency: $('[js-node=\"cart__currency-select\"]'),\n bonusExpressContainer: $('#cart-bonus-express-container'),\n bonusExpressInput: $('#cart__bonus-express-input'),\n bonusExpressAmountContainer: $('#cart__bonus-express-amount-container'),\n bonusExpressAmountValue: $('#cart__bonus-express-amount-value'),\n bonusExpressAmountTooltip: $('#cart__bonus-express-amount-tooltip')\n };\n\n if (data) {\n if (data.hasOwnProperty('items')) {\n for (key in data['items']) {\n addItem(data['items'][key]);\n }\n\n fetchCartItems(true);\n }\n\n if (data.hasOwnProperty('type'))\n type = data['type'];\n\n if (data.hasOwnProperty('betSum'))\n betSum = data['betSum'];\n\n if (data.hasOwnProperty('currency'))\n currency = data['currency'];\n\n if (data.hasOwnProperty('isBonusExpress')) {\n if (data.isBonusExpress === true) {\n bonusExpress.enable();\n } else {\n bonusExpress.disable();\n }\n }\n\n if (data.hasOwnProperty('freebet')) {\n if (data.freebet.isActive) {\n $(document).trigger('notification_SetFreebet', {\n number: data.freebet.id,\n title: data.freebet.title,\n sum: data.freebet.sum,\n isSelected: data.freebet.isSelected\n });\n }\n }\n }\n\n betDeletionMode = betDeletionModeMap[window.globalAppSettings.betDeletionMode] || betDeletionModeMap.DeleteOutcomes;\n activeCoefMode = window.globalAppSettings.bettingCartSubMode;\n\n dom.coefModeMenuItemCommon.filter('[value=\"' + activeCoefMode + '\"]').prop('checked', true);\n\n updateCount();\n setType(type);\n setBetDeletionMode(betDeletionMode);\n setCurrency(currency);\n\n if (parseInt(betSum) !== 0)\n dom.betSumInput.val(app.numberToString(betSum));\n\n\n var maxBetButtonSettings = globalAppSettings.currentUser.bettingCart['max-bet-amount-button'];\n\n if (!!!maxBetButtonSettings.IsEnabled) {\n setBetSumMaxMoneyValueButtonIsDisabled(true, maxBetButtonSettings.Message);\n }\n\n var commonSendButtonSettings = globalAppSettings.currentUser.bettingCart['common-send-button'];\n if (!!commonSendButtonSettings.IsEnabled) {\n dom.sendBtn.removeClass('m-blocked');\n }\n else {\n dom.sendBtn.addClass('m-blocked');\n dom.sendBtn.removeClass('disabled');\n }\n\n if (!!commonSendButtonSettings.Tooltip) {\n dom.sendBtn.attr('bb-tool', commonSendButtonSettings.Tooltip);\n }\n else {\n dom.sendBtn.removeAttr('bb-tool');\n }\n\n\n if ($.fn.niceSelect) {\n dom.betSumCurrency.niceSelect();\n dom.notWinEventsCount.niceSelect();\n }\n\n bindUI();\n startFetch();\n initCombobox();\n };\n\n var fetchCartItems = function (includePrematch) {\n if (!isFetchReady)\n return;\n\n includePrematch = includePrematch || false;\n var coefs = (includePrematch) ? getCoefs() : getLiveCoefs();\n if (coefs.length == 0)\n return;\n\n isFetchReady = false;\n Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n data: {\n coefs: coefs\n },\n success: function (resp) {\n if (Array.isArray(resp)) {\n\n var hasChanges = false;\n for (var i = 0; i < resp.length; i++) {\n var actual = resp[i];\n var item = getItem(actual.oid);\n\n if (item) {\n var updateResult = item.updateCoef({\n actualId: actual.aid,\n value: actual.val,\n isActive: actual.act,\n isLive: actual.il,\n eventIsActive: actual.ea,\n eventIsOver: actual.eo,\n eventId: actual.ei,\n rTitle: actual.n,\n homeTeam: actual.ht,\n awayTeam: actual.at\n });\n hasChanges = hasChanges || updateResult;\n if (updateResult) {\n item.updateExternalCoef(actual.oid, actual.aid, actual.val, actual.act);\n }\n }\n }\n\n if (hasChanges) {\n BettingCart.calc();\n BettingCart.validate();\n BettingCart.save();\n }\n }\n isFetchReady = true;\n },\n error: function () {\n isFetchReady = true;\n }\n });\n };\n\n var isFetchReady = true;\n var fetchInterval;\n var startFetch = function () {\n var interval = (globalAppSettings.currentUser.isAnonymous) ? 30 * 1000 : 4 * 1000;\n clearInterval(fetchInterval);\n fetchInterval = setInterval(fetchCartItems, interval);\n };\n\n var initCombobox = function () {\n var sums = window.globalAppSettings.additionalSumValues;\n\n if (window.globalAppSettings.additionalSum && sums.length > 0) {\n var cValues = [];\n\n for (var i = 0; i < sums.length; i++) {\n if (sums[i] > 0) {\n cValues.push(sums[i]);\n }\n }\n\n if (cValues.length > 0) {\n betSumCombobox = new Combobox(cValues, dom.betSumInput);\n }\n }\n };\n\n var getData = function () {\n var data = {\n items: [],\n type: type,\n state: state,\n activeCoefMode: activeCoefMode,\n betSum: betSum,\n currency: currency,\n isBonusExpress: bonusExpress.isEnabled,\n freebet: {\n id: Freebet.getFreebetId(),\n isActive: Freebet.isActive(),\n isSelected: Freebet.isSelected(),\n title: Freebet.getTitle(),\n sum: Freebet.getSum()\n }\n };\n\n for (key in items) {\n data.items.push({\n 'aId': items[key].actualId,\n 'val': items[key].coefValue,\n 'eId': items[key].eventId,\n 'eTitle': items[key].eventTitle,\n 'oId': items[key].originalId,\n 'rTitle': items[key].resultTitle,\n 'bet': items[key].bet,\n 'isLive': items[key].isLive,\n 'isSelected': items[key].isSelected,\n 'currency': items[key].currency,\n\n 'isActive': items[key].coefIsActive,\n 'isOver': items[key].coefIsOver,\n 'eventIsActive': items[key].eventIsActive,\n 'eventIsOver': items[key].eventIsOver\n });\n }\n\n return data;\n };\n\n var autoSwitchType = function (isAdd) {\n var count = Object.values(items).filter(function (item) {\n return !item.eventIsOver && !item.coefIsOver;\n }).length;\n\n switch (getType().toLowerCase()) {\n case typesMap.single:\n if (count === 2 && isAdd)\n setType('Express');\n break;\n case typesMap.express:\n if (count <= 1 && !isAdd)\n setType('Single');\n break;\n case typesMap.system:\n if (count == 2 && !isAdd)\n setType('Express');\n else if (count <= 1 && !isAdd)\n setType('Single');\n break;\n default:\n break;\n }\n };\n\n var addItem = function (data) {\n if (isBettingCartDOMReady) {\n if (data.hasOwnProperty('oId') === false) {\n return false;\n }\n \n if (getItem(data.oId) !== null) {\n //TODO: Check coef actuality.\n return true;\n }\n\n if (quantity() >= MAX_CART_SIZE) {\n return false;\n }\n\n items[data.oId] = new app.StandardCartItem(data);\n\n if (BettingCart.getIsLoading() === false) {\n if (window.globalAppSettings.defaultBet === true && window.globalAppSettings.defaultBetSum > 0) {\n items[data.oId].bet = window.globalAppSettings.defaultBetSum;\n\n if (!dom.betSumInput.val()) {\n var defaultBetSum = currency === BettingCart.currencyMap.CURRENCY ? window.globalAppSettings.defaultBetSum : window.globalAppSettings.defaultBetSum * window.globalAppSettings.bonusExchangeRate;\n dom.betSumInput.val(app.numberToString(defaultBetSum));\n betSum = defaultBetSum;\n }\n }\n\n if (data.hasOwnProperty('loadActualCoefValue')) {\n if (data.loadActualCoefValue) {\n items[data.oId].loadActualCoefValue();\n }\n }\n }\n\n items[data.oId].draw();\n items[data.oId].checkActive();\n\n\n updateCount();\n autoSwitchType(true);\n BettingCart.calc();\n if (BettingCart.validate()) {\n StandardCart.serverValidate();\n }\n\n $(document).trigger('notificationCoefIsAddedToCart', {\n outcomeId: parseInt(data.oId)\n });\n\n document.dispatchEvent(new CustomEvent('notificationCoefIsAddedToCartVue', {\n detail: parseInt(data.oId)\n }));\n\n return true;\n };\n\n return new Promise((resolve) => {\n document.addEventListener('cartIsReadyToAddOutcomes', () => {\n return resolve(data)\n })\n }).then((data) => addItem(data));\n\n };\n\n var removeItemAfterSend = function (originalId) {\n if (items.hasOwnProperty(originalId)) {\n items[originalId].erase();\n items[originalId] = null;\n delete items[originalId];\n\n BettingCart.Highlighting.deactivate.allScopes(originalId);\n\n updateCount();\n autoSwitchType(false);\n\n if (quantity() < 1) {\n betSum = 0;\n dom.betSumInput.val('');\n }\n\n $(document).trigger('notificationCoefIsRemovedFromCart', {\n outcomeId: parseInt(originalId)\n });\n\n document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n detail: parseInt(originalId)\n }));\n\n BettingCart.calc();\n }\n };\n\n var removeItemWithoutValidation = function (originalId) {\n if (items.hasOwnProperty(originalId)) {\n items[originalId].erase();\n items[originalId] = null;\n delete items[originalId];\n\n BettingCart.Highlighting.deactivate.allScopes(originalId);\n\n updateCount();\n autoSwitchType(false);\n\n if (quantity() < 1) {\n betSum = 0;\n dom.betSumInput.val('');\n }\n\n $(document).trigger('notificationCoefIsRemovedFromCart', {\n outcomeId: parseInt(originalId)\n });\n\n document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n detail: parseInt(originalId)\n }));\n\n BettingCart.calc();\n }\n };\n\n var removeItem = function (originalId) {\n removeItemWithoutValidation(originalId);\n if (BettingCart.validate()) {\n StandardCart.serverValidate();\n }\n\n $(document).trigger('notificationCoefIsRemovedFromCart', {\n outcomeId: parseInt(originalId)\n });\n\n document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n detail: parseInt(originalId)\n }));\n };\n\n var removeAllItems = function (options) {\n options = options ? options : {};\n options.removeSelected = options.removeSelected === true ? true : false;\n options.coefsToRemove = options.coefsToRemove ? options.coefsToRemove : Object.keys(items).map(function (key) { return parseInt(key); });\n\n for (var oId in items) {\n if (options.removeSelected === true && items[oId].isSelected === false) {\n continue;\n }\n\n if (options.coefsToRemove.indexOf(parseInt(oId)) !== -1) {\n items[oId].erase();\n items[oId] = null;\n delete items[oId];\n\n $(document).trigger('notificationCoefIsRemovedFromCart', {\n outcomeId: parseInt(oId)\n });\n\n document.dispatchEvent(new CustomEvent('notificationCoefIsRemovedFromCartVue', {\n detail: parseInt(oId)\n }));\n\n BettingCart.Highlighting.deactivate.allScopes(oId);\n }\n }\n updateCount();\n\n setDefaultBetSumAndCurrency();\n\n BettingCart.calc();\n BettingCart.validate();\n };\n\n var removeAllItemsAfterSend = function (coefsToRemove) {\n removeAllItems({\n coefsToRemove: coefsToRemove,\n removeSelected: true\n });\n };\n\n var getItem = function (id) {\n if (items.hasOwnProperty(id))\n return items[id];\n else\n return null;\n };\n\n var getItems = function () {\n return items;\n };\n\n var getLiveCoefs = function () {\n return Object.values(items).filter(function (item) { return !!item.isLive; }).map(function (i) {\n return {\n coefid: i.actualId,\n eventid: i.eventId\n }\n });\n };\n\n var getCoefs = function () {\n return Object.values(items).map(function (i) {\n return {\n coefid: i.actualId,\n eventid: i.eventId\n }\n });\n };\n\n var getSelectedItemForFreebet = function () {\n var freebetSelectedItemId = Freebet.getSelectedItemId();\n var selectedForFreebet = Object.values(items).filter(function (item) {\n return parseInt(item.originalId) === freebetSelectedItemId;\n });\n\n if (selectedForFreebet.length > 0) {\n return selectedForFreebet[0];\n }\n\n return null;\n }\n\n var getSingleSelectedItemForFreebetProposal = function () {\n var selectedItems = Object.values(items).filter(function (item) {\n return item.isSelected;\n });\n\n if (selectedItems.length !== 1)\n return undefined;\n\n return selectedItems[0];\n }\n\n var getCurrency = function () {\n return currency;\n }\n\n var setCurrency = function (val) {\n currency = val;\n dom.betSumCurrency.val(val);\n }\n\n var quantity = function (onlySelected) {\n onlySelected = onlySelected || false;\n var quantity = 0;\n\n if (onlySelected === true) {\n for (key in items) {\n if (items[key].isSelected === true) {\n quantity += 1;\n }\n }\n } else {\n quantity = Object.keys(items).length;\n }\n\n return quantity;\n }\n\n var hasItem = function (oid) {\n return items.hasOwnProperty(oid);\n };\n\n var updateCount = function () {\n var cnt = Object.keys(items).length;\n\n dom.itemsCount.html(cnt);\n\n if (cnt > 0) {\n dom.itemsCount.show();\n updateState('HasItems');\n } else {\n dom.itemsCount.hide();\n updateState('Empty');\n }\n };\n\n var setType = function (newType) {\n type = newType;\n\n dom.menuItems.removeClass('active');\n\n dom.container\n .removeClass('single express system')\n .addClass(type.toLowerCase());\n\n dom.menuItems.filter('[data-type=\"' + type + '\"]').addClass('active');\n\n BettingCart.calc();\n if (BettingCart.validate()) {\n StandardCart.serverValidate();\n }\n\n $(document).trigger('notificationCartTypeIsChanged', {\n newType: newType\n });\n };\n\n var getType = function () {\n return type;\n };\n\n var isTypeSingle = function () {\n return type.toLowerCase() === typesMap.single;\n }\n\n var updateState = function (state) {\n state = state.toLowerCase() || '';\n\n hideSuccessMessage();\n\n dom.container\n .removeClass('hasitems')\n .removeClass('empty')\n .addClass(state);\n\n if (state === 'empty')\n dom.removeAllItemsBtn.hide();\n else\n dom.removeAllItemsBtn.show();\n };\n\n //центровка сообщения на экране при большом кол-ве ставок\n function heightCorrection() {\n if ($('.cart__body').height() > $('#layout-right-column').height()) {\n $('#success-center-message').addClass('m-sticky');\n } else if (globalAppSettings.isMobileDevice) {\n $('#success-center-message').addClass('m-sticky');\n } else {\n $('#success-center-message').removeClass('m-sticky');\n };\n };\n\n var showSuccessMessage = function (needConfirmation) {\n dom.container.addClass('success');\n heightCorrection();\n if (needConfirmation)\n dom.container.addClass('m-need-confirmation');\n };\n\n var hideSuccessMessage = function () {\n dom.container.removeClass('success');\n dom.container.removeClass('m-need-confirmation');\n };\n\n var setCoefMode = function (newActiveCoefMode) {\n activeCoefMode = newActiveCoefMode;\n\n dom.coefModeMenuItemCommon.filter('[value=\"' + activeCoefMode + '\"]').prop('checked', true);\n\n BettingCart.save();\n };\n\n var setBetDeletionMode = function (newVal) {\n if (betDeletionModeMap[newVal]) {\n dom.betDeletionMode.filter('[value=\"' + betDeletionModeMap[newVal] + '\"]').prop('checked', true);\n } else {\n dom.betDeletionMode.filter('[value=\"' + betDeletionModeMap.DeleteOutcomes + '\"]').prop('checked', true);\n }\n };\n\n var setBetSum = function (newBetSum) {\n betSum = (newBetSum) ? parseInt(newBetSum) : 0;\n\n BettingCart.calc();\n BettingCart.validate();\n };\n\n var setDefaultBetSumAndCurrency = function () {\n setCurrency(BettingCart.currencyMap.CURRENCY)\n dom.betSumCurrency.niceSelect('update');\n\n dom.betSumInput.val(app.numberToString(window.globalAppSettings.defaultBetSum));\n betSum = window.globalAppSettings.defaultBetSum;\n }\n\n var getNotWinEventsCount = function () {\n return dom.notWinEventsCount.val() || 1;\n };\n\n var getBetSum = function () {\n return betSum;\n };\n\n var getActiveCoefMode = function () {\n return activeCoefMode;\n };\n\n var getBetDeletionMode = function () {\n return betDeletionMode;\n };\n\n var updateCalcResults = function (results) {\n switch (type.toLowerCase()) {\n case 'single':\n if (results.hasOwnProperty('PossibleMoneyValue'))\n dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n if (results.hasOwnProperty('betSum'))\n dom.calcBetSumSingle.html(app.numberToString(results.betSum));\n\n if (results.hasOwnProperty('betSumBonus') && results.betSumBonus != 0) {\n dom.calcBetSumSingleBonus.html(app.numberToString(results.betSumBonus));\n dom.bonusBetSumContainer.removeClass('m-hidden');\n } else {\n dom.bonusBetSumContainer.addClass('m-hidden');\n }\n\n break;\n case 'express':\n if (results.hasOwnProperty('PossibleMoneyValue'))\n dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n if (results.hasOwnProperty('coef'))\n dom.commonCoef.html(window.Utils.displayCoefValue(results.coef));\n\n if (results.hasOwnProperty('bonusExpressAmountValue')) {\n bonusExpressAmountValue = results.bonusExpressAmountValue;\n dom.bonusExpressAmountValue.html(results.bonusExpressAmountValue);\n }\n\n break;\n case 'system':\n if (results.hasOwnProperty('PossibleMoneyValue'))\n dom.possibleMoneyValue.html(app.numberToString(results.PossibleMoneyValue));\n\n if (results.hasOwnProperty('OptionCount')) {\n dom.optionCount.html(results.OptionCount);\n if ($.fn.niceSelect) {\n dom.notWinEventsCount.niceSelect('update');\n }\n }\n\n //if (isBonus === true)\n //dom.bonusSumValue.html(app.numberToString(betSum * 1000));\n\n break;\n default:\n break;\n }\n };\n\n var validate = function () {\n var result = true,\n type = getType(),\n // добавлено в корзину и отмечено галочкой (активные кэфы)\n selectedItemsCnt = 0,\n selectedItems = items,\n errors = [];\n\n if (Freebet.isSelected() && isTypeSingle()) {\n selectedItems = {};\n var selectedItemForFreebet = getSelectedItemForFreebet();\n\n if (selectedItemForFreebet) {\n selectedItems[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n selectedItemsCnt = 1;\n }\n } else {\n for (key in selectedItems) {\n if (selectedItems[key].isSelected) {\n ++selectedItemsCnt;\n }\n }\n }\n\n const errorsMsgs = {\n subModeConflictMessage: Localization.getString('BettingCart.SubModeError', 'Коэффициент был изменен. Для заключения пари примите изменения.'),\n combinatonErrorMessage: Localization.getString('BettingCart.CombinationError', 'Вы не можете комбинировать результаты одного события.'),\n tempCoefBlockErrorMessage: Localization.getString('BettingCart.TempBlockError', 'Прием пари на событие временно приостановлен.'),\n systemLiveErrorMessage: Localization.getString('BettingCart.SystemLiveError', 'Все экспрессы(система) не может содержать Live-события.'),\n countErrorMessage0: Localization.getString('BettingCart.CountError0', 'Не выбран ни один результат.'),\n countErrorMessage3: Localization.getString('BettingCart.CountError3', 'Количество событий для пари типа Все экспрессы (система) не может быть меньше трех.'),\n countErrorMessage16: Localization.getString('BettingCart.CountError16', 'Количество событий в системе не может быть больше 16-ти.'),\n countErrorMessage2: Localization.getString('BettingCart.CountError2', 'Количество событий в экспрессе не может быть меньше двух.'),\n badBetSumMessage: Localization.getString('BettingCart.BetSumError', 'Пожалуйста, укажите сумму ставки.'),\n };\n\n if (selectedItemsCnt === 0) {\n errors = [errorsMsgs.countErrorMessage0];\n } else {\n itemsErrorsCnt = validateItems(selectedItems, type, errorsMsgs);\n\n switch (type) {\n case 'Express':\n errors = validateExpress(selectedItemsCnt, errorsMsgs);\n break;\n case 'System':\n errors = validateSystem(selectedItemsCnt, errorsMsgs);\n break\n default:\n break;\n }\n }\n\n if (errors.length > 0 || itemsErrorsCnt > 0) {\n showErrors(errors);\n result = false;\n } else {\n hideErrors();\n }\n\n bonusExpress.checkIfIsAvailable();\n\n setSendButtonState(result);\n\n return result;\n };\n\n var validateItems = function (items, type, errorsMsgs) {\n var errorsCnt = 0,\n errorsFixNotLessCnt = 0,\n item,\n itemErrorsCnt,\n selectedItems = {};\n\n for (key in items) {\n if (items[key].isSelected === true) {\n selectedItems[key] = items[key];\n } else {\n items[key].errors = [];\n items[key].hideErrors();\n }\n }\n\n var duplicateEventIds = Object.keys(selectedItems).map(function (key) {\n return selectedItems[key].eventId;\n }).filter(getDuplicates).filter(getUnique);\n\n for (key in selectedItems) {\n item = selectedItems[key];\n item.errors = [];\n itemErrorsCnt = 0;\n\n if (item.isSelected === true) {\n\n switch (activeCoefMode) {\n case 'Fix':\n if (parseFloat(item.originalCoefValue) !== parseFloat(item.coefValue)) {\n items[key].errors.push(errorsMsgs.subModeConflictMessage);\n ++errorsCnt;\n ++itemErrorsCnt;\n ++errorsFixNotLessCnt;\n\n acceptButtonState(true);\n }\n break;\n case 'NotLess':\n if (parseFloat(item.originalCoefValue) > parseFloat(item.coefValue)) {\n items[key].errors.push(errorsMsgs.subModeConflictMessage);\n ++errorsCnt;\n ++errorsFixNotLessCnt;\n ++itemErrorsCnt;\n\n acceptButtonState(true);\n }\n break;\n case 'Any':\n default:\n break;\n }\n\n if (type === 'Express' || type === 'System') {\n if (duplicateEventIds.indexOf(item.eventId) !== -1) {\n item.errors.push(errorsMsgs.combinatonErrorMessage);\n ++errorsCnt;\n ++itemErrorsCnt;\n }\n } else if (type === 'Single') {\n if (item.bet === '' || item.bet <= 0) {\n item.errors.push(errorsMsgs.badBetSumMessage);\n ++errorsCnt;\n ++itemErrorsCnt;\n }\n\n //if (item.bet < minMoneyValue) {\n // item.errors.push(\"Минимальная сумма пари - \" + minMoneyValue + \" руб.\");\n // ++errorsCnt;\n // ++itemErrorsCnt;\n //}\n }\n\n if (type === 'System') {\n if (item.isLive) {\n item.errors.push(errorsMsgs.systemLiveErrorMessage);\n ++errorsCnt;\n ++itemErrorsCnt;\n }\n }\n\n if (itemErrorsCnt > 0) {\n item.showErrors();\n } else {\n item.hideErrors();\n }\n } else {\n item.hideErrors();\n }\n }\n\n if (errorsFixNotLessCnt === 0) {\n acceptButtonState(false);\n }\n\n return errorsCnt;\n };\n\n var validateExpress = function (itemsCnt, errorsMsgs) {\n var errors = [];\n\n if (itemsCnt < 2) {\n errors.push(errorsMsgs.countErrorMessage2);\n }\n\n if (Freebet.isSelected() && Freebet.isActive())\n return errors;\n\n if (betSum === '' || betSum <= 0) {\n errors.push(errorsMsgs.badBetSumMessage);\n dom.betSumInputWrapper.addClass('m-error');\n } else {\n dom.betSumInputWrapper.removeClass('m-error');\n }\n //if (betSum < minMoneyValue) {\n // errors.push(\"Минимальная сумма пари - \" + minMoneyValue + \" руб.\");\n //}\n\n return errors;\n };\n\n var validateSystem = function (itemsCnt, errorsMsgs) {\n var errors = [];\n\n if (itemsCnt < 3) {\n errors.push(errorsMsgs.countErrorMessage3);\n $('[js-node=\"cart__not-win-events-count-wrapper\"]').addClass('m-empty');\n } else if (itemsCnt > 16) {\n errors.push(errorsMsgs.countErrorMessage16);\n } else {\n $('[js-node=\"cart__not-win-events-count-wrapper\"]').removeClass('m-empty');\n }\n\n if (Freebet.isSelected() && Freebet.isActive())\n return errors;\n\n if (betSum === '' || betSum <= 0) {\n errors.push(errorsMsgs.badBetSumMessage);\n dom.betSumInputWrapper.addClass('m-error');\n } else {\n dom.betSumInputWrapper.removeClass('m-error');\n }\n\n\n var minMoneyValue = optsCount * 5 > window.globalAppSettings.minBetAmount ? optsCount * 5 : window.globalAppSettings.minBetAmount;\n if (errors.length < 1) {\n var optsCount = Number($(dom.optionCount).text());\n if (!isNaN(optsCount)) {\n switch (currency) {\n case BettingCart.currencyMap.BONUS: {\n minMoneyValue = minMoneyValue * globalAppSettings.bonusExchangeRate;\n if (betSum < minMoneyValue) {\n errors.push(window.Localization.getString('BettingCart.MinAmount', 'Минимальная сумма ставки составляет ') + app.numberToString(minMoneyValue) + Utils.svgHtml('bonus', 'currency-bonus currency-bonus--tooltip'));\n }\n break;\n }\n case BettingCart.currencyMap.CURRENCY: {\n minMoneyValue = minMoneyValue;\n if (betSum < minMoneyValue) {\n //TODO быстрофикс\n var currencyText = window.globalAppSettings.currentUser.defaultBalance.currencyCode == 'RUB'\n ? 'руб.'\n : window.globalAppSettings.currentUser.defaultBalance.currencyCode;\n errors.push(window.Localization.getString('BettingCart.MinAmount', 'Минимальная сумма ставки составляет ') + app.numberToString(minMoneyValue) + ' ' + currencyText);\n }\n break;\n }\n default: {\n errors.push(window.Localization.getString('BettingCart.CurrencyError', 'Не выбрана валюта ставки.'));\n break;\n }\n }\n }\n }\n return errors;\n };\n\n var setSendButtonState = function (newState) {\n if (newState === true) {\n dom.sendBtn.removeClass('disabled');\n } else if (!dom.sendBtn.hasClass('m-blocked')) {\n\n dom.sendBtn.addClass('disabled');\n }\n };\n\n var showErrors = function (errors) {\n if (typeof (errors) == 'string') errors = [errors];\n var text = '',\n errorsLength = errors.length;\n\n hideErrors();\n\n if (errorsLength > 0) {\n for (var i = 0; i < errorsLength; i++) {\n text += errors[i];\n\n if (i != errorsLength - 1)\n text += '
';\n }\n\n dom.errorsIcon\n .attr('bb-tool', text)\n .show();\n }\n };\n\n var hideErrors = function () {\n dom.errorsIcon\n .attr('bb-tool', '')\n .hide();\n };\n\n var acceptButtonState = function (newState) {\n if (newState === true) {\n dom.acceptBtn.removeClass('disabled');\n } else {\n dom.acceptBtn.addClass('disabled');\n }\n };\n\n var updateBonusTooltip = function () {\n if (currency === BettingCart.currencyMap.BONUS && betSum > 0) {\n dom.betSumInput.attr('bb-tool', (betSum / 1000) + ' ' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol);\n } else {\n dom.betSumInput.removeAttr('bb-tool');\n }\n };\n\n // accept btn click handler\n var syncCoefs = function () {\n for (key in items) {\n items[key].originalCoefValue = items[key].coefValue;\n }\n\n acceptButtonState(false);\n\n BettingCart.save();\n BettingCart.validate();\n };\n\n var MIN_EXPRESS_COMMON_COEF = 1.6;\n var bonusExpress = {\n validate: function () {\n var sumDiff = window.globalAppSettings.currentUser.bonuses - bonusExpressAmountValue;\n var expressCommonCoef = StandardCartCalc.getExpressCommonCoef();\n if (quantity(true) > 2 && type.toLowerCase() === typesMap.express && currency !== BettingCart.currencyMap.BONUS && sumDiff >= 0 && expressCommonCoef >= MIN_EXPRESS_COMMON_COEF) {\n dom.bonusExpressAmountTooltip.removeAttr('bb-tool');\n return true;\n } else {\n if (sumDiff < 0) {\n dom.bonusExpressAmountTooltip.attr('bb-tool', Localization.getString('BettingCart.BEActivationMessage1', 'Для активации бонусного экспресса Вам надо накопить еще ') + app.numberToString(Math.abs(sumDiff)) + Localization.getString('BettingCart.BEActivationMessage2', ' баллов'));\n } else {\n dom.bonusExpressAmountTooltip.removeAttr('bb-tool');\n }\n }\n\n return false;\n },\n checkIfIsAvailable: function () {\n if (this.validate()) {\n dom.bonusExpressContainer.removeClass('m-disabled');\n return true;\n } else {\n dom.bonusExpressContainer.addClass('m-disabled');\n this.disable();\n return false;\n }\n },\n isEnabled: false,\n enable: function () {\n if (this.validate()) {\n this.isEnabled = true;\n dom.bonusExpressAmountContainer.show();\n dom.bonusExpressInput.prop('checked', true);\n BettingCart.calc();\n }\n },\n disable: function () {\n this.isEnabled = false;\n dom.bonusExpressInput.prop('checked', false);\n dom.bonusExpressAmountContainer.hide();\n BettingCart.calc();\n }\n };\n\n var bindUI = function () {\n $(document).on('coefInBettingCartIsOverChanged', function (e, data) {\n autoSwitchType(!data.isOver);\n });\n\n dom.acceptBtn.on('click', function () {\n syncCoefs();\n });\n\n dom.sendBtn.on('click', function () {\n if (!globalAppSettings.currentUser.bettingCart['common-send-button'].IsEnabled)\n return;\n\n var captchaDiv = $('#recaptcha');\n\n if (captchaDiv.attr('data-captcharequired') === 'True') {\n\n if (captchaDiv.is(':empty')) {\n grecaptcha.render($('#recaptcha')[0], {\n 'callback': function () { BettingCart.sendWithFreebetProposal(); },\n });\n }\n\n grecaptcha.execute();\n\n var res = grecaptcha.getResponse();\n\n if (res.length != 0) {\n BettingCart.sendWithFreebetProposal();\n }\n\n }\n else {\n BettingCart.sendWithFreebetProposal();\n }\n });\n\n dom.menuItems.on('click', function () {\n var type = $(this).data('type');\n setType(type);\n });\n\n dom.removeAllItemsBtn.on('click', function () {\n setType('Single');\n removeAllItems();\n });\n\n dom.coefModeMenuItemCommon.on('click', function () {\n var newVal = $(this).val();\n\n if (newVal !== activeCoefMode) {\n setCoefMode(newVal);\n Ajax.postJson(\"/account/profile/edit/bets/changeacceptancemode/submit\", {\n data: {\n betAcceptanceMode: newVal,\n isRedirect: false\n }\n });\n }\n });\n\n dom.maxBetSumMoneyValueBtn.on('click', function () {\n if (!globalAppSettings.currentUser.bettingCart['max-bet-amount-button'].IsEnabled) return\n\n loadBetSumMaxMoneyValue();\n });\n\n dom.betSumCurrency.on('change', function () {\n var val = $(this).val();\n\n document.dispatchEvent(new CustomEvent('mtmCustomEvent', {\n detail: {\n id: 'd-i06-e13',\n value: val,\n },\n })\n );\n\n if (currency.toLowerCase() !== val.toLowerCase()) {\n setCurrency(val);\n\n // TODO сделать единый конвертер валют\n if (currency === 'Bonuses') {\n setBetSum(betSum * window.globalAppSettings.bonusExchangeRate);\n dom.betSumInput.val(app.numberToString(betSum));\n } else {\n var newVal = betSum / window.globalAppSettings.bonusExchangeRate;\n setBetSum(newVal < 1 ? 1 : newVal);\n dom.betSumInput.val(app.numberToString(betSum));\n }\n\n BettingCart.calc();\n BettingCart.validate();\n }\n });\n\n dom.betSumInput.on('input change', function (e) {\n var filteredVal = $(this).val().replace(/\\D/g, '');\n $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n setBetSum(filteredVal);\n });\n\n dom.notWinEventsCount.on('change', function () {\n BettingCart.calc();\n BettingCart.validate();\n $(document).trigger('notification_notWinEventCountChanged');\n });\n\n dom.successBtn.on('click', function () {\n hideSuccessMessage();\n });\n\n dom.betDeletionMode.on('change', function () {\n var newVal = betDeletionModeMap[$(this).val()] || betDeletionModeMap.DeleteOutcomes;\n\n if (newVal !== getBetDeletionMode) {\n setBetDeletionMode(newVal);\n Ajax.postJson(\"/account/profile/edit/savebetdeletionmode\", {\n data: {\n selectedMode: newVal,\n isRedirect: false\n }\n });\n }\n });\n\n // если выбраны не рубли - не выводим комбобокс\n dom.betSumInput.on('click', function (e) {\n if (betSumCombobox) {\n if (currency !== 'RUB') {\n betSumCombobox.preventOpening(true);\n } else {\n betSumCombobox.preventOpening(false);\n }\n }\n });\n\n dom.betSumInput.on('mouseenter', function () {\n var elem = $(this);\n\n if (currency !== 'RUB') {\n updateBonusTooltip();\n } else if (elem.attr('bb-tool')) {\n elem.removeAttr('bb-tool');\n }\n });\n\n dom.bonusExpressInput.on('change', function () {\n var isEnabled = $(this).prop('checked');\n\n if (isEnabled) {\n bonusExpress.enable();\n } else {\n bonusExpress.disable();\n }\n });\n\n $(document).on('change', '[name=\"cart-item-freebet-radio\"]', function () {\n var checkedId = parseInt($(this).val());\n\n for (var i in items) {\n if (parseInt(items[i].originalId) !== checkedId) {\n items[i].isSelectedForFreebet = false;\n } else {\n items[i].isSelectedForFreebet = true;\n }\n }\n\n BettingCart.calc();\n BettingCart.validate();\n Freebet.validate();\n });\n };\n\n function setBetSumMaxMoneyValueButtonIsDisabled(isDisabled, message) {\n if (isDisabled === true) {\n dom.maxBetSumMoneyValueBtn.addClass('m-disabled');\n dom.maxBetSumMoneyValueBtn.addClass('m-disabled').attr('bb-tool', message);\n } else {\n dom.maxBetSumMoneyValueBtn.removeClass('m-disabled');\n dom.maxBetSumMoneyValueBtn.removeAttr('bb-tool');\n }\n }\n\n function loadBetSumMaxMoneyValue() {\n if (quantity() > 0) {\n var coefs = [];\n\n for (key in items) {\n coefs.push({\n coefid: key,\n eventid: items[key].eventId\n });\n }\n\n Ajax.postJson(\"/BettingCart/GetTotalMaxMoneyValue\", {\n data: {\n coefs: coefs,\n currency: StandardCart.getCurrency()\n },\n success: function (resp) {\n betSum = resp;\n dom.betSumInput.val(app.numberToString(betSum));\n BettingCart.calc();\n BettingCart.validate();\n }\n });\n }\n }\n\n //For Express&System\n function replaceEventNumbersInCartError() {\n function getEventTitle(id) {\n for (key in items) {\n if (items[key].eventId == id)\n return items[key].eventTitle;\n }\n return null;\n }\n\n var errorNode = dom.errorsIcon;\n if (!errorNode.length)\n return false;\n var errorText = errorNode.attr('bb-tool');\n if (errorText.length < 1)\n return false;\n var regExpRes = errorText.match(/№\\d*/g);\n if (regExpRes === null)\n return;\n var ids = Array.from(regExpRes);\n [].forEach.call(ids, function (elem, i) {\n var id = elem.replace('№', ''),\n title = getEventTitle(id);\n if (title === null)\n return;\n errorText = errorText.replace(elem, title);\n });\n errorText = errorText.replace(/\\n/g, '

');\n errorNode.attr('bb-tool', errorText);\n }\n\n //For Single\n function removeEventNumbersInCartErrors() {\n for (key in items) {\n var text = items[key].dom.errorsIcon.attr('bb-tool');\n if (text === undefined || text.length < 1)\n return false;\n var regExpRes = text.match(/: .+ событие №\\d*/g);\n if (regExpRes === null)\n regExpRes = text.match(/ №\\d*/g);\n\n if (regExpRes === null)\n return true;\n\n var ids = Array.from(regExpRes);\n [].forEach.call(ids, function (elem, i) {\n text = text.replace(elem, '');\n });\n text = text.replace(/\\n/g, '

');\n items[key].dom.errorsIcon.attr('bb-tool', text);\n }\n }\n\n var hasSelectedLiveItems = function () {\n return Object.values(getItems()).some(function (item) {\n return item.isSelected && item.isLive;\n });\n }\n\n var canProposeFreeBet = function () {\n if (Freebet.isSelected() && Freebet.isActive())\n return false;\n\n if (Freebet.getAvaliableCount() == 0)\n return false;\n\n var onlySelectedQuantity = quantity(true);\n if (onlySelectedQuantity === 0)\n return false;\n\n if (isTypeSingle() && onlySelectedQuantity > 1)\n return false;\n\n if (hasSelectedLiveItems())\n return false;\n\n return true;\n }\n\n var prepareData = function (data) {\n var items = {};\n\n if (Freebet.isSelected() && isTypeSingle()) {\n var selectedItemForFreebet = getSelectedItemForFreebet();\n if (selectedItemForFreebet) {\n items[selectedItemForFreebet.originalId] = selectedItemForFreebet;\n }\n }\n else {\n items = getItems();\n }\n\n if (data.type === 'System')\n data.bettingCartInfo.NotWinEventCount = getNotWinEventsCount();\n\n data.bettingCartInfo.TotalMoneyValue = getBetSum();\n data.bettingCartInfo.TotalMoneyCurrency = getCurrency();\n\n data.bonusType = bonusExpress.isEnabled ? 'bonusExpress' : 'normal';\n\n for (key in items) {\n if (items[key].isSelected) {\n data.bettingCartPositions.push({\n 'Coef': {\n coefid: items[key].actualId,\n eventid: items[key].eventId\n },\n 'OriginalValue': items[key].originalCoefValue,\n 'MoneyValue': items[key].bet,\n 'SubMode': items[key].mode,\n 'Currency': items[key].currency,\n 'IsLive': !!items[key].isLive\n });\n }\n }\n\n return data;\n };\n\n function hashCode(obj) {\n var hc = 0;\n var chars = JSON.stringify(obj).replace(/\\{|\\\"|\\}|\\:|,/g, '');\n var len = chars.length;\n for (var i = 0; i < len; i++) {\n // Bump 7 to larger prime number to increase uniqueness\n hc += (chars.charCodeAt(i) * 7);\n }\n return hc;\n }\n\n var lastCheckedHashCode = 0;\n var validateTimerHandle;\n var sendValidate = function (data) {\n if (BettingCart.isSending == true)\n return;\n\n if (Object.keys(BettingCart.getItems()).length == 0)\n return;\n\n Ajax.postJson(\"/BettingCart/ValidateBettingCart\", {\n data: {\n cartData: data\n },\n success: function (resp) {\n if (resp.IsSuccess) {\n setSendButtonState(true);\n return;\n }\n\n setSendButtonState(false);\n if (resp.CommonErrorMessage) {\n showErrors([resp.CommonErrorMessage]);\n StandardCart.humanizeErors.general();\n }\n }\n });\n }\n\n var serverValidate = function () {\n\n return true;\n\n if (Freebet.isActive() && Freebet.isSelected()) {\n return true;\n }\n\n if (BettingCart.isSendAllowed === false || window.globalAppSettings.currentUser.isAnonymous === true) {\n return false;\n }\n\n var data = {\n type: getType(),\n bettingCartInfo: {\n TotalMoneyValue: 0,\n TotalMoneyCurrency: window.globalAppSettings.currentUser.defaultBalance.currencyCode,\n NotWinEventCount: 0,\n },\n bettingCartPositions: [],\n };\n\n data = prepareData(data);\n if (data.bettingCartPositions.length == 0) return false;\n\n var hashcode = hashCode(data);\n if (lastCheckedHashCode === hashcode) return true;\n lastCheckedHashCode = hashcode;\n\n if (validateTimerHandle) {\n clearTimeout(validateTimerHandle);\n }\n validateTimerHandle = setTimeout(function () { sendValidate(data); }, 500);\n return true;\n }\n\n return {\n addItem: addItem,\n bonusExpress: bonusExpress,\n getBetSum: getBetSum,\n setBetSum: setBetSum,\n getNotWinEventsCount: getNotWinEventsCount,\n getBetDeletionMode: getBetDeletionMode,\n getActiveCoefMode: getActiveCoefMode,\n getData: getData,\n getCurrency: getCurrency,\n getItem: getItem,\n hasItem: hasItem,\n hideSuccessMessage: hideSuccessMessage,\n getItems: getItems,\n getCoefs: getCoefs,\n getSelectedItemForFreebet: getSelectedItemForFreebet,\n getSingleSelectedItemForFreebetProposal: getSingleSelectedItemForFreebetProposal,\n getType: getType,\n setType: setType,\n isTypeSingle: isTypeSingle,\n load: load,\n removeItem: removeItem,\n removeItemWithoutValidation: removeItemWithoutValidation,\n removeItemAfterSend: removeItemAfterSend,\n removeAllItems: removeAllItems,\n removeAllItemsAfterSend: removeAllItemsAfterSend,\n showErrors: showErrors,\n showSuccessMessage: showSuccessMessage,\n updateCalcResults: updateCalcResults,\n updateState: updateState,\n validate: validate,\n serverValidate: serverValidate,\n quantity: quantity,\n hasSelectedLiveItems: hasSelectedLiveItems,\n canProposeFreeBet: canProposeFreeBet,\n humanizeErors: {\n general: replaceEventNumbersInCartError,\n items: removeEventNumbersInCartErrors\n },\n addTestItem: function () {\n this.addItem({\n oId: Math.floor(Math.random() * 10000) + 1,\n aId: Math.floor(Math.random() * 10000) + 1,\n eId: Math.floor(Math.random() * 10000) + 1,\n eTitle: Localization.getString('BettingCart.TestEvent', 'Тестовое событие'),\n rTitle: Localization.getString('BettingCart.TestResult', 'Тестовый исход'),\n val: '2.05',\n originalCoefValue: '2.05',\n isLive: false,\n });\n },\n prepareData: prepareData\n }\n}());","window.StandardCartCalc = (function () {\n var expressCommonCoef = 0;\n\n var calc = function (type, betSum, items, currency, isBonusExpress) {\n var result = {\n betSum: 0,\n coef: 0,\n PossibleMoneyValue: 0,\n bonusExpressAmountValue: 0\n };\n var selectedItemsCnt = 0;\n\n for (key in items) {\n if (items[key].isSelected)\n ++selectedItemsCnt;\n }\n\n if (selectedItemsCnt === 0)\n return result;\n\n switch (type.toLowerCase()) {\n case 'single':\n result = calcSingle(items);\n break;\n case 'express':\n result = calcExpress(betSum, items, currency, isBonusExpress);\n break;\n case 'system':\n result = calcSystem(betSum, items, currency);\n break;\n default:\n break;\n }\n\n if (!result.hasOwnProperty('betSum')) {\n result.betSum = betSum;\n }\n\n var betCurrencySum = currency === 'Bonuses' ? result.betSum / globalAppSettings.bonusExchangeRate : result.betSum;\n\n if (result.PossibleMoneyValue - betCurrencySum > globalAppSettings.maxWinSum) {\n result.PossibleMoneyValue = globalAppSettings.maxWinSum + betCurrencySum;\n }\n\n return result;\n };\n\n var calcSingle = function (items) {\n var PossibleMoneyValue = 0,\n betSum = 0,\n betSumBonus = 0,\n itemBetSum;\n\n for (key in items) {\n if (items[key].isSelected === true) {\n itemBetSum = parseInt(items[key].bet || 0);\n\n if (items[key].currency === BettingCart.currencyMap.BONUS) {\n betSumBonus += itemBetSum;\n itemBetSum = itemBetSum / globalAppSettings.bonusExchangeRate;\n }\n\n PossibleMoneyValue += itemBetSum * items[key].coefValue;\n betSum = itemBetSum + betSum;\n }\n }\n\n return {\n betSum: roundCalcResult(betSum),\n betSumBonus: betSumBonus,\n PossibleMoneyValue: roundCalcResult(PossibleMoneyValue),\n };\n };\n\n var calcExpress = function (betSum, items, currency, isBonusExpress) {\n var totalCoef = 1;\n\n isBonusExpress = isBonusExpress === true ? true : false;\n\n for (key in items) {\n if (items[key].isSelected === true) {\n totalCoef *= items[key].coefValue;\n }\n }\n\n if (currency === 'Bonuses') {\n betSum = betSum / globalAppSettings.bonusExchangeRate;\n } else if (isBonusExpress) {\n totalCoef = totalCoef * 1.05;\n }\n expressCommonCoef = roundCalcResult(totalCoef, 2, 'bank');\n\n return {\n coef: expressCommonCoef,\n PossibleMoneyValue: roundCalcResult(betSum * expressCommonCoef, 2),\n bonusExpressAmountValue: betSum * 18\n };\n };\n\n var calcSystem = function (betSum, items, currency) {\n var coefVals = [];\n var selectContainer = $('[js-node=\"standard-cart__not-win-events-count\"]');\n var notWinEventCount = selectContainer.find('option:selected').length > 0 ? Number(selectContainer.find('option:selected').val()) : 1;\n selectContainer.html('');\n\n if (Object.keys(items).length > 16) {\n return {\n 'RangeList': [],\n 'NotWinEventCount': 0,\n 'OptionCount': 0,\n 'TotalMoneyVal': 0,\n 'PossibleMoneyValue': 0\n }\n }\n\n for (key in items) {\n if (items[key].isSelected === true) {\n coefVals.push(items[key].coefValue);\n }\n }\n\n if (currency === 'Bonuses')\n betSum = betSum / globalAppSettings.bonusExchangeRate;\n\n var result = calcSystemObj.init(coefVals, betSum, notWinEventCount);\n\n for (var i = 0; i < result.RangeList.length; i++) {\n selectContainer.append($(\"\")\n .attr(\"value\", result.RangeList[i])\n .text(result.RangeList[i]));\n }\n\n result.PossibleMoneyValue = roundCalcResult(result.PossibleMoneyValue, 2);\n\n selectContainer.val(notWinEventCount);\n\n return result;\n };\n\n var roundCalcResult = function (value, precision = 2, type = 'math') {\n const powd = Math.pow(10, precision);\n if (type === 'bank') {\n const x = value * powd;\n const r = Math.round(x);\n const br = Math.abs(x) % 1 === 0.5 ? (r % 2 === 0 ? r : r - 1) : r;\n return br / powd;\n }\n return Math.round(value * powd) / powd;\n };\n\n return {\n calc: calc,\n getExpressCommonCoef: function () { return expressCommonCoef; }\n };\n}());\n\nwindow.calcSystemObj = (function () {\n function fact(n) {\n return n ? n * fact(n - 1) : 1;\n }\n\n function comb(n, lst) {\n if (!n) return [[]];\n if (!lst.length) return [];\n\n var x = lst[0],\n xs = lst.slice(1);\n\n return comb(n - 1, xs).map(function (t) {\n return [x].concat(t);\n }).concat(comb(n, xs));\n }\n\n function range(m, n) {\n return Array.apply(null, Array(n - m + 1)).map(function (x, i) {\n return m + i;\n });\n }\n\n function roundCalcResult(value, precision = 2, type = 'math') {\n const powd = Math.pow(10, precision);\n if (type === 'bank') {\n const x = value * powd;\n const r = Math.round(x);\n const br = Math.abs(x) % 1 === 0.5 ? (r % 2 === 0 ? r : r - 1) : r;\n return br / powd;\n }\n return Math.round(value * powd) / powd;\n }\n\n var init = function (coefVals, bet, notWinEventCount) {\n var count = coefVals.length;\n\n //RangeList (то, что должно быть в выпадающем списке)\n var rangeList = [];\n for (var i = 1; i < count - 1; i++) {\n rangeList.push(i);\n }\n // storage[] - это доступ к полям корзины, которые сохранены в памяти на момент изменения и перерасчета корзины.\n //Получение сохраненного notWinEventCount и проверка на то, что он принадлежит обновленному RangeList\n //notWinEventCount = storage[notWinEventCount]\n //if (rangeList.IndexOf(NotWinEventCount) == -1){\n // notWinEventCount = rangeList.first();\n //}\n\n //а пока просто присвоим единице\n if (!notWinEventCount || notWinEventCount > count) notWinEventCount = 1;\n\n //получаем кол-во вариантов для нашего notWinEventCount\n var optCount = fact(count) / (fact(notWinEventCount) * fact(count - notWinEventCount));\n\n //Get ComoArray[[]]\n var combo = comb(count - notWinEventCount, range(0, count - 1));\n\n var coefsSum = 0;\n\n for (keyH in combo) {\n var miniExpressCoef = 1;\n for (keyL in combo[keyH]) {\n miniExpressCoef *= coefVals[combo[keyH][keyL]];\n }\n coefsSum += miniExpressCoef;\n }\n\n var expSum = roundCalcResult(coefsSum / optCount, 2, 'bank');\n\n var totalWin = roundCalcResult(expSum * bet);\n\n return {\n 'RangeList': rangeList,\n 'NotWinEventCount': notWinEventCount,\n 'OptionCount': optCount,\n 'TotalMoneyVal': bet,\n 'PossibleMoneyValue': totalWin\n }\n }\n\n return {\n 'init': init\n }\n}());","app.StandardCartItem = window.StandardCartItem = (function () {\n\n function StandardCartItem(data) {\n this.originalId = data.oId ? data.oId : null;\n this.actualId = data.aId ? data.aId : null;\n this.eventId = data.eId ? data.eId : null;\n this.eventTitle = data.eTitle ? data.eTitle : null;\n this.resultTitle = data.rTitle ? data.rTitle : null;\n this.coefValue = data.val ? parseFloat(parseFloat(data.val.toString().replace(',', '.')).toFixed(2)) : null;\n this.originalCoefValue = data.originalCoefValue ? parseFloat(data.originalCoefValue.toString().replace(',', '.')) : this.coefValue;\n this.isLive = data.isLive ? data.isLive : false;\n this.currency = data.currency ? data.currency : window.globalAppSettings.currentUser.defaultBalance.currencyCode;\n this.minMoneyValue = data.MinMoneyValue ? data.MinMoneyValue : 0;\n this.maxMoneyValue = data.MaxMoneyValue ? data.MaxMoneyValue : 0;\n this.errors = [];\n this.bet = data.bet ? parseInt(data.bet) : 0;\n this.dom = {};\n this.isSelected = data.isSelected === false ? false : true;\n this.combobox = null;\n this.isSelectedForFreebet = false;\n\n this.coefIsActive = data.isActive || true;\n this.coefIsOver = data.isOver || false;\n this.eventIsActive = data.eventIsActive || true;\n this.eventIsOver = data.eventIsOver || false;\n }\n\n StandardCartItem.prototype.draw = function () {\n var self = this;\n\n this.dom.container = $('[js-node=\"standard-cart__item-example\"]')\n .eq(0)\n .clone()\n .appendTo('[js-node=\"standard-cart__items\"]')\n .removeClass('hidden')\n .removeAttr('js-node');\n\n this.dom.eventTitle = this.dom.container.find('[js-node=\"standard-cart__item-title\"]');\n this.dom.resultTitle = this.dom.container.find('[js-node=\"standard-cart__item-market\"]');\n this.dom.coefValue = this.dom.container.find('[js-node=\"standard-cart__item-coef\"]');\n this.dom.removeBtn = this.dom.container.find('[js-node=\"standard-cart__item-remove\"]');\n this.dom.maxMoneyValueBtn = this.dom.container.find('[js-node=\"standard-cart__item-max-money-value-btn\"]');\n this.dom.input = this.dom.container.find('[js-node=\"standard-cart__item-sum-input\"]');\n this.dom.inputWrapper = this.dom.container.find('[js-node=\"standard-cart__item-sum-wrapper\"]');\n this.dom.liveIcon = this.dom.container.find('[js-node=\"standard-cart__live-icon\"]');\n this.dom.errorsIcon = this.dom.container.find('[js-node=\"standard-cart__item-errors\"]');\n this.dom.selectInput = this.dom.container.find('[name=\"cart-item__select-item-checkbox-input\"]');\n this.dom.currencySelect = this.dom.container.find('[name=\"cart-item__currency-select\"]');\n\n this.dom.container.find('[name=\"cart-item-freebet-radio\"]').attr('value', this.originalId);\n\n if (this.isLive === true) {\n this.dom.liveIcon.removeClass('hidden');\n }\n\n if (this.isSelected === false) {\n this.dom.selectInput.prop('checked', false);\n }\n\n var maxBetAmountButtonSettings = globalAppSettings.currentUser.bettingCart['max-bet-amount-button'];\n if (!!!maxBetAmountButtonSettings.IsEnabled) {\n this.setMaxMoneyValueButtonIsDisabled(true, maxBetAmountButtonSettings.Message);\n }\n\n if ($.fn.niceSelect) {\n self.dom.currencySelect.niceSelect();\n }\n\n this.updateDom();\n this.bindUI();\n this.initCombobox();\n };\n\n StandardCartItem.prototype.erase = function () {\n this.dom.container.remove();\n };\n\n StandardCartItem.prototype.setData = function (data) {\n if (typeof data === 'object') {\n for (var key in data) {\n if (this.hasOwnProperty(key))\n this[key] = data[key];\n }\n }\n\n this.updateDom();\n };\n\n StandardCartItem.prototype.setBet = function (newBet) {\n this.bet = (newBet) ? parseInt(newBet) : 0;\n this.validate();\n\n BettingCart.calc();\n BettingCart.validate();\n };\n\n StandardCartItem.prototype.initCombobox = function () {\n var self = this,\n sums = window.globalAppSettings.additionalSumValues;\n\n if (window.globalAppSettings.additionalSum && sums.length > 0) {\n var cValues = [];\n\n for (var i = 0; i < sums.length; i++) {\n if (sums[i] > 0) {\n cValues.push(sums[i]);\n }\n }\n\n if (cValues.length > 0) {\n self.combobox = new Combobox(cValues, self.dom.input);\n }\n }\n };\n\n StandardCartItem.prototype.updateDom = function () {\n var self = this;\n\n self.dom.input.val(self.bet === 0 ? '' : app.numberToString(self.bet));\n\n self.dom.container\n .attr('data-event-id', self.eventId)\n .attr('data-orig-result-id', self.originalId)\n .attr('data-result-id', self.actualId);\n\n self.dom.eventTitle.html(self.eventTitle);\n self.dom.resultTitle.html(self.resultTitle);\n self.dom.coefValue.html(window.Utils.displayCoefValue(self.coefValue));\n\n self.dom.currencySelect.val(self.currency);\n\n if ($.fn.niceSelect) {\n self.dom.currencySelect.niceSelect('update');\n }\n };\n\n StandardCartItem.prototype.loadMaxMoneyValue = function (callback) {\n var self = this;\n\n Ajax.postJson(\"/BettingCart/GetMaxMoneyValue\", {\n data: {\n coef: {\n coefid: self.originalId,\n eventid: self.eventId\n },\n currency: self.currency\n },\n success: function (resp) {\n if (resp.hasOwnProperty('IsUnauthorized')) {\n if (resp.IsUnauthorized === true) {\n self.errors.push(window.Localization.getString('BettingCart.LoginToMaxAmount','Пожалуйста, авторизуйтесь для запроса максимальной суммы.'));\n self.showErrors();\n\n return;\n }\n }\n\n self.maxMoneyValue = resp;\n if (callback) callback();\n }\n });\n };\n\n StandardCartItem.prototype.setMaxMoneyValueButtonIsDisabled = function (isDisabled, message) {\n if (isDisabled === true) {\n this.dom.maxMoneyValueBtn.addClass('m-disabled');\n this.dom.maxMoneyValueBtn.addClass('m-disabled').attr('bb-tool', message);\n } else {\n this.dom.maxMoneyValueBtn.removeClass('m-disabled');\n this.dom.maxMoneyValueBtn.removeAttr('bb-tool');\n }\n };\n\n StandardCartItem.prototype.updateExternalCoef = function (originalId, actualId, value, isActive) {\n if (TableFetcherLive) {\n TableFetcherLive.updateCoef(originalId, actualId, value, isActive);\n }\n };\n\n StandardCartItem.prototype.loadActualCoefValue = function () {\n var self = this;\n\n Ajax.postJson(\"/BettingCart/GetActualCoefs\", {\n data: {\n coefs: [\n {\n coefid: self.originalId,\n eventid: self.eventId\n }\n ]\n },\n success: function (resp) {\n if (Array.isArray(resp)) {\n for (var i = 0; i < resp.length; i++) {\n let actual = resp[i];\n if (parseInt(actual.oid) === parseInt(self.originalId)) {\n\n self.updateCoef({\n actualId: actual.aid,\n value: actual.val,\n isActive: actual.act,\n isLive: actual.il,\n eventIsActive: actual.ea,\n eventIsOver: actual.eo,\n eventId: actual.ei,\n rTitle: actual.n,\n homeTeam: actual.ht,\n awayTeam: actual.at\n });\n\n self.updateExternalCoef(actual.oid, actual.aid, actual.val, actual.act);\n\n BettingCart.calc();\n BettingCart.validate();\n\n BettingCart.save();\n\n return;\n }\n }\n }\n }\n });\n };\n\n StandardCartItem.prototype.validate = function () {\n var result;\n\n //if (this.bet < 20 )\n if (this.bet === '' || this.bet <= 0) {\n this.dom.inputWrapper.addClass('error');\n result = false;\n } else {\n this.dom.inputWrapper.removeClass('error');\n result = true;\n }\n\n return result;\n };\n\n StandardCartItem.prototype.showErrors = function () {\n var errors = this.errors,\n errorsLength = this.errors.length,\n text = '';\n\n this.dom.errorsIcon.attr('bb-tool', '');\n\n for (var i = 0; i < errorsLength; i++) {\n text += errors[i];\n\n if (i != errorsLength - 1)\n text += '
';\n }\n\n this.dom.errorsIcon\n .attr('bb-tool', text)\n .show();\n };\n\n StandardCartItem.prototype.hideErrors = function () {\n this.dom.errorsIcon\n .attr('bb-tool', '')\n .hide();\n };\n\n StandardCartItem.prototype.setIsSelected = function (value) {\n if (value === true) {\n this.isSelected = true;\n this.dom.selectInput.prop('checked', true);\n } else if (value === false) {\n this.isSelected = false;\n this.dom.selectInput.prop('checked', false);\n }\n\n $(document).trigger('notificationCoefIsSelectedChanged', {\n originalId: this.originalId,\n isSelected: this.isSelected\n });\n };\n\n StandardCartItem.prototype.updateBonusTooltip = function () {\n var self = this;\n\n if (self.currency === BettingCart.currencyMap.BONUS && self.bet > 0) {\n self.dom.input.attr('bb-tool', (self.bet / 1000) + ' ' + window.globalAppSettings.currentUser.defaultBalance.currencySymbol);\n } else {\n self.dom.input.removeAttr('bb-tool');\n }\n };\n\n //-----------Вставка старых функций------------------\n\n StandardCartItem.prototype.updateCoef = function (data) {\n var self = this;\n var coefIsOverChanged = false;\n let hasChanges = false;\n\n if (data.hasOwnProperty('isActive') && self.coefIsActive !== data.isActive) {\n self.coefIsActive = data.isActive;\n hasChanges = true;\n }\n\n //Implement in new cart.addItem\n //if (data.hasOwnProperty('isLive') && self.isLive != data.isLive) {\n // self.isLive = data.isLive;\n // hasChanges = true;\n //}\n\n if (data.hasOwnProperty('isOver') && self.coefIsOver !== data.isOver) {\n self.coefIsOver = data.isOver;\n hasChanges = true;\n coefIsOverChanged = true;\n }\n if (data.hasOwnProperty('eventIsActive') && self.eventIsActive !== data.eventIsActive) {\n self.eventIsActive = data.eventIsActive;\n hasChanges = true;\n }\n if (data.hasOwnProperty('eventIsOver') && self.eventIsOver !== data.eventIsOver) {\n self.eventIsOver = data.eventIsOver;\n hasChanges = true;\n coefIsOverChanged = true;\n }\n if (data.hasOwnProperty('actualId') && self.actualId !== data.actualId) {\n self.actualId = data.actualId;\n hasChanges = true;\n }\n if (data.hasOwnProperty('value') && self.coefValue !== data.value && data.value != 1) {\n var blinkMethod = (self.coefValue > data.value)\n ? function () { self.blinkCoef.decrease.call(self); }\n : function () { self.blinkCoef.increase.call(self); };\n\n self.coefValue = data.value;\n self.dom.coefValue.html(window.Utils.displayCoefValue(self.coefValue));\n blinkMethod();\n if (StandardCart.getActiveCoefMode().toLowerCase() === 'any')\n self.originalCoefValue = data.value;\n hasChanges = true;\n }\n\n if (data.hasOwnProperty('eventId') && self.eventId !== data.eventId) {\n self.eventId = data.eventId;\n hasChanges = true;\n }\n if (data.hasOwnProperty('homeTeam')) {\n self.eventTitle = (data.hasOwnProperty('awayTeam')) ? (data.homeTeam + ' — ' + data.awayTeam) : data.homeTeam;\n self.dom.eventTitle.html(self.eventTitle);\n }\n if (data.hasOwnProperty('rTitle')) {\n self.resultTitle = data.rTitle;\n self.dom.resultTitle.html(data.rTitle);\n }\n\n\n if (hasChanges) {\n var checkActiveResult = self.checkActive();\n\n $(document).trigger('notificationCoefInCartUpdate', {\n outcomeId: self.originalId,\n newVal: self.coefValue\n });\n\n if (coefIsOverChanged) {\n $(document).trigger('coefInBettingCartIsOverChanged', {\n isOver: checkActiveResult.isOver\n });\n }\n }\n\n return hasChanges;\n };\n\n var transitionAddRemoveClass = (function () { //TODO: вынести в utils ?\n var appearVal = 100;\n return function (node, className) {\n node.addClass(className, appearVal);\n node.one('animationend', function (e) {\n node.removeClass(className);\n });\n };\n }());\n\n StandardCartItem.prototype.blinkCoef = {\n increase: function () {\n transitionAddRemoveClass(this.dom.coefValue, 'change plus');\n },\n decrease: function () {\n transitionAddRemoveClass(this.dom.coefValue, 'change minus');\n }\n };\n\n StandardCartItem.prototype.setCurrency = function (val) {\n this.currency = val;\n };\n\n StandardCartItem.prototype.checkActive = function () {\n var self = this;\n var isOver = false;\n var isBlocked = false;\n\n if (self.coefIsActive && self.eventIsActive && !self.coefIsOver && !self.eventIsOver && self.coefValue != 1) {\n self.dom.container.removeClass('blocked');\n self.dom.container.removeClass('is-over');\n self.dom.coefValue.removeAttr('bb-tool');\n }\n else {\n if (self.coefIsOver || self.eventIsOver) {\n self.dom.container.addClass('is-over');\n self.dom.coefValue.attr('bb-tool', window.Localization.getString('Scripts_Shared_Modules.StandardCartItem_43', 'Прием ставок завершен'));\n\n isOver = true;\n }\n else {\n self.dom.container.addClass('blocked');\n self.dom.coefValue.attr('bb-tool', window.Localization.getString('Scripts_Shared_Modules.StandardCartItem_44', 'Прием ставок приостановлен'));\n\n isBlocked = true;\n }\n }\n\n return {\n isOver: isOver,\n isBlocked: isBlocked\n }\n };\n\n StandardCartItem.prototype.animateFail = function () {\n var self = this;\n\n self.dom.container.addClass('error');\n setTimeout(function () {\n self.dom.container.removeClass('error');\n }, 3000);\n };\n\n StandardCartItem.prototype.animateSuccess = function (removeAfter) {\n var self = this;\n\n if (self.isSelected === true) {\n self.dom.container.addClass('success');\n\n setTimeout(function () {\n self.dom.container.removeClass('success');\n if (removeAfter && StandardCart.isTypeSingle())\n StandardCart.removeItemAfterSend(self.originalId);\n }, 3000);\n\n\n\n }\n };\n\n\n\n //-----------!Вставка старых функций------------------\n\n StandardCartItem.prototype.bindUI = function () {\n var self = this;\n\n this.dom.removeBtn.on('click', function () {\n StandardCart.removeItem(self.originalId);\n });\n\n this.dom.currencySelect.on('change', function () {\n var val = $(this).val();\n\n document.dispatchEvent(new CustomEvent('mtmCustomEvent', {\n detail: {\n id: 'd-i06-e13',\n value: val,\n },\n })\n );\n\n if (val.toLowerCase() !== self.currency.toLowerCase()) {\n self.setCurrency(val);\n\n // TODO сделать единый конвертер валют\n switch (val) {\n case 'Bonuses':\n self.setBet(self.bet * window.globalAppSettings.bonusExchangeRate);\n break;\n case 'RUB':\n case 'KZT':\n var newVal = self.bet / window.globalAppSettings.bonusExchangeRate;\n self.setBet(newVal < 1 ? 1 : newVal);\n break;\n default:\n break;\n }\n\n self.updateDom();\n\n BettingCart.calc();\n BettingCart.validate();\n }\n });\n\n this.dom.maxMoneyValueBtn.on('click', function () {\n if (!!!globalAppSettings.currentUser.bettingCart['max-bet-amount-button'].IsEnabled) return;\n\n self.loadMaxMoneyValue(function () {\n self.setBet(self.maxMoneyValue);\n self.dom.input.val(app.numberToString(self.maxMoneyValue));\n });\n });\n\n // если выбраны не рубли - не выводим комбобокс\n this.dom.input.on('click', function () {\n if (self.combobox) {\n if (self.currency !== window.globalAppSettings.currentUser.defaultBalance.currencyCode) {\n self.combobox.preventOpening(true);\n } else {\n self.combobox.preventOpening(false);\n }\n }\n });\n\n this.dom.input.on('input change', function (e) {\n var filteredVal = $(this).val().replace(/\\D/g, '');\n $(this).val((parseInt(filteredVal) === 0 || !filteredVal) ? '' : app.numberToString(filteredVal));\n\n self.setBet(filteredVal);\n });\n\n this.dom.selectInput.on('change', function () {\n self.setIsSelected($(this).prop('checked'));\n BettingCart.calc();\n BettingCart.validate();\n });\n\n this.dom.input.on('mouseenter', function () {\n var elem = $(this);\n\n if (self.currency !== 'RUB') {\n self.updateBonusTooltip();\n } else if (elem.attr('bb-tool')) {\n elem.removeAttr('bb-tool');\n }\n });\n };\n\n return StandardCartItem;\n}());","window.BookmakerPromocode = (function () {\n var selectors = {\n promoArea: '[data-promo-id]',\n disableBtn: '.js-disable-generate-btn',\n activeBtn: '.js-active-generate-btn',\n btnArea: '.js-generate-button-area'\n }\n var getSelectorCurrentPromo = function(id) {\n return '[data-promo-id={0}]'.replace('{0}', id);\n }\n\n var classes = {\n activeBtn: {\n page: 'promocodes-page__generate-button',\n table: 'promocodes-table__generate-button',\n js: 'js-active-generate-btn'\n }\n }\n var getBtnHtml = function(page) {\n return ''\n .replace('{0}', page ? classes.activeBtn.page : classes.activeBtn.table)\n .replace('{1}', classes.activeBtn.js);\n }\n\n var generateDefaultText = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_19', 'Сгенерировать');\n var generateSuccessMessage = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_20', 'Генерация успешна');\n var generateCommonMessage = window.Localization.getString('Scripts_Shared_Modules.BookmakerPromocode_21', 'Ошибка генерации');\n\n var generate = function() {\n var $this = $(this);\n var data = $this.parents(selectors.promoArea).data();\n\n Ajax.postJson(\"/promocodes/GenerateBookmakerPromocode\", {\n data: {\n promoId: data.promoId,\n isSinglePage: data.isSinglePage\n },\n success: function (resp) {\n var promo = $(getSelectorCurrentPromo(data.promoId));\n if (resp) {\n var btn = promo.find(selectors.activeBtn);\n Utils.showTooltipError(btn, resp.error ? resp.error : generateCommonMessage);\n } else {\n var btn = promo.find(selectors.disableBtn);\n var text = btn.attr('bb-tool');\n Utils.showTooltipSuccess(btn, generateSuccessMessage, true);\n setTimeout(function() { Utils.showTooltipError(btn, text, true); }, 10000);\n }\n }\n });\n }\n\n var showBtn = function($promo) {\n var $area = $promo.find(selectors.btnArea);\n var disabledBtn = $area.find(selectors.disableBtn);\n if (disabledBtn.length == 0) return;\n $area.empty();\n\n var btn = $(getBtnHtml($promo.data().isSinglePage.toLowerCase().trim().toLowerCase().trim() == 'true'))\n .text(Localization.getString('Bonuses.Generate', generateDefaultText))\n .click(generate);\n $area.append(btn);\n }\n\n var checkGenerateBtn = function(){\n var promocodes = $(selectors.promoArea);\n for (var i = 0; i < promocodes.length; i++) {\n var $promo = $(promocodes[i]);\n var data = $promo.data();\n if (data.nextDt === '') continue;\n if(new Date(data.nextDt) <= new Date()) {\n showBtn($promo);\n }\n }\n }\n\n var init = function () {\n var promocodes = $(selectors.promoArea);\n if (promocodes.length > 0) {\n setInterval(checkGenerateBtn, 1000);\n\n promocodes.find(selectors.activeBtn).click(generate);\n }\n };\n\n return {\n init: init\n };\n}());\nwindow.BookmakerPromocode.init();","var Combobox = window.Combobox = (function () {\n\tfunction Combobox(datalist, input) {\n\t\tif (!input) {\n app.console.error('You should declare a main input unique selector');\n\t\t\treturn;\n\t\t}\n\n\t\tvar self = this;\n\n\t\tif (datalist && Array.isArray(datalist)) {\n\t\t\tself.datalist = datalist;\n\t\t}\n\n self.isPreventedOpening = false;\n\t\tself.input = input;\n\t\tself.checksum = Math.random();\n\t\tself.input.attr('data-combobox-checksum', self.checksum);\n\n\t\tself.wrapper = $('
', {\n\t\t\t'class': 'combobox-input-wrapper'\n\t\t});\n\n\t\tinput.wrap(self.wrapper);\n\n\t\tself.isOpen = false;\n\n\t\t$(self.input).on('click', function (e) {\n if(self.isPreventedOpening) {\n return;\n }\n\n\t\t\tif ($(this).hasClass('open')) {\n\t\t\t self.close();\n\t\t\t} else {\n\t\t\t\tself.open();\n\t\t\t\t$(this).addClass('open');\n\t\t\t}\n\t\t});\n\t};\n\n\tCombobox.prototype.open = function () {\n\t $(document).on('click.combobox', function (e) {\n\t var checksum = $(e.target).attr('data-combobox-checksum');\n\n\t if (!checksum === undefined || checksum != self.checksum) {\n\t self.close();\n\t }\n\t });\n\n\t var self = this;\n\t this.draw();\n\n\t this.input.addClass('open');\n\n\t\tthis.container.addClass('open');\n\t\tthis.isOpen = true;\n\n\t\tthis.input.on('keyup.combobox', function () {\n\t\t\tself.close();\n\t\t});\n\n\t}\n\n\tCombobox.prototype.close = function () {\n\t this.input.removeClass('open');\n\t this.container.removeClass('open');\n\t this.container.remove();\n\t}\n\n Combobox.prototype.preventOpening = function(value) {\n this.isPreventedOpening = value;\n }\n\n\tCombobox.prototype.setValue = function (title) {\n\t\t$(this.input).val(title);\n\t\t$(this.input).change();\n\t}\n\n\tCombobox.prototype.draw = function () {\n\t\tvar self = this;\n\n\t\tself.container = $('
', {\n\t\t\t'class': 'combobox-container'\n\t\t});\n\n\t\tfor (var i = 0; i < this.datalist.length; i++) {\n\t\t\tvar item = $('
', {\n\t\t\t\t'class': 'combobox-container__item'\n\t\t\t}).html(self.datalist[i]);\n\t\t\tself.container.append(item);\n\t\t}\n\n\t\tself.container.insertAfter(self.input);\n\n\t\tself.container.on('click', '.combobox-container__item', function (e) {\n\t\t\tif ($(e.target).hasClass('combobox-container__item')) {\n\t\t\t\tvar title = $(this).html();\n\t\t\t\tself.setValue(title);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn Combobox;\n}());","window.ConfirmButton = (function () {\n var awaiter = \"m-await\",\n textSelector = '.js-content-menu__single-button-text',\n idleTextAttr = 'data-idle-text',\n confirmTextAttr = 'data-confirm-text';\n\n return {\n init: function (selector, callback, ajaxUrl, ajaxSuccessCallback, ajaxData) {\n\n app.body.on('click', selector, function () {\n var that = $(this);\n textContainer = that.find(textSelector);\n if (that.hasClass(awaiter)) {\n\n if (callback) {\n callback();\n }\n\n if (ajaxUrl) {\n Ajax.postJson(ajaxUrl, {\n data: ajaxData,\n doCallAjaxViewParsers: false,\n success: function (resp) {\n\n if (ajaxSuccessCallback) {\n ajaxSuccessCallback(resp);\n }\n that.removeClass(awaiter);\n textContainer.text(that.attr(idleTextAttr));\n }\n });\n }\n else {\n that.removeClass(awaiter);\n textContainer.text(that.attr(idleTextAttr));\n }\n \n }\n else {\n that.addClass(awaiter);\n textContainer.text(that.attr(confirmTextAttr));\n that.one('mouseleave', function (e) {\n that.removeClass(awaiter);\n textContainer.text(that.attr(idleTextAttr));\n });\n }\n return false;\n\n });\n\n },\n dispose: function (selector) {\n app.body.off('click', selector);\n }\n\n }\n\n}());","window.CurrentDatetime = (function () {\n const timeNodeSelector = '#moscow_time';\n const initialFullMoscowTime = '#initial_full_moscow_time';\n const tickIntervalInSeconds = 5;\n var value = new Date();\n\n function setSeedValue() {\n var fullMoscowTime = $(initialFullMoscowTime).val();\n if (fullMoscowTime != undefined){\n var timeArray = fullMoscowTime.trim().split(':');\n if (timeArray.length == 3) {\n value.setUTCHours(timeArray[0]);\n value.setUTCMinutes(timeArray[1]);\n value.setUTCSeconds(timeArray[2]);\n return;\n }\n }\n $(timeNodeSelector).parent().hide();\n return;\n }\n\n function updateTime() {\n value.setUTCSeconds(value.getUTCSeconds() + tickIntervalInSeconds);\n app.CurrentDatetime.time = getCurrentTimeString(value);\n }\n\n function getCurrentTimeString(date) {\n return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2);\n }\n\n return {\n init: function () {\n var self = this;\n\n app.bindModelHtml(self, 'time', $(timeNodeSelector));\n\n setSeedValue();\n setInterval(updateTime, tickIntervalInSeconds * 1000);\n }\n };\n}());","window.CustomSelect = (function () {\n\n var init = function (selectors) {\n if (globalAppSettings.isMobileDevice && window.Mobile) {\n return;\n }\n\n if ($.fn.niceSelect) {\n var selectorsLength = selectors.length;\n\n for (var i = 0; i < selectorsLength; i++)\n $(selectors[i]).niceSelect();\n } else {\n app.console.log('FAILED TO INIT CUSTOM SELECTBOX');\n }\n };\n\n var update = function (selectors) {\n if (globalAppSettings.isMobileDevice && window.Mobile) {\n return;\n }\n\n if ($.fn.niceSelect) {\n var selectorsLength = selectors.length;\n\n for (var i = 0; i < selectorsLength; i++) {\n $(selectors[i]).niceSelect('update');\n }\n } else {\n app.console.log('FAILED TO UPDATE CUSTOM SELECTBOX');\n }\n };\n\n var destroy = function (selectors) {\n if ($.fn.selectize) {\n var selectorsLength = selectors.length;\n\n for (var i = 0; i < selectorsLength; i++) {\n $(selectors[i]).niceSelect('destroy');\n }\n } else {\n app.console.log('FAILED TO DESTROY CUSTOM SELECTBOX');\n }\n };\n\n return {\n init: init,\n update: update,\n destroy: destroy\n };\n}());","window.Favorites = (function () {\n var dom, count;\n\n var init = function () {\n dom = {\n live: $('#fav_count-live'),\n prematch: $('#fav_count-prematch')\n };\n count = {\n live: parseInt(dom.live.html()) || 0,\n prematch: parseInt(dom.prematch.html()) || 0\n };\n\n update().all();\n };\n\n var update = function () {\n function isAlone() {\n //(count.live < 1) ? dom.prematch.addClass('m-alone') : dom.prematch.removeClass('m-alone');\n //(count.prematch < 1) ? dom.live.addClass('m-alone') : dom.live.removeClass('m-alone');\n if (count.live < 1 && count.prematch < 1) {\n dom.live.addClass('m-invisible');\n dom.prematch.addClass('m-invisible');\n } else {\n dom.live.removeClass('m-invisible');\n dom.prematch.removeClass('m-invisible');\n }\n }\n function live() {\n //(count.live < 1) ? dom.live.addClass('m-invisible') : dom.live.removeClass('m-invisible').html(count.live);\n dom.live.html(count.live);\n isAlone();\n }\n function prematch() {\n //(count.prematch < 1) ? dom.prematch.addClass('m-invisible') : dom.prematch.removeClass('m-invisible').html(count.prematch);\n dom.prematch.html(count.prematch);\n isAlone();\n }\n return {\n live: live,\n prematch: prematch,\n\t\t\tall: function () {\n\t\t\t\tlive();\n\t\t\t\tprematch();\n\t\t\t}\n }\n };\n\n var decFavCount = function (isLive) {\n if (isLive) {\n count.live = (count.live <= 0) ? 0 : count.live - 1;\n update().live();\n }\n else {\n count.prematch = (count.prematch <= 0) ? 0 : count.prematch - 1;\n update().prematch();\n }\n };\n\n var incFavCount = function (isLive) {\n var domNode;\n if (isLive) {\n count.live++;\n update().live();\n domNode = dom.live;\n }\n else {\n count.prematch++;\n update().prematch();\n domNode = dom.prematch;\n }\n domNode.addClass('jump');\n\t\tsetTimeout(function () { domNode.removeClass('jump') }, 400);\n //domNode.one('animationend', () => domNode.removeClass('jump'));\n };\n\n\n\n return {\n init: init,\n dec: decFavCount,\n inc: incFavCount\n }\n}());","window.Help = (function () {\n\tvar dom = {};\n\tvar selectors = {\n scrollArea: '#m-page-content-scrollbar-scrollarea',\n pageNavigation: '#help-page__navigation-links',\n pageNavigationLinks: '.help-page__navigation-link',\n aboutContent: '#about-content',\n rulesSections: '.help-page__content-part[id]',\n rulesSectionsCom: '.rules-section',\n\t};\n var pageNavigationOffsets = [];\n var pageNavigationOffsetTop = 0;\n\n\n\treturn {\n init: function () {\n dom.pageNavigation = $(selectors.pageNavigation);\n var hashBlock;\n dom.scrollArea = $(selectors.scrollArea);\n if (dom.scrollArea.length == 0) {\n dom.scrollArea = { position: function () { return { top: 0 } } };\n }\n\n pageNavigationOffsetTop = dom.pageNavigation.position().top - dom.scrollArea.position().top;\n\n this.createNavigationMenu();\n this.updateHeadingTopOffset();\n\n if(window.location.hash) {\n hashBlock = $(window.location.hash);\n if (hashBlock.length > 0) {\n $(selectors.scrollArea).scrollTop(hashBlock.position().top - 70);\n }\n } else {\n this.setActiveNavigationItem(0);\n }\n\n this.bindUI();\n\t\t},\n\t\tbindUI: function () {\n\t\t\tvar self = this;\n\n var scrollTimer;\n \n $(selectors.scrollArea).on('scroll.pageHelp', function() {\n var scrollTop = $(this).scrollTop();\n\n if (app.isIE()) {\n self.toggleFixedPageNavigation(scrollTop);\n }\n\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(function () {\n self.setActiveNavigationItem(scrollTop);\n }, 50);\n });\n \n $(window).on('resize.pageHelp', function() {\n self.updateHeadingTopOffset();\n });\n\t\t},\n unbindUI: function () {\n $(selectors.scrollArea).off('scroll.pageHelp');\n $(window).off('resize.pageHelp');\n },\n updateHeadingTopOffset: function() {\n var scrollAreaTopOffset = dom.scrollArea.position().top;\n\n $(selectors.pageNavigationLinks).each(function (index) {\n var id = $(this).attr('href');\n var heading = $(id);\n pageNavigationOffsets.push({\n id: id,\n offsetTop: index === 0 ? 0 : heading.position().top - scrollAreaTopOffset - 80\n })\n });\n },\n toggleFixedPageNavigation: function (scrollTop) {\n var delta = scrollTop - pageNavigationOffsetTop;\n\n dom.pageNavigation.css({\n transform: 'translateY(' + (delta > 0 ? delta : 0) + 'px)'\n });\n },\n setActiveNavigationItem: function (scrollTop) {\n let mobile = window.globalAppSettings.isMobileDevice;\n if (mobile) return;\n for (let i = 0; i < pageNavigationOffsets.length; ++i) {\n if (scrollTop >= pageNavigationOffsets[i].offsetTop && (i + 1 >= pageNavigationOffsets.length || scrollTop < pageNavigationOffsets[i + 1].offsetTop)) {\n $(selectors.pageNavigationLinks).removeClass('m-active');\n $(selectors.pageNavigationLinks).filter('[href=\"' + pageNavigationOffsets[i].id + '\"]').addClass('m-active');\n\n if (history.pushState && window.location.hash !== pageNavigationOffsets[i].id) {\n history.pushState(null, null, pageNavigationOffsets[i].id);\n }\n }\n }\n },\n createNavigationMenu: function () {\n $(selectors.rulesSections).each((index, section) => {\n const sectionId = section.id;\n const headingText = $(section).find('h2').text();\n const link = `${headingText}`;\n dom.pageNavigation.append(link);\n });\n\n $(selectors.rulesSectionsCom).each((index, headingEl) => {\n const sectionNumber = index + 1;\n headingEl.id = \"rules-section-\" + sectionNumber;\n const link = `${sectionNumber}. ${headingEl.textContent}`;\n dom.pageNavigation.append(link);\n });\n }\n\t}\n}());\n\n$(function () {\n\n if ($('#help-page').length > 0) {\n window.Help.init();\n if (globalAppSettings.isMobileDevice && UpButton) {\n UpButton.init();\n if ($('#contentEl').length > 0) {\n var point = $('.help-page__content').offset().top;\n $(window).scrollTop(point - 50);\n }\n }\n }\n\n});","var HomeWidgets = window.HomeWidgets = (function () {\n\tvar selectors = {\n\t\thomeWidget: '[js-node=\"home-widget\"]',\n\t\theader: '[js-node=\"home-widget-header\"]'\n\t}\n\n\tvar init = function () {\n\t\tbindUI();\n\t}\n\n\tvar dispose = function () {\n\t\tunblindUI();\n\t}\n\n\tvar bindUI = function () {\n\t\t$(document).on('click.homeWidgetHeader', selectors.header, function () {\n\t\t\t$(this).closest(selectors.homeWidget).toggleClass('m-collapsed');\n\t\t});\n\t}\n\n\tvar unbindUI = function () {\n\t\t$(document).off('click.homeWidgetHeader');\n\t}\n\n\treturn {\n\t\tinit: init,\n\t\tdispose: dispose,\n\t\tbindUI: bindUI,\n\t\tunbindUI: unbindUI\n\t}\n}());\n\n$(function () {\n\tHomeWidgets.init();\n});","var WidgetBanners = window.WidgetBanners = (function () {\n var WidgetBanners = function (container) {\n this.dom = {\n container: null,\n slides: [],\n linksContainer: null,\n links: [],\n slidesContainer: null,\n };\n\n this.timer = null;\n this.delay = 7500;\n this.activeIndex = 0;\n\n this.dom.container = container;\n\n this.dom.slides = container.find('[js-node=\"widget-banners-slide\"]');\n this.dom.linksContainer = container.find(\n '[js-node=\"widget-banners-slides-links-container\"]'\n );\n\n this.dom.slidesContainer = container.find(\n '[js-node=\"widget-banners-items-wrapper\"]'\n );\n\n if (this.dom.slides.length > 1) {\n this.createLinks();\n this.setActiveSlide(0);\n this.startTimer();\n } else {\n this.dom.slides.eq(0).addClass('m-active');\n setInterval(() => {\n this.showCoefs(0);\n this.setActiveSlide(0);\n }, 4000);\n }\n\n this.bindUI();\n\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n if (!this.timer) this.startTimer();\n } else if (document.visibilityState === 'hidden') {\n if (this.timer) this.stopTimer();\n }\n });\n };\n\n WidgetBanners.prototype.dispose = function () {\n this.unbindUI();\n };\n\n WidgetBanners.prototype.pushMtmEvent = function (type) {\n document.dispatchEvent(\n new CustomEvent('mtmCustomEvent', {\n detail: {\n id: 'd-i02-e9',\n container: this.dom.container[0],\n trigger: type,\n index: this.activeIndex + 1,\n slides: this.dom.slides.length,\n },\n })\n );\n };\n\n WidgetBanners.prototype.bindUI = function () {\n var self = this;\n\n self.dom.container.on(\n 'click',\n '[js-node=\"widget-banners-slide-link\"]',\n function () {\n self.handleEvent($(this).index());\n self.pushMtmEvent('pagination');\n }\n );\n\n self.dom.container.swipe({\n swipeRight: function () {\n if (self.activeIndex !== 0) {\n self.handleEvent(self.activeIndex - 1);\n self.pushMtmEvent('swipe');\n }\n },\n swipeLeft: function () {\n if (self.activeIndex !== self.dom.slides.length - 1) {\n self.handleEvent(self.activeIndex + 1);\n self.pushMtmEvent('swipe');\n }\n },\n allowPageScroll: 'none',\n threshold: 30,\n });\n };\n\n WidgetBanners.prototype.unbindUI = function () {\n app.console.log('unbind WidgetBanners');\n };\n\n WidgetBanners.prototype.handleEvent = function (newActiveIndex) {\n this.activeIndex = newActiveIndex;\n this.setActiveSlide(this.activeIndex);\n this.stopTimer();\n this.startTimer();\n };\n\n WidgetBanners.prototype.createLinks = function () {\n var self = this;\n\n self.dom.slides.each(function () {\n self.dom.linksContainer.append(\n '
  • '\n );\n });\n\n self.dom.links = self.dom.container.find(\n '[js-node=\"widget-banners-slide-link\"]'\n );\n };\n\n WidgetBanners.prototype.showCoefs = function (i) {\n $('.widget-banners__event-info-wrapper').remove();\n if ($('.widget-banners__event-live').hasClass('m-show')) {\n $('.widget-banners__event-live').removeClass('m-show');\n }\n let slideItem = this.dom.slides.eq(i);\n let coefContainer = $(slideItem).next('.j-banner-event-info');\n\n const isClientCartEnabled =\n window?.globalAppSettings?.isClientCartEnabled;\n\n function isInCart(oId) {\n if (isClientCartEnabled) {\n return window.ClientCart.hasOutcome(Number(oId));\n }\n return BettingCart.hasItem(Number(oId));\n }\n\n if (coefContainer.length > 0) {\n let eventId = coefContainer.attr('data-event-id');\n let isLive = coefContainer.attr('data-event-is-live');\n\n const fetchUrl =\n slideItem.parent().data().apiUrl +\n `/api/event/banner/${eventId}?live=${isLive}`;\n\n fetch(fetchUrl, {\n headers: {\n bb_appSource: slideItem.parent().data().apiSource,\n 'Content-Type': 'application/json; charset=utf-8',\n },\n method: 'GET',\n })\n .then((response) => {\n if (response.ok) {\n let result = response.json();\n\n return result;\n } else {\n console.log('Something went wrong');\n return {};\n }\n })\n .then((data) => {\n if (!data.eventId) return;\n if (data.isLive) {\n $('.widget-banners__event-live').addClass('m-show');\n }\n if (data.isActive) {\n let html =\n '
    ';\n if (data.outcome1) {\n let activeCoef = isInCart(data.outcome1.coefId)\n ? 'm-active'\n : '';\n html += `\n1${window.Utils.displayCoefValue(\n data.outcome1.value\n )}`;\n } else {\n html +=\n '
    ';\n }\n\n if (data.outcomeX) {\n let activeCoef = isInCart(data.outcomeX.coefId)\n ? 'm-active'\n : '';\n html += `\nX${window.Utils.displayCoefValue(\n data.outcomeX.value\n )}`;\n } else {\n html +=\n '
    ';\n }\n\n if (data.outcome2) {\n let activeCoef = isInCart(data.outcome2.coefId)\n ? 'm-active'\n : '';\n html += `\n 2${window.Utils.displayCoefValue(\n data.outcome2.value\n )}`;\n } else {\n html +=\n '
    ';\n }\n\n html += '
    ';\n $(coefContainer).html(html);\n }\n });\n }\n };\n\n WidgetBanners.prototype.setActiveSlide = function (i) {\n let slideItem = this.dom.slides.eq(i);\n this.showCoefs(i);\n this.dom.slides.removeClass('m-active');\n slideItem.addClass('m-active');\n\n if (this.dom.slides.length == 1) return;\n\n this.dom.links.removeClass('m-active');\n\n const currentLink = this.dom.links.eq(i);\n currentLink.addClass('m-active');\n\n var stepSize = this.dom.container.outerWidth() * i;\n\n this.dom.slides.css({\n transform: 'translateX(-' + stepSize + 'px)',\n });\n };\n\n WidgetBanners.prototype.startTimer = function () {\n var self = this;\n\n self.timer = setInterval(function () {\n if (self.dom.slides.length == 1) {\n self.showCoefs(0);\n return;\n }\n\n ++self.activeIndex;\n\n if (self.activeIndex == self.dom.slides.length)\n self.activeIndex = 0;\n\n self.setActiveSlide(self.activeIndex);\n }, self.delay);\n };\n\n WidgetBanners.prototype.stopTimer = function () {\n clearInterval(this.timer);\n this.timer = null;\n };\n\n return WidgetBanners;\n})();\n\nvar widgetsBanner = window.widgetsBanner = (function () {\n const isClientCartEnabled = window?.globalAppSettings?.isClientCartEnabled;\n\n function removeFromCart(oId) {\n if (isClientCartEnabled) {\n window.ClientCart.removeOutcome(Number(oId));\n } else {\n BettingCart.removeItem(oId);\n }\n }\n\n function addToCart(sData) {\n if (isClientCartEnabled) {\n window.ClientCart.addOutcome({\n oId: Number(sData.oId),\n eId: Number(sData.eId),\n });\n } else {\n BettingCart.addItem(sData);\n }\n }\n\n function isInCart(oId) {\n if (isClientCartEnabled) {\n return window.ClientCart.hasOutcome(Number(oId));\n }\n return BettingCart.hasItem(Number(oId));\n }\n\n var data = {\n widgets: [],\n };\n\n return {\n data: data,\n init: function () {\n $('[js-node=\"widget-banners\"]').each(function () {\n var container = $(this);\n data.widgets.push(new WidgetBanners(container));\n });\n },\n dispose: function () {},\n handleCoefClick: function (a) {\n a = $(a);\n\n let coef = {\n oId: a.data().oid,\n aId: a.data().aid,\n val: a.data().val,\n eId: a.data().eid,\n isLive: a.data().isLive,\n };\n\n if (isInCart(coef.oId)) {\n removeFromCart(coef.oId);\n a.removeClass('m-active');\n } else {\n addToCart(coef);\n a.addClass('m-active');\n }\n },\n };\n})();\n\n$(function () {\n widgetsBanner.init();\n});\n","var WidgetHelp = window.WidgetHelp = (function () {\n var WidgetHelp = function (container) {\n this.dom = {\n container: null,\n slider: null,\n leftArrow: null,\n rightArrow: null,\n };\n\n this.dom.container = container;\n this.dom.slider = container.find('[js-node=\"widget-help-slider\"]');\n this.dom.leftArrow = container.find(\n '[js-node=\"widget-help-arrow-left\"]'\n );\n this.dom.rightArrow = container.find(\n '[js-node=\"widget-help-arrow-right\"]'\n );\n\n this.isArrowClickBlocked = false;\n\n this.checkScrollPosition(this.dom.slider.scrollLeft());\n\n this.bindUI();\n };\n\n WidgetHelp.prototype.dispose = function () {\n this.unbindUI();\n };\n\n WidgetHelp.prototype.bindUI = function () {\n var self = this;\n\n self.dom.rightArrow.on('click', function () {\n if (!self.isArrowClickBlocked) {\n self.isArrowClickBlocked = true;\n self.slide({ direction: 'right' });\n }\n });\n\n self.dom.leftArrow.on('click', function () {\n if (!self.isArrowClickBlocked) {\n self.isArrowClickBlocked = true;\n self.slide({ direction: 'left' });\n }\n });\n\n var windowResizeTimer;\n $(window).on('resize', function () {\n clearTimeout(windowResizeTimer);\n windowResizeTimer = setTimeout(function () {\n self.checkScrollPosition(self.dom.slider.scrollLeft());\n }, 100);\n });\n };\n\n WidgetHelp.prototype.unbindUI = function () {\n app.console.log('unbind WidgetHelp');\n };\n\n WidgetHelp.prototype.slide = function (settings) {\n var self = this;\n var scrollPosition = self.dom.slider.scrollLeft();\n var newScrollPosition = 0;\n var scrollableAreaWidth = 340;\n\n settings.direction = settings.direction || '';\n\n if (settings.direction === 'right') {\n newScrollPosition = scrollPosition + scrollableAreaWidth;\n } else if (settings.direction === 'left') {\n newScrollPosition = scrollPosition - scrollableAreaWidth;\n }\n\n self.checkScrollPosition(newScrollPosition);\n\n self.dom.slider.animate(\n {\n scrollLeft: newScrollPosition,\n },\n 600,\n function () {\n self.isArrowClickBlocked = false;\n }\n );\n };\n\n WidgetHelp.prototype.checkScrollPosition = function (scrollPosition) {\n var self = this;\n var scrollableAreaWidth =\n self.dom.slider[0].scrollWidth - self.dom.slider.width();\n\n self.dom.container.removeClass('m-without-right-arrow');\n self.dom.container.removeClass('m-without-left-arrow');\n\n if (scrollPosition <= 0) {\n self.dom.container.addClass('m-without-left-arrow');\n }\n\n if (scrollPosition >= scrollableAreaWidth) {\n self.dom.container.addClass('m-without-right-arrow');\n }\n };\n\n WidgetHelp.prototype.slideRight = function () {\n var self = this;\n var scrollLeft = self.dom.slider.scrollLeft();\n var newScrollLeft = scrollLeft + 190;\n\n if (\n newScrollLeft >=\n self.dom.slider[0].scrollWidth - self.dom.slider.width()\n ) {\n self.dom.container.addClass('m-without-right-arrow');\n }\n\n self.dom.slider.scrollLeft(newScrollLeft);\n };\n\n return WidgetHelp;\n})();\n\nvar WidgetsHelp = (function () {\n var data = {\n widgets: [],\n };\n\n return {\n data: data,\n init: function () {\n $('[js-node=\"widget-help\"]').each(function () {\n var container = $(this);\n data.widgets.push(new WidgetHelp(container));\n });\n },\n dispose: function () {},\n };\n})();\n\n$(function () {\n WidgetsHelp.init();\n});\n","var WidgetPromo = window.WidgetPromo = (function () {\n\n\tvar WidgetPromo = function (container) {\n\t\tthis.dom = {\n\t\t\tcontainer: null,\n\t\t\tslides: [],\n\t\t\tlinksContainer: null,\n\t\t\tlinks: []\n\t\t}\n\n\t\tthis.timer = null;\n\t\tthis.delay = 5000;\n\t\tthis.activeIndex = 0;\n\n\t\tthis.dom.container = container;\n\t\tthis.dom.slides = container.find('[js-node=\"widget-promo-slide\"]');\n\t\tthis.dom.linksContainer = container.find('[js-node=\"widget-promo-slides-links-container\"]');\n\n\t\tif (this.dom.slides.length > 1) {\n\t\t\tthis.createLinks();\n\t\t\tthis.setActiveSlide(0);\n\t\t\tthis.startTimer();\n\t\t} else {\n\t\t\tthis.dom.slides.eq(0).addClass('m-active');\n\t\t}\n\n\t\tthis.bindUI();\n\t};\n\n\tWidgetPromo.prototype.dispose = function () {\n\t\tthis.unbindUI();\n\t};\n\n\tWidgetPromo.prototype.bindUI = function () {\n\t\tvar self = this;\n\n\t\tself.dom.container.on('click', '[js-node=\"widget-promo-slide-link\"]', function () {\n\t\t\tself.activeIndex = $(this).index();\n\t\t\tself.setActiveSlide(self.activeIndex);\n\t\t\tself.stopTimer();\n\t\t\tself.startTimer();\n\t\t});\n\t};\n\n\tWidgetPromo.prototype.unbindUI = function () {\n app.console.log('unbind WidgetPromo');\n\t};\n\n\tWidgetPromo.prototype.createLinks = function () {\n\t\tvar self = this;\n\n\t\tself.dom.slides.each(function () {\n\t\t\tself.dom.linksContainer.append('
  • ')\n\t\t});\n\n\t\tself.dom.links = self.dom.container.find('[js-node=\"widget-promo-slide-link\"]');\n\t};\n\n\tWidgetPromo.prototype.setActiveSlide = function (i, animationType) {\n\t\t// TODO слайд-анимация\n\t\tthis.dom.slides.removeClass('m-active');\n\t\tthis.dom.slides.eq(i).addClass('m-active');\n\n\t\tthis.dom.links.removeClass('m-active');\n\t\tthis.dom.links.eq(i).addClass('m-active');\n\t}\n\n\tWidgetPromo.prototype.startTimer = function () {\n\t\tvar self = this;\n\n\t\tself.timer = setInterval(function () {\n\t\t\t++self.activeIndex;\n\n\t\t\tif (self.activeIndex == self.dom.slides.length)\n\t\t\t\tself.activeIndex = 0;\n\n\t\t\tself.setActiveSlide(self.activeIndex);\n\t\t}, self.delay);\n\t}\n\n\tWidgetPromo.prototype.stopTimer = function () {\n\t\tclearInterval(this.timer);\n\t}\n\n\treturn WidgetPromo;\n}());\n\nvar widgetsPromo = (function () {\n\tvar data = {\n\t\twidgets: []\n\t};\n\n\treturn {\n\t\tdata: data,\n\t\tinit: function () {\n\t\t\t$('[js-node=\"widget-promo\"]').each(function () {\n\t\t\t\tvar container = $(this);\n\t\t\t\tdata.widgets.push(new WidgetPromo(container));\n\t\t\t});\n\t\t},\n\t\tdispose: function () {\n\n\t\t}\n\t}\n}());\n\n$(function () {\n\twidgetsPromo.init();\n});","window.LayoutResolver = (function () {\n return {\n resolve: function (scope) {\n\n if (scope.isLayoutRightColumnVisible !== undefined && !scope.isLayoutRightColumnVisible) {\n LayoutRightColumn.hide();\n }\n else {\n LayoutRightColumn.show();\n }\n }\n };\n}());","window.LayoutRightColumn = (function() {\n var selectors = {\n container: '#layout-right-column'\n };\n\n return {\n show: function () {\n $(selectors.container).removeClass('m-hidden');\n },\n hide: function () {\n $(selectors.container).addClass('m-hidden');\n }\n };\n}());","$(function () {\n $(document).on('click', '.live-timer__switch-button', function () {\n $(this).closest('.live-timer').toggleClass('m-show-current');\n });\n});","window.MainNavigation = (function () {\n\n var selectors = {\n pageContent: '#page-content',\n navItems: '.main-navigation__link',\n submenuContainer: '#main-navigation__submenu-container',\n submenuItemsContainer: '#main-navigation__submenu-links',\n container: '#main-navigation',\n linksContainer: '#main-navigation__links-container',\n accountBalance: '.account-widget__balance-sum[js-node=\"view-balance__sum\"]',\n accountProfileBalance: '.profile__balance-sum[js-node=\"view-balance__sum\"]',\n profileBonusBalance: '.profile__bonus-sum[js-node=\"view-balance__sum\"]',\n bonusBalance: '[js-node=\"view-bonus__sum\"]',\n logout: '[js-node=\"logout\"]'\n };\n\n\n var notification = {\n //v2.0\n updateAccountBalance: function (val) {\n accountBalance = val;\n var accountBalanceEl = $(selectors.accountBalance);\n var accountProfileBalanceEl = $(selectors.accountProfileBalance);\n accountBalanceEl.attr('data-sum', val);\n accountProfileBalanceEl.attr('data-sum', val);\n if (!isNaN(parseFloat(accountBalanceEl.html()))) {\n accountBalanceEl.html(app.numberToString(val.toFixed(2)).replace('.', ','));\n accountProfileBalanceEl.html(app.numberToString(val.toFixed(2)).replace('.', ','));\n }\n },\n //v2.0\n updateAccountBonusPoints: function (val) {\n globalAppSettings.currentUser.bonuses = parseInt(val);\n var bonusBalanceEl = $(selectors.bonusBalance);\n var profileBonusBalanceEl = $(selectors.profileBonusBalance);\n bonusBalanceEl.attr('data-sum', val);\n profileBonusBalanceEl.attr('data-sum', val);\n if (!isNaN(parseFloat(bonusBalanceEl.html()))) {\n bonusBalanceEl.html(app.numberToString(val));\n profileBonusBalanceEl.html(app.numberToString(val));\n }\n }\n };\n\n return {\n init: function () {\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n return;\n }\n\n this.items = $(selectors.navItems);\n this.bindUI();\n this.updateSubmenu();\n },\n bindUI: function () {\n var self = this;\n const logout = document.querySelector(selectors.logout);\n\n if(logout) {\n logout.addEventListener('click', (e)=> {\n const broadcastList = document.getElementById('broadcast-list');\n if(broadcastList.children.length) {\n e.preventDefault()\n const logoutEvent = new CustomEvent('logout', {\n bubbles: true,\n detail: {\n href: e.currentTarget.href,\n }\n });\n document.dispatchEvent(logoutEvent);\n }\n })\n }\n\n\n self.items.on('click', function () {\n if ($(this).data('nopage') === undefined) {\n self.setActive($(this));\n }\n setTimeout(function () {\n $(selectors.submenu).removeAttr('style');\n }, 500);\n });\n\n $(document).on('mouseenter', '#account-widget__navigation-block', function () {\n if (accountMenuHideTimeout) {\n clearTimeout(accountMenuHideTimeout);\n }\n\n $(this).addClass('m-expanded');\n });\n\n var accountMenuHideTimeout;\n $(document).on('mouseleave', '#account-widget__navigation-block', function () {\n var elem = $(this);\n accountMenuHideTimeout = setTimeout(function () {\n elem.removeClass('m-expanded');\n }, 500);\n\n });\n\n $(window).on('resize', function () {\n self.updateSubmenu();\n });\n\n /**\n * @param {CustomEvent<{balanceVal: number, bonusPoints: number}>} event - CustomEvent.\n */\n function notificationBalanceUpdateHandler (event) {\n const isDetails = 'detail' in event;\n\n const balance = isDetails && event.detail.balanceVal ? event.detail.balanceVal : 0;\n const bonuses = isDetails && event.detail.bonusPoints ? event.detail.bonusPoints : 0;\n\n notification.updateAccountBalance(balance);\n notification.updateAccountBonusPoints(bonuses);\n }\n\n window.addEventListener('notificationBalanceUpdate', notificationBalanceUpdateHandler);\n },\n updatePage: function () {\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n return;\n }\n\n var self = this;\n\n var elem = self.items.filter('[data-page=' + $(selectors.pageContent).data('page') + ']');\n if (elem.length > 0) {\n self.setActive(elem);\n }\n },\n setActive: function (elem) {\n this.items.removeClass('m-active');\n elem.addClass('m-active');\n },\n updateSubmenu: function () {\n var self = this;\n $(selectors.linksContainer).hide();\n var containerWidth = $(selectors.container).outerWidth() - $(selectors.submenuContainer).outerWidth() - self.items.eq(self.items.length - 1).width();\n\n if ($(selectors.submenuContainer).hasClass('is-visible') === false) {\n containerWidth = containerWidth - $('.main-navigation__submenu-title').outerWidth();\n }\n\n $(selectors.linksContainer).show();\n\n $(selectors.submenuItemsContainer).html('');\n self.items.removeClass('m-invisible');\n\n var summaryVisibleWidth = 0;\n var hasInvisible = false;\n for (var i = 0; i < self.items.length; i++) {\n summaryVisibleWidth += self.items.eq(i).outerWidth() + parseInt(self.items.eq(i).css('margin-right'));\n\n if (summaryVisibleWidth - 1 >= containerWidth) {\n $(selectors.submenuItemsContainer).append(self.items.eq(i).clone().removeClass('main-navigation__link').addClass('dropdown__item'));\n self.items.eq(i).addClass('m-invisible');\n hasInvisible = true;\n }\n }\n\n if (hasInvisible) {\n $(selectors.submenuContainer).addClass('is-visible');\n } else {\n $(selectors.submenuContainer).removeClass('is-visible');\n }\n },\n notification: notification\n }\n}());","window.MobileAppDownloadButton = (function () {\n\n function handleDownloadClick(url) {\n var site = window.globalAppSettings.api.appSource || 'UniRu';\n var apkName = site === 'UniRu' ? 'BaltBet.apk' : 'Yodds.apk';\n var link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', apkName);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n\n return false;\n }\n\n function bindUI() {\n document.addEventListener('click', function (e) {\n if (e.target.classList.contains('js-app-download-button')) {\n const button = e.target.dataset.href ? e.target : e.target.parentNode;\n if (button.dataset.href) {\n return handleDownloadClick(button.dataset.href);\n }\n }\n });\n }\n\n return {\n bindUI: bindUI\n }\n}());\n\nMobileAppDownloadButton.bindUI();","window.ModalMarkets = (function () {\n\treturn {\n\t init: function (content, ajaxCall, callbacks) {\n\t\t\tvar self = this;\n\n\t\t\tself.ajaxCall = ajaxCall;\n\t\t\tself.dom = {};\n\n\t\t\tself.marketsModal = new app.ModalWindow({\n\t\t\t\tcontent: content,\n\t\t\t\ttitle: window.Localization.getString('Scripts_Shared_Modules.ModalMarkets_28', 'Добавить рынки'),\n\t\t\t\tclassName: 'modal-markets-wrapper',\n\t\t\t\tafterShow: function () {\n\t\t\t\t\tself.dom.body = $('[js-node=\"modal-markets__body\"]');\n\t\t\t\t\tself.dom.submit = $('[js-node=\"modal-markets__submit\"]');\n\t\t\t\t\tself.dom.markets = $('[name=\"modal-markets-market\"]');\n\t\t\t\t\tself.dom.selectAllBtn = $('[js-node=\"modal-markets__select-all\"]');\n\t\t\t\t\tself.dom.selectDefaultBtn = $('[js-node=\"modal-markets__select-default\"]');\n\n\t\t\t\t\tself.bindUI();\n\t\t\t\t\tself.checkButtonsState();\n\n\t\t\t\t\tif (callbacks !== undefined && callbacks.afterShow !== undefined && typeof (callbacks.afterShow) === 'function') {\n\t\t\t\t\t\tcallbacks.afterShow();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tafterHide: function () {\n\t\t\t\t\tself.clear.call(self);\n\t\t\t\t\tif (callbacks !== undefined && callbacks.afterHide !== undefined && typeof (callbacks.afterHide) === 'function') {\n\t\t\t\t\t\tcallbacks.afterHide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.marketsModal.show();\n\n\t\t},\n\t\tbindUI: function () {\n\t\t\tvar self = this;\n\n\t\t\t//EVENT: Отправить рынки\n\t\t\tself.dom.submit.on('click', function () {\n\t\t\t\tvar checkedMarkets = $(app.ModalMarkets.dom.markets).filter(':checked');\n\t\t\t\tif (app.ModalMarkets.dom.markets.length > 0 && checkedMarkets.length === 0) {\n\t\t\t\t\tself.marketsModal.dom.body.fadeOut().fadeIn();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar checkedIds = [];\n\t\t\t\tcheckedMarkets.each(function () {\n\t\t\t\t\tcheckedIds.push(this.value);\n\t\t\t\t});\n\n\t\t\t\tif (self.ajaxCall !== undefined && typeof (self.ajaxCall) === 'function') {\n\t\t\t\t self.ajaxCall(checkedIds);\n\t\t\t\t}\n\t\t\t\tself.marketsModal.hide();\n\t\t\t});\n\n\t\t\tself.dom.selectAllBtn.on('click', function () {\n\t\t\t\tself.toggleAll($(this).prop('checked'));\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\n\t\t\tself.dom.selectDefaultBtn.on('click', function () {\n\t\t\t\tself.selectDefault();\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\n\t\t\t// при клике на чекбокс рынка проверяем если выбраны все / все по умолчанию\t\t\t\t\t\t\n\t\t\tself.dom.markets.on('click', function () {\n\t\t\t\tself.checkButtonsState();\n\t\t\t});\n\t\t},\n\t\tclear: function () {\n\t\t\tdelete this.dom;\n\t\t\tdelete this.marketsModal;\n\t\t\tdelete this.ajaxCall;\n\t\t},\n\t\ttoggleAll: function (selected) {\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\t$(this).prop('checked', selected);\n\t\t\t});\n\t\t},\n\t\tselectDefault: function () {\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\tif ($(this).data('default') === 1)\n\t\t\t\t\t$(this).prop('checked', true);\n\t\t\t\telse\n\t\t\t\t\t$(this).prop('checked', false);\n\t\t\t});\n\t\t},\n\t\tcheckButtonsState: function () {\n\t\t\tvar checkedAll = true,\n\t\t\t\t\tcheckedOnlyDefaults = true;\n\n\t\t\tthis.dom.markets.each(function () {\n\t\t\t\tvar marketInput = $(this);\n\n\t\t\t\t// пусть кнопка \"по умолчанию\" будет всегда активна\t\t\t\t\n\t\t\t\t/*if (marketInput.prop('checked') === false && marketInput.data('default') === 1 || marketInput.prop('checked') === true && marketInput.data('default') === 0)\n\t\t\t\t\tcheckedOnlyDefaults = false;*/\n\n\t\t\t\tif (marketInput.prop('checked') === false)\n\t\t\t\t\tcheckedAll = false;\n\t\t\t});\n\n\t\t\tthis.setCheckAllBtnState(checkedAll);\n\t\t\t//this.setCheckDefaultsBtnState(checkedOnlyDefaults);\n\t\t},\n\t\tsetCheckAllBtnState: function (state) {\n\t\t\tthis.dom.selectAllBtn.prop('checked', state);\n\t\t},\n\t\tsetCheckDefaultsBtnState: function (isAllChecked) {\t\t\t\n\t\t\tif (isAllChecked === true)\n\t\t\t\tthis.dom.selectDefaultBtn.addClass('disabled');\n\t\t\telse\n\t\t\t\tthis.dom.selectDefaultBtn.removeClass('disabled');\n\t\t}\n\t}\n}());","window.ModalWindow = (function() {\n function ModalWindow(settings) {\n this.settings = {\n // Содержимое (текст, html)\n content: settings.content || '',\n // Заголовок\n title: settings.title || '',\n // Подпись рядом с заголовком\n subtitle: settings.subtitle || '',\n // Нужна ли обертка для содержимого (header с кнопкой закрытия, body с установленными стилями)\n hasWrapper: settings.hasWrapper === false ? false : true,\n // Закрывать окно по клику на фон (затенение)\n closeByBackground: settings.closeByBackground === false ? false : true,\n // Закрывать окно по клику на клавишу Esc\n closeByEscape: settings.closeByEscape === false ? false : true,\n // Дополнительный css-класс, присваеваемый родительскому элементу модального окна (overlay)\n className: settings.className || '',\n // Нужно ли выравнивать окно по центру экрана\n shouldBeCentrified: settings.shouldBeCentrified === false ? false : true,\n\n // При закрытии окна не удаляет его из DOM\n hideWithoutRemoving: settings.hideWithoutRemoving === true ? true : false,\n\n // Можно ли менять размер окна и перетаскивать его\n resizable: settings.resizable === true ? true : false,\n\n // дополнительный css-класс для body\n bodyClassname: settings.bodyClassname || '',\n\n // Событие, срабатывающее перед открытием окна\n beforeShow: settings.beforeShow || function() {},\n // Событие, срабатывающее перед закрытием окна\n beforeHide: settings.beforeHide || function() {},\n // Событие, срабатывающее после открытия окна\n afterShow: settings.afterShow || function() {},\n // Событие, срабатывающее после закрытия окна\n afterHide: settings.afterHide || function () { },\n\n containerWidth: settings.containerWidth,\n containerHeight: settings.containerHeight\n };\n\n return this;\n };\n\n ModalWindow.prototype.generateDOM = function() {\n var body = $('body'),\n html = $(generateHTML(this.settings)),\n content = this.settings.content;\n\n this.dom = {\n overlay: html,\n container: html.find('[js-node=\"modal-container\"]'),\n title: html.find('[js-node=\"modal-title\"]'),\n subtitle: html.find('[js-node=\"modal-subtitle\"]'),\n closeBtn: html.find('[js-node=\"modal-close\"]'),\n body: html.find('[js-node=\"modal-body\"]'),\n };\n\n if(this.settings.hasWrapper === false)\n this.dom.container.html(content);\n\n body.append(html);\n };\n\n ModalWindow.prototype.bindUIActions = function() {\n var self = this;\n\n if(self.settings.closeByBackground) {\n this.dom.overlay.on('click', function (e) {\n if ($(e.target).attr('js-node') === 'modal-overlay')\n self.hide();\n });\n }\n\n this.dom.closeBtn.on('click', function(e) {\n self.hide();\n });\n\n if(self.settings.closeByEscape) {\n $(document).on('keyup.hideModalWindow', function (e) {\n if (e.keyCode === 27) {\n self.hide();\n }\n });\n }\n };\n\n ModalWindow.prototype.unbindUIActions = function() {\n this.dom.overlay.off('click');\n this.dom.closeBtn.off('click');\n $(document).off('keyup.hideModalWindow');\n };\n\n /**\n var data = {\n content: '',\n title: '',\n subtitle: ''\n }\n **/\n ModalWindow.prototype.updateContent = function (data) {\n if(data.hasOwnProperty('content')) {\n if (this.settings.hasWrapper)\n this.dom.body.html(data.content);\n else\n this.dom.container.html(data.content);\n }\n\n if(data.hasOwnProperty('title')) {\n if (this.dom.title) {\n this.dom.title.html(data.title);\n }\n }\n\n if(data.hasOwnProperty('subtitle')) {\n if (this.dom.subtitle) {\n this.dom.subtitle.html(data.subtitle);\n }\n }\n\n this.updateDimension();\n };\n\n ModalWindow.prototype.updateDimension = function () {\n if (this.settings.shouldBeCentrified) {\n this.dom.container.css({\n 'margin-left': -this.dom.container.width() / 2,\n 'margin-top': -this.dom.container.height() / 2,\n });\n }\n };\n\n ModalWindow.prototype.moveTo = function (x, y) {\n this.dom.container.css({\n left: x,\n top: y\n });\n };\n\n ModalWindow.prototype.show = function (animationDuration) {\n var self = this;\n\n animationDuration = animationDuration || 200;\n\n if (this.hasOwnProperty('dom') === false) {\n this.generateDOM();\n this.bindUIActions();\n }\n\n this.settings.beforeShow();\n\n this.dom.overlay.fadeIn(animationDuration, function () {\n self.settings.afterShow();\n });\n //this.dom.container.addClass('opened');\n this.updateDimension();\n };\n\n ModalWindow.prototype.hide = function (animationDuration) {\n var self = this;\n\n animationDuration = animationDuration || 200;\n\n if (!this.dom) return;\n\n this.settings.beforeHide();\n\n this.dom.overlay.fadeOut(animationDuration, function () {\n self.settings.afterHide();\n\n if (self.settings.hideWithoutRemoving === false) {\n self.unbindUIActions();\n self.dom.overlay.remove();\n\n delete self.dom;\n delete self.settings;\n }\n });\n\n //this.dom.container.removeClass('opened');\n };\n\n ModalWindow.prototype.destroy = function() {\n this.unbindUIActions();\n this.dom.overlay.remove();\n };\n\n ModalWindow.prototype.loadingEnable = function () {\n this.dom.container.find('[js-node=\"modal__loader-overlay\"]').addClass('visible');\n };\n\n ModalWindow.prototype.loadingDisable = function () {\n this.dom.container.find('[js-node=\"modal__loader-overlay\"]').removeClass('visible');\n };\n\n function generateHTML(settings) {\n var className = settings.className !== '' ? ' ' + settings.className : '';\n var style = '';\n if (settings.containerWidth)\n style += 'width: ' + settings.containerWidth + 'px;';\n if (settings.containerHeight)\n style += 'height: ' + settings.containerHeight + 'px;';\n\n return [\n '
    ',\n '
    ',\n settings.hasWrapper === true ? generateWrapper(settings) : '',\n '
    ',\n '
    '\n ].join('\\n');\n };\n\n function generateWrapper(settings) {\n return [\n '
    ',\n '
    ',\n '' + settings.title + '',\n settings.subtitle.length > 0 ? '' + settings.subtitle + '' : '',\n '
    ',\n '
    ',\n Utils.svgHtml('close', 'modal__close-icon'),\n '
    ',\n '
    ',\n '
    ',\n settings.content,\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    '+ window.Localization.getString('Scripts_Shared_Modules.ModalWindow_29', 'Идёт отправка') + '
    ',\n '
    ',\n ].join('\\n');\n };\n\n return ModalWindow;\n}());","window.PageContent = (function () {\n return {\n init: function () {\n if (globalAppSettings.isMobileDevice) {\n return;\n }\n\n this.scrollbar = new AwesomeScrollbar('#page-content__scrollbar-container', 'm-page-content-scrollbar');\n this.rightColScrollbar = new AwesomeScrollbar('#app-body__right-col-scroll-area', 'app-body__right-col-scrollbar-area-wrapper');\n }\n };\n}());","window.PageNavigation = (function () {\n\n const selectors = {\n slider: '.page-navigation__slider',\n sliderWrapper: '#page-navigation-slider-wrapper',\n btnLeft: '#page-navigation-arrow-left',\n btnRight: '#page-navigation-arrow-right'\n };\n\n let sliderWidth = $(selectors.slider).width();\n let sliderWrapperWidth = $(selectors.sliderWrapper).width();\n let sliderWrapperMargins = parseInt($(selectors.sliderWrapper).css('margin-left') + $(selectors.sliderWrapper).css('margin-right'));\n let scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n let newScrollPosition = 0;\n let scrollableAreaWidth = 220;\n let windowResizeTimer;\n \n return {\n init: function () { \n this.bindUI();\n this.appendBtn();\n },\n\n bindUI: function () {\n var self = this;\n\n $(window).on('resize', function () {\n if (windowResizeTimer) clearTimeout(windowResizeTimer);\n windowResizeTimer = setTimeout(function () {\n self.appendBtn();\n }, 100);\n });\n\n $(selectors.btnLeft).click(function () {\n self.scrollLeft();\n $(selectors.btnRight).removeClass('m-disable');\n });\n\n $(selectors.btnRight).click(function () {\n self.scrollRight();\n $(selectors.btnLeft).removeClass('m-disable');\n }); \n },\n\n scrollLeft: function () {\n scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n newScrollPosition = scrollPosition - scrollableAreaWidth;\n\n $(selectors.sliderWrapper).animate({\n scrollLeft: newScrollPosition\n }, 600);\n\n if (newScrollPosition <= 0) {\n $(selectors.btnLeft).addClass('m-disable');\n }\n },\n\n scrollRight: function () {\n scrollPosition = $(selectors.sliderWrapper).scrollLeft();\n newScrollPosition = scrollPosition + scrollableAreaWidth;\n\n $(selectors.sliderWrapper).animate({\n scrollLeft: newScrollPosition\n }, 600);\n \n if (sliderWrapperWidth + newScrollPosition - sliderWrapperMargins >= sliderWidth) {\n $(selectors.btnRight).addClass('m-disable');\n }\n },\n\n appendBtn: function () {\n if (sliderWidth <= ($(selectors.sliderWrapper).outerWidth())) {\n $(selectors.btnLeft).addClass('m-disable');\n $(selectors.btnRight).addClass('m-disable');\n } else {\n $(selectors.btnRight).removeClass('m-disable');\n }\n }\n }\n\n}());\n\n$(function () {\n if (!globalAppSettings.isMobileDevice) {\n PageNavigation.init();\n } \n});","window.Search = (function () {\n\n var self;\n const selectors = {\n input: '#search-input',\n eventsItem: '[search-event]',\n resultsContainer: '#search-results',\n resultsItemsContainer: '#search-results-items',\n resultsItemsWrapper: '#search-results__items-wrapper',\n resultsScrollarea: '.awesome-scrollbar__area-wrapper.m-search .awesome-scrollbar__content-wrapper',\n resultsCountNode: '#search-results-count',\n closeButton: '#search__close',\n submitButton: '#search__submit'\n };\n\n const _timeSpan = 500;\n var searchTimeout,\n selectedResultIndex = -1;\n var currentSearchMode;\n var currentSearchParams;\n\n var highlightFounded = function (query, str) {\n var regex = new RegExp('(' + query + ')', 'gi');\n var highlightedString = str.replace(regex, '$1');\n return highlightedString !== '' ? highlightedString : str;\n };\n\n const generateItemHtmlHandlers = {\n 'default': {\n overflowResult: function() {\n return [\n '
    ' + Localization.getString('Search.ManyEvents','Найдено слишком много событий. Пожалуйста, уточните запрос.') + '
    '\n ].join('\\n');\n },\n result: function(data, query) {\n var isfavClassname = data.isfav === true ? ' m-active' : ' ',\n highlightedTitle = query ? highlightFounded(query, data.title) : data.title,\n highlightedLeague = query ? highlightFounded(query, data.league) : data.league,\n highlightetId = query ? highlightFounded(query, data.id.toString()) : data.id;\n\n\n var html = [\n '
    ',\n '
    ',\n app.svgSports(data.sportid,'search__sport-icon'),\n '' +\n '',\n '
    ',\n '
    ',\n '' + highlightedTitle + '
    ',\n '' + highlightedLeague + (data.eventPositionText || \"\") + '',\n '
    ',\n ];\n if (currentSearchMode === 'results') {\n html = html.concat([\n '
    ' + data.score + '
    ',\n '
    ' + data.detailed + '
    '\n ]);\n }\n\n html = html.concat([\n '
    ' + highlightetId + '
    ',\n '
    ',\n '
    ' + data.date + '
    ',\n '
    ' + data.time + '
    ',\n '
    '\n ]);\n\n if (currentSearchMode === 'results') {\n html = html.concat([\n '
    '\n ]);\n } else {\n if(data.isNested && window.globalAppSettings.site === \"cps\") {\n html = html.concat([\n '
    ',\n\n ]);\n } else {\n html = html.concat([\n '
    ',\n Utils.svgHtml('favorites', 'favorites-button__icon'),\n '
    '\n ]);\n\n }\n }\n html = html.concat(['
    ']);\n return html.join('\\n');\n }\n },\n 'addresses': {\n overflowResult: function() {\n return [\n '
    ' + Localization.getString('Search.ManyAddresses','Найдено слишком много адресов. Пожалуйста, уточните запрос.') + '
    '\n ].join('\\n');\n },\n result: function(data, query) {\n var highlightFounded = function(query, str) {\n var splits = query.split(' ');\n var highlightedString = str;\n for (var i = 0; i < splits.length; i++) {\n var regex = new RegExp('(' + splits[i] + ')', 'gi');\n\n highlightedString = highlightedString.replace(regex, '$1');\n }\n return highlightedString !== '' ? highlightedString : str;\n };\n\n var highlightedTitle = query ? highlightFounded(query, data.city) : data.city,\n highlightedLeague = query ? highlightFounded(query, data.address) : data.address;\n\n var html = [\n '
    ',\n '
    ', // style=\"flex: 2\"\n '' + highlightedTitle + '
    ',\n '' + highlightedLeague + '',\n '
    ',\n '
    ', // style=\"flex: 1\"\n '
    ' + data.time + '
    ',\n '
    ',\n '
    ',\n '
    '\n ];\n return html.join('\\n');\n }\n }\n }\n\n const generateEmptyHtmlHandlers = {\n 'default': function() {\n return [\n '
    ' + Localization.getString('Search.NoResults','Ничего не найдено. Пожалуйста, уточните запрос.') + '
    '\n ].join('\\n');\n }\n };\n\n const searchHandlers = {\n 'live': function (query) {\n if (query.length < 1) //TODO: redundant?\n return;\n\n Ajax.postJson(\"/Live/Search\", {\n data: { query: query },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n });\n return;\n },\n 'liveSingleSport': function (query) {\n if (query.length < 1) //TODO: redundant?\n return;\n\n Ajax.postJson(\"/Live/Search\", {\n data: { query: query, sportType: currentSearchParams.sportType },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n });\n return;\n },\n 'prematch': function (query) {\n if (query.length < 1)\n return;\n\n Ajax.postJson(\"/Prematch/Search\", {\n data: { string: query }, //sportId: 87\n doCallAjaxViewParsers: false,\n success: function (resp) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n });\n return;\n },\n 'results': function (query) {\n if (query.length < 1)\n return;\n\n var e = $.Event(\"keypress\");\n e.which = 13;\n e.successHandler = function(resp, query) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n $(selectors.input).trigger(e);\n return;\n },\n 'prematchSingleSport': function (query) {\n if (query.length < 1) //TODO: redundant?\n return;\n\n Ajax.postJson(\"/Prematch/Search\", {\n data: { string: query, sportType: currentSearchParams.sportType },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n });\n return;\n },\n 'favLive': function (query) {\n if (query.length < 1) //TODO: redundant?\n return;\n\n Ajax.postJson(\"/Live/Search\", {\n data: { query: query },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n self.drawResultEvents(resp, query);\n self.show();\n }\n });\n return;\n //if (query.length < 1)\n // return;\n\n ////ClientSearch.Search\n },\n 'addresses': function (query) {\n if (query.length < 1) //TODO: redundant?\n return;\n\n Addresses.search(query);\n return;\n }\n };\n\n const hideCloseButtonsHandlers = {\n 'results': function() {\n var e = $.Event('keypress');\n e.which = 13;\n $(selectors.input).trigger(e);\n },\n 'addresses': function (searchNode) {\n Addresses.reset();\n }\n };\n\n const clickOnEventHandlers = { //распихать по разным модулям поиска или скоупам, добавить default\n 'default': function (clickNode) {\n var link = $(clickNode).data('link');\n if (link) {\n SPA.navigate(link);\n self.hide();\n }\n else {\n var id = $(clickNode).data('id');\n if (id) {\n SPA.navigate('/event/' + id);\n self.hide();\n }\n }\n return;\n },\n 'prematch': function (clickNode) {\n return clickOnEventHandlers['default'](clickNode);\n },\n 'prematchSingleSport': function (clickNode) {\n return clickOnEventHandlers['default'](clickNode);\n },\n 'live': function (clickNode) {\n return clickOnEventHandlers['default'](clickNode);\n },\n 'liveSingleSport': function (clickNode) {\n return clickOnEventHandlers['default'](clickNode);\n },\n 'favLive': function (clickNode) {\n return clickOnEventHandlers['default'](clickNode);\n },\n 'results': function (clickNode) {\n var id = $(clickNode).data('id');\n\n BinderResults.scrollToEvent(id);\n\n self.hide();\n return;\n },\n 'addresses': function (clickNode) {\n var id = $(clickNode).data('id');\n\n Addresses.select(id);\n\n self.hide();\n return;\n }\n };\n\n const focusSearchInputHandlers = {\n 'default': function () {\n if (currentSearchMode === 'favLive' && $(this).val().length < 2) {\n\n }\n },\n 'live': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('liveHand');\n return false;\n },\n 'liveSingleSport': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('liveHandSingle');\n return false;\n },\n 'prematch': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('prematchHand');\n return false;\n },\n 'results': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('resultsHand');\n return false;\n },\n 'prematchSingleSport': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('prematchHandSingle');\n return false;\n },\n 'favLive': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('favliveHand');\n return false;\n //if (ClientSearch.isInitiated())\n //self.show();\n //return false;\n },\n 'addresses': function (searchNode) {\n if ($(searchNode).val() !== '')\n self.show();\n\n app.console.log('addressesHand');\n return false;\n }\n };\n\n function selectNextResult() {\n var newIndex = selectedResultIndex + 1;\n\n if (newIndex > $(selectors.eventsItem).length - 1)\n newIndex = 0;\n\n selectResult(newIndex);\n }\n\n function selectPrevResult() {\n var newIndex = selectedResultIndex - 1;\n\n if (newIndex < 0)\n newIndex = $(selectors.eventsItem).length - 1;\n\n selectResult(newIndex);\n }\n\n function selectResult(i) {\n var events = $(selectors.eventsItem);\n\n events.removeClass('m-selected');\n events.eq(i).addClass('m-selected');\n\n selectedResultIndex = i;\n\n scrollToSelected();\n }\n\n function scrollToSelected() {\n var scrollarea = $(selectors.resultsScrollarea),\n scrollareaHeight = scrollarea.height(),\n currentScrollTop = scrollarea.scrollTop(),\n selectedRowPositionTop = $(selectors.eventsItem).eq(selectedResultIndex).position().top;\n\n if (scrollareaHeight <= selectedRowPositionTop - currentScrollTop || selectedRowPositionTop - currentScrollTop < 0) {\n scrollarea.scrollTop(selectedRowPositionTop);\n }\n }\n\n\n return {\n init: function (searchMode, searchParams) {\n this.scrollbar = new AwesomeScrollbar(selectors.resultsItemsContainer, 'm-search');\n this.setCurrentSearchMode(searchMode);\n this.setSearchParams(searchParams);\n this.unbindUI();\n this.bindUI();\n },\n setCurrentSearchMode: function (mode) {\n if (!mode) {\n mode = 'default';\n }\n currentSearchMode = mode;\n },\n setSearchParams: function (params) {\n params = params || {};\n currentSearchParams = params;\n },\n bindUI: function () {\n self = this;\n var body = app.body;\n\n body.on('focus', selectors.input, function () {\n focusSearchInputHandlers[currentSearchMode](this);\n });\n\n body.on('click', selectors.resultsContainer, function (e) {\n return;\n });\n\n body.on('click', selectors.eventsItem, function (e) {\n if(e.target.closest('.favorites-button')) {\n return;\n }\n clickOnEventHandlers[currentSearchMode](this);\n });\n\n body.on('mouseenter', selectors.eventsItem, function () {\n selectResult($(this).index());\n });\n\n this.bindCloseButtonHandler();\n\n body.on('keyup', selectors.input, function (e) {\n var val = $(this).val().trim();\n\n if ($.inArray(e.which, [13, 38, 40, 27]) === -1) {\n clearTimeout(searchTimeout);\n\n if (val.length === 0) {\n self.hideCloseButton();\n } else if (val.length < 2) {\n self.hide();\n } else {\n searchTimeout = setTimeout(searchHandlers[currentSearchMode], _timeSpan, val);\n }\n }\n\n return;\n });\n },\n unbindUI: function () {\n $('body').off('click', selectors.resultsContainer)\n .off('focus', selectors.input)\n .off('click', selectors.eventsItem)\n .off('mouseenter', selectors.eventsItem)\n .off('keyup', selectors.input);\n\n this.unbindCloseButtonHandler();\n },\n show: function () {\n var self = this;\n\n selectedResultIndex = null;\n\n $(selectors.resultsContainer).addClass('m-visible');\n\n $(document).on('click.searchResults', function (e) {\n if (e.target !== $(selectors.input).get(0))\n self.hide();\n });\n\n $('body').on('keyup.searchResults', function (e) {\n // arrow down\n if (e.key === \"ArrowDown\") {\n selectNextResult();\n }\n // arrow up\n else if (e.key === \"ArrowUp\") {\n selectPrevResult();\n }\n // enter\n else if (e.key === \"Enter\") {\n if (selectedResultIndex === null) {\n $(selectors.eventsItem).length === 1 ? clickOnEventHandlers[currentSearchMode]($(selectors.eventsItem).first()) : clickOnEventHandlers[currentSearchMode]();\n } else {\n $(selectors.eventsItem).eq(selectedResultIndex).click()\n }\n }\n // escape\n else if (e.key === \"Escape\") {\n self.hide();\n }\n\n e.stopImmediatePropagation();\n return false;\n });\n },\n hide: function () {\n $(selectors.resultsContainer).removeClass('m-visible');\n $(document).off('click.searchResults');\n $('body').off('keyup.searchResults');\n },\n drawResultEvents: function (response, query) {\n\n var html = '',\n events = response.events,\n isOverflow = response.overflow,\n eventsCnt = events.length;\n query = query || null;\n\n if (eventsCnt > 0) {\n var generateHandlers = (generateItemHtmlHandlers[currentSearchMode] || generateItemHtmlHandlers['default']);\n\n for (var i = 0; i < eventsCnt; i++) {\n html += generateHandlers.result(events[i], query);\n }\n if (isOverflow) {\n html += generateHandlers.overflowResult();\n }\n } else {\n html += (generateEmptyHtmlHandlers[currentSearchMode] || generateEmptyHtmlHandlers['default'])();\n }\n\n\n $(selectors.resultsCountNode).text(eventsCnt);\n $(selectors.resultsItemsContainer).html(html);\n\n if (eventsCnt > 7) {\n $(selectors.resultsItemsWrapper).addClass('m-with-scroll');\n } else {\n $(selectors.resultsItemsWrapper).removeClass('m-with-scroll');\n }\n },\n showCloseButton: function () {\n $(selectors.closeButton).show();\n $(selectors.submitButton).hide();\n },\n hideCloseButton: function () {\n $(selectors.closeButton).hide();\n $(selectors.submitButton).show();\n\n if (hideCloseButtonsHandlers[currentSearchMode])\n hideCloseButtonsHandlers[currentSearchMode](this);\n },\n bindCloseButtonHandler: function () {\n var self = this;\n\n $(selectors.input).on('keyup.closeButton', function () {\n if ($(this).val().length > 0) {\n self.showCloseButton();\n } else {\n self.hideCloseButton();\n }\n })\n\n $(document).on('click', selectors.closeButton, function (e) {\n self.clear();\n $(selectors.input).trigger('keyup');\n });\n },\n unbindCloseButtonHandler: function () {\n $(selectors.input).off('keyup.closeButton');\n\n $(document).off('click', selectors.closeButton);\n },\n clear: function () {\n var self = this;\n $(selectors.input).val('');\n self.hide();\n self.hideCloseButton();\n },\n focusOnInput: function () {\n $(selectors.input).focus();\n }\n }\n}());\n\n//$(function () {\n// window.Search.init();\n//});","window.ErrorHandler = (function () {\n\tvar selectors = {\n\t\terrorContainer: '#app__error'\n\t}\n\n\tfunction show() {\n\t\t$(selectors.errorContainer).addClass('m-visible');\n\t}\n\n\tfunction hide() {\n\t\t$(selectors.errorContainer).removeClass('m-visible');\n\t}\n\n\tfunction handle(jqXHR, textStatus, errorThrown) {\n\t show();\n\t setTimeout(function () {\n\t Ajax.redirect(window.location.pathname);\n\t }, 2000);\n\n\n/*\n\t\tconsole.log('textStatus: ', textStatus);\n\t\tconsole.log('errorThrown: ', errorThrown);\n\t\tconsole.log('XHR: ', jqXHR);\n\t\tconsole.log('XHR.responseJSON: ', jqXHR.responseJSON);\n\t\tconsole.log('XHR.responseTEXT(first 20): ', jqXHR.responseText);\n*/\n\t}\n\n\treturn {\n\t\tshow: show,\n\t\thide: hide,\n\t\thandle: handle\n\t}\n}());\n\n","window.StatisticsSingle = (function () {\n var selectors = {\n externalStatistics: '[show-estat]'\n };\n\n var lastEventId,\n\t\tmodalWin;\n\n function bindUI() {\n\n $('body').on('click', selectors.externalStatistics, function () {\n var externalId = Number($(this).attr('show-estat'));\n\n if (!isNaN(externalId)) {\n showExternalStatistics(externalId);\n }\n });\n }\n\n var showExternalStatistics = function (newEventId) {\n if (newEventId !== lastEventId) {\n modalWin.updateContent({\n content: `\n `\n });\n lastEventId = newEventId;\n }\n modalWin.show();\n };\n\n function init() {\n modalWin = new ModalWindow({\n title: Localization.getString('Events.Statistic','Статистика'),\n content: '',\n className: 'm-modal-win-statistics-single'\n });\n\n modalWin.generateDOM();\n modalWin.bindUIActions();\n\n modalWin.show = function () {\n this.dom.overlay.fadeIn(200);\n this.updateDimension();\n };\n\n modalWin.hide = function () {\n this.dom.overlay.fadeOut(200);\n };\n\n bindUI();\n }\n\n return {\n init: init,\n //show: show,\n //mw: () => { return modalWin; }\n };\n}());\n\n$(function () {\n window.StatisticsSingle.init();\n});","window.Superexpress = (function () {\n var selectors = {\n seCurrentBetplace: '[se-current_drawing_betplace]',\n seCurrentContent: '#se-current_drawing_content',\n seLastBetplace: '[se-last_drawing_betplace]',\n seLastContent: '#se-last_drawing_content',\n\n seShowBetForm: '#se-show_bet_form',\n seShowBetList: '#se-show_bet_list',\n showFileTab: '#se-showFile',\n showTextTab:'#se-showText',\n seBetFormControls: '#se-bet_form_controls',\n seShowPackageForm: '#se-show_package_form',\n\n seToggleBet: '[se-togglebet]',\n couponInfoToggle: '[coupon-info-toggle]',\n seShowBetsByVariantCount: '[se-show_bets_by_variantcount]',\n\n sePaginationLink: '[se-pagination_link]',\n sePaginationInput: '[se-pagination_input]',\n\n seSendBet: '[js-node=\"express-current__send-btn\"]',\n\n seSendPackageBetBtn: '[js-node=\"se-send_package_bet_btn\"]',\n packageBetTableRowInfo: '[package-bet-table-rowinfo]',\n packageBetTableMinSumCell: '[package-bet-table-minsum-cell]',\n packageBetTableCurrentSumCell: '[package-bet-table-currentsum-cell]',\n packageBetCoefs: '[package-bet-coefs]',\n packageBetCoupon: '[package-bet-coupon]',\n packageBetReset: '[bet-package-reset-btn]',\n packageBetConfirm: '[package-bet-confirm]',\n packageBetStatusContainer: '[package-bet-status-container]',\n packageBetPreviewToggle: \"[package-bet-preview-toggle]\",\n packageBetInfo: '[package-bet-info]',\n packageBetRemoveItem: '.superexpress-batch-bet__table-cell-remove',\n packageBetControls: '#superexpress-batch-bet-textarea',\n packageBetClear:\".superexpress-switcher__button-reset\",\n\n\n local: {\n betSumInput: '[js-node=\"express-current__bet-sum-input\"]',\n errorPopup: '[js-node=\"superexpress-events__item-errors\"]',\n currencySelect: '#express-current__currency-select',\n checkboxes: '[js-node=\"express-current__market-input\"]',\n eventsRows: '[js-node=\"express-current__event-row\"]',\n minBetSum: '[js-node=\"express-current__min-bet-sum\"]',\n optionsCnt: '[js-node=\"express-current__opt-count\"]',\n percentageHintCheckbox: '[js-node=\"express__percentage-hint-switcher\"]',\n probabilityPercentsVals: '[js-node=\"express-current__probability-percent-value\"]',\n poolDistVals: '[js-node=\"express-current__pool-dist-value\"]',\n randomBtn: '[js-node=\"express__random-btn\"]',\n resetBtn: '[js-node=\"express-current__reset-btn\"]',\n notSelectedBtn: '[js-node=\"express-current__notselected-btn\"]',\n activeStateSwitcher: '[js-node=express_active-state-switcher]',\n detailedBetLast: '[js-node=express_detailed-bet-last]',\n stateActiveResult: '[se-state_active_result]'\n }\n };\n\n var currency = 'RUB';\n\n var notSelectedPressed = false;\n var savedChoice = [];\n\n var state = {\n isPercentageHintVisible: true,\n };\n\n var getResultMessage = function (status, msg) {\n if (status !== 'error' && status !== 'success')\n return '';\n return [\n '
    ',\n '
    ',\n '
    ' + msg + '
    ',\n '
    '\n ].join('\\n');\n };\n\n var getSuperexpressPageType = function () {\n if ($(selectors.seCurrentBetplace).length > 0)\n return 'current';\n else if ($(selectors.seLastBetplace).length > 0)\n return 'last';\n else\n return 'all';\n };\n\n var init = function () {\n switch (getSuperexpressPageType()) {\n case 'current':\n UIbinder.bind.current();\n checkedInputsStateHandler.load();\n calcForm();\n\n showPercentageHint(state.isPercentageHintVisible);\n $(selectors.local.percentageHintCheckbox).prop('checked', state.isPercentageHintVisible);\n break;\n case 'last':\n UIbinder.bind.last();\n break;\n default:\n UIbinder.bind.all();\n break;\n }\n };\n\n var dispose = function () {\n switch (getSuperexpressPageType()) {\n case 'current':\n UIbinder.unBind.current();\n break;\n case 'last':\n UIbinder.unBind.last();\n break;\n default:\n UIbinder.unBind.all();\n break;\n }\n };\n\n var actions = {\n filterBefore: function (element) {\n var body = app.body;\n app.enableLoading();\n\n if (body.find(selectors.seCurrentBetplace + ' ' + selectors.seShowBetList).is(element)) {\n $(selectors.seBetFormControls).hide();\n $(selectors.seShowBetForm).removeClass('active');\n }\n else if (body.find(selectors.seLastBetplace + ' ' + selectors.seShowBetList).is(element)) {\n $(selectors.seShowBetForm).removeClass('active');\n }\n },\n filterAfter: function (element) {\n app.disableLoading();\n },\n recalculatePackageBet: function () {\n let cntrlVal = $(selectors.packageBetControls).val();\n if (cntrlVal) {\n $('#resultstring').html(cntrlVal.split('\\n').filter(x => x.trim().length > 0).length); //кол-во строк\n $('#resultsimbols').html(cntrlVal.length); //кол-во символов\n\n if (cntrlVal.length > 0) {\n $('#superexpress-batch-bet-reset').removeClass('disabled');\n } else {\n $('#superexpress-batch-bet-reset').addClass('disabled');\n }\n\n let found = cntrlVal.match(/^\\d*/gm);\n let total = found.reduce(function (total, amountString) {\n let amount = parseInt(amountString);\n amount = isNaN(amount) ? 0 : amount;\n return total + amount;\n }, 0);\n $('#sumBet').html(total);\n }\n },\n /*dispatch custom event for matoma purpose*/\n dispatchCustomSubmitEvent: function (responseStatus = 'success') {\n const eventId = responseStatus === 'success' ? 'd-i10-e9' : 'd-i10-e10';\n document.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", {\n bubbles: true,\n detail: {\n id: eventId,\n responseStatus: responseStatus\n }\n }));\n }\n };\n\n var UIbinder = (function () {\n var body = app.body;\n\n function bindCurrent() {\n //#region LOCAL\n\n // Сбросить\n body.on('click', selectors.local.resetBtn, function () {\n $(selectors.local.errorPopup + ':first').css( 'display', 'none');\n resetChoice();\n checkedInputsStateHandler.clearStorageForCurrentAccount();\n calcForm();\n });\n\n // Случайный выбор\n body.on('click', selectors.local.randomBtn, function () {\n $(selectors.local.errorPopup + ':first').css( 'display', 'none');\n randomBtnClickHandler();\n checkedInputsStateHandler.addAll();\n });\n\n body.on('click', selectors.local.notSelectedBtn, function () {\n notSelectedPressed = !notSelectedPressed;\n if (notSelectedPressed) {\n $(this).addClass('m-pressed');\n }\n else {\n $(this).removeClass('m-pressed');\n }\n\n });\n\n // Подсказки в процентах\n body.on('change', selectors.local.percentageHintCheckbox, function () {\n showPercentageHint($(this).prop('checked'));\n });\n\n // выбор коэффициента\n body.on('click', selectors.local.checkboxes, function () {\n var input = $(this);\n var id = input.data('id');\n if (input.prop('checked')) {\n\n checkedInputsStateHandler.add(id);\n\n if (savedChoice.indexOf(id) < 0) {\n savedChoice.push(id);\n }\n\n var savedCount = 0;\n\n $(selectors.local.eventsRows).each(function () {\n\n if ($(this).find(selectors.local.checkboxes + ':checked').length > 0) {\n savedCount++;\n }\n });\n\n if (savedCount >= globalAppSettings.seCount) {\n $(selectors.local.notSelectedBtn).addClass('m-disabled');\n }\n else if (savedCount > 0) {\n $(selectors.local.notSelectedBtn).removeClass('m-disabled');\n }\n\n } else {\n\n checkedInputsStateHandler.remove(id);\n\n var index = savedChoice.indexOf(id);\n if (index > -1) {\n savedChoice.splice(index, 1);\n }\n\n savedCount = 0;\n\n $(selectors.local.eventsRows).each(function () {\n\n if ($(this).find(selectors.local.checkboxes + ':checked').length > 0) {\n savedCount++;\n }\n });\n\n if (savedCount < globalAppSettings.seCount) {\n $(selectors.local.notSelectedBtn).removeClass('m-disabled');\n }\n\n if (savedCount === 0) {\n $(selectors.local.notSelectedBtn).addClass('m-disabled');\n }\n }\n\n calcForm();\n checkInputAndTooltip();\n });\n\n // ввод суммы ставки\n body.on('focus', selectors.local.betSumInput, function () {\n $(this).select();\n });\n body.on('keypress', selectors.local.betSumInput, function (e) {\n if (app.inputIsInteger(e) === false)\n return false;\n });\n body.on('keyup', selectors.local.betSumInput, function () {\n if(!$(this).val().trim()) {\n $(selectors.local.errorPopup + ':first').css( 'display', 'none');\n return;\n }\n checkInputAndTooltip();\n var val = app.stringToNumber($(this).val());\n\n validateForm();\n $(this).val(app.numberToString(val));\n });\n\n // выбор валюты\n body.on('change', selectors.local.currencySelect, function () {\n var newCurrency = $(this).val();\n\n if (currency !== newCurrency) {\n var sumInput = $(selectors.local.betSumInput);\n var betSum = app.stringToNumber(sumInput.val());\n\n switch (newCurrency) {\n case 'Bonuses':\n sumInput.val(app.numberToString(betSum * window.globalAppSettings.bonusExchangeRate));\n break;\n case 'RUB':\n var newSum = Math.floor(betSum / window.globalAppSettings.bonusExchangeRate);\n sumInput.val(newSum > 1 ? app.numberToString(newSum) : 1);\n break;\n }\n\n currency = newCurrency;\n checkInputAndTooltip();\n }\n });\n\n // Подсветить результаты (Last.DetailedBetItem)\n body.on('change', selectors.local.activeStateSwitcher, function () {\n highlightBetActiveStates(this);\n });\n\n //#endregion\n\n //#region CURRENT\n\n // кнопка \"Текущий\" v2.0\n body.on('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetForm, function () {\n var number = $(selectors.seCurrentBetplace).data('number');\n\n this.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", { bubbles: true, detail: { id: 'd-i10-e2', triggerText: $(selectors.seShowBetForm).text() } }));\n\n app.enableLoading();\n Ajax.postJson(\"/baltsystem/CurrentDrawingForm\", {\n data: { number: number },\n success: function () {\n calcForm();\n checkedInputsStateHandler.load();\n app.disableLoading();\n\n showPercentageHint(state.isPercentageHintVisible);\n $(selectors.local.percentageHintCheckbox).prop('checked', state.isPercentageHintVisible);\n }\n });\n $(selectors.seBetFormControls).show();\n $(selectors.seShowBetList).removeClass('active');\n $(this).addClass('active');\n\n return false;\n });\n\n function restartPackageBet() {\n app.enableLoading();\n var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n Ajax.postJson(\"/baltsystem/resetpackagebetform\", {\n data: { drawingNumber: drawingNumber },\n success: function () {\n app.disableLoading();\n actions.recalculatePackageBet();\n }\n });\n }\n\n body.on('click', selectors.seCurrentBetplace + ' ' + selectors.seShowPackageForm, function () {\n restartPackageBet();\n });\n\n\n body.on('click', selectors.seCurrentBetplace + ' ' + selectors.packageBetConfirm, function () {\n app.enableLoading();\n Ajax.postJson(\"/baltsystem/confirmpackagebet\", {\n success: function () {\n app.disableLoading();\n }\n })\n });\n\n body.on('click', selectors.seCurrentBetplace + ' ' + '.betpackage-help-trigger', function () {\n var helpEelement = $(selectors.seCurrentBetplace + ' ' + '#se-help_batch_main');\n var subelements = helpEelement.children('.superexpress-batch-bet__help-body');\n if (subelements.length > 0) {\n subelements.each(function (index) {\n var subelement = $(subelements[index]);\n subelement.toggle();\n });\n }\n });\n\n body.on('click', selectors.seCurrentBetplace + ' ' + '.superexpress-batch-bet__help-close-icon', function () {\n $('.superexpress-batch-bet__help').toggle();\n });\n\n body.on('click', selectors.seCurrentBetplace + ' ' + selectors.packageBetReset, function () {\n restartPackageBet();\n });\n\n body.on('click', selectors.seCurrentContent + ' ' + selectors.couponInfoToggle, function () {\n var couponNode = $(this).closest('[data-coupon-number]');\n var couponNumber = couponNode.attr('data-coupon-number');\n var isExpanded = couponNode.is('[state-expanded]');\n var betNode = couponNode.closest('[data-betnumber]');\n var betNumber = betNode.data('betnumber');\n var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n var ajaxUrl = (isExpanded) ? '/baltsystem/getbriefcouponinfo' : '/baltsystem/getdetailedcouponinfo';\n app.enableLoading();\n Ajax.postJson(ajaxUrl, {\n data: { drawingNumber: drawingNumber, betNumber: betNumber, couponNumber: couponNumber, isCurrent: true },\n success: function () {\n app.disableLoading();\n }\n });\n });\n\n\n // Expand/collapse bet in CurrentDrawingBetList v2.0\n body.on('click', selectors.seCurrentContent + ' ' + selectors.seToggleBet, function () {\n var betNode = $(this).closest('[data-betnumber]');\n var isExpanded = betNode.is('[state-expanded]');\n var betNumber = betNode.data('betnumber');\n\n var isPackageBet = $(this).is(selectors.packageBetInfo);\n var ajaxUrl = undefined;\n var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n if (isPackageBet) {\n ajaxUrl = (isExpanded) ? \"/baltsystem/CurrentDrawingBet\" : \"/baltsystem/getcurrentdrawingdetailedpackagebet\";\n }\n else {\n ajaxUrl = (isExpanded) ? \"/baltsystem/CurrentDrawingBet\" : \"/baltsystem/CurrentDrawingDetailedBet\";\n }\n\n app.enableLoading();\n Ajax.postJson(ajaxUrl, {\n data: { number: drawingNumber, betNumber: betNumber },\n success: function () {\n app.disableLoading();\n }\n });\n return false;\n });\n\n body.on('click', selectors.packageBetStatusContainer + ' ' + selectors.packageBetPreviewToggle, function () {\n var couponNode = $(this).closest('[data-preview-packagebet-coupon]');\n var couponNumber = couponNode.attr('data-preview-packagebet-coupon');\n var isExpanded = couponNode.is('[state-expanded]');\n var ajaxUrl = (isExpanded) ? \"/baltsystem/getcouponbriefinfo\" : \"/baltsystem/getcoupondetailedinfo\";\n app.enableLoading();\n Ajax.postJson(ajaxUrl,\n {\n data: { couponId: couponNumber },\n success: function () { app.disableLoading(); }\n });\n });\n\n // отправить ставку\n body.on('click', selectors.seSendBet, function () {\n if (!validateForm())\n return false;\n var formResults = getFormResults();\n var drawingNumber = $(selectors.seCurrentBetplace).data('number');\n var drawingTitle = $(selectors.seCurrentBetplace).data('title');\n if (currency === 'Bonuses') {\n formResults.sum = Math.round(formResults.sum / window.globalAppSettings.bonusExchangeRate);\n }\n\n app.enableLoading();\n Ajax.postJson(\"/baltsystem/SubmitBet\", {\n data: { number: drawingNumber, moneyValue: formResults.sum, coefs: formResults.coefs, currency: currency },\n success: function (data) {\n var message = (data.result) ? getResultMessage('success', window.Localization.getString('Scripts_Shared_Modules.Superexpress_31', 'Ваше пари успешно принято.')) : getResultMessage('error', data.errorMessage);\n var messageWin = new app.ModalWindow({\n content: message,\n title: drawingTitle,\n });\n if (data.result) {\n actions.dispatchCustomSubmitEvent()\n\n Ajax.getJson(\"/baltsystem/GetViewSet\", {\n data: { number: drawingNumber },\n success: function () {\n currency = 'RUB';\n calcForm();\n messageWin.show();\n app.disableLoading();\n CustomSelect.init([selectors.local.currencySelect]);\n checkedInputsStateHandler.clearStorageForCurrentAccount();\n const updateSuperexpressControlsBehaviour = new CustomEvent('triggerSuperexpressPagerBehaviour', {\n bubbles: true,\n });\n document.dispatchEvent(updateSuperexpressControlsBehaviour);\n\n }\n });\n }\n else {\n const RESPONSE_STATUS = 'error';\n actions.dispatchCustomSubmitEvent(RESPONSE_STATUS)\n messageWin.show();\n app.disableLoading();\n }\n }\n });\n return false;\n });\n\n body.on('click', selectors.showFileTab, function () {\n $(this).addClass('m-active');\n $(selectors.showTextTab).removeClass('m-active');\n $('#fileUploadArea').show();\n $('#textUploadArea').hide();\n });\n\n body.on('click', selectors.showTextTab, function () {\n $(this).addClass('m-active');\n $(selectors.showFileTab).removeClass('m-active');\n $('#fileUploadArea').hide();\n $('#textUploadArea').show();\n });\n\n body.on('input', selectors.packageBetControls, function () {\n actions.recalculatePackageBet();\n });\n\n body.on('click', selectors.packageBetClear, function () {\n $(selectors.packageBetControls).val('');\n $(this).addClass('disabled');\n });\n //#endregion -- CURRENT --\n }\n\n function bindLast() {\n // кнопка \"Результаты\" v2.0\n body.on('click', selectors.seLastBetplace + ' ' + selectors.seShowBetForm, function (e) {\n this.dispatchEvent(new CustomEvent(\"mtmCustomEvent\", { bubbles: true, detail: { id: 'd-i10-e2', triggerText: $(selectors.seShowBetForm).text() } }));\n\n var number = $(selectors.seLastBetplace).data('number');\n app.enableLoading();\n Ajax.postJson(\"/baltsystem/DrawingResult\", {\n data: { number: number },\n success: function () {\n app.disableLoading();\n }\n });\n $(selectors.seShowBetList).removeClass('active');\n $(this).addClass('active');\n return false;\n });\n\n body.on('click', selectors.seLastContent + ' ' + selectors.couponInfoToggle, function () {\n var couponNode = $(this).closest('[data-coupon-number]');\n var couponNumber = couponNode.attr('data-coupon-number');\n var isExpanded = couponNode.is('[state-expanded]');\n var betNode = couponNode.closest('[data-betnumber]');\n var betNumber = betNode.data('betnumber');\n var drawingNumber = $(selectors.seLastBetplace).data('number');\n var ajaxUrl = (isExpanded) ? '/baltsystem/getbriefcouponinfo' : '/baltsystem/getdetailedcouponinfo';\n app.enableLoading();\n Ajax.postJson(ajaxUrl, {\n data: { drawingNumber: drawingNumber, betNumber: betNumber, couponNumber: couponNumber, isCurrent: false },\n success: function () {\n app.disableLoading();\n }\n });\n });\n\n // Expand/collapse bet in LastDrawingBetList v2.0\n body.on('click', selectors.seLastContent + ' ' + selectors.seToggleBet, function () {\n var betNode = $(this).closest('[data-betnumber]');\n var isExpanded = betNode.is('[state-expanded]');\n var betNumber = betNode.data('betnumber');\n var drawingNumber = $(selectors.seLastBetplace).data('number');\n var isPackageBet = $(this).is(selectors.packageBetInfo);\n var selectedVariantCount = isPackageBet ? parseInt($('[selected-variant-count]').attr('selected-variant-count')) : 0;\n var ajaxUrl = undefined;\n if (isPackageBet) {\n ajaxUrl = (isExpanded) ? \"/baltsystem/DrawingBet\" : \"/baltsystem/getlastdrawingdetailedpackagebet\";\n }\n else {\n ajaxUrl = (isExpanded) ? \"/baltsystem/DrawingBet\" : \"/baltsystem/DrawingDetailedBet\";\n }\n\n\n app.enableLoading();\n Ajax.postJson(ajaxUrl, {\n data: { number: drawingNumber, betNumber: betNumber, selectedvariantcount: selectedVariantCount },\n success: function () {\n SPA.updatePageLinks();\n app.disableLoading();\n }\n });\n return false;\n });\n\n // Подсветить результаты (Last.DetailedBetItem)\n body.on('change', selectors.local.activeStateSwitcher, function () {\n highlightBetActiveStates(this);\n });\n\n //#endregion -- LAST --\n }\n\n function unBindCurrent() {\n //LOCAL\n body.off('click', selectors.local.resetBtn)\n .off('click', selectors.local.randomBtn)\n .off('change', selectors.local.percentageHintCheckbox)\n .off('click', selectors.local.checkboxes)\n .off('focus', selectors.local.betSumInput)\n .off('keypress', selectors.local.betSumInput)\n .off('keyup', selectors.local.betSumInput)\n .off('change', selectors.local.activeStateSwitcher)\n .off('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetForm)\n .off('click', selectors.seCurrentBetplace + ' ' + selectors.seShowBetList)\n .off('click', selectors.seCurrentContent + ' ' + selectors.seToggleBet)\n .off('click', selectors.seCurrentContent + ' ' + selectors.sePaginationLink)\n .off('keypress', selectors.seCurrentContent + ' ' + selectors.sePaginationInput)\n .off('click', selectors.seSendBet);\n }\n\n function unBindLast() {\n //LAST\n app.body\n .off('click', selectors.seLastBetplace + ' ' + selectors.seShowBetForm)\n .off('click', selectors.seLastBetplace + ' ' + selectors.seShowBetList)\n .off('click', selectors.seLastContent + ' ' + selectors.seToggleBet)\n .off('click', selectors.seLastContent + ' ' + selectors.seShowBetsByVariantCount)\n .off('click', selectors.seLastContent + ' ' + selectors.sePaginationLink)\n .off('keypress', selectors.seLastContent + ' ' + selectors.sePaginationInput)\n .off('change', selectors.local.activeStateSwitcher);\n }\n\n return {\n bind: {\n current: function () {\n unBindCurrent();\n bindCurrent();\n },\n last: function () {\n unBindLast();\n bindLast();\n },\n all: function () {\n return false;\n }\n },\n unBind: {\n current: unBindCurrent,\n last: unBindLast,\n all: function () {\n return false;\n }\n }\n }\n\n }());\n\n //todo:'superexpressCheckedInputs' - переписать это порно superexpressData то сериализованный, то нет объект, суется в одну переменную WHYYYYYY??? и так везде, выделить в отдельные методы\n var checkedInputsStateHandler = (function () {\n var ids = [];\n\n function save() {\n var accountId = sessionStorage.getItem('accountId');\n var superexpressData = sessionStorage.getItem('superexpressCheckedInputs') || null;\n\n if (superexpressData) {\n superexpressData = JSON.parse(superexpressData);\n if (superexpressData == null) {\n superexpressData = {};\n }\n } else {\n superexpressData = {};\n }\n\n superexpressData[accountId] = ids;\n\n sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressData));\n }\n\n function load() {\n var accountId = sessionStorage.getItem('accountId');\n var superexpressCheckedInputs = sessionStorage.getItem('superexpressCheckedInputs');\n\n if (superexpressCheckedInputs) {\n superexpressCheckedInputs = JSON.parse(superexpressCheckedInputs);\n if (superexpressCheckedInputs != null) {\n if (superexpressCheckedInputs[accountId]) {\n ids = superexpressCheckedInputs[accountId];\n\n if (accountId !== 'unauthorized') {\n superexpressCheckedInputs['unauthorized'] = [];\n sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n }\n\n }\n else if (superexpressCheckedInputs['unauthorized']) {\n if (superexpressCheckedInputs['unauthorized'].length > 0) {\n superexpressCheckedInputs[accountId] = superexpressCheckedInputs['unauthorized'];\n superexpressCheckedInputs['unauthorized'] = [];\n\n sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n\n ids = superexpressCheckedInputs[accountId];\n }\n }\n }\n }\n\n\n setChecked();\n }\n\n function clearStorageForCurrentAccount() {\n var accountId = sessionStorage.getItem('accountId');\n var superexpressCheckedInputs = sessionStorage.getItem('superexpressCheckedInputs');\n\n if (superexpressCheckedInputs) {\n superexpressCheckedInputs = JSON.parse(superexpressCheckedInputs);\n if (superexpressCheckedInputs) {\n superexpressCheckedInputs[accountId] = [];\n delete superexpressCheckedInputs[accountId];\n }\n }\n\n ids = [];\n\n sessionStorage.setItem('superexpressCheckedInputs', JSON.stringify(superexpressCheckedInputs));\n }\n\n function setChecked() {\n var checkboxes = $(selectors.local.checkboxes);\n for (var i = 0; i < ids.length; i++) {\n checkboxes.filter('[data-id=\"' + ids[i] + '\"]').prop('checked', true);\n }\n\n calcForm();\n }\n\n return {\n load: function () {\n load();\n },\n add: function (id) {\n if (ids.indexOf(id) < 0) {\n ids.push(id);\n save();\n }\n },\n remove: function (id) {\n var index = ids.indexOf(id);\n\n if (index > -1) {\n ids.splice(index, 1);\n save();\n }\n },\n addAll: function () {\n var inputs = [];\n\n $(selectors.local.checkboxes).filter(':checked').prop('checked', true).each(function () {\n inputs.push($(this).data('id'));\n });\n\n ids = inputs;\n\n save();\n },\n clearStorageForCurrentAccount: clearStorageForCurrentAccount\n }\n }());\n\n var showPercentageHint = function (newState) {\n if (newState === true) {\n $(selectors.local.probabilityPercentsVals).removeClass('hidden');\n $(selectors.local.poolDistVals).removeClass('hidden');\n } else {\n $(selectors.local.probabilityPercentsVals).addClass('hidden');\n $(selectors.local.poolDistVals).addClass('hidden');\n }\n state.isPercentageHintVisible = newState;\n };\n\n var randomBtnClickHandler = function () {\n\n if (!notSelectedPressed) {\n resetChoice();\n }\n else {\n partialReset();\n }\n randomChoice();\n calcForm();\n };\n\n var resetChoice = function () {\n $(selectors.local.checkboxes).prop('checked', false);\n savedChoice = [];\n notSelectedPressed = false;\n $(selectors.local.notSelectedBtn).removeClass('m-pressed');\n $(selectors.local.notSelectedBtn).addClass('m-disabled');\n };\n\n var partialReset = function () {\n $(selectors.local.eventsRows).each(function () {\n\n checkboxes = $(this).find(selectors.local.checkboxes);\n\n checkboxes.each(function () {\n\n id = $(this).data('id');\n\n if (savedChoice.indexOf(id) < 0) {\n $(this).prop('checked', false);\n }\n\n });\n });\n };\n\n\n var randomChoice = function () {\n const lowerBounds = [0, 40, 60];\n var rand, checkboxes;\n\n $(selectors.local.eventsRows).each(function () {\n\n if ($(this).find(selectors.local.checkboxes + ':checked').length === 0) {\n rand = Math.ceil((Math.random() * 100));\n checkboxes = $(this).find(selectors.local.checkboxes);\n\n for (var i = lowerBounds.length - 1; i >= 0; i--) {\n if (rand >= lowerBounds[i]) {\n checkboxes.eq(i).prop('checked', true);\n var id = checkboxes.eq(i).data('id');\n if (!notSelectedPressed && savedChoice.indexOf(id) < 0) { savedChoice.push(id); }\n break;\n }\n }\n }\n });\n\n if (!notSelectedPressed) { $(selectors.local.notSelectedBtn).addClass('m-disabled'); }\n };\n\n var calcForm = function () {\n var checkedOptionsCnt = 1,\n minBetSum = globalAppSettings.minSuperexpressBetSum || 30,\n betSumInput = $(selectors.local.betSumInput),\n checkedCnt = 0;\n\n $(selectors.local.eventsRows).each(function () {\n checkedCtn = $(this).find(selectors.local.checkboxes + ':checked').length;\n checkedOptionsCnt = checkedOptionsCnt * checkedCtn;\n });\n\n minBetSum = checkedOptionsCnt * minBetSum;\n\n $(selectors.local.optionsCnt).html(checkedOptionsCnt);\n $(selectors.local.minBetSum).html(minBetSum);\n\n\n var localMinBetSum = minBetSum;\n if (currency === 'Bonuses') {\n localMinBetSum *= window.globalAppSettings.bonusExchangeRate;\n }\n\n betSumInput.val(app.numberToString(localMinBetSum));\n\n validateForm();\n };\n\n var isBonusBet = function () {\n return currency === 'Bonuses';\n };\n\n var calcMinBetSum = function () {\n var minBetSum = parseInt($(selectors.local.minBetSum).html());\n return isBonusBet() ? minBetSum * window.globalAppSettings.bonusExchangeRate : minBetSum;\n }\n\n var getMinBetSumErrorText = function () {\n return 'Минимальная сумма пари составляет ' + calcMinBetSum() + (isBonusBet() ? ' бонусов' : ' руб.');\n };\n\n var checkInputAndTooltip = function () {\n if(validateSum()) {\n $(selectors.local.errorPopup + ':first').css( 'display', 'none');\n } else {\n $(selectors.local.errorPopup + ':first').css( 'display', 'block');\n $(selectors.local.errorPopup + ':first').attr('bb-tool', getMinBetSumErrorText());\n }\n };\n\n var validateSum = function () {\n var betSum = app.stringToNumber($(selectors.local.betSumInput).val());\n return betSum >= calcMinBetSum();\n };\n\n var validateForm = function () {\n var result = validateSum();\n if(result) {\n $(selectors.local.eventsRows).each(function () {\n if ($(this).find(selectors.local.checkboxes + ':checked').length === 0) {\n result = false;\n }\n });\n }\n sendBtnState(result);\n return result;\n };\n\n var getFormResults = function () {\n var coefs = [];\n\n $(selectors.local.checkboxes).each(function () {\n if ($(this).prop('checked')) {\n var id = $(this).data('id');\n var eventId = $(this).closest(selectors.local.eventsRows).data('eventid');\n coefs.push({\n coefid: id,\n eventId: eventId\n });\n }\n });\n\n return {\n 'sum': app.stringToNumber($(selectors.local.betSumInput).val()),\n 'coefs': coefs,\n };\n };\n\n var highlightBetActiveStates = function (switchNode) {\n switchNode = $(switchNode);\n var activeResultNodes = switchNode.closest(selectors.local.detailedBetLast).find(selectors.local.stateActiveResult);\n\n if (switchNode.prop('checked') === true) {\n\n let toActivate = activeResultNodes.filter('[data-isactive=True]');\n let toDeactivate = activeResultNodes.filter('[data-isactive=False]');\n\n toActivate.addClass('active');\n toDeactivate.addClass('inactive');\n } else {\n activeResultNodes.removeClass('active');\n activeResultNodes.removeClass('inactive');\n }\n };\n\n var sendBtnState = function (newState) {\n if (newState === true)\n $(selectors.seSendBet).removeClass('m-disabled');\n else\n $(selectors.seSendBet).addClass('m-disabled');\n };\n\n\n\n return {\n init: init,\n dispose: dispose,\n getFormResults: getFormResults,\n highlightBetActiveStates: highlightBetActiveStates,\n actions: actions\n };\n}());","/* TODO УДАЛИТЬ ПОСЛЕ НАСТРОЙКИ УНИФИЦИРОВАННОЙ ПАГИНАЦИИ */\n(function () {\n var selectors = {\n current: '[js-node=\"pagination__current\"]',\n input: '[js-node=\"pagination__current-input\"]'\n };\n\n var bindUI = function () {\n $(document).on('click', selectors.current, function () {\n showInput($(this).parent());\n });\n\n $(document).on('keypress', selectors.input, function (e) {\n if (app.inputIsInteger(e) === false) {\n return false;\n }\n })\n\n $(document).on('blur', selectors.input, function () {\n hideInput($(this).parent());\n });\n };\n\n var showInput = function (parent) {\n if (parent) {\n parent.addClass('visible-input');\n parent.find(selectors.input).select();\n }\n };\n\n var hideInput = function (parent) {\n if (parent) {\n parent.removeClass('visible-input');\n }\n };\n\n $(function () {\n bindUI();\n });\n}());","window.TimeZone = (function () {\n\n const selectors = {\n timeZone: '#tz-select',\n authorizeLocalDateTime: '.LoginLocalDateTime'\n };\n\n return {\n init: function () {\n this.unbindUI();\n this.bindUI();\n },\n\n bindUI: function () {\n $(document).on('change.timezone', selectors.timeZone, function () {\n Ajax.postJson($(selectors.timeZone).data(\"ajaxurl\"), {\n data: { tzId: $(this).val() }\n });\n return false;\n });\n\n $(document).ready(function () {\n $(selectors.authorizeLocalDateTime).val(getLocalDateTimeOffsetString());\n });\n },\n unbindUI: function () {\n $(document).off('change.timezone', selectors.timeZone);\n }\n }\n\n function getLocalDateTimeOffsetString() {\n var date = new Date();\n return date.toISOString();\n }\n}());\n","window.Tooltip = (function () {\n const ERROR_DELAY = 3000;\n var element, content, container, innerContainer;\n var delayTimeout,\n defaultDelay = 2000;\n var isVisible = false;\n\n const MAIN_ATTR = 'bb-tool',\n DELAY_ATTR = 'bb-tool-delay',\n TYPE_ATTR = 'bb-tool-type',\n TEXT_SELECTOR_ATTR = 'bb-tool-text-selector';\n\n var Tooltip = function () {\n container = $('
    ', {\n class: 'tooltip',\n });\n\n innerContainer = $('
    ', {\n class: 'tooltip__inner',\n }).appendTo(container);\n\n container.appendTo('body');\n\n bindUI();\n };\n\n var bindUI = function () {\n let attrSelector = '[' + MAIN_ATTR + ']';\n\n $(document).on('mouseenter', attrSelector, function () {\n element = $(this);\n mouseenterHandler();\n });\n\n $(document).on('mouseleave', attrSelector, function () {\n hide();\n if (delayTimeout) {\n clearTimeout(delayTimeout);\n }\n });\n };\n\n var mouseenterHandler = function () {\n var delay;\n\n if (isVisible) {\n hide();\n }\n\n content = element[0].hasAttribute(TEXT_SELECTOR_ATTR)\n ? $($(element).attr(TEXT_SELECTOR_ATTR)).html()\n : element.attr(MAIN_ATTR);\n if (content === '') {\n return;\n }\n\n if (element[0].hasAttribute(DELAY_ATTR)) {\n delay = parseInt(element.attr(DELAY_ATTR));\n\n if (delay !== 0) {\n delayTimeout = setTimeout(show, delay);\n } else {\n show();\n }\n } else {\n show();\n }\n\n // dispatch event for Matomo Analytics\n document.dispatchEvent(\n new CustomEvent('showTooltip', {\n detail: {\n data: content,\n elem: element,\n },\n })\n );\n\n element.one('remove', hide);\n };\n\n var afterContentInsertedAction = function () {\n innerContainer.height('auto');\n\n container.removeClass('error attention learning success');\n\n switch (element.attr(TYPE_ATTR)) {\n case 'error':\n container.addClass('error');\n break;\n case 'attention':\n container.addClass('attention');\n break;\n case 'learning':\n container.addClass('learning');\n break;\n case 'success':\n container.addClass('success');\n break;\n case 'wide':\n container.addClass('m-wide');\n break;\n default:\n break;\n }\n container.removeClass('left right top bottom height-limited');\n setPosition();\n isVisible = true;\n };\n\n var show = function () {\n innerContainer.html(content).promise().done(afterContentInsertedAction);\n };\n\n var setPosition = function () {\n var elementOffset = element.offset(),\n elementWidth = element.outerWidth(),\n elementHeight = element.outerHeight(),\n tooltipOffset = {\n left: 0,\n top: 0,\n },\n tooltipWidth = container.outerWidth(),\n tooltipHeight = container.outerHeight(),\n windowWidth = $(window).width(),\n windowHeight = $(window).height(),\n positionClassname = 'top';\n\n // по умолчанию отображается сверху от элемента\n tooltipOffset.left =\n elementOffset.left + elementWidth / 2 - tooltipWidth / 2;\n tooltipOffset.top = elementOffset.top - tooltipHeight - 10;\n\n // если выходит за верхнюю границу окна - снизу\n if (tooltipOffset.top < 0) {\n tooltipOffset.top = elementOffset.top + elementHeight + 10;\n positionClassname = 'bottom';\n\n // если и так выходит за границу окна - отображаем сверху, и обрезаем часть содержимого\n // TODO то же самое для случая, когда элемент отображается в верхней части страницы (тултип должен так же обрезаться и располагаться снизу)\n if (tooltipOffset.top + tooltipHeight > windowHeight) {\n var maxHeight = elementOffset.top - elementHeight - 40;\n\n innerContainer.height(maxHeight);\n\n tooltipOffset.top = 10;\n positionClassname = 'top height-limited';\n }\n }\n\n // если выходит за правую границу окна - слева\n if (tooltipOffset.left + tooltipWidth > windowWidth) {\n tooltipOffset.left = elementOffset.left - tooltipWidth - 10;\n tooltipOffset.top =\n elementOffset.top + elementHeight / 2 - tooltipHeight / 2;\n positionClassname = 'left';\n }\n\n // если выходит за левую границу окна - справа\n if (tooltipOffset.left < 0) {\n tooltipOffset.left = elementOffset.left + elementWidth + 10;\n tooltipOffset.top =\n elementOffset.top + elementHeight / 2 - tooltipHeight / 2;\n positionClassname = 'right';\n }\n\n container.show();\n\n container\n .css({\n left: tooltipOffset.left,\n top: tooltipOffset.top,\n })\n .off('transitionend')\n .addClass(positionClassname + ' visible');\n };\n\n var hide = function () {\n isVisible = false;\n\n container.removeClass('visible').on('transitionend', function () {\n container.hide();\n container.removeClass('left right top bottom');\n });\n\n if (typeof element !== 'undefined') {\n element.off('remove');\n }\n $(document).off('touchstart.hideTooltip');\n };\n\n var update = function (elem) {\n if (elem) mouseenterHandler(elem);\n };\n\n function destroyConcrete(node) {\n node.removeAttr(MAIN_ATTR).removeAttr(TYPE_ATTR);\n hide();\n }\n\n function showNode(node, message, type, persistent) {\n if (node === undefined) return false;\n\n if (!(node instanceof jQuery)) {\n node = $(node);\n }\n\n node.attr(MAIN_ATTR, message).attr(TYPE_ATTR, type);\n element = node;\n mouseenterHandler(node);\n if (persistent) return true;\n container.addClass('jump').one('animationend', function (e) {\n container.removeClass('jump');\n var destroyTOID = setTimeout(function () {\n destroyConcrete(node);\n }, ERROR_DELAY);\n node.one('mouseleave', function () {\n destroyConcrete(node);\n clearTimeout(destroyTOID);\n });\n });\n return true;\n }\n\n function errorNode(node, message, persistent) {\n return showNode(node, message, 'error', persistent);\n }\n\n function successNode(node, message, persistent) {\n return showNode(node, message, 'success', persistent);\n }\n\n function updateOpenedTooltipText(node, message) {\n if (node === undefined || !isVisible || node[0] !== element[0]) return;\n innerContainer.html(message).promise().done(afterContentInsertedAction);\n }\n\n $(function () {\n Tooltip();\n });\n\n return {\n update: update,\n hide: hide,\n errorNode: errorNode,\n successNode: successNode,\n updateOpenedTooltipText: updateOpenedTooltipText,\n };\n})();\n","window.TooltipEventInfo = (function () {\n var container, innerContainer, tooltipClass;\n\n var TooltipEventInfo = function () {\n container = $('
    ', {\n class: 'tooltip--event tooltip event-tooltip',\n });\n\n innerContainer = $('
    ', {\n class: 'tooltip__inner event-tooltip__inner',\n }).appendTo(container);\n\n container.appendTo('body');\n\n isMobile = globalAppSettings.isMobileDevice;\n\n bindUI();\n };\n\n var bindUI = function () {\n $(document).on('mouseenter', '[tooltip-event-info]', function () {\n mouseenterHandler($(this));\n });\n\n if (isMobile) {\n $(document).on('touchstart', function () {\n hide();\n });\n } else {\n $(document).on('mouseleave', '[tooltip-event-info]', function () {\n hide($(this));\n });\n }\n };\n\n var mouseenterHandler = function (elem) {\n var data = {\n id: elem.attr('data-id'),\n date: elem.attr('data-date'),\n tv: elem.attr('data-tv'),\n title: elem.attr('data-title'),\n league: elem.attr('data-league'),\n comment: elem.attr('data-comment'),\n };\n\n tooltipClass = elem.attr('tooltip-class');\n\n if (tooltipClass) {\n container.addClass(tooltipClass);\n }\n\n var html = [\n '
    ',\n '' + data.id + '',\n '' + data.date + '',\n data.tv\n ? '' +\n data.tv +\n '
    '\n : '',\n '
    ',\n '
    ' + data.title + '
    ',\n data.league\n ? '
    ' +\n data.league +\n '
    '\n : '',\n data.comment\n ? '
    ' +\n data.comment.trim() +\n '
    '\n : '',\n ].join('\\n');\n\n innerContainer\n .html(html)\n .promise()\n .done(function () {\n innerContainer.height('auto');\n setPosition(elem);\n });\n\n // dispatch event for Matomo Analytics\n document.dispatchEvent(\n new CustomEvent('showEventTooltip', {\n detail: {\n data,\n element: elem[0],\n },\n })\n );\n\n elem.on('remove', function () {\n hide(elem);\n });\n };\n\n var setPosition = function (element) {\n var elementOffset = element.offset(),\n elementWidth = element.outerWidth(),\n tooltipOffset = {\n left: 0,\n top: 0,\n },\n tooltipWidth = container.outerWidth(),\n tooltipHeight = container.outerHeight(),\n positionClassname = 'top';\n\n // по умолчанию отображается сверху от элемента\n tooltipOffset.left = elementOffset.left + elementWidth - tooltipWidth;\n tooltipOffset.top = elementOffset.top - tooltipHeight + 3;\n\n container.show();\n\n container\n .css({\n left: tooltipOffset.left,\n top: tooltipOffset.top,\n })\n .off('transitionend')\n .addClass(positionClassname + ' visible');\n };\n\n var hide = function (elem) {\n if (elem) {\n elem.off('remove');\n }\n\n if (tooltipClass) {\n container.removeClass(tooltipClass);\n tooltipClass = null;\n }\n\n container.removeClass('visible').on('transitionend', function () {\n container.hide();\n container.removeClass('left right top bottom');\n });\n };\n\n var update = function (elem) {\n if (elem) mouseenterHandler(elem);\n };\n\n $(function () {\n TooltipEventInfo();\n });\n\n return {\n update: update,\n hide: hide,\n };\n})();\n","window.TooltipEventScore = (function () {\n const SCOREMAP = {\n general: 'g',\n detailed: 't',\n points: 'p',\n innings: 'i',\n advant: 'a',\n team1: 'f',\n team2: 's',\n };\n const ATTR = 'tooltip-event-score';\n const ATTR_CLASSNAME = 'tooltip-event-score-classname';\n\n var container, innerContainer;\n\n const isMobileDevice = window.globalAppSettings.isMobileDevice\n\n var TooltipEventScore = function () {\n container = $('
    ', {\n class: 'tooltip--event-score tooltip event-tooltip',\n });\n\n innerContainer = $('
    ', {\n class: 'tooltip__inner event-tooltip-score__inner',\n }).appendTo(container);\n\n container.appendTo('body');\n\n !isMobileDevice && bindDesktopUI();\n isMobileDevice && bindMobileUI();\n };\n\n var bindDesktopUI = function () {\n $(document).on('mouseenter', '[' + ATTR + ']', function () {\n tooltipTriggerHandler($(this));\n });\n\n $(document).on('mouseleave', '[' + ATTR + ']', function () {\n hide($(this));\n });\n };\n\n var bindMobileUI = function () {\n const eventType = 'touchstart';\n $(document).on(eventType, '[' + ATTR + ']', function () {\n tooltipTriggerHandler($(this));\n });\n };\n\n var tooltipTriggerHandler = function (elem) {\n var data = elem.attr(ATTR);\n\n if (!data) return;\n\n container.addClass(elem.attr(ATTR_CLASSNAME) || '');\n\n data = JSON.parse(data);\n\n if (!data[SCOREMAP.general]) {\n data[SCOREMAP.general] = {};\n }\n\n var html = [\n '
    ',\n '
    ',\n '
    ',\n '
    ' +\n window.Localization.getString(\n 'Scripts_Shared_Modules.TooltipEventScore_32',\n 'К1'\n ) +\n '
    ',\n '
    ' +\n window.Localization.getString(\n 'Scripts_Shared_Modules.TooltipEventScore_33',\n 'К2'\n ) +\n '
    ',\n '
    ',\n '
    ',\n '
    ' +\n window.Localization.getString(\n 'Scripts_Shared_Modules.TooltipEventScore_34',\n 'ОБЩ'\n ) +\n '
    ',\n '
    ' +\n (data[SCOREMAP.general][SCOREMAP.team1] || '0') +\n '
    ',\n '
    ' +\n (data[SCOREMAP.general][SCOREMAP.team2] || '0') +\n '
    ',\n '
    ',\n '
    ',\n getDetailedScoreHtml(data),\n getPointsHtml(data),\n '
    ',\n '
    ',\n ].join('\\n');\n\n innerContainer\n .html(html)\n .promise()\n .done(function () {\n innerContainer.height('auto');\n setPosition(elem);\n });\n\n dispatchAnalyticsEvent(data, elem)\n\n if(isMobileDevice) {\n setTooltipVisibility(elem);\n return;\n }\n\n elem.on('remove', function () {\n hide(elem);\n });\n };\n\n var getDetailedScoreHtml = function (data) {\n var detailedScoreTableHtml = '';\n if (!data[SCOREMAP.detailed] || data[SCOREMAP.detailed].length === 0)\n return detailedScoreTableHtml;\n\n for (i = 0; i <= data[SCOREMAP.detailed].length - 1; i++) {\n detailedScoreTableHtml += [\n '
    ',\n '
    ' +\n (i + 1) +\n '
    ',\n '
    ' +\n data[SCOREMAP.detailed][i][SCOREMAP.team1] +\n '
    ',\n '
    ' +\n data[SCOREMAP.detailed][i][SCOREMAP.team2] +\n '
    ',\n '
    ',\n ].join('\\n');\n }\n\n return detailedScoreTableHtml;\n };\n\n var getPointsHtml = function (data) {\n var pointsHtml = '';\n\n if (\n data[SCOREMAP.points] &&\n data[SCOREMAP.points][SCOREMAP.team1] !== undefined &&\n data[SCOREMAP.points][SCOREMAP.team2] !== undefined\n ) {\n pointsHtml = [\n '
    ',\n '
    ' +\n window.Localization.getString(\n 'Scripts_Shared_Modules.TooltipEventScore_35',\n 'ОЧКИ'\n ) +\n '
    ',\n '
    ' +\n data[SCOREMAP.points][SCOREMAP.team1] +\n '
    ',\n '
    ' +\n data[SCOREMAP.points][SCOREMAP.team2] +\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n ].join('\\n');\n } else if (data[SCOREMAP.advant] && data[SCOREMAP.advant] != 0) {\n pointsHtml = [\n '
    ',\n '
    ' +\n window.Localization.getString(\n 'Scripts_Shared_Modules.TooltipEventScore_35',\n 'ОЧКИ'\n ) +\n '
    ',\n '
    ' +\n (data[SCOREMAP.advant] == 1 ? 'A' : '40') +\n '
    ',\n '
    ' +\n (data[SCOREMAP.advant] == 2 ? 'A' : '40') +\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n '
    ',\n ].join('\\n');\n }\n\n return pointsHtml;\n };\n\n var setPosition = function (element) {\n var elementOffset = element.offset(),\n elementWidth = element.outerWidth(),\n tooltipOffset = {\n left: 0,\n top: 0,\n },\n tooltipWidth = container.outerWidth(),\n tooltipHeight = container.outerHeight(),\n positionClassname = 'top';\n\n const Y_AXIS_MIN = 0,\n PAGE_CONTENT_PADDING = 10;\n\n // по умолчанию отображается сверху от элемента\n tooltipOffset.left = elementOffset.left + elementWidth - tooltipWidth;\n tooltipOffset.top = elementOffset.top - tooltipHeight;\n\n container.show();\n\n container\n .css({\n left: tooltipOffset.left < Y_AXIS_MIN ? PAGE_CONTENT_PADDING : tooltipOffset.left,\n top: tooltipOffset.top,\n })\n .off('transitionend')\n .addClass(positionClassname + ' visible');\n };\n\n var dispatchAnalyticsEvent = function (d, e) {\n document.dispatchEvent(\n new CustomEvent('showScoreTooltip', {\n detail: {\n d,\n element: e[0],\n },\n })\n );\n }\n\n var setTooltipVisibility = function (e) {\n $(document).on('touchstart', function (eventObject) {\n const isScoreTooltipArea = $('.tooltip--event-score').has(eventObject.target).length;\n if(isScoreTooltipArea) return;\n hide(e);\n $(document).off('touchstart')\n bindMobileUI();\n });\n }\n\n var hide = function (elem) {\n if (elem) {\n elem.off('remove');\n }\n\n container.removeClass('visible').on('transitionend', function () {\n container.hide();\n container.removeClass('left right top bottom');\n });\n };\n\n var update = function (elem) {\n if (elem) tooltipTriggerHandler(elem);\n };\n\n $(function () {\n TooltipEventScore();\n });\n\n return {\n update: update,\n hide: hide,\n };\n})();\n","window.UpButton = (function () {\n \n const selectors = {\n btnUp: '#go-top',\n placeBtn: '.layout__body',\n placeBtnMobile: '[data-mtm-section=\"mobile-layout\"]',\n };\n\n return {\n init: function () {\n this.renderBtn();\n this.bindUI();\n },\n bindUI: function () {\n var self = this;\n\n\n $(window).on('scroll touchmove', function () {\n self.scrollPageUp();\n });\n $(selectors.btnUp).click(function () {\n $(selectors.btnUp).css('pointer-events', 'none');\n self.scrollTopBtn();\n setTimeout(function () {\n $(selectors.btnUp).css('pointer-events', '');\n }, 2000);\n });\n },\n htmlSvgIcon: function (filename, classname) {\n return '';\n },\n renderBtn: function () {\n $(selectors.placeBtn).append('' + this.htmlSvgIcon('arrow', 'up-button__icon') + '');\n $(selectors.placeBtnMobile).append('' + this.htmlSvgIcon('arrow', 'up-button__icon') + '');\n },\n\n scrollPageUp: function () {\n if ($(window).scrollTop() <= \"250\") $(selectors.btnUp).addClass('m-close');\n else $(selectors.btnUp).removeClass('m-close');\n },\n\n scrollTopBtn: function () {\n $(\"html\").animate({ scrollTop: 0 }, 1000);\n }\n }\n}());","window.VerticalMenu = (function () {\n\n var selectors = {\n verticalMenu: '#vertical-menu',\n itemsWrapper: '#vm-sports-filter-items'\n };\n\n return {\n init: function () {\n if (!globalAppSettings.isMobileDevice) {\n this.createScrollbar();\n }\n },\n dispose: function () {\n this.removeScrollbar();\n },\n show: function () {\n $(selectors.verticalMenu).removeClass('hidden');\n },\n hide: function () {\n $(selectors.verticalMenu).addClass('hidden');\n },\n createScrollbar: function () {\n var self = this;\n self.scrollbar = new window.AwesomeScrollbar(selectors.itemsWrapper, 'm-sports-filter-scrollbar');\n },\n removeScrollbar: function () {\n var self = this;\n if (self.scrollbar)\n self.scrollbar.destroy();\n },\n changeFavorites: function () {\n $('.sports-filter__sports-icon.m-favorites').addClass('m-animated');\n setTimeout(function () {\n $('.sports-filter__sports-icon.m-favorites').removeClass('m-animated');\n }, 400);\n },\n }\n}());","var app = window.app = (function () {\n var body = $('#app').first();\n\n return {\n body: body,\n init: function () {\n this.AwesomeScrollbar = window.AwesomeScrollbar || {};\n this.AwesomeHorizontalScrollbar = window.AwesomeHorizontalScrollbar || {};\n this.Balance = window.Balance || { init: function () { } };\n this.CurrentDatetime = window.CurrentDatetime || { init: function () { } };\n this.CustomSelect = window.CustomSelect || {};\n this.Favorites = window.Favorites || { init: function () { } };\n this.MainNavigation = window.MainNavigation || { init: function () { } };\n this.VerticalMenu = window.VerticalMenu || {};\n this.ModalMarkets = window.ModalMarkets || {};\n this.Broadcast = window.Broadcast || {};\n this.ModalWindow = window.ModalWindow || {};\n this.ModeTableLive = window.ModeTableLive || {};\n this.ModeTablePrematch = window.ModeTablePrematch || {};\n this.PageContent = window.PageContent || { init: function () { } };\n this.SportsFilter = window.SportsFilter || {};\n this.Tooltip = window.Tooltip || {};\n this.Superexpress = window.Superexpress || {};\n this.OpenEvent = window.OpenEvent || {};\n this.ErrorHandler = window.ErrorHandler || {};\n this.LogoutTimer = window.LogoutTimer || {};\n this.Search = window.Search || {};\n this.Multi = window.Multi || {};\n this.TimeZone = window.TimeZone || { init: function () { } };\n\n ////shared inits\n this.MainNavigation.init(); // 8.5 ms -- first method + atr-selectors\n this.CurrentDatetime.init(); // 1.1 ms\n this.Favorites.init(); // 0.6 ms\n this.PageContent.init(); // 4.0 ms --awesome sb\n this.Balance.init(); // 1.0 ms\n this.TimeZone.init();\n\n // disable drag and drop on links (default browsers feature)\n //TODO: в цуписе включить\n //$(document).on('dragstart', 'a', () => false);\n\n body.addClass('m-straight-visible');\n },\n //TODO: в utils\n bindModelHtml: function (obj, property, domElement) {\n if (obj.hasOwnProperty('prevValues') === false)\n obj.prevValues = {};\n\n obj.prevValues[property] = null;\n\n Object.defineProperty(obj, property, {\n get: function () {\n return domElement.html();\n },\n set: function (newValue) {\n if (obj.prevValues[property] !== newValue) {\n obj.prevValues[property] = newValue;\n domElement.html(newValue);\n }\n },\n configurable: true\n });\n },\n //TODO: в utils\n inputIsInteger: function (e) {\n return !(e.which !== 8 && e.which !== 0 && (e.which < 48 || e.which > 57));\n },\n //TODO: в utils\n numberToString: function (num) {\n return num ? num.toString().replace(/(\\d)(?=(\\d\\d\\d)+([^\\d]|$))/g, '$1 ') : '0';\n },\n //TODO: в utils\n stringToNumber: function (str) {\n return str ? parseInt(str.replace(/\\s+/g, '')) : null;\n },\n getUrlParams: function (param) {\n var req = window.location.search.substring(1);\n return (req.length === 0)\n ? undefined\n : req.split('&').map(function (x) {\n return x.split('=');\n }).reduce(function (map, obj) {\n map[obj[0]] = obj[1].split(',');\n return map;\n }, {})[param];\n },\n enableLoading: function () {\n body.addClass('is-loading');\n },\n disableLoading: function () {\n body.removeClass('is-loading');\n },\n console: localStorage.getItem('debug') ? window.console : {\n log: function () { },\n error: function () { },\n debug: function () { },\n warn: function () { },\n info: function () { },\n time: function () { },\n timeEnd: function () { },\n group: function () { }\n },\n debug: {\n enable: function (type) {\n type ? localStorage.setItem('debug_' + app.debug.types[type], true) : localStorage.setItem('debug', true);\n window.location.reload();\n return true;\n },\n disable: function (type) {\n type ? localStorage.removeItem('debug_' + app.debug.types[type]) : localStorage.removeItem('debug');\n window.location.reload();\n return false;\n },\n log: function (msg, type) {\n if (localStorage.getItem('debug_' + this.types[type])) {\n console.log(msg);\n }\n }\n },\n generateGUID: function () {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n },\n htmlSvgIcon: function (filename, classname) {\n return '';\n },\n isIE: function () {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n },\n svgSports: function (sportId, className) {\n sportId = sportId || '0';\n className = className || '';\n return '';\n }\n };\n}());\n\n$(function () {\n app.init();\n\n if ($('#classic-betting-cart').length > 0) {\n if (globalAppSettings.isFreeBetEnabled) {\n if (Freebet) {\n Freebet.init();\n }\n }\n BettingCart.load();\n BettingCart.settings.bindUI();\n }\n if (globalAppSettings.isMobileDevice && window.Mobile) {\n window.Mobile.init();\n }\n\n\n\n // switch-case helper for Handlebars\n if (typeof(Handlebars) !== 'undefined') {\n Handlebars.registerHelper('switch', function (value, options) {\n this.switch_value = value;\n this.switch_break = false;\n return options.fn(this);\n });\n\n Handlebars.registerHelper('case', function (value, options) {\n if (value == this.switch_value) {\n this.switch_break = true;\n return options.fn(this);\n }\n });\n\n Handlebars.registerHelper('default', function (value, options) {\n if (this.switch_break == false) {\n return value;\n }\n });\n\n Handlebars.registerHelper('if_eq', function (v1, v2, options) {\n if (v1 === v2) {\n return options.fn(this);\n }\n return options.inverse(this);\n });\n }\n});\n\n// polyfill for ie\nif (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.indexOf(searchString, position) === position;\n };\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import './Shared/app.js';\nimport './Shared/Modules/AwesomeScrollbar.js';\nimport './Shared/Modules/AwesomeHorizontalScrollbar.js';\nimport './Shared/Modules/About.js';\nimport './Shared/Modules/ContentSlider.ts';\nimport './Shared/Modules/CurrentDatetime.js';\nimport './Shared/Modules/CustomSelect.js';\nimport './Shared/Modules/Help.js';\nimport './Shared/Modules/PageContent.js';\nimport './Shared/Modules/PageNavigation.js';\nimport './Shared/Modules/MainNavigation.js';\nimport './Shared/Modules/LiveTimer.js';\nimport './Shared/Modules/ModalWindow.js';\nimport './Shared/Modules/ModalMarkets.js';\nimport './Shared/Modules/Broadcast.ts';\nimport './Shared/Modules/VerticalMenu.js';\nimport './Shared/Modules/Balance.js';\nimport './Shared/Modules/LayoutRightColumn.js';\nimport './Shared/Modules/LayoutResolver.js';\nimport './Shared/Modules/Favorites.js';\nimport './Shared/Modules/Search.js';\nimport './Shared/Modules/StatisticsSingle.js';\nimport './Shared/Modules/Tooltip.js';\nimport './Shared/Modules/TooltipEventInfo.js';\nimport './Shared/Modules/TooltipEventScore.js';\nimport './Shared/Modules/Combobox.js';\nimport './Shared/Modules/ConfirmButton.js';\nimport './Shared/Modules/SuperexpressPagination.js';\nimport './Shared/Modules/UpButton.js';\nimport './Shared/Modules/MobileAppDownloadButton.js';\nimport './Shared/Modules/AccountMessage.js';\nimport './Shared/Modules/TimeZone.js';\n\n//HomeWidgets\nimport './Shared/Modules/HomeWidgets/HomeWidgets.js';\nimport './Shared/Modules/HomeWidgets/WidgetBanners.js';\nimport './Shared/Modules/HomeWidgets/WidgetHelp.js';\nimport './Shared/Modules/HomeWidgets/WidgetPromo.js';\n\n//Split by spa-areas\n//---empty\n\nimport './Shared/Modules/BettingCart/Freebet.js';\nimport './Shared/Modules/BettingCart/StandardCart.js';\nimport './Shared/Modules/BettingCart/StandardCartItem.js';\nimport './Shared/Modules/BettingCart/StandardCartCalc.js';\nimport './Shared/Modules/BettingCart/OneclickCart.js';\nimport './Shared/Modules/BettingCart/BettingCart.js';\n\nimport './Shared/Modules/BookmakerPromocode.js';\n\nimport './Shared/Modules/Superexpress.js';\n\n//old inceptions (to order)\nimport './Shared/Modules/Shared/ErrorHandler.js';\n"],"names":[],"sourceRoot":""}