{"version":3,"file":"spa.js","mappings":";;;;;AAAA;AACA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;ACrFA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;;AAEA;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;AACA;AACA;AACA;AAGA;AACA;;;;;;;ACxKA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5FA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1CA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;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;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;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;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAIA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChQA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;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;AAEA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;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;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAKA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5eA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AASA;AAEA;AACA;AACA;AACA;AAUA;AACA;AACA;AAUA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAiBA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;;AAEA;AACA;AAEA;AAKA;AAIA;AAGA;AAEA;AAMA;AACA;AACA;AACA;AAOA;AAEA;AAIA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAIA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AAIA;AAGA;AACA;AAKA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAIA;AACA;AAIA;AACA;AAIA;AACA;AAMA;AAEA;AAIA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AAKA;AACA;AAGA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAMA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAIA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;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;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtvBA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;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;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;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;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AAWA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;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;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;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnLA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;AAEA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;;AAGA;;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AAEA;AACA;AACA;AACA;AACA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;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;AAEA;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;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;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;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;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5QA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;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;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;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;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AAQA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvVA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxDA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;AC1BA;AAEA;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;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;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;AACA;AACA;AACA;AACA;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;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;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;;;;;;;ACvdA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AAGA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAKA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;ACpPA;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;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA","sources":["webpack:///./Frontend/src/Shared/Main/Live/BinderTextScroll.ts","webpack:///./Frontend/src/Shared/Main/Bonuses/binder.js","webpack:///./Frontend/src/Shared/Main/Event/EventBlock.js","webpack:///./Frontend/src/Shared/Main/Event/OpenEvent.js","webpack:///./Frontend/src/Shared/Main/Event/binder.js","webpack:///./Frontend/src/Shared/Main/History/binder.js","webpack:///./Frontend/src/Shared/Main/Live/BinderLive.js","webpack:///./Frontend/src/Shared/Main/Live/BinderLiveFavorites.js","webpack:///./Frontend/src/Shared/Main/Live/BinderLiveSingleSport.js","webpack:///./Frontend/src/Shared/Main/Live/ModeTableLive.js","webpack:///./Frontend/src/Shared/Main/Live/TableFetcherLive.js","webpack:///./Frontend/src/Shared/Main/Prematch/BinderPrematch.js","webpack:///./Frontend/src/Shared/Main/Prematch/BinderPrematchFavorites.js","webpack:///./Frontend/src/Shared/Main/Prematch/BinderPrematchSingleSport.js","webpack:///./Frontend/src/Shared/Main/Prematch/ModeTablePrematch.js","webpack:///./Frontend/src/Shared/Main/Results/Results.js","webpack:///./Frontend/src/Shared/Main/Results/binder.js","webpack:///./Frontend/src/Shared/Main/SuperExpress/binder.js","webpack:///./Frontend/src/Shared/Main/Tickets/Tickets.js","webpack:///./Frontend/src/Shared/Routing/navigo.js","webpack:///./Frontend/src/Shared/Routing/spa.js","webpack:///webpack/bootstrap","webpack:///./Frontend/src/spa.ts"],"sourcesContent":["// text \"ПРИЕМ СТÐВОК ВРЕМЕÐÐО ПРИОСТÐÐОВЛЕÐ\" will follow scroll\nvar BinderTextScroll = window.BinderTextScroll = (function () {\n interface IListenersType {\n [key: number]: {\n now: () => void | null,\n after: () => void | null,\n };\n }\n\n const listeners: IListenersType = {}; // save scroll eventListeners here\n\n function throttle(fn: () => void, wait: number) {\n let time = Date.now();\n return () => {\n if ((time + wait - Date.now()) < 0) {\n fn();\n time = Date.now();\n }\n };\n }\n\n function bindScroll(coefsNode: JQuery) {\n const el = coefsNode[0]; // get native element from jquery\n const rect = el.getBoundingClientRect();\n const eventId = parseInt(el.dataset.eventId, 10);\n\n if (rect.height < window.innerHeight) {\n return;\n }\n\n const elText: HTMLParagraphElement = el.querySelector(\".events-table__row-blocked-text\");\n elText.style.top = \"10%\";\n\n const throttledMoveText = throttle(moveText.bind(null, el), 300);\n const moveTextAfterScrollEnds = moveText.bind(null, el);\n\n listeners[eventId] = {\n after: null,\n now: null,\n };\n listeners[eventId].now = throttledMoveText;\n listeners[eventId].after = moveTextAfterScrollEnds;\n\n window.addEventListener(\"scroll\", throttledMoveText);\n window.addEventListener(\"scroll\", moveTextAfterScrollEnds);\n }\n\n function unbindScroll(eventId: number) {\n if (!!listeners[eventId]) {\n window.removeEventListener(\"scroll\", listeners[eventId].now);\n window.removeEventListener(\"scroll\", listeners[eventId].after);\n delete listeners[eventId];\n }\n }\n\n function moveText(el: HTMLDivElement) {\n if (isScrolledIntoView(el)) {\n const text: HTMLParagraphElement = el.querySelector(\".events-table__row-blocked-text\");\n const parentRect = el.getBoundingClientRect();\n\n if (parentRect.top < parentRect.height * (-1) + window.innerHeight / 2 + text.offsetHeight * 2) {\n text.classList.remove(\"m-fixed\");\n text.style.top = \"90%\";\n } else if (parentRect.top < 200) {\n text.classList.add(\"m-fixed\");\n text.style.top = \"50%\";\n } else {\n text.classList.remove(\"m-fixed\");\n text.style.top = \"10%\";\n }\n }\n }\n\n function isScrolledIntoView(eventNodeCoefs: HTMLDivElement) {\n const rect = eventNodeCoefs.getBoundingClientRect();\n const elementTop = rect.top;\n const elementBottom = rect.bottom;\n const isVisible = elementTop < window.innerHeight && elementBottom >= 0;\n return isVisible;\n }\n\n return {\n bindScroll,\n unbindScroll\n }\n}());\n","BinderBonuses = window.BinderBonuses = (function () {\n var bindUI = function () {\n return false;\n\n }\n var unBindUI = function () {\n return false;\n }\n\n var bind = function (justLoaded) { bindUI(); };\n var unBind = function () { unBindUI(); };\n\n return {\n bind: bind,\n unBind: unBind,\n name: 'BinderBonuses',\n url: '/Bonuses/GetViewSet'\n };\n}());\n\n//-----------------------------------\n\nScopeBonuses = (function () {\n\n function init() {\n app.VerticalMenu.hide();\n }\n\n function dispose() {\n return;\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeBonuses',\n title: Localization.getString('Shared.Bonuses','БонуÑÑ‹'),\n isLayoutRightColumnVisible: false\n };\n}());","var EventBlock = window.EventBlock = (function () {\n const selectors = {\n header: '[eb-header]',\n titleT1: '[oe-t1]',\n titleT2: '[oe-t2]',\n\n market: '.event-markets__item',\n cell: '.event-markets__coef',\n cellValue: '.event-markets__coef-value'\n };\n\n function animateCellChange(cellNode, isInc) {\n var className = (isInc) ? 'change plus' : 'change minus';\n\n cellNode.addClass(className);\n setTimeout(function () { cellNode.removeClass(className);}, 2000);\n }\n\n\n //ctor\n var EventBlock = function (wrapperNode, eType) {\n this.init(wrapperNode, eType);\n };\n\n var EType = {\n Undefined: 0,\n Accent: 10,\n OpenEvent: 20,\n LiveTable: 30\n };\n EventBlock.EType = EType;\n\n\n //WrapperNode DOM requirements:\n //data-event-id\n //data-islive\n //inner <div [eb-header] data-dscr=\"dscr\" data-isTable=\"\">\n //inner <div id=\"eb-list{id}\" class=\"+m-blocked\">\n EventBlock.prototype.init = function (wrapperNode, eType) {\n this.domNode = wrapperNode;\n this.setType(eType);\n\n this.bindUI();\n\n this.id = this.domNode.data('event-id');\n\n if (this.type === EType.LiveTable) {\n this.isLive = true;\n this.title = this.domNode.closest(ModeTableLive.selectors.event).find(ModeTableLive.selectors.eventTitle).first().text().trim();\n\n return;\n }\n\n this.isLive = Boolean(this.domNode.data('islive'));\n\n if (this.type === EType.OpenEvent) {\n this.loadState();\n this.restoreMarkets();\n }\n\n this.title = this.domNode.find(selectors.titleT1).text() + (this.domNode.find(selectors.titleT2).length ? ' — ' + this.domNode.find(selectors.titleT2).text() : '');\n };\n\n EventBlock.prototype.dispose = function () {\n this.unBindUI();\n };\n\n EventBlock.prototype.setType = function (eType) {\n if (eType === EType.Accent || eType === EType.OpenEvent || eType === EType.LiveTable) {\n this.type = eType;\n }\n else {\n this.type = EType.Undefined;\n }\n };\n\n EventBlock.prototype.bindUI = function () {\n var self = this;\n\n // Betting cart (add/remove)\n self.domNode.on('click', selectors.cell + '[data-aid]', function () {\n var that = $(this);\n\n if (that.hasClass('active')) {\n var oid = that.attr('data-oid');\n if (BettingCart.removeItem(oid)) // return false if cart is sending now, return true if removed or already removed. Blink on false\n that.removeClass('active');\n }\n else {\n var marketNode = that.closest(selectors.market);\n if (marketNode.hasClass('m-blocked'))\n return;\n\n var sData = {\n oId: that.attr('data-oid'),\n aId: that.attr('data-aid'),\n rTitle: marketNode.find('.event-markets__title').text() + ' (' + that.find('.event-markets__coef-title').attr('title') + ')',\n val: that.find(selectors.cellValue).attr('data-coefvalue'),\n eId: self.id,\n eTitle: self.title,\n isLive: self.isLive\n };\n\n if (BettingCart.addItem(sData)) {\n that.addClass('active');\n if (self.type === EType.LiveTable) {\n BettingCart.Highlighting.activate.table();\n }\n }\n\n }\n return false;\n });\n\n if (this.type === EType.OpenEvent) {\n self.domNode.on('click', selectors.market, function (e) {\n if (e.target.className === 'event-markets__body') {\n return false;\n }\n\n var that = $(this);\n that.toggleClass('m-collapsed');\n self.setMarketState(that.attr('data-id'), !that.hasClass('m-collapsed'));\n return false;\n });\n }\n\n };\n EventBlock.prototype.unBindUI = function () {\n this.domNode\n .off('click', selectors.cell + '[data-aid]')\n .off('click', selectors.market);\n };\n\n //\n EventBlock.prototype.setMarketState = function (id, isExpanded) {\n this.state[id] = isExpanded;\n this.saveState();\n };\n EventBlock.prototype.loadState = function () {\n var jsonState = sessionStorage.getItem('event' + this.id);\n this.state = (jsonState === null) ? {} : JSON.parse(jsonState);\n };\n EventBlock.prototype.saveState = function () {\n sessionStorage.setItem('event' + this.id, JSON.stringify(this.state));\n };\n EventBlock.prototype.restoreMarkets = function () {\n var self = this;\n\n for (var key in self.state) {\n var marketNode = self.domNode.find(selectors.market + '[data-id=' + key + ']');\n (self.state[key] === true) ? marketNode.removeClass('m-collapsed') : marketNode.addClass('m-collapsed');\n }\n };\n\n EventBlock.prototype.oldResults = [];\n EventBlock.prototype.saveCurrentState = function () {\n var self = this;\n self.oldResults = [];\n self.domNode.find(selectors.cell + '[data-oid]').each(function (ind) {\n var oid = $(this).data('oid');\n var val = $(this).find(selectors.cellValue).attr('data-coefvalue');\n self.oldResults[oid] = val;\n });\n };\n\n\n return EventBlock;\n}());","var OpenEvent = window.OpenEvent = (function () {\n var self;\n\n const selectors = {\n eventFavstar: '[oe-favstar]',\n searchFavstar: '[search-favstar]',\n searchEvent: '[search-event]'\n };\n\n const DEFER_TIMEOUT = 500;\n var timeoutPool = {};\n function deferAction(key, action) {\n clearTimeout(timeoutPool[key]);\n timeoutPool[key] = setTimeout(function () {\n action();\n delete timeoutPool[key];\n }, DEFER_TIMEOUT);\n }\n\n function getEventBlockInstanceById(eventId) {\n return (self.EventInstance.id == eventId) ? self.EventInstance : null;\n }\n\n function bindUI() {\n //Fave UnFave\n app.body.on('click', selectors.eventFavstar + ',' + selectors.searchFavstar, function () {\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = !that.closest(selectors.searchEvent).length ? self.EventInstance.id : that.closest(selectors.searchEvent).data('id');\n\n var mainEvent = document.querySelector('[data-mei]')\n var mainEventId = mainEvent ? Number(mainEvent.dataset.mei) : NaN;\n\n var allStars = (eventId === self.EventInstance.id) ? $.merge($(selectors.eventFavstar), $(selectors.searchEvent + '[data-id=' + eventId + ']').find(selectors.searchFavstar)) : $(selectors.searchEvent + '[data-id=' + eventId + ']').find(selectors.searchFavstar);\n var typeUrlPart = (self.EventInstance.isLive) ? '/Live' : '/Prematch';\n var actionUrlPart = (isRemovingFromFav) ? '/UnFaveEvent' : '/FaveEvent';\n that.addClass('m-loading');\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_10', 'Добавить в избранное'));\n }\n else {\n allStars.addClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_11', 'Удалить из избранного'));\n }\n Ajax.postJson(typeUrlPart + actionUrlPart, {\n data: {\n id: mainEventId || eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n that.removeClass('m-loading');\n },\n });\n\n return;\n });\n }\n\n function unBindUI() {\n app.body.off('click', selectors.eventFavstar + ',' + selectors.searchFavstar);\n }\n\n return {\n init: function () {\n self = this;\n\n var wrapperNode = $('#event-instance-wrapper');\n if (wrapperNode.length == 1) {\n this.EventInstance = new EventBlock(wrapperNode, EventBlock.EType.OpenEvent);\n }\n else {\n Ajax.redirect('/live');\n }\n\n BettingCart.Highlighting.activate.openEvent();\n bindUI();\n },\n dispose: function () {\n unBindUI();\n if (this.EventInstance) {\n this.EventInstance.dispose();\n }\n }\n }\n}());\n","BinderEvent = window.BinderEvent = (function () {\n return {\n bind: function (justLoaded) {\n },\n unBind: function () {\n },\n name: 'BinderEvent',\n url: '/Event/GetViewSet',\n }\n}());\n\n//--------------------------------------------\n\nScopeEvent = window.ScopeEvent = (function () {\n\n function init() {\n app.VerticalMenu.hide();\n MainNavigation.updatePage();\n\n app.OpenEvent.init();\n\n if (app.OpenEvent.EventInstance.isLive) {\n app.Search.init('live');\n } else {\n app.Search.init('prematch');\n }\n }\n\n function dispose() {\n app.OpenEvent.dispose();\n }\n\n return {\n start: function (justLoaded) {\n init();\n },\n stop: function () {\n dispose();\n },\n name: 'ScopeEvent',\n url: 'EVENT',\n };\n}());","//TODO: переделать:\n//Общий модуль BetHistory.\n// Ð’ нем веÑÑŒ BindUI / UnBindUI .\n// Ð’ нем инкапÑулирован HidtoryUpdatePool.\n//BinderHistory и ScopeHistory облегчить (как в открытом Ñобытии)\n\nvar HistoryUpdatePool = window.HistoryUpdatePool = (function () {\n var timeOutH;\n var intervalH;\n var queueLength = 0;\n var timeout = 4000;\n var totalTimeout = 0;\n var maximumTimeout = 10000;\n\n function add() {\n queueLength++;\n clearTimeout(timeOutH);\n clearInterval(intervalH);\n if (totalTimeout >= maximumTimeout) {\n spillOut();\n }\n else {\n timeOutH = setTimeout(spillOut, timeout);\n intervalH = setInterval(function () {\n totalTimeout += 10;\n }, 10);\n }\n }\n\n function spillOut() {\n clearTimeout(timeOutH);\n clearInterval(intervalH);\n totalTimeout = 0;\n if (queueLength > 0) {\n if ($('#page-content').attr('data-page') === 'history') {\n Ajax.postJson(\"/History/UpdateHistoryTable\", {\n success: function () {\n queueLength = 0;\n window.Balance.update();\n }\n });\n }\n else {\n queueLength = 0;\n }\n }\n }\n\n function stop() {\n clearTimeout(timeOutH);\n clearInterval(intervalH);\n totalTimeout = 0;\n queueLength = 0;\n }\n\n return {\n add: add,\n isEmpty: Boolean(queueLength === 0),\n stop: stop\n };\n}());\n\n//-----------------------------------------------------\n\nBinderHistory = window.BinderHistory = (function () {\n var selectors = {\n hstBetTypeFilter: '#hst-bettype_filter',\n historyDetailedRow: '[js-node=\"history-detailed__row\"]',\n hstBetItem: '[hst-betitem]',\n hstToggleBetItem: '[hst-toggle_betitem]',\n hstBetItemDetailed: '[hst-betitem_detailed]',\n // hstShowMatchFacts: '[hst-show_matchfacts]',\n seActiveStateSwitcher: '[js-node=express_active-state-switcher]',\n eventNum: '.j-history_bet-info',\n paginationLink: '[bal-pagination_link]',\n paginationInput: '[bal-pagination_input]',\n couponToggle : '[history-coupon-info-toggle]'\n };\n\n var actions = {\n filterBefore: function(element) {\n app.enableLoading();\n HistoryUpdatePool.stop();\n },\n filterAfter: function (element) {\n app.Balance.update();\n app.disableLoading();\n },\n filterBetTypeAfter: function(element) {\n $(selectors.hstBetTypeFilter + ' .m-active').removeClass('m-active');\n $(element).addClass('m-active');\n app.Balance.update();\n app.disableLoading();\n }\n };\n\n var bindUI = function () {\n var body = app.body;\n // unbind();\n\n // Переход на Ñтраницу v2.0\n body.on('click', selectors.paginationLink, function () {\n app.enableLoading();\n HistoryUpdatePool.stop();\n Ajax.getJson(\"/History/GetViewSet\", {\n data: { currentPage: $(this).data('pagenumber') },\n success: function () {\n app.disableLoading();\n }\n });\n return false;\n });\n\n // Переход на Ñтраницу по определенному номеру, введенному пользователем v2.0\n body.on('keypress', selectors.paginationInput, function (e) {\n if (e.keyCode === 13) {\n app.enableLoading();\n HistoryUpdatePool.stop();\n Ajax.getJson(\"/History/GetViewSet\", {\n data: { currentPage: $(this).val() },\n success: function () {\n app.disableLoading();\n }\n });\n return false;\n }\n return true;\n });\n\n // Toggle BetItem v2.0\n $(document).on('click', selectors.hstToggleBetItem, function () {\n var betItemNode = $(this).closest(selectors.hstBetItem);\n var isCollapsing = betItemNode.hasClass('m-expanded');\n\n var succes = (isCollapsing)\n ? function () {\n betItemNode.removeClass('m-expanded');\n betItemNode.find(selectors.hstBetItemDetailed).empty();\n app.disableLoading();\n }\n : function () {\n betItemNode.addClass('m-expanded');\n SPA.updatePageLinks();\n app.disableLoading();\n };\n\n app.enableLoading();\n Ajax.postJson(\"/History/ToggleBetState\", {\n data: { betNumber: betItemNode.data('num'), betType: betItemNode.data('type'), isExpanded: isCollapsing },\n success: succes\n });\n return false;\n });\n\n body.on('click', selectors.couponToggle, 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\n var betNode = couponNode.closest('[data-betnumber]');\n var betNumber = betNode.data('betnumber');\n var ajaxUrl = (isExpanded) ? '/history/getbriefcouponinfo' : '/history/getdetailedcouponinfo';\n app.enableLoading();\n Ajax.postJson(ajaxUrl, {\n data: { betNumber: betNumber, couponNumber: couponNumber },\n success: function () {\n app.disableLoading();\n }\n });\n });\n\n //Show Open Event or IsOver MessageWin v2.0\n body.on('click', 'div' + selectors.eventNum, function () {\n var that = $(this);\n\n var link = that.attr('data-link');\n if (link === undefined)\n return;\n\n if (that.attr('is-over') === 'true') {\n if (that.attr('inprogress') === undefined)\n app.Tooltip.errorNode(that, Localization.getString('Events.EventCompleted', 'Событие завершено'));\n else\n app.Tooltip.errorNode(that, Localization.getString('Events.EventBetCompleted', 'Приём Ñтавок завершен'));\n }\n else {\n SPA.navigate(link);\n }\n });\n\n // ПодÑветить результаты балтÑиÑтемы (Last.DetailedBetItem)\n body.on('change', selectors.seActiveStateSwitcher, function () {\n app.Superexpress.highlightBetActiveStates(this);\n });\n };\n\n var unBindUI = function () {\n app.body\n .off('click', selectors.hstToggleBetItem)\n .off('change', selectors.seActiveStateSwitcher)\n .off('click', selectors.eventNum)\n .off('click', selectors.paginationLink)\n .off('keypress', selectors.paginationInput);\n };\n\n var bind = function(justLoaded) { bindUI(); }\n var unBind = function() { unBindUI(); }\n\n\n return {\n bind: bind,\n unBind: unBind,\n bindUI: bindUI,\n name: 'BinderHistory',\n url: '/History/GetViewSet',\n actions: actions\n };\n}());\n\n//--------------------------------------------------------\n\nScopeHistory = window.ScopeHistory = (function () {\n var selectors = {\n mnHistCount: '#mn-hist_count'\n };\n\n\n function init() {\n app.VerticalMenu.hide();\n $(selectors.mnHistCount).removeClass('active');\n app.Balance.update();\n app.Search.bindCloseButtonHandler();\n }\n\n function dispose() {\n HistoryUpdatePool.stop();\n app.Search.unbindCloseButtonHandler();\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); }; //TurnOff signalR before stopping pools\n\n var actions = {\n betSellError: function (obj, data) {\n if (data) Tooltip.errorNode($(obj), data);\n }\n };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeHistory',\n title: Localization.getString('Shared.MyBets', 'Мои пари'),\n isLayoutRightColumnVisible: false,\n actions: actions\n };\n}());\n\n\n","BinderLive = window.BinderLive = (function () {\n const selectors = {\n tbTable: '.events-table',\n tbEvent: '.events-table__body-row',\n\n tbFavstar: '[tb-favstar],[tb-favstar-fav]',\n tbCalendar: '[tb-calendar]',\n searchFavstar: '[search-favstar]',\n searchEvent: '[search-event]',\n\n vmSelectAll: '#sports-filter__select-all',\n vmSportsFilterItem: '.j-sports-filter-item',\n vmSportsFilterSelectButton: '.j-sports-filter-item-select-button',\n vmSportsFilterLinkButton: '.j-sports-filter-item-link-button',\n vmSportsFilterItemsContainer: '#vm-sports-filter-items',\n\n emptyBetplace: '#live-empty_betplace',\n cmSorting: '#cm-sorting',\n\n broadcastFilter: '#tv-broadcast-filter',\n visualizationFilter: '#visualization-filter',\n broadcastFilterFav: '#tv-broadcast-filter-fav',\n visualizationFilterFav: '#visualization-filter-fav',\n\n nestedEventsFilter: '#nested-events-filter',\n favNestedEventsFilter: '#fav-nested-events-filter',\n\n pageScrollbarContainer: '#m-page-content-scrollbar-scrollarea',\n\n removeAll: '#live_favs-remove_all'\n };\n\n const vmSelectedClass = 'm-selected';\n\n var bindUI = function (isFavorite) {\n var body = app.body;\n if (isFavorite === undefined) {\n isFavorite = false;\n }\n\n // toggle SportFilterItem v3.0\n $(document).on('click', selectors.vmSportsFilterItem + '[data-sport-type-id]', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n\n var container = $(this),\n sportId = container.data('sport-type-id');\n\n var isAllChecked = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem + ':not(.m-selected)').length > 0 ? false : true;\n var filterItemsLength = $(selectors.vmSportsFilterItem).length;\n\n if (isAllChecked && filterItemsLength > 1) {\n container.addClass('m-loading');\n Ajax.postJson(\"/Live/EnableOnlyOneItem\", {\n data: {\n sportId: sportId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n $(selectors.vmSelectAll).prop('checked', false);\n app.ModeTableLive.clear();\n $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem).removeClass('m-selected');\n container.addClass('m-selected');\n\n app.ModeTableLive.insertTable(resp.html);\n\n container.removeClass('m-loading');\n }\n });\n } else {\n toggleSportsFilterItem(sportId, container);\n }\n\n return false;\n });\n\n // toggle SportFilter v3.0\n body.on('click', selectors.vmSelectAll, function () {\n TableFetcherLive.stop();\n\n var that = $(this),\n removingAll = !that.prop('checked'),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem);\n\n\n that.parent().parent().addClass('m-loading');\n Ajax.postJson(\"/Live/ToggleSportFilter\", {\n doCallAjaxViewParsers: false,\n success: function () {\n if (removingAll) {\n app.ModeTableLive.clear();\n that.prop('checked', false);\n allItems.removeClass(vmSelectedClass);\n }\n else {\n app.ModeTableLive.update();\n that.prop('checked', true);\n allItems.addClass(vmSelectedClass);\n }\n (app.ModeTableLive.count() === 0)\n ? $(selectors.emptyBetplace).addClass('active')\n : $(selectors.emptyBetplace).removeClass('active');\n that.parent().parent().removeClass('m-loading');\n }\n });\n return false;\n });\n\n // <select> on 'live' page\n body.on('change', selectors.cmSorting, function () {\n Ajax.postJson(\"/Live/SetSortingType\", {\n data: { sortingType: $(this).val() },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n\n var handleBroadcastFilter = function (isFavorite, checkBoxValue) {\n Ajax.postJson(\"/Live/SetBroadcastFilter\", {\n data: { isBroadcastFilter: checkBoxValue, isFavorite: isFavorite },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n };\n\n var handleVisualizationFilter = function (isFavorite, checkBoxValue) {\n Ajax.postJson(\"/Live/SetVisualizationFilter\", {\n data: { isVisualizationFilter: checkBoxValue, isFavorite: isFavorite },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n };\n\n var handleNestedEventsFilter = function (isFavorite, checkboxValue) {\n Ajax.postJson(\"/Live/SetNestedEventsFilter\", {\n data: { isFavorite: isFavorite, isNestedEventsFilter: checkboxValue },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n }\n });\n return false;\n }\n\n // <input[checkbox]> on 'live' page for Broadcast and Visualization filters\n body.on('change', selectors.broadcastFilter, function () {\n handleBroadcastFilter(false, $(this).is(\":checked\"));\n });\n body.on('change', selectors.visualizationFilter, function () {\n handleVisualizationFilter(false, $(this).is(\":checked\"));\n });\n body.on('change', selectors.broadcastFilterFav, function () {\n handleBroadcastFilter(true, $(this).is(\":checked\"));\n });\n body.on('change', selectors.visualizationFilterFav, function () {\n handleVisualizationFilter(true, $(this).is(\":checked\"));\n });\n\n body.on('change', selectors.nestedEventsFilter, function () {\n handleNestedEventsFilter(false, $(this).is(\":checked\"));\n });\n\n body.on('change', selectors.favNestedEventsFilter, function () {\n handleNestedEventsFilter(true, $(this).is(\":checked\"));\n });\n\n // Fave/Unfave calendarEvent\n //TODO: Calendar is obsolete. Удалить поÑле выхода единого ÑобытиÑ\n body.on('click', selectors.tbCalendar, function (e) {\n\n var that = $(this),\n eventId = that.closest(selectors.tbEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n isRemovingFromFav = that.hasClass('m-active');\n\n that.addClass('m-loading');\n Ajax.postJson(isRemovingFromFav ? \"/Calendar/UnFaveEvent\" : \"/Calendar/FaveEvent\", {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n that.toggleClass('m-active');\n\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n var currentEvent = $(selectors.tbEvent + dataIdFilter),\n parentTable = currentEvent.closest(selectors.tbTable),\n nestedEvents = $(`[data-meid=\"${eventId}\"]`);\n if(nestedEvents.length) {\n nestedEvents.each(function() {\n this.remove();\n })\n }\n if (parentTable.find(selectors.tbEvent).length <= 1) {\n ModeTableLive.removeTable(parentTable.data('sportid'));\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n currentEvent.remove();\n }\n\n app.VerticalMenu.changeFavorites();\n\n that.removeClass('m-loading');\n }\n });\n\n return false;\n });\n\n // Fave event v3.0\n body.on('click', (selectors.tbFavstar + ',' + selectors.searchFavstar), function (e) {\n\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = (that.is(selectors.tbFavstar)) ? that.closest(selectors.tbEvent).data('id') : that.closest(selectors.searchEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n allStars = $.merge($(selectors.tbEvent + dataIdFilter).find(selectors.tbFavstar), $(selectors.searchEvent + dataIdFilter).find(selectors.searchFavstar));\n\n that.addClass('m-loading');\n\n var url = isRemovingFromFav ? \"/Live/UnFaveEvent\" : \"/Live/FaveEvent\";\n if (isRemovingFromFav && that.is('[tb-favstar-fav]'))\n url = \"/Live/UnFaveFavoriteEvent\";\n\n Ajax.postJson(url, {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_10', 'Добавить в избранное'));\n if (isFavorite) {\n var currentEvent = $(selectors.tbEvent + dataIdFilter),\n parentTable = currentEvent.closest(selectors.tbTable),\n nestedEvents = $(`[data-meid=\"${eventId}\"]`);\n if(nestedEvents.length) {\n nestedEvents.each(function() {\n this.remove();\n })\n }\n\n if (parentTable.find(selectors.tbEvent).length <= 1) {\n ModeTableLive.removeTable(parentTable.data('sportid'));\n if (app.ModeTableLive.count() === 0) {\n $(selectors.emptyBetplace).addClass('active');\n $(selectors.removeAll).hide();\n }\n else {\n $(selectors.emptyBetplace).removeClass('active');\n }\n }\n else {\n currentEvent.remove();\n }\n }\n }\n else {\n allStars.addClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_11', 'Удалить из избранного'));\n if (isFavorite && that.is(selectors.searchFavstar)) {\n TableFetcherLive.full();\n //TODO: ЗдеÑÑŒ получать только betPlace() без вертикального меню. и возможно не иÑпользовать fetcher (лишние раÑчеты diff)\n $(selectors.emptyBetplace).removeClass('active');\n $(selectors.removeAll).show();\n }\n }\n\n app.VerticalMenu.changeFavorites();\n\n that.removeClass('m-loading');\n },\n });\n\n return;\n });\n\n\n ConfirmButton.init(\n selectors.removeAll,\n function () {},\n '/Live/UnFaveAll',\n function (resp) {\n app.ModeTableLive.destroyTables();\n\n if (app.ModeTableLive.count() === 0) {\n $(selectors.emptyBetplace).addClass('active');\n $(selectors.removeAll).hide();\n } else {\n $(selectors.emptyBetplace).removeClass('active');\n $(selectors.removeAll).show();\n }\n\n app.VerticalMenu.changeFavorites();\n }\n );\n\n (app.ModeTableLive.count() === 0) ? $(selectors.removeAll).hide() : $(selectors.removeAll).show();\n\n };\n\n var unBindUI = function () {\n app.body\n .off('click', (selectors.tbFavstar + ',' + selectors.searchFavstar))\n .off('click', selectors.tbCalendar)\n .off('click', selectors.vmSelectAll)\n .off('change', selectors.cmSorting);\n\n $(document).off('click', selectors.vmSportsFilterItem + '[data-sport-type-id]');\n ConfirmButton.dispose(selectors.removeAll);\n };\n\n var toggleSportsFilterItem = function (sportId, sportsFilterItemContainer, callback) {\n TableFetcherLive.stop();\n\n var removing = sportsFilterItemContainer.hasClass(vmSelectedClass),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem),\n selectAllbtn = $(selectors.vmSelectAll);\n var that = $(this);\n\n sportsFilterItemContainer.addClass('m-loading');\n Ajax.postJson(\"/Live/ToggleSportFilterItem\", {\n data: {\n sportId: sportId,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n\n var prevFilter;\n var insertAfterId;\n if (window.globalAppSettings.site === \"unicom\") {\n app.ModeTableLive.clear();\n that.prop('checked', false);\n allItems.removeClass(vmSelectedClass);\n\n prevFilter = sportsFilterItemContainer.prevAll('.' + vmSelectedClass);\n insertAfterId = (prevFilter.length !== 0) ? prevFilter.data('sport-type-id') : undefined;\n app.ModeTableLive.insertTable(resp.html, insertAfterId);\n sportsFilterItemContainer.addClass(vmSelectedClass);\n } else {\n if (removing) {\n app.ModeTableLive.removeTable(sportId);\n sportsFilterItemContainer.removeClass(vmSelectedClass);\n }\n else {\n prevFilter = sportsFilterItemContainer.prevAll('.' + vmSelectedClass);\n insertAfterId = (prevFilter.length !== 0) ? prevFilter.data('sport-type-id') : undefined;\n app.ModeTableLive.insertTable(resp.html, insertAfterId);\n sportsFilterItemContainer.addClass(vmSelectedClass);\n }\n }\n\n selectAllbtn.prop('checked', (allItems.filter('.' + vmSelectedClass).length === allItems.length));\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n\n sportsFilterItemContainer.removeClass('m-loading');\n\n if (callback) callback();\n }\n });\n }\n\n var bind = function (justLoaded) { bindUI(); };\n var unBind = function () { unBindUI(); };\n var bindFavorites = function (justLoaded) { bindUI(true); };\n var unBindFavorites = function () { unBindUI(); };\n\n return {\n bind: bind,\n bindFavorites: bindFavorites,\n unBind: unBind,\n unBindFavorites: unBindFavorites,\n name: 'BinderLive',\n url: '/Live/GetViewSet',\n };\n}());\n\nScopeLive = (function () {\n function init() {\n app.VerticalMenu.init();\n TableFetcherLive.setMode.standard();\n app.ModeTableLive.init();\n\n app.Search.init('live');\n }\n\n function dispose() {\n app.VerticalMenu.dispose();\n app.ModeTableLive.dispose();\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeLive',\n url: 'LIVE',\n title: Localization.getString('Shared.Live', 'Лайв')\n };\n}());\n","BinderLiveFavorites = window.BinderLiveFavorites = (function () {\n return {\n bind: BinderLive.bindFavorites,\n unBind: BinderLive.unBindFavorites,\n name: 'BinderLiveFavorites',\n url: '/Live/GetFavoritesViewSet',\n };\n})();\n\nScopeLiveFavorites = (function () {\n function init() {\n app.VerticalMenu.init();\n TableFetcherLive.setMode.favorites();\n app.ModeTableLive.init();\n\n app.Search.init('live');\n }\n\n function dispose() {\n app.VerticalMenu.dispose();\n app.ModeTableLive.dispose();\n }\n\n var start = function (justLoaded) {\n init();\n };\n var stop = function () {\n dispose();\n };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeLiveFavorites',\n url: 'LIVE/FAVORITES',\n title: Localization.getString('Shared.FavoriteLive', 'Лайв:Избранное'),\n };\n})();\n","BinderLiveSingleSport = window.BinderLiveSingleSport = (function () {\n const selectors = {\n tbTable: '.events-table',\n tbEvent: '.events-table__body-row',\n\n tbFavstar: '[tb-favstar]',\n tbCalendar: '[tb-calendar]',\n searchFavstar: '[search-favstar]',\n searchEvent: '[search-event]',\n\n\n vmSelectAll: '#sports-filter__select-all',\n vmSportsFilterItem: '.sports-filter__item',\n vmSportsFilterSelectButton: '.j-sports-filter-item-select-button',\n vmSportsFilterLinkButton: '.j-sports-filter-item-link-button',\n vmSportsFilterItemsContainer: '#vm-sports-filter-items',\n\n emptyBetplace: '#live-empty_betplace',\n cmSorting: '#cm-sorting',\n\n broadcastFilter: '#tv-broadcast-filter',\n visualizationFilter: '#visualization-filter',\n\n pageScrollbarContainer: '#m-page-content-scrollbar-scrollarea'\n };\n\n const vmSelectedClass = 'm-selected';\n var sportType;\n\n var bindUI = function (isFavorite) {\n var body = app.body;\n if (isFavorite === undefined) {\n isFavorite = false;\n }\n\n // toggle SportFilterItem v3.0\n $(document).on('click', selectors.vmSportsFilterItem + '[data-sport-type-id]', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n\n var container = $(this),\n sportId = container.data('sport-type-id');\n\n var isAllChecked = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem + ':not(.m-selected)').length > 0 ? false : true;\n\n if (isAllChecked) {\n container.addClass('m-loading');\n Ajax.postJson(\"/Live/EnableOnlyOneItem\", {\n data: {\n sportId: sportId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n $(selectors.vmSelectAll).prop('checked', false);\n app.ModeTableLive.clear();\n $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem).removeClass('m-selected');\n container.addClass('m-selected');\n\n app.ModeTableLive.insertTable(resp.html);\n\n container.removeClass('m-loading');\n }\n });\n } else {\n toggleSportsFilterItem(sportId, container);\n }\n\n return false;\n });\n\n // toggle SportFilter v3.0\n body.on('click', selectors.vmSelectAll, function () {\n TableFetcherLive.stop();\n\n var that = $(this),\n removingAll = !that.prop('checked'),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem);\n\n\n that.parent().parent().addClass('m-loading');\n Ajax.postJson(\"/Live/ToggleSportFilter\", {\n doCallAjaxViewParsers: false,\n success: function () {\n if (removingAll) {\n app.ModeTableLive.clear();\n that.prop('checked', false);\n allItems.removeClass(vmSelectedClass);\n }\n else {\n app.ModeTableLive.update();\n that.prop('checked', true);\n allItems.addClass(vmSelectedClass);\n }\n (app.ModeTableLive.count() === 0)\n ? $(selectors.emptyBetplace).addClass('active')\n : $(selectors.emptyBetplace).removeClass('active');\n\n that.parent().parent().removeClass('m-loading');\n }\n });\n return false;\n });\n\n body.on('change', selectors.cmSorting, function () {\n Ajax.postJson(\"/Live/SetSortingType\", {\n data: { sortingType: $(this).val(), sportType: sportType },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n\n // <input[checkbox]> on 'live' page for Broadcast and Visualization filters\n body.on('change', selectors.broadcastFilter, function () {\n Ajax.postJson(\"/Live/SetBroadcastFilter\", {\n data: { isBroadcastFilter: $(this).is(\":checked\"), isFavorite: false, sportType: sportType },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n body.on('change', selectors.visualizationFilter, function () {\n Ajax.postJson(\"/Live/SetVisualizationFilter\", {\n data: { isVisualizationFilter: $(this).is(\":checked\"), isFavorite: false, sportType: sportType },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTableLive.update();\n (app.ModeTableLive.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n\n // Fave/Unfave calendarEvent\n body.on('click', (selectors.tbCalendar), function (e) {\n\n var that = $(this),\n eventId = that.closest(selectors.tbEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n isRemovingFromFav = that.hasClass('m-active');\n\n that.addClass('m-loading');\n Ajax.postJson(isRemovingFromFav ? \"/Calendar/UnFaveEvent\" : \"/Calendar/FaveEvent\", {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n that.toggleClass('m-active');\n\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n if (isRemovingFromFav) {\n var currentEvent = $(selectors.tbEvent + dataIdFilter),\n parentTable = currentEvent.closest(selectors.tbTable);\n if (parentTable.find(selectors.tbEvent).length <= 1) {\n ModeTableLive.removeTable(parentTable.data('sportid'));\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n currentEvent.remove();\n }\n\n that.removeClass('m-loading');\n }\n });\n\n return false;\n });\n\n // Fave event v3.0\n body.on('click', (selectors.tbFavstar + ',' + selectors.searchFavstar), function (e) {\n\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = (that.is(selectors.tbFavstar)) ? that.closest(selectors.tbEvent).data('id') : that.closest(selectors.searchEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n allStars = $.merge($(selectors.tbEvent + dataIdFilter).find(selectors.tbFavstar), $(selectors.searchEvent + dataIdFilter).find(selectors.searchFavstar));\n\n that.addClass('m-loading');\n Ajax.postJson(isRemovingFromFav ? \"/Live/UnFaveEvent\" : \"/Live/FaveEvent\", {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_10', 'Добавить в избранное'));\n if (isFavorite) {\n var currentEvent = $(selectors.tbEvent + dataIdFilter),\n parentTable = currentEvent.closest(selectors.tbTable);\n\n if (parentTable.find(selectors.tbEvent).length <= 1) {\n ModeTableLive.removeTable(parentTable.data('sportid'));\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n else {\n currentEvent.remove();\n }\n }\n }\n else {\n allStars.addClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_11', 'Удалить из избранного'));\n if (isFavorite && that.is(selectors.searchFavstar)) {\n TableFetcherLive.full();\n //TODO: ЗдеÑÑŒ получать только betPlace() без вертикального меню. и возможно не иÑпользовать fetcher (лишние раÑчеты diff)\n $(selectors.emptyBetplace).removeClass('active')\n }\n }\n\n app.VerticalMenu.changeFavorites();\n\n that.removeClass('m-loading');\n },\n });\n\n return false;\n });\n\n\n ConfirmButton.init(\n '#live_favs-remove_all',\n function () { },\n '/Live/UnFaveAll',\n function (resp) {\n app.ModeTableLive.destroyTables();\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n app.VerticalMenu.changeFavorites();\n }\n );\n\n };\n\n var unBindUI = function () {\n app.body\n .off('click', (selectors.tbFavstar + ',' + selectors.searchFavstar))\n .off('click', selectors.tbCalendar)\n .off('click', selectors.vmSelectAll)\n .off('change', selectors.cmSorting);\n\n $(document).off('click', selectors.vmSportsFilterItem + '[data-sport-type-id]');\n ConfirmButton.dispose('#live_favs-remove_all');\n };\n\n var toggleSportsFilterItem = function (sportId, sportsFilterItemContainer, callback) {\n TableFetcherLive.stop();\n\n var removing = sportsFilterItemContainer.hasClass(vmSelectedClass),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem),\n selectAllbtn = $(selectors.vmSelectAll);\n\n sportsFilterItemContainer.addClass('m-loading');\n Ajax.postJson(\"/Live/ToggleSportFilterItem\", {\n data: {\n sportId: sportId,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (removing) {\n app.ModeTableLive.removeTable(sportId);\n sportsFilterItemContainer.removeClass(vmSelectedClass);\n }\n else {\n var prevFilter = sportsFilterItemContainer.prevAll('.' + vmSelectedClass);\n var insertAfterId = (prevFilter.length !== 0) ? prevFilter.data('sport-type-id') : undefined;\n app.ModeTableLive.insertTable(resp.html, insertAfterId);\n sportsFilterItemContainer.addClass(vmSelectedClass);\n }\n\n selectAllbtn.prop('checked', (allItems.filter('.' + vmSelectedClass).length === allItems.length));\n (app.ModeTableLive.count() === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n\n sportsFilterItemContainer.removeClass('m-loading');\n\n if (callback) callback();\n }\n });\n };\n\n function setScopeData(scopeData) {\n if (scopeData != undefined && scopeData.hasOwnProperty('sport')) {\n sportType = scopeData.sport;\n }\n }\n\n var bind = function (justLoaded, scopeData) { setScopeData(scopeData); bindUI(); };\n var unBind = function () { unBindUI(); };\n var bindFavorites = function (justLoaded) { bindUI(true); };\n var unBindFavorites = function () { unBindUI(); };\n\n return {\n bind: bind,\n bindFavorites: bindFavorites,\n unBind: unBind,\n unBindFavorites: unBindFavorites,\n name: 'BinderLiveSingleSport',\n url: '/Live/GetViewSet',\n };\n}());\n\n//-----------------------------------\n\nScopeLiveSingleSport = (function () {\n\n var sportType;\n\n function init() {\n app.VerticalMenu.init();\n TableFetcherLive.setMode.standartSingleSport(sportType);\n app.ModeTableLive.init();\n\n app.Search.init('liveSingleSport', { sportType: sportType });\n }\n\n function dispose() {\n app.VerticalMenu.dispose();\n app.ModeTableLive.dispose();\n }\n\n var start = function (justLoaded, scopeData) { sportType = scopeData.sportType; init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeLiveSingleSport',\n url: 'LIVE/SPORT',\n };\n}());\n","window.ModeTableLive = (function () {\n const selectors = {\n betPlace: '#bet-place',\n table: '.events-table',\n header: '.events-table__header',\n resultsLine: '[tb-resline]',\n event: '.events-table__body-row',\n eventTitle: '.events-table__title',\n eventAllCoefsCount: '.events-table__all-coefs-count',\n cell: '.events-table__markets-cell',\n scrollbarContentWrapper: '.m-page-content-scrollbar > .awesome-scrollbar__content-wrapper',\n eventCoefs: '.events-table__row-coefs',\n expandAllCoefsButton: '.js-expand-all-coefs',\n sportsFilterItem: '.sports-filter__item',\n expandNestedEventsButton: '.js-expand-nested-events'\n };\n\n const topHeight = {\n bannerHeight: $('#mobile-app-banner').height(),\n headHeight: $('#app-header').height(),\n headerWithBanner: null\n };\n topHeight.headerWithBanner = topHeight.bannerHeight + topHeight.headHeight;\n const visibilityArea = $(window).height();\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 BettingCart.Highlighting.activate.allScopes();\n }\n }\n\n function highlightCoef() {\n if (isClientCartEnabled) {\n window.ClientCart.highlight();\n } else {\n BettingCart.Highlighting.activate.table();\n }\n }\n\n var Table = (function () {\n var Table = function (domTable) {\n this.id = domTable.data('sportid');\n this.domTable = domTable;\n this.header = domTable.find(selectors.header);\n this.isFavorite = domTable.hasClass('m-favorite');\n\n this.bindUI();\n SPA.updatePageLinks();\n };\n\n Table.prototype.bindUI = function () {\n };\n\n return Table;\n }());\n\n var tables = {},\n eventBlocks = {},\n pageContentScrollTop = 0,\n maxEventBlocksCount = 1;\n\n var bindUI = function () {\n\n // Fix table Header v3.0\n if (app.isIE()) {\n $(selectors.scrollbarContentWrapper).on('scroll.liveTable', function () {\n pageContentScrollTop = $(this).scrollTop();\n fixHeader(pageContentScrollTop);\n });\n }\n\n // Betting cart (add/remove) v3.0\n app.body.on('click', selectors.cell + '[data-aid]', function () {\n var that = $(this),\n coefOid = that.attr('data-oid');\n\n if (that.hasClass('active')) {\n removeFromCart(coefOid);\n return false;\n }\n\n var coefVal = that.attr('data-coefvalue'),\n coefAid = that.attr('data-aid');\n var event = that.closest(selectors.event),\n eventId = event.attr('data-id');\n var sData = {\n oId: coefOid,\n aId: coefAid,\n val: coefVal,\n isLive: true,\n eId: eventId,\n };\n\n // return false if cart is sending now or overflowed, return true if added or already added. Blink on false\n addToCart(sData);\n\n return false;\n });\n\n app.body.on('click', selectors.expandNestedEventsButton, function () {\n var mainEventId = $(this).closest(selectors.event).data('id');\n var mainEventNode = $(this).closest(selectors.event);\n var isCollapsing = mainEventNode.hasClass('m-nested-expanded');\n\n var nestedEvents = document.querySelectorAll(`[data-meid=\"${mainEventId}\"`);\n\n if (isCollapsing) {\n var isFavorites = $('#favorites-switcher').hasClass('m-selected');\n Ajax.postJson(\"/Live/HideNestedEvents\", {\n data: {\n mainEventId: mainEventId,\n isFavorites: isFavorites,\n },\n doCallAjaxViewParsers: false,\n success: function (response) {\n $(nestedEvents).each(function () {\n var nestedEventNode = $(this).closest(selectors.event);\n nestedEventNode.addClass('m-hidden');\n });\n mainEventNode.removeClass('m-nested-expanded');\n }\n });\n }\n else {\n Ajax.postJson(\"/Live/ShowNestedEvents\", {\n data: {\n mainEventId: mainEventId,\n },\n doCallAjaxViewParsers: false,\n success: function (response) {\n $(nestedEvents).each(function () {\n var nestedEventNode = $(this).closest(selectors.event);\n nestedEventNode.removeClass('m-hidden');\n });\n mainEventNode.addClass('m-nested-expanded');\n }\n });\n }\n return false;\n })\n\n //Expand EventCoefs\n app.body.on('click', selectors.expandAllCoefsButton, function () {\n var eventNode = $(this).closest(selectors.event),\n coefsNode = eventNode.find(selectors.eventCoefs),\n isCollapsing = coefsNode.hasClass('m-visible'),\n id = eventNode.data('id');\n\n if ($('#mobile-app-banner').css('display') == 'none') {\n $('.events-table__row-main-info').css('top', topHeight.headHeight);\n } else {\n $('.events-table__row-main-info').css('top', topHeight.headerWithBanner);\n }\n\n //filter sticky\n\n if ($('.events-table__scoring', eventNode).length > 0) {\n $(eventNode).attr('data-filter-sticky', 'bigSpace');\n } else {\n $(eventNode).attr('data-filter-sticky', 'ordinarySpace');\n }\n\n if (isCollapsing) {\n eventNode.removeClass('m-expanded');\n disposeEventBlock(id);\n coefsNode.empty();\n coefsNode.removeClass('m-visible');\n Ajax.postJson('/Live/CollapseEventCoefs', { data: { id: id }, doCallAjaxViewParsers: false });\n\n\n\n let defaultPosition = $(eventNode).data('node-saved-top');\n let scrollEvent = $(window).scrollTop();\n if (defaultPosition == undefined) {\n defaultPosition = scrollEvent;\n };\n\n let deltaScroll = Number(defaultPosition) - Number(scrollEvent);//direction scrollTop\n\n let positionEventBeforeCollapse = $(eventNode).offset().top;\n //scrollDefaultPosition\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n\n if ((deltaScroll < 0) && (scrollEvent > defaultPosition) && (scrollEvent > positionEventBeforeCollapse)) {\n if ($('#mobile-app-banner').css('display') == 'none') {\n $(window).scrollTop(eventNode.offset().top - topHeight.headHeight);\n } else {\n $(window).scrollTop(eventNode.offset().top - topHeight.headerWithBanner);\n }\n } else if (deltaScroll > 0 || scrollEvent < positionEventBeforeCollapse) {\n $(window).scrollTop(scrollEvent);\n } else {\n $(window).scrollTop(defaultPosition);\n }\n }\n\n return false;\n } else {\n $(eventNode).data('node-saved-top', $(window).scrollTop());\n }\n\n eventNode.addClass('m-expanded');\n eventNode.addClass('m-loading');\n Ajax.postJson(\"/Live/ExpandEventCoefs\", {\n data: {\n id: id,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n var newCoefsNode = $(resp.html);\n coefsNode.replaceWith(newCoefsNode);\n\n initEventBlock(newCoefsNode);\n if (!isClientCartEnabled) {\n BettingCart.Highlighting.activate.openEvent();\n } else {\n window.ClientCart.highlight();\n }\n\n if (Object.keys(eventBlocks).length > maxEventBlocksCount) {\n var minEventBlock = Object.values(eventBlocks).reduce(function (acc, val) { return (val.orderValue < acc.orderValue) ? val : acc; }, { orderValue: Infinity });\n\n minEventBlock.domNode.closest(selectors.event).removeClass('m-expanded');\n minEventBlock.domNode.empty();\n minEventBlock.domNode.removeClass('m-visible');\n disposeEventBlock(minEventBlock.id);\n }\n\n dispatchShowEventsListCoefsEvent();\n eventNode.removeClass('m-loading');\n }\n });\n return false;\n });\n };\n\n var dispatchShowEventsListCoefsEvent = function () {\n let ids = $(selectors.event + '.m-expanded').map(function () {\n return $(this).attr('data-id');\n }).toArray();\n\n if (ids.length > 0) {\n console.log('dispatchShowEventsListCoefsEvent');\n document.dispatchEvent(new CustomEvent('showEventsListCoefs', {\n detail: {\n ids: ids\n }\n }));\n } else {\n document.dispatchEvent(new CustomEvent('stopShowingEventsListCoefs'));\n }\n };\n\n var unbindUI = function () {\n app.body\n .off('click', selectors.cell + '[data-aid]')\n .off('click', selectors.expandAllCoefsButton)\n .off('click', selectors.expandNestedEventsButton);\n\n if (app.isIE()) {\n $(selectors.scrollbarContentWrapper).off('scroll.liveTable');\n }\n };\n\n var init = (function () {\n $(selectors.table).each(function () {\n var self = $(this);\n var id = $(this).data('sportid');\n\n tables[id] = new Table(self);\n });\n\n highlightCoef();\n\n setTimeout(function () {\n $(selectors.scrollbarContentWrapper).scrollTop(sessionStorage.getItem('livePageContentScrollTop') || 0)\n }, 10);\n\n bindUI();\n if (!isEmpty()) {\n TableFetcherLive.start();\n }\n\n maxEventBlocksCount = globalAppSettings.liveTableMaxExpandedEvents || 1;\n });\n\n var fixHeader = function (scrollTop) {\n for (key in tables) {\n var table = tables[key];\n var top = table.domTable.position().top + parseInt(table.domTable.css('margin-top')) + 10;\n var height = table.domTable.outerHeight();\n\n if (scrollTop > top && scrollTop < top + height - 25) {\n table.header.css({\n transform: 'translateY(' + (scrollTop - (top + 2)) + 'px)'\n });\n } else {\n table.header.css({\n transform: 'translateY(0)'\n });\n }\n }\n };\n\n var update = function () {\n clear();\n dispatchShowEventsListCoefsEvent();\n\n $(selectors.table).each(function () {\n var self = $(this);\n var id = $(this).data('sportid');\n\n tables[id] = new Table(self);\n\n //filter sticky\n if ($('.events-table__scoring', self).length > 0) {\n $('.events-table__body-row.m-expanded', self).attr('data-filter-sticky', 'bigSpace');\n } else {\n $('.events-table__body-row.m-expanded', self).attr('data-filter-sticky', 'ordinarySpace');\n }\n });\n\n highlightCoef();\n\n $(selectors.scrollbarContentWrapper).scroll();\n\n if (isEmpty()) {\n $('#live-empty_betplace').addClass('active');\n } else {\n TableFetcherLive.start();\n\n if ($('#mobile-app-banner').css('display') == 'none') {\n $('.events-table__row-main-info').css('top', topHeight.headHeight);\n } else {\n $('.events-table__row-main-info').css('top', topHeight.headerWithBanner);\n }\n }\n\n initEventBlocks();\n };\n\n var destroyTables = function () {\n for (var key in tables) {\n tables[key].domTable.remove();\n delete tables[key];\n }\n };\n\n var removeTable = function (id) {\n var table = tables[id];\n if (table !== undefined) {\n table.domTable.remove();\n delete tables[id];\n }\n if (!isEmpty()) {\n TableFetcherLive.start();\n }\n\n initEventBlocks();\n };\n\n var clear = function () {\n for (var key in tables) {\n tables[key].domTable.remove();\n delete tables[key];\n }\n };\n\n var dispose = function () {\n TableFetcherLive.stop();\n clear();\n unbindUI();\n disposeEventBlocks();\n sessionStorage.setItem('livePageContentScrollTop', pageContentScrollTop);\n };\n\n var insertTable = function (html, insertAfterId) {\n var self = $(html);\n var id = self.data('sportid');\n\n if (tables[id] != undefined) {\n tables[id].domTable.remove();\n delete tables[id];\n }\n\n if (insertAfterId !== undefined) {\n var insertAfterTable = tables[insertAfterId];\n (insertAfterTable !== undefined) ? self.insertAfter(insertAfterTable.domTable) : $(selectors.betPlace).prepend(self);\n }\n else {\n $(selectors.betPlace).prepend(self);\n }\n\n tables[id] = new Table(self);\n\n highlightCoef();\n\n if (!isEmpty()) {\n dispatchShowEventsListCoefsEvent();\n TableFetcherLive.start();\n }\n };\n\n var disposeEventBlocks = function () {\n for (var key in eventBlocks) {\n disposeEventBlock(key);\n }\n eventBlocks = {};\n }\n\n var initEventBlocks = function () {\n disposeEventBlocks();\n var wrapperNodes = $(selectors.eventCoefs + '.m-visible');\n if (wrapperNodes.length > 0) {\n wrapperNodes.each(function () {\n initEventBlock($(this));\n });\n\n if (isClientCartEnabled) {\n window.ClientCart.highlight();\n } else {\n BettingCart.Highlighting.activate.openEvent();\n }\n }\n }\n\n function disposeEventBlock(id) {\n if(!eventBlocks[id]) {\n return\n }\n eventBlocks[id].dispose();\n delete eventBlocks[id];\n BinderTextScroll.unbindScroll(id);\n }\n\n function initEventBlock(node) {\n var eventBlock = new EventBlock(node, EventBlock.EType.LiveTable);\n BinderTextScroll.bindScroll(eventBlock.domNode);\n\n if (eventBlock.id) {\n var maxOrderValue = Math.max.apply(null, Object.values(eventBlocks).map(function (x) { return x.orderValue }));\n eventBlock.orderValue = (maxOrderValue == -Infinity) ? 0 : maxOrderValue + 1;\n eventBlocks[eventBlock.id] = eventBlock;\n //new AwesomeScrollbar('[data-event-id=\"' + eventBlock.id + '\"] [js-node=\"accent-event-body\"]', 'm-accent-event');\n }\n }\n\n function getEventBlockInstanceById(eventId) {\n return (eventBlocks.hasOwnProperty(eventId)) ? eventBlocks[eventId] : null;\n }\n\n const DEFER_TIMEOUT = 1500;\n var timeoutPool = {};\n function deferAction(key, action) {\n clearTimeout(timeoutPool[key]);\n timeoutPool[key] = setTimeout(function () {\n action();\n delete timeoutPool[key];\n }, DEFER_TIMEOUT);\n }\n\n var count = function () { return Object.keys(tables).length };\n var isEmpty = function () { return count() === 0 };\n\n return {\n 'tables': tables,\n 'count': count,\n 'init': init,\n 'dispose': dispose,\n 'isEmpty': isEmpty,\n 'update': update,\n 'clear': clear,\n 'removeTable': removeTable,\n 'destroyTables': destroyTables,\n 'insertTable': insertTable,\n 'selectors': selectors\n };\n}());","var TableFetcherLive = window.TableFetcherLive = (function () {\n const moduleName = 'TableFetcherLive';\n\n const selectors = {\n betPlace: '#bet-place',\n emptyBetplace: '#live-empty_betplace',\n tbCell: '.events-table__markets-cell',\n tbEventUnique: '#te',\n tbEvent: '.events-table__body-row',\n\n tbScore: '.events-table__body-score',\n tbMatchTime: '.live-timer__comment',\n tbStartTime: '.live-timer__start-time',\n tbEventInfo: '.events-table__row-comment',\n\n tbDopCoefCounter: '.events-table__acc-number',\n };\n\n const EMPTY_COEF = '-',\n EVENT_UPD_INFO = {\n SELF: 'e',\n ID: 'i',\n DOP_COEF_COUNTER: 'x',\n\n IS_ACTIVE: 'a',\n CURRENT_TIME: 't',\n MATCH_TIME: 'm',\n COMMENT: 'n',\n START_TIME: 'b',\n },\n SCORE_INFO = {\n SELF: 's',\n GENERAL: 'g',\n DETAILED: 't',\n POINTS: 'p',\n INNINGS: 'i',\n ADVANT: 'a',\n },\n SCORE_UNIT = {\n TEAM1: 'f',\n TEAM2: 's',\n FIRST_WON: 'w',\n },\n COEF_UPD_INFO = {\n SELF: 'c',\n ORIGINAL_ID: 'o',\n ACTUAL_ID: 'a',\n COEF_TYPE_ID: 't',\n IS_COEF_VALUE: 's',\n VALUE: 'v',\n TEXT_VALUE: 'x',\n };\n\n var externalUpdatedCoefs = {};\n\n var isLightReady = true;\n\n const isClientCartEnabled = 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 function log(msg) {\n app.console.log(\n '%c%s %s',\n 'color: #6495ED;',\n '[' + moduleName + ']',\n msg\n );\n }\n\n function selectByCoefTypeId(coefTypeId) {\n return function (coef) {\n return coef.t === coefTypeId;\n };\n }\n\n function externalUpdateCoef(originalId, actualId, value, isActive) {\n let cellNode = $('#tcell_' + originalId);\n if (cellNode.length === 0) return;\n\n let actualIdCurrent = parseInt(cellNode.attr('data-aid'));\n if (isNaN(actualIdCurrent)) actualIdCurrent = 0;\n\n actualId = parseInt(actualId);\n if (actualIdCurrent < actualId) {\n\n if (isActive) {\n let valueCurrent = parseFloat(cellNode.attr('data-coefvalue'));\n cellNode.attr('data-aid', actualId)\n .attr('data-coefvalue', value.toFixed(2))\n .text(window.Utils.displayCoefValue(value))\n .removeClass('m-empty');\n\n if (\n !cellNode.closest(selectors.tbEvent).hasClass('m-expanded')\n ) {\n animateCellChange(cellNode, value > valueCurrent);\n }\n } else {\n cellNode\n .attr('data-aid', actualId)\n .text(EMPTY_COEF)\n .addClass('m-empty');\n }\n\n externalUpdatedCoefs[parseInt(originalId)] = {\n aidFrom: actualIdCurrent,\n aidTo: actualId,\n isActive: isActive,\n };\n } else if (actualIdCurrent === actualId) {\n let isActiveCurrent = !cellNode.hasClass('m-empty');\n if (isActiveCurrent !== isActive) {\n if (isActive) {\n cellNode.attr('data-coefvalue', value.toFixed(2))\n .text(window.Utils.displayCoefValue(value))\n .removeClass('m-empty');\n }\n else {\n cellNode.text(EMPTY_COEF).addClass('m-empty');\n }\n externalUpdatedCoefs[parseInt(originalId)] = {\n aidFrom: actualIdCurrent,\n aidTo: actualId,\n isActive: isActive,\n };\n }\n }\n }\n\n function animateCellChange(node, isInc) {\n var deltaClass = 'change ' + (isInc ? 'plus' : 'minus');\n\n node.addClass(deltaClass);\n setTimeout(function () {\n node.removeClass(deltaClass);\n }, 2000);\n }\n\n function generateInnerGeneralScore(score) {\n var generalScore = score[SCORE_INFO.GENERAL];\n if (generalScore === undefined) return '';\n\n return (\n '<span class=\"events-table__points-item m-points-first m-general\">' +\n generalScore[SCORE_UNIT.TEAM1] +\n '</span>' +\n '<span class=\"events-table__points-divider m-general\"> : </span>' +\n '<span class=\"events-table__points-item m-points-second m-general\">' +\n generalScore[SCORE_UNIT.TEAM2] +\n '</span>'\n );\n }\n\n function updateFirstPeriodSubScore(score, node) {\n let scoreString = '';\n if (score[SCORE_INFO.DETAILED][0] !== undefined) {\n scoreString =\n '<span class=\"events-table__points-item m-points-first\">' +\n '(' +\n score[SCORE_INFO.DETAILED][0][SCORE_UNIT.TEAM1] +\n '</span>' +\n '<span class=\"events-table__points-divider\"> : </span>' +\n '<span class=\"events-table__points-item m-points-second\">' +\n score[SCORE_INFO.DETAILED][0][SCORE_UNIT.TEAM2] +\n ')' +\n '</span>';\n node.addClass('m-grey');\n } else if (score[SCORE_INFO.GENERAL] !== undefined) {\n scoreString =\n '<span class=\"events-table__points-item m-points-first\">' +\n '(' +\n score[SCORE_INFO.GENERAL][SCORE_UNIT.TEAM1] +\n '</span>' +\n '<span class=\"events-table__points-divider\"> : </span>' +\n '<span class=\"events-table__points-item m-points-second\">' +\n score[SCORE_INFO.GENERAL][SCORE_UNIT.TEAM2] +\n ')' +\n '</span>';\n node.removeClass('m-grey');\n }\n node.html(scoreString);\n }\n\n function generateInnerPointsScore(score, showInnings) {\n var points = score[SCORE_INFO.POINTS],\n advantage = score[SCORE_INFO.ADVANT];\n if (!points && !advantage) return '';\n\n var innings = showInnings ? score[SCORE_INFO.INNINGS] : 0;\n return [\n '<div class=\"events-table__points-total\">',\n '<span class=\"events-table__points-item m-points-first' +\n (innings === 1 ? ' m-serve' : '') +\n (advantage === 1 ? ' m-advantage' : '') +\n '\">' +\n +(advantage === 0 ? points[SCORE_UNIT.TEAM1] : '40') +\n '</span>',\n '<span class=\"events-table__points-divider\"> : </span>',\n '<span class=\"events-table__points-item m-points-second' +\n (innings === 2 ? ' m-serve' : '') +\n (advantage === 2 ? ' m-advantage' : '') +\n '\">' +\n +(advantage === 0 ? points[SCORE_UNIT.TEAM2] : '40') +\n '</span>',\n '</div>',\n ].join('\\n');\n }\n\n function generateDetailedTableScore(score, showInnings, tableSize) {\n let detailedTable = score[SCORE_INFO.DETAILED];\n if (!detailedTable || !detailedTable.length) return '';\n\n var innings = showInnings ? score[SCORE_INFO.INNINGS] : 0;\n\n let startIndex = detailedTable.length - tableSize;\n startIndex = startIndex < 0 ? 0 : startIndex;\n\n let html =\n '<div class=\"events-table__row-first' +\n (innings === 1 ? ' m-serve' : '') +\n '\">';\n for (let i = startIndex; i <= detailedTable.length - 1; i++) {\n if (startIndex > 0 && i === startIndex) {\n html += '<div class=\"events-table__row-set\">...</div>';\n } else {\n html +=\n '<div class=\"events-table__row-set' +\n (detailedTable[i][SCORE_UNIT.FIRST_WON] === 1 //true\n ? ' m-win'\n : '') +\n '\">' +\n detailedTable[i][SCORE_UNIT.TEAM1] +\n '</div>';\n }\n }\n\n html +=\n '</div><div class=\"events-table__row-second' +\n (innings === 2 ? ' m-serve' : '') +\n '\">';\n for (let i = startIndex; i <= detailedTable.length - 1; i++) {\n if (startIndex > 0 && i === startIndex) {\n //TODO: REDO\n html += '<div class=\"events-table__row-set\">...</div>';\n } else {\n html +=\n '<div class=\"events-table__row-set' +\n (detailedTable[i][SCORE_UNIT.FIRST_WON] === 0 //false\n ? ' m-win'\n : '') +\n '\">' +\n detailedTable[i][SCORE_UNIT.TEAM2] +\n '</div>';\n }\n }\n html += '</div>';\n\n return html;\n }\n\n //оÑнСчет в тенниÑе: .events-table__total-score\n //оÑнСчет в футболе .events-table__body-score TODO: привеÑти к одному\n //табличный Ñчет: .events-table__sets\n function updateScore(eventNode, event) {\n let scoreNode = eventNode.find(selectors.tbScore),\n newScoreString = JSON.stringify(event[SCORE_INFO.SELF]);\n\n //Just GeneralScore\n\n if (scoreNode.attr('tooltip-event-score'))\n scoreNode.attr('tooltip-event-score', newScoreString);\n\n if (scoreNode.attr('data-event-score') !== newScoreString) {\n scoreNode\n .html(generateInnerGeneralScore(event[SCORE_INFO.SELF]))\n .addClass('change');\n\n let subScoreNode = eventNode.find('.events-table__score-expanded');\n if (subScoreNode.length) {\n updateFirstPeriodSubScore(event[SCORE_INFO.SELF], subScoreNode);\n }\n setTimeout(function () { scoreNode.removeClass('change'); }, 2000);\n }\n\n scoreNode.attr('data-event-score', newScoreString);\n\n //General Score + Detailed Score Table\n let tennisScoreNode = eventNode.find('.events-table__scoring');\n\n if (\n !tennisScoreNode.length ||\n tennisScoreNode.attr('data-event-score') === newScoreString\n ) return;\n\n var prevScore = JSON.parse(tennisScoreNode.attr('data-event-score'));\n\n\n\n if (tennisScoreNode.attr('tooltip-event-score'))\n tennisScoreNode.attr('tooltip-event-score', newScoreString);\n\n tennisScoreNode.attr('data-event-score', newScoreString);\n\n if (\n JSON.stringify(event[SCORE_INFO.SELF][SCORE_INFO.DETAILED]) !==\n JSON.stringify(prevScore[SCORE_INFO.DETAILED]) ||\n event[SCORE_INFO.SELF][SCORE_INFO.INNINGS] !==\n prevScore[SCORE_INFO.INNINGS]\n ) {\n let setsNode = eventNode.find('.events-table__sets');\n let tableSize = setsNode.attr('data-tsize');\n let showInnings = setsNode.attr('show-innings') !== undefined;\n setsNode.html(\n generateDetailedTableScore(\n event[SCORE_INFO.SELF],\n showInnings,\n tableSize\n )\n );\n }\n\n if (\n JSON.stringify(event[SCORE_INFO.SELF][SCORE_INFO.GENERAL]) !==\n JSON.stringify(prevScore[SCORE_INFO.GENERAL])\n ) {\n eventNode\n .find('.events-table__score')\n .html(generateInnerGeneralScore(event[SCORE_INFO.SELF]));\n let totalScore = tennisScoreNode.find('.events-table__total-score');\n totalScore.addClass('change');\n setTimeout(function () {\n totalScore.removeClass('change');\n }, 2000);\n }\n\n //TODO: Вот тут Ñвно можно производительнее Ñделать\n delete event[SCORE_INFO.SELF][SCORE_INFO.DETAILED];\n delete prevScore[SCORE_INFO.DETAILED];\n delete event[SCORE_INFO.SELF][SCORE_INFO.GENERAL];\n delete prevScore[SCORE_INFO.GENERAL];\n\n if (\n JSON.stringify(event[SCORE_INFO.SELF]) !== JSON.stringify(prevScore)\n ) {\n var pointsNode = eventNode.find('.events-table__points');\n var showInnings = pointsNode.attr('show-innings') !== undefined;\n var pointsInnerHtml = generateInnerPointsScore(\n event[SCORE_INFO.SELF],\n showInnings\n );\n pointsNode.html(pointsInnerHtml);\n\n if (pointsInnerHtml.length) pointsNode.removeClass('m-empty');\n else pointsNode.addClass('m-empty');\n }\n }\n\n function handleLightFetch(data) {\n app.console.time('Fetched(Light)');\n\n for (\n var eventIndex = 0;\n eventIndex < data.length;\n eventIndex++\n ) {\n var event = data[eventIndex],\n eventNode = $(\n selectors.tbEventUnique + event[EVENT_UPD_INFO.ID]\n );\n\n if (eventNode.length < 1) {\n continue;\n }\n\n //currentTime\n let currentTimeNode = eventNode.find('.live-timer__current-time');\n if (currentTimeNode.text() !== event[EVENT_UPD_INFO.CURRENT_TIME])\n currentTimeNode.text(event[EVENT_UPD_INFO.CURRENT_TIME]);\n\n updateScore(eventNode, event);\n\n //dopCoefCounters\n var NECESSARY_COEF_COUNTERS = 5;\n if (\n eventNode.find(selectors.tbDopCoefCounter + '.m-0').text() !==\n event[EVENT_UPD_INFO.DOP_COEF_COUNTER].toString()\n ) {\n eventNode\n .find(selectors.tbDopCoefCounter + '.m-0')\n .text(event[EVENT_UPD_INFO.DOP_COEF_COUNTER]);\n if (event[EVENT_UPD_INFO.DOP_COEF_COUNTER] >= 0) {\n for (\n var index = 0;\n index < NECESSARY_COEF_COUNTERS;\n index++\n ) {\n eventNode\n .find(selectors.tbDopCoefCounter + '.m-' + index)\n .text(event[EVENT_UPD_INFO.DOP_COEF_COUNTER]);\n }\n }\n }\n\n //isActive (isOver included)\n if (!!event[EVENT_UPD_INFO.IS_ACTIVE]) {\n eventNode.removeClass('m-blocked');\n } else {\n eventNode.addClass('m-blocked');\n continue;\n }\n\n //coefs\n var isEventExpanded = eventNode.hasClass('m-expanded');\n eventNode.find(selectors.tbCell).each(function (ind) {\n var cellNode = $(this),\n coefTypeId = cellNode.data('ctid'),\n newCoef = event[COEF_UPD_INFO.SELF].filter(\n selectByCoefTypeId(coefTypeId)\n )[0];\n\n if (!newCoef) {\n if (!cellNode.hasClass('m-empty')) {\n let oid = parseInt(cellNode.attr('data-oid'));\n if (!isNaN(oid)) {\n let externalUpdateData = externalUpdatedCoefs[oid];\n if (\n !!externalUpdateData &&\n externalUpdateData.aidTo ===\n externalUpdateData.aidFrom &&\n externalUpdateData.isActive\n ) {\n return true;\n }\n }\n\n cellNode\n .attr('data-aid', null)\n .attr('data-oid', null)\n .attr('id', null)\n .text(EMPTY_COEF)\n .addClass('m-empty')\n .removeClass('active m-txt');\n }\n } else {\n if (!newCoef[COEF_UPD_INFO.ACTUAL_ID])\n newCoef[COEF_UPD_INFO.ACTUAL_ID] =\n newCoef[COEF_UPD_INFO.ORIGINAL_ID];\n\n if (!!newCoef[COEF_UPD_INFO.IS_COEF_VALUE]) {\n let externalUpdateData =\n externalUpdatedCoefs[\n newCoef[COEF_UPD_INFO.ORIGINAL_ID]\n ];\n if (externalUpdateData !== undefined) {\n if (\n externalUpdateData.aidTo >\n newCoef[COEF_UPD_INFO.ACTUAL_ID]\n ) {\n return true;\n } else if (\n externalUpdateData.aidTo ===\n newCoef[COEF_UPD_INFO.ACTUAL_ID] &&\n externalUpdateData.aidTo ===\n externalUpdateData.aidFrom\n ) {\n let isActiveCurrent =\n !cellNode.hasClass('m-empty');\n if (\n isActiveCurrent ===\n externalUpdateData.isActive\n ) {\n return true;\n }\n }\n delete externalUpdatedCoefs[\n newCoef[COEF_UPD_INFO.ORIGINAL_ID]\n ];\n }\n\n if (newCoef[COEF_UPD_INFO.VALUE] > 1) {\n let currentTextFloat = parseFloat(cellNode.attr('data-coefvalue'));\n if ( currentTextFloat !== newCoef[COEF_UPD_INFO.VALUE]) {\n cellNode\n .attr('data-aid', newCoef[COEF_UPD_INFO.ACTUAL_ID])\n .attr('data-oid', newCoef[COEF_UPD_INFO.ORIGINAL_ID])\n .attr('id', 'tcell_' + newCoef[COEF_UPD_INFO.ORIGINAL_ID])\n .attr('data-coefvalue', newCoef[COEF_UPD_INFO.VALUE].toFixed(2))\n .html(\n '<span class=\"coef-animation-text\">' +\n window.Utils.displayCoefValue(newCoef[COEF_UPD_INFO.VALUE]) +\n '</span>'\n );\n\n if (cellNode.hasClass('m-empty')) {\n cellNode.removeClass('m-empty');\n } else if (!isEventExpanded) {\n animateCellChange(\n cellNode,\n newCoef[COEF_UPD_INFO.VALUE] >\n currentTextFloat\n );\n }\n isInCart(newCoef[COEF_UPD_INFO.ORIGINAL_ID])\n ? cellNode.addClass('active')\n : cellNode.removeClass('active');\n }\n } else {\n if (!cellNode.hasClass('m-empty')) {\n cellNode\n .attr('data-aid', null)\n .attr('data-oid', null)\n .attr('id', null)\n .text(EMPTY_COEF)\n .addClass('m-empty')\n .removeClass('active');\n }\n }\n } else {\n if (cellNode.attr('data-coefvalue') !== newCoef[COEF_UPD_INFO.TEXT_VALUE]) {\n cellNode\n .attr('data-aid', null)\n .attr('data-coefvalue', newCoef[COEF_UPD_INFO.TEXT_VALUE])\n .text(newCoef[COEF_UPD_INFO.TEXT_VALUE])\n .addClass('m-txt')\n .removeClass('m-empty');\n }\n }\n }\n });\n }\n app.console.timeEnd('Fetched(Light)');\n }\n\n var handleFullFetch = (function () {\n var oldResults;\n return {\n preProc: function () {\n oldResults = [];\n $(selectors.betPlace)\n .find(selectors.tbCell + '[data-oid]')\n .each(function () {\n oldResults[$(this).data('oid')] = $(this).text().trim();\n });\n },\n postProc: function () {\n var avaliableCells = $(selectors.betPlace).find(\n selectors.tbEvent +\n ':not(.m-blocked) ' +\n selectors.tbCell +\n '[data-oid]'\n );\n for (key in oldResults) {\n var cellNode = avaliableCells\n .filter('[data-oid=' + key + ']')\n .first();\n if (!cellNode) continue;\n var currentText = cellNode.attr('data-coefvalue');\n if (currentText === oldResults[key]) continue;\n animateCellChange(cellNode, currentText > oldResults[key]);\n }\n oldResults = [];\n },\n };\n })();\n\n var fullIntervalId, lightIntervalId;\n var fullInterval = 30 * 1000,\n lightInterval = globalAppSettings.lightFetchTimeout;\n\n var fullUrl = undefined;\n var currentSportType;\n const fullStandardUrl = '/Live/UpdateBetPlace',\n fullFavoritesUrl = '/Live/UpdateFavoritesBetPlace',\n lightUrlEventService = globalAppSettings.api.prematchServiceUrl + '/api/live/table/fetch',\n lightUrlDiffFetch = globalAppSettings.api.prematchServiceUrl + '/api/live/table/fetch/diff';\n\n const isDiffFetchEnabled = globalAppSettings.isDiffLightFetchEnabled;\n\n function fullFetch() {\n if (fullUrl === undefined) {\n return;\n }\n\n var requestData = {};\n if (currentSportType !== undefined) {\n requestData.sportType = currentSportType;\n }\n\n stopLight();\n //handleFullFetch.preProc();\n\n Ajax.getJson(fullUrl, {\n data: requestData,\n success: function () {\n app.ModeTableLive.update();\n app.ModeTableLive.count() === 0\n ? $(selectors.emptyBetplace).addClass('active')\n : $(selectors.emptyBetplace).removeClass('active');\n\n //handleFullFetch.postProc();\n app.VerticalMenu.dispose();\n app.VerticalMenu.init();\n log('Fetched(Full)');\n startLight();\n document.dispatchEvent(new CustomEvent('updateLiveTable'));\n },\n });\n }\n\n var errorsLeft = 3;\n function lightFetchEventService() {\n if (app.ModeTableLive.count() === 0) {\n log('Nothing to Fetch(Light)');\n return;\n }\n\n if (!isLightReady) {\n log('Not Ready: Fetch(Light)');\n } else {\n isLightReady = false;\n $.ajax({\n method: 'GET',\n async: true,\n xhrFields: {\n withCredentials: true,\n },\n beforeSend: function (request) {\n request.setRequestHeader('bb_appSource', globalAppSettings.api.appSource);\n request.setRequestHeader('bb_lang', globalAppSettings.lang);\n },\n url: lightUrlEventService,\n success: function (data) {\n handleLightFetch(data);\n data = null;\n isLightReady = true;\n },\n error: function (data) {\n log('LIGHTFETCH ERROR!', data);\n if (errorsLeft-- <= 0) {\n Ajax.redirect('/live');\n }\n isLightReady = true;\n },\n });\n }\n }\n\n\n var lastRequestTime;\n function lightFetchDiff() {\n if (app.ModeTableLive.count() === 0) {\n log('Nothing to Fetch(Light)');\n return;\n }\n\n if (!isLightReady) {\n log('Not Ready: DiffFetch(Light)');\n } else {\n isLightReady = false;\n $.ajax({\n method: 'GET',\n async: true,\n xhrFields: {\n withCredentials: true,\n },\n data: { lrt: lastRequestTime },\n beforeSend: function (request) {\n request.setRequestHeader('bb_appSource', globalAppSettings.api.appSource);\n request.setRequestHeader('bb_lang', globalAppSettings.lang);\n },\n url: lightUrlDiffFetch,\n success: function (data) {\n lastRequestTime = Math.floor(new Date().getTime() / 1000);\n handleLightFetch(data);\n data = null;\n isLightReady = true;\n },\n error: function (data) {\n log('DIFF FETCH ERROR!', data);\n if (errorsLeft-- <= 0) {\n Ajax.redirect('/live');\n }\n isLightReady = true;\n },\n });\n }\n }\n\n function stopFull() {\n clearInterval(fullIntervalId);\n log('FULL_UPD STOP');\n }\n\n function startFull() {\n clearInterval(fullIntervalId);\n fullIntervalId = setInterval(fullFetch, fullInterval);\n //log('FULL_UPD START');\n }\n\n function stopLight() {\n clearInterval(lightIntervalId);\n log('LIGHT_UPD STOP');\n isLightReady = false;\n }\n\n function startLight() {\n isLightReady = true; //TODO: look back in history.\n clearInterval(lightIntervalId);\n if (isDiffFetchEnabled)\n lightIntervalId = setInterval(lightFetchDiff, lightInterval);\n else\n lightIntervalId = setInterval(lightFetchEventService, lightInterval);\n log('LIGHT_UPD START');\n }\n\n function refreshFullFetch() {\n stopFull();\n startFull();\n }\n\n var stop = function () {\n stopFull();\n stopLight();\n };\n\n var start = function () {\n startLight();\n startFull();\n };\n\n var setMode = {\n standard: function () {\n fullUrl = fullStandardUrl;\n },\n favorites: function () {\n fullUrl = fullFavoritesUrl;\n },\n standartSingleSport: function (sportType) {\n fullUrl = fullStandardUrl;\n currentSportType = sportType;\n },\n };\n\n return {\n start: start,\n stop: stop,\n full: fullFetch,\n refreshFull: refreshFullFetch,\n blink: animateCellChange,\n updateCoef: externalUpdateCoef,\n setMode: setMode,\n };\n})();\n","BinderPrematch = window.BinderPrematch = (function () {\n const selectors = {\n\n vmSelectAll: '#sports-filter__select-all',\n vmSportsFilterItem: '.j-sports-filter-item',\n vmSportsFilterSelectButton: '.j-sports-filter-item-select-button',\n vmSportsFilterLinkButton: '.j-sports-filter-item-link-button',\n vmSportsFilterItemsContainer: '#vm-sports-filter-items',\n\n tbTable: '.events-table',\n tbEvent: '.events-table__body-row',\n searchEvent: '[search-event]',\n\n tbFavstar: '[tb-favstar]',\n searchFavstar: '[search-favstar]',\n\n\n emptyBetplace: '#empty_betplace',\n\n tbSport: '.events-table',\n tbExpandSport: '.js-expand-table',\n tbExpandHotTable: '.js-expand-hot-table',\n tbLeague: '.js-expand-league',\n tbHotEvents: '.js-expand-hot-events',\n tbLeagueBody: '.events-table__group-body',\n\n cmTimeOffset: '#cm-time_offset',\n\n pageScrollbarContainer: '#m-page-content-scrollbar-scrollarea',\n\n removeAll: '#prematch_favs-remove_all'\n };\n\n var vmSelectedClass = 'm-selected';\n\n\n var bindUI = function () {\n var body = app.body;\n\n // Toggle SportFilterItem v2.0\n body.on('click', selectors.vmSportsFilterItem + '[data-id]', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n\n var container = $(this),\n id = container.data('id');\n\n var isAllChecked = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem + ':not(.m-selected)').length > 0 ? false : true;\n var filterItemsLength = $(selectors.vmSportsFilterItem).length;\n\n if (isAllChecked && filterItemsLength > 1) {\n container.addClass('m-loading');\n Ajax.postJson(\"/Prematch/EnableOnlyOneItem\", {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n app.ModeTablePrematch.update();\n $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem).removeClass('m-selected');\n $(selectors.vmSelectAll).prop('checked', false);\n container.addClass('m-selected');\n\n app.ModeTablePrematch.insertTable(resp.html);\n\n container.removeClass('m-loading');\n }\n });\n } else {\n toggleSportsFilterItem(id, container);\n }\n\n return false;\n });\n\n // Toggle SportFilter v3.0\n body.on('click', selectors.vmSelectAll, function () {\n const selectedClass = 'm-selected';\n\n var that = $(this),\n removingAll = !that.prop('checked'),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem);\n\n that.parent().parent().addClass('m-loading');\n Ajax.postJson(\"/Prematch/ToggleSportFilter\", {\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.update();\n if (removingAll) {\n that.prop('checked', false);\n allItems.removeClass(selectedClass);\n }\n else {\n that.prop('checked', true);\n allItems.addClass(selectedClass);\n }\n\n (app.ModeTablePrematch.isEmpty())\n ? $(selectors.emptyBetplace).addClass('active')\n : $(selectors.emptyBetplace).removeClass('active');\n\n that.parent().parent().removeClass('m-loading');\n }\n });\n return false;\n });\n\n // Toggle SportTable v2.5\n body.on('click', selectors.tbExpandSport, function () {\n var that = $(this).closest('.events-table'),\n id = that.data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/Prematch/CollapseNode', {\n data: { id: id },\n doCallAjaxViewParsers: false,\n success: function () {\n\t\t\t\t\t\tthat.removeClass('m-expanded').addClass('m-collapsed');\n app.ModeTablePrematch.collapseTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n\n Ajax.postJson('/Prematch/ExpandSportsTable', {\n data: { id: id, groups: app.getUrlParams('groups') },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.updateTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n });\n\n var processCollapseNodes = function(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n //league/hotgroups\n var that = $('.events-table__group[data-id=' + nodes[i] + ']');\n that.find(selectors.tbLeagueBody).remove();\n that.removeClass('m-expanded').addClass('m-collapsed');\n app.ModeTablePrematch.shrinkTable(nodes[i]);\n }\n };\n\n body.on('click', selectors.tbExpandHotTable, function () {\n var that = $(this).closest('.events-table'),\n id = that.data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/Prematch/CollapseHotTable', {\n data: {},\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n app.ModeTablePrematch.collapseTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n\n Ajax.postJson('/Prematch/ExpandHotTable', {\n data: {},\n doCallAjaxViewParsers: false,\n success: function (data) {\n app.ModeTablePrematch.updateTable(id);\n that.removeClass('m-loading');\n\n processCollapseNodes(data.CollapseNodes);\n }\n });\n return false;\n });\n\n // Toggle League v2.5\n body.on('click', selectors.tbLeague, function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n\n var that = $(this).closest('.events-table__group'),\n id = that.data('id'),\n tId = that.closest(selectors.tbSport).data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/Prematch/CollapseNode', {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n that.find(selectors.tbLeagueBody).remove();\n app.ModeTablePrematch.shrinkTable(tId);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n Ajax.postJson('/Prematch/ExpandLeague', {\n data: { id: id },\n doCallAjaxViewParsers: false,\n success: function (data) {\n app.ModeTablePrematch.extendTable(tId);\n that.removeClass('m-loading');\n\n processCollapseNodes(data.CollapseNodes);\n }\n });\n return false;\n });\n\n body.on('click', selectors.tbHotEvents, function () {\n var that = $(this).closest('.events-table__group'),\n id = that.closest(selectors.tbSport).data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/Prematch/CollapseHotEvents', {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n that.find(selectors.tbLeagueBody).remove();\n app.ModeTablePrematch.shrinkTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n Ajax.postJson('/Prematch/ExpandHotEvents', {\n data: { id: id, groups: app.getUrlParams('groups') },\n doCallAjaxViewParsers: false,\n success: function (data) {\n app.ModeTablePrematch.extendTable(id);\n that.removeClass('m-loading');\n\n processCollapseNodes(data.CollapseNodes);\n }\n });\n return false;\n });\n\n\n // Set TimeOffset v2.0\n body.on('change', selectors.cmTimeOffset, function () {\n Ajax.postJson(\"/Prematch/SetTimeOffset\", {\n data: { to: $(this).val(), groups: app.getUrlParams('groups') },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.update();\n (app.ModeTablePrematch.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n\n // Fave event v3.0\n body.on('click', (selectors.tbFavstar + ',' + selectors.searchFavstar), function (e) {\n\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = (that.is(selectors.tbFavstar)) ? that.closest(selectors.tbEvent).data('id') : that.closest(selectors.searchEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n allStars = $.merge($(selectors.tbEvent + dataIdFilter).find(selectors.tbFavstar), $(selectors.searchEvent + dataIdFilter).find(selectors.searchFavstar));\n\n that.addClass('m-loading');\n Ajax.postJson(isRemovingFromFav ? \"/Prematch/UnFaveEvent\" : \"/Prematch/FaveEvent\", {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_10', 'Добавить в избранное'));\n }\n else {\n allStars.addClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_11', 'Удалить из избранного'));\n }\n\n app.VerticalMenu.changeFavorites();\n\n that.removeClass('m-loading');\n },\n });\n\n return;\n });\n };\n\n var bindFavoritesUI = function () {\n // Fave event v3.0\n app.body.on('click', (selectors.tbFavstar + ',' + selectors.searchFavstar), function (e) {\n\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = (that.is(selectors.tbFavstar)) ? that.closest(selectors.tbEvent).data('id') : that.closest(selectors.searchEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n allStars = $.merge($(selectors.tbEvent + dataIdFilter).find(selectors.tbFavstar), $(selectors.searchEvent + dataIdFilter).find(selectors.searchFavstar));\n\n that.addClass('m-loading');\n Ajax.postJson(isRemovingFromFav ? \"/Prematch/UnFaveEvent\" : \"/Prematch/FaveEvent\", {\n data: {\n id: eventId,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n var currentEvent = $(selectors.tbEvent + dataIdFilter),\n parentTable = currentEvent.closest(selectors.tbTable);\n\n if (parentTable.find(selectors.tbEvent).length <= 1) {\n ModeTablePrematch.removeTable(parentTable.data('id'));\n\n if (app.ModeTablePrematch.isEmpty()) {\n $(selectors.emptyBetplace).addClass('active')\n $(selectors.removeAll).hide();\n } else {\n $(selectors.emptyBetplace).removeClass('active');\n };\n\n }\n else {\n currentEvent.remove();\n }\n that.removeClass('m-loading');\n }\n else {\n allStars.addClass('m-active');\n Ajax.getJson(\"/Prematch/UpdateFavoritesBetPlace\", {\n success: function () {\n app.ModeTablePrematch.update();\n that.removeClass('m-loading');\n $(selectors.emptyBetplace).removeClass('active');\n $(selectors.removeAll).show();\n }\n });\n\n }\n app.VerticalMenu.changeFavorites();\n },\n });\n\n return false;\n });\n\n ConfirmButton.init(\n selectors.removeAll,\n function () { },\n '/Prematch/UnFaveAll',\n function (resp) {\n app.ModeTablePrematch.destroyTables();\n\n if (app.ModeTablePrematch.isEmpty()) {\n $(selectors.emptyBetplace).addClass('active')\n $(selectors.removeAll).hide()\n } else {\n $(selectors.emptyBetplace).removeClass('active');\n $(selectors.removeAll).show();\n };\n\n app.VerticalMenu.changeFavorites();\n }\n );\n\n (app.ModeTablePrematch.isEmpty()) ? $(selectors.removeAll).hide() : $(selectors.removeAll).show();\n };\n\n var unBindUI = function () {\n app.body\n .off('click', selectors.vmSportsFilterItem + '[data-id]')\n .off('click', selectors.vmSelectAll)\n .off('click', selectors.tbExpandSport)\n .off('click', selectors.tbLeague)\n .off('click', selectors.tbExpandHotTable)\n .off('click', selectors.tbHotEvents)\n\n .off('click', (selectors.tbFavstar + ',' + selectors.searchFavstar))\n .off('change', selectors.cmTimeOffset);\n\n ConfirmButton.dispose(selectors.removeAll);\n\n };\n\n var toggleSportsFilterItem = function (id, sportsFilterItemContainer, callback) {\n var removing = sportsFilterItemContainer.hasClass(vmSelectedClass),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem),\n selectAllbtn = $(selectors.vmSelectAll);\n\n sportsFilterItemContainer.addClass('m-loading');\n Ajax.postJson(\"/Prematch/ToggleSportFilterItem\", {\n data: {\n id: id,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (removing) {\n app.ModeTablePrematch.removeTable(id);\n sportsFilterItemContainer.removeClass(vmSelectedClass);\n }\n else {\n if (resp.isempty && app.ModeTablePrematch.isEmpty()) {\n $(selectors.emptyBetplace).fadeOut(150, function () { $(selectors.emptyBetplace).fadeIn(150); });\n }\n else {\n var prevFilter = sportsFilterItemContainer.prevAll('.' + vmSelectedClass);\n var insertAfterId = (prevFilter.length !== 0) ? prevFilter.data('id') : undefined;\n app.ModeTablePrematch.insertTable(resp.html, insertAfterId);\n }\n sportsFilterItemContainer.addClass(vmSelectedClass);\n }\n\n selectAllbtn.prop('checked', (allItems.filter('.' + vmSelectedClass).length === allItems.length));\n (app.ModeTablePrematch.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n\n sportsFilterItemContainer.removeClass('m-loading');\n\n if(callback) callback();\n }\n });\n }\n\n var scrollToTable = function(id) {\n var table = $(selectors.tbTable).filter('[data-id=\"' + id + '\"]');\n\n if (table.length > 0) {\n $(selectors.pageScrollbarContainer).scrollTop(table.position().top - 40);\n }\n }\n\n var bind = function(justLoaded) { bindUI(); }\n var bindFavorites = function(justLoaded) { bindFavoritesUI(); }\n var unBind = function () { unBindUI(); }\n\n return {\n bind: bind,\n bindFavorites: bindFavorites,\n unBind: unBind,\n name: 'BinderPrematch',\n url: '/Prematch/GetViewSet'\n };\n\n}());\n\n\nScopePrematch = (function () {\n function init() {\n app.VerticalMenu.init();\n app.ModeTablePrematch.init();\n app.Search.init('prematch');\n }\n\n function dispose() {\n app.ModeTablePrematch.dispose();\n app.VerticalMenu.dispose();\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopePrematch',\n url: 'PREMATCH',\n title: Localization.getString('Shared.Prematch', 'ЛиниÑ')\n };\n}());\n","BinderPrematchFavorites = window.BinderPrematchFavorites = (function () {\n return {\n bind: BinderPrematch.bindFavorites,\n unBind: BinderPrematch.unBind,\n name: 'BinderPrematchFavorites',\n url: '/Prematch/GetFavoritesViewSet'\n };\n}());\n\n\nScopePrematchFavorites = window.ScopePrematchFavorites = (function () {\n return {\n start: ScopePrematch.start,\n stop: ScopePrematch.stop,\n name: 'ScopePrematchFavorites',\n url: '/PREMATCH/FAVORITES',\n title: Localization.getString('Shared.FavoritePrematch','ЛиниÑ: Избранное')\n };\n}());","BinderPrematchSingleSport = window.BinderPrematchSingleSport = (function () {\n const selectors = {\n\n vmSelectAll: '#sports-filter__select-all',\n vmSportsFilterItem: '.sports-filter__item',\n vmSportsFilterItemsContainer: '#vm-sports-filter-items',\n\n tbTable: '.events-table',\n tbEvent: '.events-table__body-row',\n searchEvent: '[search-event]',\n\n tbFavstar: '[tb-favstar]',\n searchFavstar: '[search-favstar]',\n\n\n emptyBetplace: '#empty_betplace',\n\n tbSport: '.events-table',\n tbExpandSport: '.js-expand-table',\n tbLeague: '.js-expand-league',\n tbLeagueBody: '.mode-table__group-body',\n\n cmTimeOffset: '#cm-time_offset',\n };\n\n var sportType;\n\n var bindUI = function () {\n var body = app.body;\n\n // Toggle League v2.5\n body.on('click', selectors.tbLeague, function () {\n var that = $(this).closest('.events-table__group'),\n id = that.data('id'),\n tId = that.closest(selectors.tbSport).data('id');\n\n app.enableLoading();\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/Prematch/CollapseNode', {\n data: {\n id: id,\n sportType: sportType\n },\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n that.find(selectors.tbLeagueBody).remove();\n app.ModeTablePrematch.shrinkTable(tId);\n app.disableLoading();\n }\n });\n return false;\n }\n Ajax.postJson('/Prematch/ExpandLeague', {\n data: {\n id: id,\n sportType: sportType\n },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.extendTable(tId);\n app.disableLoading();\n }\n });\n return false;\n });\n\n\n // Set TimeOffset v2.0\n body.on('change', selectors.cmTimeOffset, function () {\n app.enableLoading();\n Ajax.postJson(\"/Prematch/SetTimeOffset\", {\n data: {\n to: $(this).val(),\n sportType: sportType\n },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.update();\n app.disableLoading();\n (app.ModeTablePrematch.isEmpty()) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n }\n });\n return false;\n });\n\n // Fave event v3.0\n body.on('click', (selectors.tbFavstar + ',' + selectors.searchFavstar), function (e) {\n\n var that = $(this),\n isRemovingFromFav = that.hasClass('m-active'),\n eventId = (that.is(selectors.tbFavstar)) ? that.closest(selectors.tbEvent).data('id') : that.closest(selectors.searchEvent).data('id'),\n dataIdFilter = '[data-id=' + eventId + ']',\n allStars = $.merge($(selectors.tbEvent + dataIdFilter).find(selectors.tbFavstar), $(selectors.searchEvent + dataIdFilter).find(selectors.searchFavstar));\n\n app.enableLoading();\n Ajax.postJson(isRemovingFromFav ? \"/Prematch/UnFaveEvent\" : \"/Prematch/FaveEvent\", {\n data: {\n id: eventId\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (resp && resp.Message) {\n that.removeClass('m-active');\n Tooltip.errorNode(that, resp.Message);\n that.removeClass('m-loading');\n return;\n }\n\n if (isRemovingFromFav) {\n allStars.removeClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_10', 'Добавить в избранное'));\n }\n else {\n allStars.addClass('m-active');\n allStars.attr('bb-tool', window.Localization.getString('Scripts_Shared_Main.Accent_11', 'Удалить из избранного'));\n }\n\n app.VerticalMenu.changeFavorites();\n\n app.disableLoading();\n },\n });\n\n return;\n });\n };\n\n\n var unBindUI = function () {\n app.body\n .off('click', selectors.tbLeague)\n .off('click', (selectors.tbFavstar + ',' + selectors.searchFavstar))\n .off('change', selectors.cmTimeOffset);\n };\n\n function setScopeData(scopeData) {\n if (scopeData != undefined && scopeData.hasOwnProperty('sportType')) {\n sportType = scopeData.sportType;\n }\n }\n\n var bind = function (justLoaded, scopeData) { setScopeData(scopeData); bindUI(); }\n var unBind = function () { unBindUI(); }\n\n return {\n bind: bind,\n unBind: unBind,\n name: 'BinderPrematchSingleSport',\n url: BinderPrematch.url\n };\n}());\n\n//-----------------------------------\n\nScopePrematchSingleSport = (function () {\n\n var sportType;\n\n function init() {\n app.VerticalMenu.init();\n app.ModeTablePrematch.init();\n app.Search.init('prematchSingleSport', { sportType: sportType });\n }\n\n function dispose() {\n app.ModeTablePrematch.dispose();\n app.VerticalMenu.dispose();\n }\n\n var start = function (justLoaded, scopeData) { sportType = scopeData.sportType; init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopePrematchSingleSport',\n url: 'PREMATCH/SPORT'\n };\n}());\n","window.ModeTablePrematch = (function () {\n\n const selectors = {\n betPlace: '#bet-place',\n table: '.events-table',\n tbHeader: '.events-table__header',\n resultsLine: '[tb-resline]',\n event: '.events-table__body-row',\n eventTitle: '.events-table__title',\n\t\teventAllCoefsCount: '.events-table__all-coefs-count',\n expandAllCoefsButton: '.js-expand-all-coefs',\n cell: '.events-table__markets-cell',\n scrollbarContentWrapper: '.m-page-content-scrollbar > .awesome-scrollbar__content-wrapper',\n\n eventCoefs: '.events-table__row-coefs',\n oeCell: '.event-markets__coef',\n oeList: '#oe-market_list',\n oeMarket: '.event-markets__item',\n };\n\n const topHeight = {\n bannerHeight: $('#mobile-app-banner').height(),\n headHeight: $('#app-header').height(),\n headerWithBanner: null\n };\n topHeight.headerWithBanner = topHeight.bannerHeight + topHeight.headHeight;\n\n var Table = (function () {\n var Table = function (domTable) {\n this.domTable = domTable;\n\n this.id = this.domTable.data('id');\n this.isExpanded = this.domTable.hasClass('m-expanded');\n\n if (this.isExpanded) {\n this.header = this.domTable.find(selectors.tbHeader);\n this.showHighlightBtn = this.domTable.find('[prematch-show-highlight-popup]');\n\n this.setHighlightingAvaliability();\n this.hType = this.getConfig().hType || 'None';\n this.highlight();\n\n this.bindUI();\n SPA.updatePageLinks();\n }\n };\n\n Table.prototype.getConfig = function () {//TODO: Ñлишком много лишнего Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñтораджа при неÑкольких таблицах. поднÑÑ‚ÑŒ общий конфиг на уровень выше.\n var storageData = sessionStorage.getItem('tableConfig'),\n tableConfig = {};\n\n if (storageData) {\n storageData = JSON.parse(storageData);\n\n if (storageData.hasOwnProperty(this.id))\n tableConfig = storageData[this.id];\n }\n\n return tableConfig;\n }\n\n Table.prototype.setConfig = function (data) {\n var storageData = sessionStorage.getItem('tableConfig');\n\n if (storageData) {\n storageData = JSON.parse(storageData);\n } else {\n storageData = {};\n }\n\n storageData[this.id] = data;\n sessionStorage.setItem('tableConfig', JSON.stringify(storageData));\n }\n\n Table.prototype.updateConfig = function (data) {\n var tableConfig = this.getConfig();\n\n for (key in data) {\n tableConfig[key] = data[key];\n }\n\n this.setConfig(data);\n }\n\n Table.prototype.setHType = function (hType) {\n this.updateConfig({\n hType: hType\n });\n this.hType = hType;\n };\n\n Table.prototype.bindUI = function () {\n var self = this;\n\n\n this.showHighlightBtn.off('click').on('click', function () {\n if (window.Highlight) {\n\n window.Highlight.show($(this), self.hType, function (newHType) {\n self.setHType(newHType);\n self.highlight();\n });\n\n }\n });\n\n };\n\n Table.prototype.extend = function () {\n this.setHighlightingAvaliability();\n this.hType = this.getConfig().hType || 'None';\n this.highlight();\n };\n\n Table.prototype.shrink = function () {\n this.setHighlightingAvaliability();\n }\n\n Table.prototype.collapse = function () {\n this.header.css({\n transform: 'translateY(0)'\n });\n delete this.header;\n delete this.showHighlightBtn;\n };\n\n Table.prototype.highlight = function () {\n const _str1 = '1', _strX = 'x', _str2 = '2', _strT = window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_12', 'тотал'), _strB = window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_13', 'бол'), _strM = window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_14', 'мен');\n const _favHas1x2Ceil = 1.8, _favHas12Ceil = 1.5, _cleFavHas1x2Ceil = 1.4, _cleFavHas12Ceil = 1.2, _highLowCeil = 1.5;\n var self = this;\n\n if (self.domTable.hasClass('m-collapsed'))\n return false;\n\n self.domTable.find('.hl').removeClass('hl');\n procTypeGroup();\n\n function procTypeGroup() {\n if (self.hType === 'None')\n return false;\n\n var cols = self.domTable.find(selectors.resultsLine + ' ' + selectors.cell);\n if (!cols.length)\n return false;\n\n var events = self.domTable.find('.mode-table__body .mode-table__center-col--inner');\n events.each(function () {\n procEvent($(this));\n });\n\n\n function procEvent(event) {\n var has1x2 = has12 = hasTBM = false;\n if (self.hType == 'Favorites' || self.hType == 'ClearFavorites') {\n var h1 = hx = h2 = false;\n cols.each(function () {\n var col = $(this);\n var colH = col.text().trim().toLowerCase();\n var is1 = (colH == _str1), isx = (colH == _strX), is2 = (colH == _str2);\n if (is1 || isx || is2) {\n var res = event.find(selectors.cell).eq(col.index());\n if (res && res.attr('data-oid')) {\n if (is1) h1 = true;\n else if (isx) hx = true;\n else h2 = true;\n }\n }\n });\n has1x2 = (h1 && hx && h2);\n has12 = (h1 && !hx && h2);\n }\n else {\n var hb = hm = false;\n cols.each(function () {\n var col = $(this);\n var colH = col.text().trim().toLowerCase();\n var isB = (colH == _strB), isM = (colH == _strM);\n if (isB || isM) {\n var res = event.find(selectors.cell).eq(col.index());\n if (res && res.attr('data-oid') && res.attr('data-coefvalue') != '-') {\n if (isB) hb = true;\n else hm = true;\n }\n }\n });\n hasTBM = (hb && hm);\n }\n\n event.find(selectors.cell).each(function () {\n procCoef($(this));\n });\n\n function procCoef(coef) {\n if (!coef.attr('data-oid'))\n return false;\n var colTitle = cols.eq(coef.index()).text().trim().toLowerCase();\n var coefVal = parseFloat(coef.attr('data-coefvalue'));\n if (isNaN(coefVal))\n return;\n\n switch (self.hType) {\n case 'Favorites':\n {\n if (has12 || has1x2) {\n var ceiling = (has1x2) ? _favHas1x2Ceil : _favHas12Ceil;\n var is12 = (colTitle == _str1 || colTitle == _str2);\n if (is12 && coefVal <= ceiling)\n hltCoef();\n }\n break;\n }\n case 'ClearFavorites':\n {\n if (has12 || has1x2) {\n var ceiling = (has1x2) ? _cleFavHas1x2Ceil : _cleFavHas12Ceil;\n var is12 = (colTitle == _str1 || colTitle == _str2);\n if (is12 && coefVal <= ceiling)\n hltCoef();\n }\n break;\n }\n case 'HighMatches':\n {\n if (hasTBM && (colTitle == _strB) && coefVal <= _highLowCeil)\n hltCoef();\n break;\n }\n case 'LowMatches':\n {\n if (hasTBM && (colTitle == _strM) && coefVal <= _highLowCeil)\n hltCoef();\n break;\n }\n }\n\n function hltCoef() {\n coef.addClass('hl');\n }\n }\n }\n }\n };\n\n Table.prototype.setHighlightingAvaliability = function () {\n (this.domTable.find(selectors.event).length) ? this.showHighlightBtn.removeClass('m-disabled') : this.showHighlightBtn.addClass('m-disabled');\n };\n\n return Table;\n }());\n\n //----------------------------------------------------\n\n var tables = {},\n pageContentScrollTop = 0;\n\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 BettingCart.Highlighting.activate.allScopes();\n }\n }\n\n function highlightCoef() {\n if (!isClientCartEnabled) BettingCart.Highlighting.activate.table();\n }\n\n function bindUI() {\n\n // Fix Header v3.0\n if (app.isIE()) {\n $(selectors.scrollbarContentWrapper).on('scroll.prematchTable', function () {\n pageContentScrollTop = $(this).scrollTop();\n fixHeader(pageContentScrollTop);\n });\n }\n\n\t\t// Expand Event coefs v3.0\n app.body.on('click', selectors.expandAllCoefsButton, function () {\n var eventNode = $(this).closest(selectors.event),\n coefsNode = eventNode.find(selectors.eventCoefs);\n\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n\n if ($('#mobile-app-banner').css('display') == 'none') {\n $('.events-table__row-main-info').css('top', topHeight.headHeight);\n eventNode.attr('data-filter-sticky', 'ordinaryTop');\n } else {\n $('.events-table__row-main-info').css('top', topHeight.headerWithBanner);\n eventNode.attr('data-filter-sticky', 'topWithBanner');\n }\n }\n\n\n if (coefsNode.data('loaded') !== undefined) {\n eventNode.toggleClass('m-expanded');\n\n\n if (eventNode.hasClass('m-expanded')) {\n let scrollEvent = $(window).scrollTop();\n\n eventNode.data('node-saved-top', scrollEvent);\n } else {\n let defaultPosition = eventNode.data('node-saved-top');\n let scrollEvent = $(window).scrollTop();\n if (defaultPosition == undefined) {\n defaultPosition = scrollEvent;\n };\n let deltaScroll = defaultPosition - scrollEvent; //direction scrollTop\n let positionEventBeforeCollapse = $(eventNode).offset().top;\n\n //scrollDefaultPosition\n if (globalAppSettings.isMobileDevice && !globalAppSettings.isMobileDeviceInDesktopMode) {\n\n if ((deltaScroll < 0) && (scrollEvent > defaultPosition) && (scrollEvent > positionEventBeforeCollapse)) {\n if ($('#mobile-app-banner').css('display') == 'none') {\n $(window).scrollTop(eventNode.offset().top - topHeight.headHeight);\n } else {\n $(window).scrollTop(eventNode.offset().top - topHeight.headerWithBanner);\n }\n } else if (deltaScroll > 0 || scrollEvent < positionEventBeforeCollapse) {\n $(window).scrollTop(scrollEvent);\n } else {\n $(window).scrollTop(defaultPosition);\n }\n }\n }\n return false;\n }\n\n if (id = eventNode.data('id')) {\n eventNode.addClass('m-expanded m-loading');\n Ajax.postJson(\"/Prematch/ShowEventCoefs\", {\n data: {\n id: id,\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n coefsNode.replaceWith(resp.html);\n highlightCoef();\n eventNode.removeClass('m-loading');\n\n document.dispatchEvent(new CustomEvent('showEventsListCoefs', {\n detail: {\n ids: [id]\n }\n }));\n }\n });\n\n let scrollEvent = $(window).scrollTop();\n\n eventNode.data('node-saved-top', scrollEvent);\n }\n return false;\n });\n\n // Betting cart TableLine (add/remove) v3.0\n app.body.on('click', selectors.cell + '[data-aid]', function () {\n var that = $(this),\n coefOid = that.attr('data-oid');\n\n if (that.hasClass('active')) {\n removeFromCart(coefOid);\n that.removeClass('active');\n return false;\n }\n\n var event = that.closest(selectors.event),\n eventTitle = event.find(selectors.eventTitle).first().text().trim(),\n eventId = event.attr('data-id'),\n coefVal = that.attr('data-coefvalue'),\n coefAid = that.attr('data-aid');\n\n if (that.hasClass('blocked') || event.hasClass('blocked') || coefVal === '-')\n return false;\n\n var resTitleNodes = that.closest(selectors.table).find(selectors.resultsLine + ' [data-ctid]'),\n resTitleNode = resTitleNodes.eq(that.index()),\n resTitle = resTitleNode.text().trim(),\n lowResTitle = resTitle.toLowerCase(),\n smTitle = resTitleNode.attr('data-sm'),\n complexResTitle = '',\n period = '';\n\n if (resTitleNode.attr('data-dvd') !== undefined) { //рынки Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¾Ð¼/ÑÑтом\n periodIndex = resTitleNodes.filter('[data-sm=\"' + smTitle + '\"]').first().index();\n period = ' (' + event.find(selectors.cell).eq(periodIndex).text().trim() + ')';\n }\n\n if (lowResTitle === window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_14', 'мен') || lowResTitle === window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_13', 'бол')) { //рынок ТОТÐЛ\n offset = (lowResTitle === window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_14', 'мен')) ? 2 : 1;\n var totalVal = event.find(selectors.cell).eq(that.index() - offset).attr('data-coefvalue');\n complexResTitle = smTitle + '(' + resTitle + '(' + totalVal + '))';\n }\n else if (lowResTitle === window.Localization.getString('Scripts_Shared_Main.ModeTablePrematch_15', 'кф')) { //рынок ФОРÐ\n var fkTitle = resTitleNodes.eq(that.index() - 1).text().trim();\n var fkVal = event.find(selectors.cell).eq(that.index() - 1).attr('data-coefvalue');\n complexResTitle = smTitle + ' (' + fkTitle + '(' + fkVal + ')' + ') ' + resTitle;\n }\n else { //проÑтые рынки\n complexResTitle = smTitle + ' (' + resTitle + ')';\n }\n complexResTitle += period;\n\n var sData = {\n oId: coefOid,\n aId: coefAid,\n eId: eventId,\n eTitle: eventTitle,\n rTitle: complexResTitle,\n val: coefVal,\n isLive: false\n }\n //alert(JSON.stringify(sData));\n\n // return false if cart is sending now or overflowed, return true if added or already added. Blink on false\n addToCart(sData);\n return false;\n });\n\n // Betting cart MarketList (add/remove) v3.0\n app.body.on('click', selectors.oeCell + '[data-aid]', function () {\n var that = $(this);\n\n if (that.hasClass('active')) {\n var oid = that.attr('data-oid');\n removeFromCart(oid);\n that.removeClass('active');\n } else {\n\n var event = that.closest(selectors.event),\n eventTitle = event.find(selectors.eventTitle).first().text().trim(),\n eventId = event.attr('data-id');\n\n var market = that.closest(selectors.oeMarket),\n list = $(selectors.oeList);\n\n if (that.hasClass('m-blocked') || market.hasClass('m-blocked') || list.hasClass('m-blocked'))\n return;\n\n var sData = {\n oId: that.attr('data-oid'),\n aId: that.attr('data-aid'),\n eId: eventId,\n eTitle: eventTitle,\n rTitle: market.find('.event-markets__title').text() + ' (' + that.find('.event-markets__coef-title').attr('title') + ')',\n val: that.find('.event-markets__coef-value').attr('data-coefvalue'),\n isLive: false\n }\n // alert(JSON.stringify(sData));\n\n addToCart(sData);\n }\n return false;\n });\n\n }\n\n function unBindUI() {\n app.body\n .off('click', selectors.expandAllCoefsButton)\n .off('click', selectors.cell + '[data-aid]')\n .off('click', selectors.oeCell + '[data-aid]');\n\n if (app.isIE()) {\n $(selectors.scrollbarContentWrapper).off('scroll.prematchTable');\n }\n }\n\n function createTables() {\n $(selectors.table).each(function () {\n var self = $(this);\n var id = self.attr('data-id');\n if (id !== undefined)\n tables[id] = new Table(self);\n });\n }\n\n function destroyTables() {\n for (var key in tables) {\n tables[key].domTable.remove();\n delete tables[key];\n }\n }\n\n\tfunction init() {\n\t\tcreateTables();\n\t\thighlightCoef();\n\t\tsetTimeout(function () {\n\t\t\t$(selectors.scrollbarContentWrapper).scrollTop(sessionStorage.getItem('prematchPageContentScrollTop') || 0)\n\t\t}, 0);\n bindUI();\n }\n\n function dispose() {\n\t\tunBindUI();\n sessionStorage.setItem('prematchPageContentScrollTop', pageContentScrollTop);\n destroyTables();\n }\n\n function update () {\n destroyTables();\n createTables();\n highlightCoef();\n };\n\n function updateTable (id) {\n delete tables[id];\n var self = $(selectors.table + '[data-id=' + id + ']');\n if (self.length === 0)\n return;\n tables[id] = new Table(self);\n highlightCoef();\n $(selectors.scrollbarContentWrapper).scroll();\n }\n\n function extendTable(id) {\n if (tables.hasOwnProperty(id))\n tables[id].extend();\n // $(selectors.scrollbarContentWrapper).scroll();\n highlightCoef();\n }\n\n function shrinkTable (id) {\n if (tables.hasOwnProperty(id))\n tables[id].shrink();\n }\n\n function collapseTable (id) {\n if (tables.hasOwnProperty(id))\n tables[id].collapse();\n }\n\n function removeTable (id) {\n if (tables.hasOwnProperty(id)) {\n tables[id].domTable.remove();\n delete tables[id];\n }\n }\n\n function insertTable (html, insertAfterId) {\n var self = $(html);\n var id = self.data('id');\n removeTable(id);\n\n if (insertAfterId !== undefined && tables.hasOwnProperty(insertAfterId))\n self.insertAfter(tables[insertAfterId].domTable);\n else\n $(selectors.betPlace).prepend(self);\n\n tables[id] = new Table(self);\n highlightCoef();\n }\n\n\n //-------------------------------------------------------------\n\n var fixHeader = function (scrollTop) {\n for (key in tables) {\n var table = tables[key];\n\n if (table.header === undefined)\n continue;\n\n var top = table.domTable.position().top + parseInt(table.domTable.css('margin-top')) + 10;\n var height = table.domTable.outerHeight();\n\n if (scrollTop > top && scrollTop < top + height - 25) {\n table.header.css({\n transform: 'translateY(' + (scrollTop - (top + 2)) + 'px)'\n });\n } else {\n table.header.css({\n transform: 'translateY(0)'\n });\n }\n }\n }\n\n return {\n 'tables': tables,\n\t\t'isEmpty': function () { return Object.keys(tables).length === 0 },\n 'count': function() { return Object.keys(tables).length },\n 'init': init,\n 'dispose': dispose,\n 'update': update,\n 'extendTable': extendTable,\n 'shrinkTable': shrinkTable,\n 'updateTable': updateTable,\n 'collapseTable': collapseTable,\n 'removeTable': removeTable,\n 'destroyTables': destroyTables,\n 'insertTable': insertTable,\n };\n}());\n\n\n\n","Results = window.Results = (function () {\n const selectors = {\n betPlace: '#bet-place',\n searchInput: '#search-input',\n dateStart: '#results-datetime-filter-datepicker-from',\n dateEnd: '#results-datetime-filter-datepicker-to',\n dateStartVal: '#results-datetime-filter-value-from',\n dateEndVal: '#results-datetime-filter-value-to',\n datetimeFilterOverlay: '#results-datetime-filter-overlay',\n setPeriod: '#results-datetime-filter-confirm-button',\n setToday: '#results-set_today',\n typeFilter: '#results-type',\n vmSelectAll: '#sports-filter__select-all',\n vmSportsFilterItem: '.j-sports-filter-item',\n vmSportsFilterSelectButton: '.j-sports-filter-item-select-button',\n vmSportsFilterLinkButton: '.j-sports-filter-item-link-button',\n vmSportsFilterItemsContainer: '#vm-sports-filter-items',\n emptyBetplace: '#empty_betplace',\n sportsBlock: '.results-block',\n eventExpandButton: '[res-event-expand-button]',\n event: '[res-event]',\n goto: '.icon-results-goto',\n pageScrollbarContainer: '#m-page-content-scrollbar-scrollarea',\n tbExpandSport: '.js-expand-table',\n tbLeague: '.js-expand-league',\n collapseAllNodes: '#cm-collapse_all_nodes',\n datetimeFilter: '#results-datetime-filter',\n datetimeFilterDropdownWrapper: '#results-datetime-filter-dropdown-wrapper',\n openDatetimeFilterButton: '#open-datetime-filter-button',\n timeFilter: '[results-time-filter]'\n };\n function getHours() {\n return new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today')).getHours() * 60 * 60 * 1000;\n }\n\n function getMinutes() {\n return new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today')).getMinutes() * 60 * 1000;\n }\n\n function getFromTimestamp() {\n var local = $(selectors.dateStart).datepicker('getDate').getTime() + getHours() + getMinutes();\n var timezoneTimestamp = local - new Date(local).getTimezoneOffset() * 60 * 1000;\n return timezoneTimestamp;\n }\n\n function getToTimestamp() {\n var local = $(selectors.dateEnd).datepicker('getDate').getTime() + getHours() + getMinutes();\n var timezoneTimestamp = local - new Date(local).getTimezoneOffset() * 60 * 1000;\n return timezoneTimestamp;\n }\n\n function getFromDateTimestamp() {\n var localDate = new Date($(selectors.dateStart).datepicker('getDate'));\n var timezoneDateTime = new Date(localDate.getTime() - localDate.getTimezoneOffset() * 60 * 1000);\n var timezoneDate = Date.UTC(timezoneDateTime.getUTCFullYear(), timezoneDateTime.getUTCMonth(), timezoneDateTime.getUTCDate());\n return timezoneDate;\n }\n\n function getToDateTimestamp() {\n var localDate = new Date($(selectors.dateEnd).datepicker('getDate'));\n var timezoneDateTime = new Date(localDate.getTime() - localDate.getTimezoneOffset() * 60 * 1000);\n var timezoneDate = Date.UTC(timezoneDateTime.getUTCFullYear(), timezoneDateTime.getUTCMonth(), timezoneDateTime.getUTCDate());\n return timezoneDate;\n }\n\n function init() {\n initDatepickers();\n bindUI();\n app.Search.init('results');\n }\n\n function bindUI() {\n $(document).on('click.openDatetimeFilterButton', selectors.openDatetimeFilterButton, function () {\n datepickerHelper.openFilter();\n });\n\n $(document).on('click.timeFilter', selectors.timeFilter, function () {\n var hours = $(this).attr('results-time-filter');\n var text = $(this).text();\n filterByTime(hours);\n $(selectors.dateStartVal).text(text);\n $(selectors.datetimeFilter).addClass('m-text');\n datepickerHelper.closeFilter();\n });\n\n $(document).on('click', selectors.setPeriod, function () {\n datepickerHelper.closeFilter();\n });\n\n $(document).on('click', selectors.datetimeFilterOverlay, function () {\n datepickerHelper.closeFilter();\n datepickerHelper.restorePrevVals();\n datepickerHelper.savePrevVals();\n datepickerHelper.restorePrevVals();\n });\n }\n\n function filterByTime(hours) {\n var intialToday = new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today'));\n var to = intialToday.getTime() - intialToday.getTimezoneOffset() * 60 * 1000 - 100;\n\n var from = to - 1000 * 60 * 60 * hours;\n\n datepickerHelper.setFrom(from);\n datepickerHelper.setTo(to);\n\n $(selectors.setPeriod).click();\n }\n\n var datepickerHelper = {\n overlay: $('<div/>', {\n 'class': 'results-datetime-filter__overlay',\n 'id': 'results-datetime-filter-overlay'\n }),\n setFrom: function (timestamp) {\n $(selectors.dateStart).attr('data-timestamp', timestamp);\n $(selectors.dateStart).datepicker('setDate', new Date(timestamp));\n $(selectors.dateStartVal).html($(selectors.dateStart).datepicker().val());\n datepickerHelper.updateDatepickersHeaders();\n },\n setTo: function (timestamp) {\n datepickerHelper.setDateEndMaxValue();\n $(selectors.dateEnd).attr('data-timestamp', timestamp);\n $(selectors.dateEnd).datepicker('setDate', new Date(timestamp));\n $(selectors.dateEndVal).html($(selectors.dateEnd).datepicker().val());\n datepickerHelper.updateDatepickersHeaders();\n },\n updateDatepickersHeaders: function () {\n setTimeout(function () {\n var monthNames = [Localization.getString('Datepicker.January1', 'ÑнварÑ'), Localization.getString('Datepicker.February1', 'февралÑ'), Localization.getString('Datepicker.March1', 'марта'), Localization.getString('Datepicker.April1', 'апрелÑ'), Localization.getString('Datepicker.May1', ''), Localization.getString('Datepicker.June1', 'маÑ'), Localization.getString('Datepicker.July1', 'июлÑ'), Localization.getString('Datepicker.August1', 'авгуÑта'), Localization.getString('Datepicker.September1', 'ÑентÑбрÑ'), Localization.getString('Datepicker.October1', 'октÑбрÑ'), Localization.getString('Datepicker.November1', 'ноÑбрÑ'), Localization.getString('Datepicker.December1','декабрÑ')];\n var fromText = $(selectors.dateStart).datepicker('getDate').getDate() + ' ' + monthNames[$(selectors.dateStart).datepicker('getDate').getMonth()];\n\n if ($('.page-navigation__link.m-active[data-type]').data('type').toLowerCase() !== 'live') {\n fromText = window.Localization.getString('Scripts_Shared_Main.Results_16', 'Ñ ') + fromText;\n }\n\n $('#results-datetime-filter-datepicker-from .ui-datepicker-month').html(fromText);\n $('#results-datetime-filter-datepicker-to .ui-datepicker-month').html(window.Localization.getString('Scripts_Shared_Main.Results_17', 'по ') + $(selectors.dateEnd).datepicker('getDate').getDate() + ' ' + monthNames[$(selectors.dateEnd).datepicker('getDate').getMonth()]);\n });\n },\n savePrevVals: function () {\n $(selectors.dateStartVal).attr('data-prev-timestamp', getFromTimestamp());\n $(selectors.dateEndVal).attr('data-prev-timestamp', getToTimestamp());\n },\n restorePrevVals: function () {\n datepickerHelper.setFrom(parseInt($(selectors.dateStartVal).attr('data-prev-timestamp')));\n datepickerHelper.setTo(parseInt($(selectors.dateEndVal).attr('data-prev-timestamp')));\n },\n openFilter: function () {\n $(selectors.datetimeFilter).addClass('m-expanded');\n document.body.style.overflow = 'hidden';\n document.body.style.top = `-${window.scrollY}px`;\n datepickerHelper.overlay.appendTo('body');\n datepickerHelper.savePrevVals();\n },\n closeFilter: function () {\n $(selectors.datetimeFilter).removeClass('m-expanded');\n document.body.style.overflow = '';\n document.body.style.top = '';\n datepickerHelper.overlay.remove();\n },\n setDateEndMaxValue: function () {\n var from = $(selectors.dateStart),\n to = $(selectors.dateEnd);\n\n var maxDateTimestamp = from.datepicker('getDate').getTime() + 1000 * 60 * 60 * 24 * 7,\n maxDate = maxDateTimestamp < new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today')).getTime() ? new Date(from.datepicker('getDate').getTime() + 1000 * 60 * 60 * 24 * 6) : new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today'));\n\n to.datepicker('option', 'minDate', from.datepicker('getDate'));\n to.datepicker('option', 'maxDate', maxDate);\n },\n selectRange: function (date) {\n if (!$(selectors.dateEnd).datepicker('getDate'))\n return false;\n\n dateTimestamp = date.getTime();\n var startTime = $(selectors.dateStart).datepicker('getDate').getTime();\n var endTime = $(selectors.dateEnd).datepicker('getDate').getTime();\n\n if (dateTimestamp === startTime && dateTimestamp === endTime) {\n return [true, 'm-highlight-start m-highlight-end'];\n } else if (dateTimestamp === startTime) {\n return [true, 'm-highlight-start'];\n } else if (dateTimestamp === endTime) {\n return [true, 'm-highlight-end'];\n } else if (dateTimestamp > startTime && dateTimestamp < endTime) {\n return [true, 'm-highlight-range'];\n } else {\n return [true, ''];\n }\n },\n isLive: function () {\n return $('.page-navigation__link.m-active[data-type]').data('type').toLowerCase() === 'live';\n }\n };\n\n function initDatepickers() {\n var from = $(selectors.dateStart).datepicker({\n dateFormat: 'dd.mm.yy',\n defaultDate: new Date($(selectors.dateStart).data('initial-datetime')),\n maxDate: new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today')),\n showOtherMonths: true,\n selectOtherMonths: true,\n onSelect: function (dateText, inst) {\n datepickerHelper.setDateEndMaxValue();\n to.datepicker('setDate', from.datepicker('getDate'));\n setActualValue();\n $(selectors.datetimeFilter).removeClass('m-text');\n },\n beforeShowDay: function (date) {\n return datepickerHelper.selectRange(date);\n }\n });\n\n var to = $(selectors.dateEnd).datepicker({\n dateFormat: 'dd.mm.yy',\n defaultDate: new Date($(selectors.dateEnd).data('initial-datetime')),\n maxDate: new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today')),\n showOtherMonths: true,\n selectOtherMonths: true,\n onSelect: function (dateText, inst) {\n setActualValue();\n $(selectors.datetimeFilter).removeClass('m-text');\n },\n beforeShowDay: function (date) {\n return datepickerHelper.selectRange(date);\n }\n });\n\n function setActualValue() {\n datepickerHelper.setFrom(getFromDateTimestamp());\n datepickerHelper.setTo(getToDateTimestamp());\n }\n\n var initialToDate = new Date($(selectors.dateEnd).data('initial-datetime'));\n var initialFromTimestamp = new Date($(selectors.dateStart).data('initial-datetime')).getTime();\n var initialToTimestamp = initialToDate.getTime();\n var today = new Date($(selectors.datetimeFilterDropdownWrapper).data('initial-today'));\n\n datepickerHelper.setFrom(getFromDateTimestamp());\n datepickerHelper.setTo(getToDateTimestamp());\n datepickerHelper.savePrevVals();\n datepickerHelper.restorePrevVals();\n\n function setInitInterval(intervalInHours) {\n var text = $(selectors.timeFilter).filter('[results-time-filter=\"' + intervalInHours + '\"]').text();\n $(selectors.dateStartVal).text(text);\n $(selectors.datetimeFilter).addClass('m-text');\n }\n\n // еÑли выбран временной интервал\n var intervalInHours = (initialToTimestamp - initialFromTimestamp) / 1000 / 60 / 60;\n if (intervalInHours !== 0 && [1, 3, 6, 12, 24].indexOf(intervalInHours) > -1) {\n if (initialToDate.getDate() === today.getDate() && initialToDate.getMonth() === today.getMonth() && initialToDate.getFullYear() === today.getFullYear()) {\n setInitInterval(intervalInHours);\n }\n }\n }\n\n function dispose() {\n $('#page-content').empty();\n }\n\n return {\n selectors: selectors,\n init: init,\n dispose: dispose\n }\n}());","BinderResults = window.BinderResults = (function () {\n var selectors = Results.selectors;\n var vmSelectedClass = 'm-selected';\n\n function getUtcTimeStamp(timeStamp) {\n return timeStamp - globalAppSettings.timeOffset * 60 * 1000;\n }\n\n var bindUI = function () {\n var body = app.body;\n\n //--- v2.0 start -------------------------------------------------------\n\n // Change time period v2.0\n body.on('click', selectors.setPeriod, function () {\n app.enableLoading();\n app.VerticalMenu.dispose();\n\n var startDate = new Date(getUtcTimeStamp(parseInt($(selectors.dateStart).attr('data-timestamp'))));\n var endDate = new Date(getUtcTimeStamp(parseInt($(selectors.dateEnd).attr('data-timestamp'))));\n\n Ajax.postJson(\"/Results/SetTimePeriod\", {\n data: {\n start: startDate.toISOString(),\n end: endDate.toISOString()\n },\n doCallAjaxViewParsers: false,\n success: function () {\n app.VerticalMenu.init();\n app.disableLoading();\n }\n });\n });\n //\n // Set today v2.0\n body.on('click', selectors.setToday, function () {\n var date = new Date();\n $(selectors.dateStart).datepicker('setDate', date);\n $(selectors.dateEnd).datepicker('option', 'maxDate', date).datepicker('setDate', date);\n $(selectors.setPeriod).click();\n return false;\n });\n\n // toggle SportFilterItem v2.0\n body.on('click', selectors.vmSportsFilterItem + '[data-id]', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n\n var container = $(this),\n id = container.data('id');\n\n var isAllChecked = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem + ':not(.m-selected)').length > 0 ? false : true;\n var filterItemsLength = $(selectors.vmSportsFilterItem).length;\n\n if (isAllChecked && filterItemsLength > 1) {\n container.addClass('m-loading');\n Ajax.postJson(\"/Results/EnableOnlyOneItem\", {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n $(selectors.vmSelectAll).prop('checked', false);\n $(selectors.sportsBlock).remove();\n $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem).removeClass('m-selected');\n container.addClass('m-selected');\n insertTable(resp.html, container);\n container.removeClass('m-loading');\n }\n });\n } else {\n toggleSportsFilterItem(id, container);\n }\n\n return false;\n });\n\n // toggle SportFilter v2.0\n body.on('click', selectors.vmSelectAll, function () {\n const selectedClass = 'm-selected';\n var that = $(this),\n removingAll = !that.prop('checked'),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem);\n\n that.parent().parent().addClass('m-loading');\n Ajax.postJson(\"/Results/ToggleSportFilter\", {\n doCallAjaxViewParsers: false,\n success: function () {\n if (removingAll) {\n $(selectors.sportsBlock).remove();\n that.prop('checked', false);\n allItems.removeClass(selectedClass);\n }\n else {\n that.prop('checked', true);\n allItems.addClass(selectedClass);\n }\n ($(selectors.sportsBlock).length === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n\n that.parent().parent().removeClass('m-loading');\n }\n });\n return false;\n });\n\n // Search v2.0\n var lastQuery = '';\n body.on('keypress', selectors.searchInput, function (e) {\n if (e.which == 13) {\n var query = $(this).val();\n if (query.trim() === lastQuery)\n return false;\n lastQuery = query.trim();\n app.enableLoading();\n Ajax.postJson(\"/Results/Search\", {\n data: { query: query, enter: e.successHandler ? false : true },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n app.disableLoading();\n if (e.successHandler) {\n e.successHandler(resp, query);\n } else {\n window.Search.hide();\n }\n }\n });\n return false;\n }\n });\n\n //Expand Details v2.0\n body.on('click', selectors.eventExpandButton, function () {\n $(this).closest(selectors.event).toggleClass('m-expanded');\n });\n\n // Toggle SportTable v2.5\n body.on('click', selectors.tbExpandSport, function () {\n var that = $(this).closest('.events-table'),\n id = that.data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/results/CollapseNode', {\n data: { id: id },\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n app.ModeTablePrematch.collapseTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n\n Ajax.postJson('/results/ExpandSportsTable', {\n data: { id: id },\n success: function () {\n app.ModeTablePrematch.updateTable(id);\n that.removeClass('m-loading');\n }\n });\n return false;\n });\n\n // Toggle League v2.5\n body.on('click', selectors.tbLeague, function () {\n var that = $(this).closest('.events-table__group'),\n id = that.data('id'),\n tId = that.closest(selectors.tbSport).data('id');\n\n that.addClass('m-loading');\n if (that.hasClass('m-expanded')) {\n Ajax.postJson('/results/CollapseNode', {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function () {\n that.removeClass('m-expanded').addClass('m-collapsed');\n that.find(selectors.tbLeagueBody).remove();\n app.ModeTablePrematch.shrinkTable(tId);\n that.removeClass('m-loading');\n }\n });\n return false;\n }\n Ajax.postJson('/results/ExpandLeague', {\n data: { id: id },\n doCallAjaxViewParsers: false,\n success: function () {\n app.ModeTablePrematch.extendTable(tId);\n app.disableLoading();\n }\n });\n return false;\n });\n\n ConfirmButton.init(\n selectors.collapseAllNodes,\n function () { app.enableLoading(); },\n '/results/CollapseAllNodes',\n function () { app.ModeTablePrematch.update(); app.disableLoading(); }\n );\n };\n\n var unBindUI = function() {\n app.body.off('click', selectors.setPeriod)\n .off('click', selectors.setToday)\n .off('click', selectors.vmSportsFilterItem + '[data-id]')\n .off('click', selectors.vmSelectAll)\n .off('keyup', selectors.searchInput)\n .off('click', selectors.eventExpandButton)\n .off('click', selectors.tbExpandSport)\n .off('click', selectors.tbLeague);\n ConfirmButton.dispose(selectors.collapseAllNodes);\n };\n\n var toggleSportsFilterItem = function (id, sportsFilterItemContainer, callback) {\n var removing = sportsFilterItemContainer.hasClass(vmSelectedClass),\n allItems = $(selectors.vmSportsFilterItemsContainer).find(selectors.vmSportsFilterItem),\n selectAllbtn = $(selectors.vmSelectAll);\n\n sportsFilterItemContainer.addClass('m-loading');\n Ajax.postJson(\"/Results/ToggleSportFilterItem\", {\n data: {\n id: id\n },\n doCallAjaxViewParsers: false,\n success: function (resp) {\n if (removing) {\n $(selectors.sportsBlock + '[data-id=' + id + ']').remove();\n sportsFilterItemContainer.removeClass(vmSelectedClass);\n }\n else {\n insertTable(resp.html, sportsFilterItemContainer);\n sportsFilterItemContainer.addClass(vmSelectedClass);\n }\n\n selectAllbtn.prop('checked', (allItems.filter('.' + vmSelectedClass).length === allItems.length));\n ($(selectors.sportsBlock).length === 0) ? $(selectors.emptyBetplace).addClass('active') : $(selectors.emptyBetplace).removeClass('active');\n\n sportsFilterItemContainer.removeClass('m-loading');\n\n if (callback) callback();\n }\n });\n }\n\n var insertTable = function (html, sportsFilterItemContainer) {\n var openedTableIds = $(selectors.sportsBlock).toArray().map(function (x) {\n return $(x).data('id');\n });\n\n var insertAfterId = sportsFilterItemContainer.prevAll('.' + vmSelectedClass).toArray()\n .map(function (x) {\n return $(x).data('id');\n })\n .filter(function (x) {\n return openedTableIds.indexOf(x) !== -1;\n })[0];\n\n if (insertAfterId !== undefined) {\n var insertAfterTable = $(selectors.sportsBlock + '[data-id=' + insertAfterId + ']');\n if (insertAfterTable.length !== 0)\n $(html).insertAfter(insertAfterTable);\n else\n $(selectors.betPlace).prepend(html);\n }\n else\n $(selectors.betPlace).prepend(html);\n }\n\n var scrollToTable = function (id) {\n var table = $(selectors.sportsBlock).filter('[data-id=\"' + id + '\"]');\n var pageContentMargin = 20;\n\n if (table.length > 0) {\n $(selectors.pageScrollbarContainer).scrollTop(table.position().top + pageContentMargin);\n }\n }\n\n var bind = function(justLoaded) { bindUI(); }\n var unBind = function() { unBindUI(); }\n\n var scrollToEvent = function(id) {\n app.enableLoading();\n query = $(selectors.searchInput).val();\n Ajax.postJson(\"/Results/Search\", {\n data: { query: query, enter: true },\n doCallAjaxViewParsers: false,\n success: function () {\n window.Search.hide();\n lastQuery = query.trim();\n app.disableLoading();\n var event = $(selectors.event).filter('[data-id=\"' + id + '\"]');\n var pageContentMargin = 20;\n\n if (event.length > 0) {\n $(selectors.pageScrollbarContainer).scrollTop(event.position().top - pageContentMargin);\n var eventid = event.find(\".results-event__number\");\n eventid.text(\"\");\n eventid.append($('<mark>' + id + '</mark>'));\n }\n }\n });\n }\n\n return {\n bind: bind,\n unBind: unBind,\n name: 'BinderResults',\n url: '/Results/GetViewSet',\n scrollToEvent: scrollToEvent\n }\n}());\n\n//-----------------------------------\n\nScopeResults = (function () {\n function init() {\n app.VerticalMenu.init();\n app.VerticalMenu.show();\n Results.init();\n app.Search.bindCloseButtonHandler();\n }\n\n function dispose() {\n Results.dispose();\n app.VerticalMenu.dispose();\n app.Search.unbindCloseButtonHandler();\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeResults',\n url: 'RESULTS',\n title: Localization.getString('Shared.Results','Результаты'),\n isLayoutRightColumnVisible: false\n };\n}());","BinderSuperExpress = window.BinderSuperExpress = (function () {\n var bindUI = function () {\n return false;\n\n }\n var unBindUI = function () {\n return false;\n }\n\n var bind = function(justLoaded) { bindUI(); }\n var unBind = function() { unBindUI(); }\n\n return {\n bind: bind,\n unBind: unBind,\n name: 'BinderSuperExpress',\n url: '/baltsystem/getviewset'\n }\n}());\n\n//-----------------------------------\n\nBinderAllSuperExpress = window.BinderAllSuperExpress = (function () {\n return {\n\t\tbind: function () { BinderSuperExpress.bind() },\n\t\tunBind: function () { BinderSuperExpress.unBind() },\n name: 'BinderAllSuperExpress',\n url: '/baltsystem/getalldrawings'\n }\n}());\n\n//-----------------------------------\n\nScopeSuperExpress = window.ScopeSuperExpress = (function () {\n\n function init() {\n app.VerticalMenu.hide();\n app.Superexpress.init();\n // Superexpress.refresh();\n // liveTableTimerInit();\n }\n\n function dispose() {\n //TODO: nullref check\n app.Superexpress.dispose();\n return;\n }\n\n var start = function (justLoaded) { init(); };\n var stop = function () { dispose(); };\n\n return {\n start: start,\n stop: stop,\n name: 'ScopeSuperExpress',\n };\n}());","// Обработка отправки Ñообщений в поддержку\nwindow.Tickets = (function () {\n\n const selectors = {\n ticketsText: \".j-ticket-text\",\n ticketsSubmitButton: \".j-ticket-submit\"\n };\n\n const disabledClass = 'm-disabled';\n\n // Деактивируем кнопку \"Отправить\", еÑли ввод пуÑÑ‚\n $(document).on('input', selectors.ticketsText, function () {\n if ($(this).val().length === 0)\n $(selectors.ticketsSubmitButton).addClass(disabledClass);\n else\n $(selectors.ticketsSubmitButton).removeClass(disabledClass);\n });\n\n const clear = function () {\n $(selectors.ticketsText).val('');\n $(selectors.ticketsText).trigger('input');\n }\n\n return {\n clear\n };\n}());","var Navigo = window.Navigo = (function () {\n\n function Navigo(r, useHash, hash, reload) {\n this.root = null;\n this._routes = [];\n this._reload = typeof reload === 'undefined' ? false : reload;\n this._useHash = useHash;\n this._hash = typeof hash === 'undefined' ? '#' : hash;\n this._paused = false;\n this._destroyed = false;\n this._lastRouteResolved = null;\n this._notFoundHandler = null;\n this._defaultHandler = null;\n this._usePushState = !useHash && isPushStateAvailable();\n this._onLocationChange = this._onLocationChange.bind(this);\n this._genericHooks = null;\n this._historyAPIUpdateMethod = 'pushState';\n\n if (r) {\n this.root = useHash ? r.replace(/\\/$/, '/' + this._hash) : r.replace(/\\/$/, '');\n } else if (useHash) {\n this.root = this._cLoc().split(this._hash)[0].replace(/\\/$/, '/' + this._hash);\n }\n\n this._listen();\n this.updatePageLinks();\n return this;\n }\n\n var _typeof = (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\")\n ? function (obj) { return typeof obj; }\n : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n function _toConsumableArray(arr) {\n if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); }\n }\n\n function isPushStateAvailable() {\n return !!(typeof window !== 'undefined' && window.history && window.history.pushState);\n }\n\n function clean(s) {\n if (s instanceof RegExp) return s;\n return s.replace(/\\/+$/, '').replace(/^\\/+/, '^/');\n }\n\n function regExpResultToParams(match, names) {\n if (names.length === 0) return null;\n if (!match) return null;\n return match.slice(1, match.length).reduce(function (params, value, index) {\n if (params === null) params = {};\n params[names[index]] = decodeURIComponent(value);\n return params;\n }, null);\n }\n\n function replaceDynamicURLParts(route) {\n var paramNames = [],\n regexp;\n\n if (route instanceof RegExp) {\n regexp = route;\n } else {\n regexp = new RegExp(route.replace(Navigo.PARAMETER_REGEXP, function (full, dots, name) {\n paramNames.push(name);\n return Navigo.REPLACE_VARIABLE_REGEXP;\n }).replace(Navigo.WILDCARD_REGEXP, Navigo.REPLACE_WILDCARD) + Navigo.FOLLOWED_BY_SLASH_REGEXP, Navigo.MATCH_REGEXP_FLAGS);\n }\n return { regexp: regexp, paramNames: paramNames };\n }\n\n function getUrlDepth(url) {\n return url.replace(/\\/$/, '').split('/').length;\n }\n\n function compareUrlDepth(urlA, urlB) {\n return getUrlDepth(urlB) - getUrlDepth(urlA);\n }\n\n function findMatchedRoutes(url) {\n var routes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n return routes.map(function (route) {\n var _replaceDynamicURLPar = replaceDynamicURLParts(clean(route.route)),\n regexp = _replaceDynamicURLPar.regexp,\n paramNames = _replaceDynamicURLPar.paramNames;\n\n var match = url.replace(/^\\/+/, '/').match(regexp);\n var params = regExpResultToParams(match, paramNames);\n\n return match ? { match: match, route: route, params: params } : false;\n }).filter(function (m) {\n return m;\n });\n }\n\n function match(url, routes) {\n return findMatchedRoutes(url, routes)[0] || false;\n }\n\n function root(url, routes) {\n var matched = routes.map(function (route) {\n return route.route === '' || route.route === '*' ? url : url.split(new RegExp(route.route + '($|\\/)'))[0];\n });\n var fallbackURL = clean(url);\n\n if (matched.length > 1) {\n return matched.reduce(function (result, url) {\n if (result.length > url.length) result = url;\n return result;\n }, matched[0]);\n } else if (matched.length === 1) {\n return matched[0];\n }\n return fallbackURL;\n }\n\n function isHashChangeAPIAvailable() {\n return !!(typeof window !== 'undefined' && 'onhashchange' in window);\n }\n\n function extractGETParameters(url) {\n return url.split(/\\?(.*)?$/).slice(1).join('');\n }\n\n function getOnlyURL(url, useHash, hash) {\n var onlyURL = url.split(/\\?(.*)?$/)[0],\n split;\n\n if (typeof hash === 'undefined') {\n // To preserve BC\n hash = '#';\n }\n\n if (isPushStateAvailable() && !useHash) {\n onlyURL = onlyURL.split(hash)[0];\n } else {\n split = onlyURL.split(hash);\n onlyURL = split.length > 1 ? onlyURL.split(hash)[1] : split[0];\n }\n\n return onlyURL;\n }\n\n function manageHooks(handler, hooks, params) {\n if (hooks && (typeof hooks === 'undefined' ? 'undefined' : _typeof(hooks)) === 'object') {\n if (hooks.before) {\n hooks.before(function () {\n var shouldRoute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n if (!shouldRoute) return;\n handler();\n hooks.after && hooks.after(params);\n }, params);\n } else if (hooks.after) {\n handler();\n hooks.after && hooks.after(params);\n }\n return;\n }\n handler();\n };\n\n function isHashedRoot(url, useHash, hash) {\n if (isPushStateAvailable() && !useHash) {\n return false;\n }\n\n if (!url.match(hash)) {\n return false;\n }\n\n var split = url.split(hash);\n\n if (split.length < 2 || split[1] === '') {\n return true;\n }\n\n return false;\n };\n\n Navigo.prototype = {\n helpers: {\n match: match,\n root: root,\n clean: clean\n },\n navigate: function navigate(path, absolute) {\n var to;\n\n path = path || '';\n if (this._usePushState) {\n to = (!absolute ? this._getRoot() + '/' : '') + path.replace(/^\\/+/, '/');\n to = to.replace(/([^:])(\\/{2,})/g, '$1/');\n history[this._historyAPIUpdateMethod]({}, '', to);\n this.resolve();\n } else if (typeof window !== 'undefined') {\n path = path.replace(new RegExp('^' + this._hash), '');\n window.location.href = window.location.href.replace(/#$/, '').replace(new RegExp(this._hash + '.*$'), '') + this._hash + path;\n }\n return this;\n },\n on: function on() {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'function') {\n this._defaultHandler = { handler: args[0], hooks: args[1] };\n } else if (args.length >= 2) {\n if (args[0] === '/') {\n var func = args[1];\n\n if (_typeof(args[1]) === 'object') {\n func = args[1].uses;\n }\n\n this._defaultHandler = { handler: func, hooks: args[2] };\n } else {\n this._add(args[0], args[1], args[2]);\n }\n } else if (_typeof(args[0]) === 'object') {\n var orderedRoutes = Object.keys(args[0]).sort(compareUrlDepth);\n\n orderedRoutes.forEach(function (route) {\n _this.on(route, args[0][route]);\n });\n }\n return this;\n },\n off: function off(handler) {\n if (this._defaultHandler !== null && handler === this._defaultHandler.handler) {\n this._defaultHandler = null;\n } else if (this._notFoundHandler !== null && handler === this._notFoundHandler.handler) {\n this._notFoundHandler = null;\n }\n this._routes = this._routes.reduce(function (result, r) {\n if (r.handler !== handler) result.push(r);\n return result;\n }, []);\n return this;\n },\n notFound: function notFound(handler, hooks) {\n this._notFoundHandler = { handler: handler, hooks: hooks };\n return this;\n },\n resolve: function resolve(current) {\n var _this2 = this;\n\n var handler, m;\n var url = (current || this._cLoc()).replace(this._getRoot(), '');\n\n if (this._useHash) {\n url = url.replace(new RegExp('^\\/' + this._hash), '/');\n }\n\n var GETParameters = extractGETParameters(current || this._cLoc());\n var onlyURL = getOnlyURL(url, this._useHash, this._hash);\n\n if (this._paused) return false;\n\n if (this._lastRouteResolved && onlyURL === this._lastRouteResolved.url && GETParameters === this._lastRouteResolved.query) {\n if (this._reload) {\n window.location.reload();\n return false;\n }\n if (this._lastRouteResolved.hooks && this._lastRouteResolved.hooks.already) {\n this._lastRouteResolved.hooks.already(this._lastRouteResolved.params);\n }\n return false;\n }\n\n m = match(onlyURL, this._routes);\n\n if (m) {\n this._callLeave();\n this._lastRouteResolved = {\n url: onlyURL,\n query: GETParameters,\n hooks: m.route.hooks,\n params: m.params,\n name: m.route.name\n };\n handler = m.route.handler;\n manageHooks(function () {\n manageHooks(function () {\n m.route.route instanceof RegExp ? handler.apply(undefined, _toConsumableArray(m.match.slice(1, m.match.length))) : handler(m.params, GETParameters);\n }, m.route.hooks, m.params, _this2._genericHooks);\n }, this._genericHooks, m.params);\n return m;\n } else if (this._defaultHandler && (onlyURL === '' || onlyURL === '/' || onlyURL === this._hash || isHashedRoot(onlyURL, this._useHash, this._hash))) {\n manageHooks(function () {\n manageHooks(function () {\n _this2._callLeave();\n _this2._lastRouteResolved = { url: onlyURL, query: GETParameters, hooks: _this2._defaultHandler.hooks };\n _this2._defaultHandler.handler(GETParameters);\n }, _this2._defaultHandler.hooks);\n }, this._genericHooks);\n return true;\n } else if (this._notFoundHandler) {\n manageHooks(function () {\n manageHooks(function () {\n _this2._callLeave();\n _this2._lastRouteResolved = { url: onlyURL, query: GETParameters, hooks: _this2._notFoundHandler.hooks };\n _this2._notFoundHandler.handler(GETParameters);\n }, _this2._notFoundHandler.hooks);\n }, this._genericHooks);\n }\n return false;\n },\n destroy: function destroy() {\n this._routes = [];\n this._destroyed = true;\n clearTimeout(this._listeningInterval);\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', this._onLocationChange);\n window.removeEventListener('hashchange', this._onLocationChange);\n }\n },\n updatePageLinks: function updatePageLinks() {\n var self = this;\n\n if (typeof document === 'undefined') return;\n\n this._findLinks().forEach(function (link) {\n if (!link.hasListenerAttached) {\n link.addEventListener('click', function (e) {\n var location = self.getLinkPath(link);\n\n if (!self._destroyed) {\n e.preventDefault();\n self.navigate(location.replace(/\\/+$/, '').replace(/^\\/+/, '/'));\n }\n });\n link.hasListenerAttached = true;\n }\n });\n },\n generate: function generate(name) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var result = this._routes.reduce(function (result, route) {\n var key;\n\n if (route.name === name) {\n result = route.route;\n for (key in data) {\n result = result.toString().replace(':' + key, data[key]);\n }\n }\n return result;\n }, '');\n\n return this._useHash ? this._hash + result : result;\n },\n link: function link(path) {\n return this._getRoot() + path;\n },\n pause: function pause() {\n var status = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this._paused = status;\n if (status) {\n this._historyAPIUpdateMethod = 'replaceState';\n } else {\n this._historyAPIUpdateMethod = 'pushState';\n }\n },\n resume: function resume() {\n this.pause(false);\n },\n historyAPIUpdateMethod: function historyAPIUpdateMethod(value) {\n if (typeof value === 'undefined') return this._historyAPIUpdateMethod;\n this._historyAPIUpdateMethod = value;\n return value;\n },\n disableIfAPINotAvailable: function disableIfAPINotAvailable() {\n if (!isPushStateAvailable()) {\n this.destroy();\n }\n },\n lastRouteResolved: function lastRouteResolved() {\n return this._lastRouteResolved;\n },\n getLinkPath: function getLinkPath(link) {\n return link.pathname || link.getAttribute('href');\n },\n hooks: function hooks(_hooks) {\n this._genericHooks = _hooks;\n },\n\n _add: function _add(route) {\n var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var hooks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (typeof route === 'string') {\n route = encodeURI(route);\n }\n if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {\n this._routes.push({\n route: route,\n handler: handler.uses,\n name: handler.as,\n hooks: hooks || handler.hooks\n });\n } else {\n this._routes.push({ route: route, handler: handler, hooks: hooks });\n }\n return this._add;\n },\n _getRoot: function _getRoot() {\n if (this.root !== null) return this.root;\n this.root = root(this._cLoc().split('?')[0], this._routes);\n return this.root;\n },\n _listen: function _listen() {\n var _this3 = this;\n\n if (this._usePushState) {\n window.addEventListener('popstate', this._onLocationChange);\n } else if (isHashChangeAPIAvailable()) {\n window.addEventListener('hashchange', this._onLocationChange);\n } else {\n var cached = this._cLoc(),\n current = void 0,\n _check = void 0;\n\n _check = function check() {\n current = _this3._cLoc();\n if (cached !== current) {\n cached = current;\n _this3.resolve();\n }\n _this3._listeningInterval = setTimeout(_check, 200);\n };\n _check();\n }\n },\n _cLoc: function _cLoc() {\n if (typeof window !== 'undefined') {\n if (typeof window.__NAVIGO_WINDOW_LOCATION_MOCK__ !== 'undefined') {\n return window.__NAVIGO_WINDOW_LOCATION_MOCK__;\n }\n return clean(window.location.href);\n }\n return '';\n },\n _findLinks: function _findLinks() {\n return [].slice.call(document.querySelectorAll('[data-navigo]'));\n },\n _onLocationChange: function _onLocationChange() {\n this.resolve();\n },\n _callLeave: function _callLeave() {\n if (this._lastRouteResolved && this._lastRouteResolved.hooks && this._lastRouteResolved.hooks.leave) {\n this._lastRouteResolved.hooks.leave();\n }\n }\n };\n\n Navigo.PARAMETER_REGEXP = /([:*])(\\w+)/g;\n Navigo.WILDCARD_REGEXP = /\\*/g;\n Navigo.REPLACE_VARIABLE_REGEXP = '([^\\/]+)';\n Navigo.REPLACE_WILDCARD = '(?:.*)';\n Navigo.FOLLOWED_BY_SLASH_REGEXP = '(?:\\/$|$)';\n Navigo.MATCH_REGEXP_FLAGS = '';\n\n return Navigo;\n\n}());","var SPA = window.SPA = (function () {\n var self = {};\n var log = function (msg) { app.console.log('%c%s %s', 'color: brown; font-weight: bold;', '[ROUTER]', msg); };\n var error = function (msg) { app.console.log('%c%s %s', 'color: red; font-weight: bold;', '[ROUTER] ERROR:', msg); };\n var logGroupStart = function (msg) { app.console.group('%c%s\\t\\t\\t\\t\\t\\t\\t', 'background: #2F4F4F; color: #FFFACD; font-weight: bold; display: block; text-align: center', msg); };\n var logGroupEnd = function (msg) { app.console.log('%c%s %s', 'color: brown; font-weight: bold;', '[ROUTER]', msg); window.console.groupEnd(); };\n\n var justLoaded = true;\n var currentScope;\n var setCurrentBinder = function (binder) { self.currentBinder = binder; log('→ Binder set to: ' + binder.name); };\n var setCurrentScope = function (scope) { currentScope = scope; log('→ Scope set to: ' + scope.name); };\n\n var isSPAEnabled = (typeof globalAppSettings.isSPAEnabled != 'undefined') ? globalAppSettings.isSPAEnabled : false;\n\n function setPageTitle() {\n if (justLoaded || !isSPAEnabled) {\n return;\n }\n\n if (currentScope.title !== undefined) {\n document.title = currentScope.title;\n }\n else {\n var title = $('#page-content').data('pagetitle');\n if (title != undefined) {\n document.title = title;\n }\n }\n }\n\n function generalLeaveHook() {\n logGroupStart('NEW ROUTE (' + router.lastRouteResolved().url + ' → ' + window.location.pathname + ')');\n app.Tooltip.hide();\n justLoaded = false;\n app.enableLoading();\n if (self.currentBinder !== undefined && currentScope !== undefined) {\n self.currentBinder.unBind();\n log('⌠' + self.currentBinder.name + ' DISABLED.');\n currentScope.stop();\n log('⌠' + currentScope.name + ' DISABLED.');\n }\n else {\n error('CurrentBinder or CurrentScope not found. Refreshing page...');\n Ajax.redirect(window.location.pathname);\n }\n }\n\n function generalAfterHook(scopeData) {\n log('â³ THE ROUTE IS MATCHED. Starting binder... ScopeData=' + JSON.stringify(scopeData));\n\n if (self.currentBinder !== undefined) {\n self.currentBinder.bind(justLoaded, scopeData);\n log('✓ ' + self.currentBinder.name + ' ENABLED.');\n }\n else {\n error('CurrentBinder not found. Refreshing page...');\n Ajax.redirect(window.location.pathname);\n }\n\n if (typeof ReturnButton !== 'undefined') {\n ReturnButton.init();\n }\n var activePathname = new CustomEvent('triggerMesssageModal', {\n detail: {\n pathname: window.location.pathname,\n\n },\n bubbles: true,\n });\n document.dispatchEvent(activePathname);\n }\n\n var generalHooks = {\n leave: generalLeaveHook,\n after: generalAfterHook\n //before:\n //already:\n };\n\n var _generalRoute = function (binder, scope, ajaxData, scopeData) {\n\n if (!isSPAEnabled) {\n router.destroy();\n log('Router destroyed.');\n }\n\n LayoutResolver.resolve(scope);\n\n ajaxData = ajaxData || {};\n scopeData = scopeData || {};\n\n\n log('â³ Starting route body...');\n setCurrentBinder(binder);\n setCurrentScope(scope);\n\n if (justLoaded) {\n currentScope.start(true, scopeData);\n log(currentScope.name + ' JUSTLOADED ENABLED! ');\n return;\n }\n log('Getting Data...');\n Ajax.getJson(self.currentBinder.url, {\n data: ajaxData,\n success: function () {\n log('...Data Received');\n currentScope.start(false, scopeData);\n router.updatePageLinks();\n app.MainNavigation.updatePage();\n setPageTitle();\n logGroupEnd('✓ ' + currentScope.name + ' ENABLED! ');\n app.disableLoading();\n }\n });\n };\n\n function generalNonSpaRoute() {\n log('General NonSpa Binder');\n\n router.destroy();\n log('Router destroyed.');\n }\n\n var live = function () { _generalRoute(BinderLive, ScopeLive); };\n var liveFavorites = function () { _generalRoute(BinderLiveFavorites, ScopeLiveFavorites); };\n var liveSingleSport = function (sport) { _generalRoute(BinderLiveSingleSport, ScopeLiveSingleSport, { sportType: sport }, { sportType: sport }); };\n\n var prematch = function (sport) { _generalRoute(BinderPrematch, ScopePrematch, { sportType: sport }); };\n var prematchFavorites = function () { _generalRoute(BinderPrematchFavorites, ScopePrematchFavorites); };\n var prematchSingleSport = function (sport) {\n _generalRoute(BinderPrematchSingleSport, ScopePrematchSingleSport, { sportType: sport }, { sportType: sport });\n generalAfterHook({ sportType: sport });\n };\n\n var history = function () { _generalRoute(BinderHistory, ScopeHistory); };\n var results = function () { _generalRoute(BinderResults, ScopeResults); };\n var event = function (id) { _generalRoute(BinderEvent, ScopeEvent, { id: id }); };\n var bonuses = function (tab) { _generalRoute(BinderBonuses, ScopeBonuses, (tab) ? { tab: tab } : {}); };\n var superexpress = function (num) { _generalRoute(BinderSuperExpress, ScopeSuperExpress, (num) ? { number: num } : {}); };\n var superexpressAll = function () { _generalRoute(BinderAllSuperExpress, ScopeSuperExpress); };\n\n\n var router = new Navigo(window.location.origin, false, '#!', true); //TODO: old browser location.origin support\n //CASE SENSITIVE!\n if (globalAppSettings.isLocalizationEnabled) {\n router\n .on('/:lang/live', live, generalHooks)\n .on('/:lang/live/favorites', liveFavorites, generalHooks)\n .on('/:lang/live/:sport', function (params) { return liveSingleSport(params.sport); }, generalHooks)\n\n .on('/:lang/prematch', prematch, generalHooks)\n .on('/:lang/prematch/favorites', prematchFavorites, generalHooks)\n .on('/:lang/prematch/:sport', function (params) { return prematchSingleSport(params.sport); }, { leave: generalLeaveHook, after: function () { } })\n .on(/^\\/([^/\\n]+)\\/(prematch)\\/([^/\\n]+)\\/(.+)-gid-(\\d+)$/, function (eventType, sport, leagueTitle, id) { return prematchSingleSport(sport); }, { leave: generalLeaveHook, after: function () { } })\n\n .on('/:lang/history', history, generalHooks)\n .on('/:lang/results/:type', results, generalHooks)\n .on('/:lang/results/:type/:sportType', results, generalHooks)\n\n .on('/:lang/bonuses', bonuses, generalHooks)\n .on('/:lang/bonuses/:tab', function (params) { return bonuses(params.tab); }, generalHooks)\n\n .on('/:lang/baltsystem', superexpress, generalHooks)\n .on('/:lang/baltsystem/landing', superexpress, generalHooks)\n .on('/:lang/baltsystem/all', superexpressAll, generalHooks)\n .on('/:lang/baltsystem/:num', function (params) { superexpress(params.num); }, generalHooks)\n\n .on('/:lang/event/:id', function (params) { return event(params.id); }, generalHooks)\n .on(/^\\/([^/\\n]+)\\/(live|prematch)\\/(.+)\\/(.+)-id-(\\d+)$/, function (lang, eventType, sportAndLeague, title, id) { return event(id); }, generalHooks);\n }\n else {\n router\n .on('/live', live, generalHooks)\n .on('/live/favorites', liveFavorites, generalHooks)\n .on('/live/:sport', function (params) { return liveSingleSport(params.sport); }, generalHooks)\n\n .on('/prematch', prematch, generalHooks)\n .on('/prematch/favorites', prematchFavorites, generalHooks)\n .on('/prematch/:sport', function (params) { return prematchSingleSport(params.sport); }, { leave: generalLeaveHook, after: function () { } })\n .on(/^\\/(prematch)\\/([^/\\n]+)\\/(.+)-gid-(\\d+)$/, function (eventType, sport, leagueTitle, id) { return prematchSingleSport(sport); }, { leave: generalLeaveHook, after: function () { } })\n\n .on('/history', history, generalHooks)\n .on('/results/:type', results, generalHooks)\n .on('/results/:type/:sportType', results, generalHooks)\n\n .on('/bonuses', bonuses, generalHooks)\n .on('/bonuses/:tab', function (params) { return bonuses(params.tab); }, generalHooks)\n\n .on('/baltsystem', superexpress, generalHooks)\n .on('/baltsystem/landing', superexpress, generalHooks)\n .on('/baltsystem/all', superexpressAll, generalHooks)\n .on('/baltsystem/:num', function (params) { superexpress(params.num); }, generalHooks)\n\n .on('/event/:id', function (params) { return event(params.id); }, generalHooks)\n .on(/^\\/(live|prematch)\\/(.+)\\/(.+)-id-(\\d+)$/, function (eventType, sportAndLeague, title, id) { return event(id); }, generalHooks);\n }\n\n router.notFound(function (query) {\n log('Route not found. Query=\"' + query + '\"');\n generalNonSpaRoute();\n });\n\n\n self.configure = function (config) {\n self._config = $.extend(true, newConfig, self.config || {}, config || {});\n };\n\n self.resolveRoutes = function () {\n log('Route resolving...');\n var resolved = router.resolve();\n log('Route resolved: ' + JSON.stringify(resolved));\n if (typeof ReturnButton !== 'undefined') {\n ReturnButton.init();\n };\n };\n\n\n\n self.navigate = function (path) {\n if (isSPAEnabled && router !== undefined && !router._destroyed) {\n router.navigate(path);\n }\n else {\n window.location.href = path;\n }\n };\n\n self.updatePageLinks = function () {\n if (isSPAEnabled) {\n router.updatePageLinks();\n }\n };\n\n $(function () {\n log('Route resolving...');\n var resolved = router.resolve();\n log('Route resolved: ' + JSON.stringify(resolved));\n if (typeof ReturnButton !== 'undefined') {\n ReturnButton.init();\n }\n app.disableLoading();\n });\n\n return self;\n}());\n\n\n\n\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/Main/Live/ModeTableLive.js';\nimport './Shared/Main/Live/TableFetcherLive.js';\nimport './Shared/Main/Live/BinderLive.js';\nimport './Shared/Main/Live/BinderLiveFavorites.js';\nimport './Shared/Main/Live/BinderLiveSingleSport.js';\nimport './Shared/Main/Live/BinderTextScroll.ts';\n\nimport './Shared/Main/Prematch/ModeTablePrematch.js';\nimport './Shared/Main/Prematch/BinderPrematch.js';\nimport './Shared/Main/Prematch/BinderPrematchFavorites.js';\nimport './Shared/Main/Prematch/BinderPrematchSingleSport.js';\n\nimport './Shared/Main/Event/EventBlock.js';\nimport './Shared/Main/Event/OpenEvent.js';\nimport './Shared/Main/Event/binder.js';\n\nimport './Shared/Main/Tickets/Tickets.js';\n\nimport './Shared/Main/History/binder.js';\nimport './Shared/Main/SuperExpress/binder.js';\n\nimport './Shared/Main/Results/Results.js';\nimport './Shared/Main/Results/binder.js';\n\nimport './Shared/Main/Bonuses/binder.js';\n\nimport './Shared/Routing/navigo.js';\nimport './Shared/Routing/spa.js';\n"],"names":[],"sourceRoot":""}