flobik / Tatts Pro

// ==UserScript==
// @id              TattsPro
// @name            Tatts Pro
// @namespace       http://goslotto.ru/viewtopic.php?f=35&t=3830
// @version         2.0.2
// @author          flobik <info@northweb.ru>
// @description     Заполняет билеты в лотереях Tatts.com комбинациями из текстового файла.
// @include         https://thelott.com/tattersalls/buy-lotto/purchase-ticket?product=*
// @updateURL       https://openuserjs.org/install/flobik/Tatts_Pro.user.js
// @downloadURL     https://openuserjs.org/install/flobik/Tatts_Pro.user.js
// @run-at          document-end
// @grant none
// @icon            data:image/png;base64,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
// ==/UserScript==

/* CHANGELOG

2.0.2 (01.06.2016) 
	- Фикс для нового домена (спасибо Barsik)

2.0.1 (10.10.2015) 
	- Фикс позиции блока с корзиной

2.0 (15.01.2015) 
	- Скрипт переписан с нуля
	- Новый интерфейс
	- Новый принцип отправки билетов на сервер
	- Исправлены ошибки
	- Поддержка всех игр Tatts
	- Поддержка Tampermonkey и Greasemonkey
	- Автообновление

1.3 (05.02.2012) 
	- Возможность не ставить цифру 0 перед числом, меньше 10 (при условии разделения чисел пробелами) 

1.2 (05.02.2012) 
	- Возможность использования комб с пробелами-разделителями

1.1 (21.12.2011) 
	- Добавлена поддержка браузера Google Chrome
	- Исправлено несколько опечаток  в сообщениях

1.0 (19.12.2011)
	- Первый релиз

*/

//Запуск скрипта в режиме IIFE (Immediately-Invoked Function Expression)
(function($, window, document){
	'use strict';

	//Константы
	var maxTickets = 20, //Максимум билетов в корзине
		maxCombsPerTicket = 50, //Максимум комб в билете
		minCombsPerTicket = 4, //Минимум комб в билете
		dotsTimerTimeout = 1000; //Задержка между изменением многоточия
	
	//Переменные
	var elTattsPro, //Ссылка на форму
		elCombsInput, //Поле выбора файла
		game, //Текущая игра
		dots = [], //Ссылки на точки в многоточии
		curDot = -1, //Текущий шаг многоточия
		dotsTimerEnabled = false, //Включен ли таймер обновления многоточия
		maxSelection = 0; //Максимальное число, которое можно выбрать в текущей лотерее
	
	//Сохраняющиеся на протяжении ввода всех комб переменные
	var data = {
		combs: [], //Готовые комбинации
		combsBreak: 0, //Комба, после которой нужно закончить ввод билета, чтобы в следующем билете было минимум 4 комбы
		curComb: 0, //Индекс вводимой комбинации
		draw: 0, //Тираж
		system: 0 //Система
	};
		
	//Обработка ошибки
	function Error(text) {
		alert(text);
		elCombsInput.val('');
		return false;
	}
	
	//Функции для работы с localStorage
	function StorageDelete(name) {
		localStorage.removeItem(name);
    }
	
	function StorageGet(name, defaultValue) {
		var value = localStorage[name];
		return value == null ? defaultValue : JSON.parse(value);
	}

	function StorageSet(name, value) {
		localStorage[name] = JSON.stringify(value);
	}
	
	//Импортирует CSS
	function InjectCSS(css) {
		var head, style;
		head = document.getElementsByTagName('head')[0];
		if (!head) { return; }
		style = document.createElement('style');
		style.type = 'text/css';
		style.innerHTML = css;
		head.appendChild(style);
	}
	
	//Изменение отображаемой панели интерфейса
	function ShowGUI(panel) {
		//Скрытие все панелей
		$('#TattsPro .Panel').hide();
		//Отображение необходимой панели
		$('#TattsPro #'+panel+'.Panel').show();
		//Запуск таймера многоточия
		if (panel == 'Process') {
			dotsTimerEnabled = true;
			DotsTimerIteration();
		} else {
			dotsTimerEnabled = false;
		}
	}
	
	//Обновление информации в GUI
	function UpdateGUI(panel) {
		switch (panel) {
			case 'Start':
				$('#Start span[data-tp="Draw"]').html(data.draw);
				$('#Start span[data-tp="System"]').html(data.system);
				$('#Start span[data-tp="CombsCount"]').html(data.combs.length);
				$('#Start span[data-tp="TicketsCount"]').html(Math.ceil(data.combs.length / maxCombsPerTicket));
				$('#Start span[data-tp="StepsCount"]').html(Math.ceil(data.combs.length / (maxCombsPerTicket * maxTickets)));
				break;
			case 'Process':
				$('#Process span[data-tp="CompletePercentage"]').html(Math.ceil((data.curComb / data.combs.length) * 100));
				$('#Process span[data-tp="CombsRemain"]').html(data.combs.length - data.curComb);
				$('#Process span[data-tp="CombsCount"]').html(data.combs.length);
				$('#Process span[data-tp="Step"]').html(Math.floor(data.curComb / (maxCombsPerTicket * maxTickets)) + 1);
				$('#Process span[data-tp="StepsCount"]').html(Math.ceil(data.combs.length / (maxCombsPerTicket * maxTickets)));
				break;
			case 'Continue':
				$('#Continue span[data-tp="CompletePercentage"]').html(Math.ceil((data.curComb / data.combs.length) * 100));
				$('#Continue span[data-tp="CombsRemain"]').html(data.combs.length - data.curComb);
				$('#Continue span[data-tp="CombsCount"]').html(data.combs.length);
				$('#Continue span[data-tp="Step"]').html(Math.floor(data.curComb / (maxCombsPerTicket * maxTickets)) + 1);
				$('#Continue span[data-tp="StepsCount"]').html(Math.ceil(data.combs.length / (maxCombsPerTicket * maxTickets)));
				break;
		}
	}
	
	//Таймер многоточия
	function DotsTimerIteration() {
		if (++curDot == 3)
			curDot = -1;
		for (var i = 0; i < 3; i++)
			dots[i].css('visibility', (i <= curDot ? 'visible' : 'hidden'));
		if (dotsTimerEnabled)
			setTimeout(DotsTimerIteration, dotsTimerTimeout);
	}			
	
	//Выбран файл с комбинациями
	function FileLoad() {
		//Файл
		var file = elCombsInput[0].files[0];
		//Проверка типа файла
		if (!file.type.match(/text/))
			return Error('Выбранный тип файла не поддерживается.');
		//Чтение содержимого файла
		var reader = new FileReader();
		reader.onload = function(e) {
			//Парсинг комбинаций
			var parseSuccess = ParseCombs(reader.result);
			//Проверка комбинаций (если парсинг удался)
			var checkSuccess = (parseSuccess ? CheckCombs() : false);
			//Подготовка к вводу билетов и отображение GUI с информацией
			if (parseSuccess && checkSuccess) {
				PrepareTicketsEnter();
				UpdateGUI('Start');
				ShowGUI('Start');
			}
		}
		reader.readAsText(file);	
	}
	
	//Парсинг комбинаций из текста
	function ParseCombs(text) {
		//Разрешены только цифры и пробельные символы
		if (!text.match(/^[\d|\s]+$/))
			return Error('Неправильный формат комбинаций.');
		//trim()
		text = text.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
		//Добавление цифры 0 перед числами < 10
		text = text.replace(/^(\d) /gm, '0$&');
		text = text.replace(/ (\d)(?!\d)/gm, ' 0$1');
		//Разбор комбинаций по строкам
		data.combs = [];
		var lines = text.split('\n');
		for (var i = 0; i < lines.length; i++) {
			//Удаление всех пробельных символов
			var line = lines[i].replace(/\s/g, '');
			//Количество чисел в комбинации
			var numCount = line.length / 2;
			//Временный массив с текущей комбинацией
			var curComb = [];
			//Парсинг комбинации
			for (var j = 0; j < numCount; j++)
				curComb[j] = parseInt(line.substr(j * 2, 2), 10);
			//Сохранение комбинации
			data.combs.push(curComb);
		}
		return true;
	}
	
	//Проверка комбинаций
	function CheckCombs() {
		//Минимум 4 комбинации
		if (data.combs.length < minCombsPerTicket)
			return Error('Необходимо минимум '+minCombsPerTicket+' комбинации.');
		//Минимальное количество чисел в комбе
		var minCombsCount = $('.gameSelectionsDiv:first input').length + (game == 'Powerball' ? 1 : 0);
		//Количество чисел в первой комбе
		var firstCombNumCount = data.combs[0].length;
		//Все комбы одного формата, и есть минимальное кол-во чисел
		for (var i = 0; i < data.combs.length; i++) {
			if (data.combs[i].length != firstCombNumCount)
				return Error('Одна или несколько комбинаций отличаются по длине от первой комбинации.');
			if (data.combs[i].length < minCombsCount)
				return Error('Одна или несколько комбинаций содержит менее '+minCombsCount+' чисел.');
		}
		return true;
	}
	
	//Подготовка к вводу билетов
	function PrepareTicketsEnter() {
		//Количество комб в последнем билете
		var remainCombs = data.combs.length % maxCombsPerTicket;
		//Если их меньше минимального кол-ва, рассчитываем номер комбы, на которой закончится предпоследний/последний билет
		data.combsBreak = (remainCombs > 0 && remainCombs < minCombsPerTicket ? data.combs.length - minCombsPerTicket - 1 : data.combs.length - 1);
		//Индекс вводимой комбинации
		data.curComb = 0;
		//Выбранный тираж
		data.draw = parseInt($('.startDraw.selected').attr('startdraw'), 10);
		//Система
		data.system = (game == 'Powerball' ? data.combs[0].length - 1 : data.combs[0].length);
	}
	
	//Начало ввода билетов
	function EnterTickets() {
		//Интерфейс ввода билетов
		UpdateGUI('Process');
		ShowGUI('Process');
		//Запуск итерации ввода билетов
		EnterIteration();
	}
	
	//Ввод билета
	function EnterIteration(AJAXData) {
		//Функция вызвана возвратом ответа от сервера
		if (typeof AJAXData != 'undefined') {
			UpdateGUI('Process');
			//Обновление корзины
			trolley_generate(AJAXData);
			if (data.curComb == data.combs.length) { //Кончились комбы?
				StorageDelete('data');
				ShowGUI('Complete');
				return;
			} else if(AJAXData.trolley.freeItemCount == 0) { //Кончилось место в тележке
				StorageSet('data', data);
				ShowGUI('NeedPay');
				return;
			}
		}
		//Индекс последней комбы в текущем билете
		if (data.curComb + maxCombsPerTicket <= data.combsBreak)
			var ticketLastCombIndex = data.curComb + maxCombsPerTicket - 1; //Максимум
		else if (data.curComb > data.combsBreak)
			var ticketLastCombIndex = data.combs.length - 1;  //То, что осталось
		else
			var ticketLastCombIndex = data.combsBreak; //До линии разреза билета
		//Количество комб в билете
		//var curTicketCombsCount = ticketLastCombIndex - data.curComb + 1;
		//Подготовка данных билета
		var ticketData = {
			gameAutoPicks: [], //False, False, False...
			gameSelections: [], //Кодированные комбинации
			gamePowerballs: [] //Шары powerball
		};
		//Разбор комбинаций
		for (;data.curComb <= ticketLastCombIndex; data.curComb++) {
			//Все билеты введены вручную...
			ticketData.gameAutoPicks[ticketData.gameAutoPicks.length] = 'False';
			if (game != 'Powerball') {
				//Комбинация
				ticketData.gameSelections[ticketData.gameSelections.length] = EncodeComb(data.combs[data.curComb]);
			} else {
				//Комбинация
				ticketData.gameSelections[ticketData.gameSelections.length] = EncodeComb(data.combs[data.curComb].slice(0, data.combs[data.curComb].length - 1));
				//Powerball
				ticketData.gamePowerballs[ticketData.gamePowerballs.length] = data.combs[data.curComb][data.combs[data.curComb].length - 1]
			}
		}
		//Формирование параметров AJAX запроса
		var queryData = {
			product: game,
			drawCount: 1,
			drawNumbers: data.draw,
			gameCount: ticketData.gameAutoPicks.length,
			gameAutoPicks: ticketData.gameAutoPicks.join(','),
			gameSelections: ticketData.gameSelections.join('_'),
			gamePowerballs: ticketData.gamePowerballs.join(','),
			powerhit: false,
			systemNumber: data.system,
			favouriteName: '',
			nswDayOfWeek: 0,
			autoPlayDrawCount: '',
			autoPlayJackpotAmount: ''
		};
		//Отправка билета
		$.ajax({
			url: 'https://thelott.com/CallProcedure.ashx?procedure=addTicketsToTrolley&nocache=' + Math.random(),
			type: "POST",
			data: queryData,
			success: EnterIteration
		});
	}
	
	//Кодирует комбинацию (копия функции getGameSelectionMask(c))
	function EncodeComb(c) {
		var a = [];
		for (var d = 0; d <= maxSelection; d++)
			a[d] = 0;
		while (a.length % 8 != 0)
			a.push(0);
		for (d = 0; d < c.length; d++)
			a[c[d]] = 1;
		var e = "";
		for (d = 0; d < a.length / 8; d++) {
			var b = 0;
			for (j = 0; j < 8; j++)
				b += a[d * 8 + j] << j;
			e = StrPadLeft(b.toString(16), "0", 2) + e;
		}
		return e;
	}
	
	//Дополняет строку str символами pad слева до длинны length (копия функции string_padLeft(d, b, c))
	function StrPadLeft(str, pad, length) {
		if (str.length >= length)
			return str;
		var e = [];
		for (var a = 1; a <= length - str.length; a++)
			e.push(pad);
		e.push(str);
		return e.join("");
	}
	
	//Функция отмены ввода билетов
	function CancelTicketsEnter() {
		if (confirm("Вы уверены, что хотите отменить ввод билетов?")) {
			StorageDelete('data');
			ShowGUI('Canceled');
		}
	}

	//Инициализация скрипта
	function Init() {
		//Проверка совместимости
		if (window.FileReader === undefined)
			return Error('Ваш браузер не поддерживает HTML5 File API. Попробуйте последнюю версию Chrome или Firefox.');
		//Выбранная игра
		game = product.name; //window.location.href.match(/product=(.+?)(?:&|$)/)[1];
		//Максимальное число, которое можно выбрать в текущей лотерее
		maxSelection = product.maxSelection;
		//Сдвигаем корзину вниз
		$('#shopping-trolley').css('top', '310px');
		//Добавляем CSS
		InjectCSS(resources.css);
		//Добавление формы скрипта
		$('#InputDiv').append(resources.html);
		//Ссылка на форму и её элементы
		elTattsPro = $('#TattsPro');
		elCombsInput = $('#CombsInput');
		for (var i = 0; i < 3; i++)
			dots[i] = $('.process .dot' + (i + 1));
		//Стилизация заголовка
		CufonReplace('#TattsPro h2', {
			fontFamily: 'TheSans-ExtraBold',
			textShadow: '#FFFFFF 2px 0px',
			color: '-linear-gradient(#2f5ea9, .25=#4782ca,.50=#6bb8fd,.50=#6bb8fd)'
		});
		//Проверка на наличие места в телеге
		if (trolleyData.trolley.freeItemCount == 0) {
			ShowGUI('NeedPay');
			return;
		}
		//Продолжение ввода билетов
		var tmpData = StorageGet('data', false);
		if (tmpData !== false) {
			data = tmpData;
			UpdateGUI('Continue');
			ShowGUI('Continue');
		}
		//Событие выбора файла
		elCombsInput.change(function() {
			FileLoad();
		});
		//Событие начала ввода билетов, нажатие кнопки - продолжить ввод билетов
		$('#TattsProEnter, #TattsProContinue').click(function() {
			EnterTickets();
		});
		//Отмена ввода билетов
		$('#TattsProCancel').click(function() {
			CancelTicketsEnter();
		});
	}
	
	//Ресурсы
	var resources = {};
	//Иконка OK
	resources.okIcon = 'data:image/png;base64,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';
	//Иконка отмены
	resources.cancelIcon = 'data:image/png;base64,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';
	//Иконка визы
	resources.visaIcon = 'data:image/png;base64,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';
	//HTML
	resources.html = '\
		<div id="TattsPro">\
			<h2>Tatts Pro</h2>\
				<div class="Panel" id="FileChoose">\
					Выберите файл с комбинациями\
					<div>\
						<div class="TattsProButton Big">Открыть</div>\
						<input id="CombsInput" type="file">\
					</div>\
				</div>\
				<div class="Panel" id="Start">\
					<table>\
						<tr>\
							<td>\
								<strong>Комбинаций:</strong> <span data-tp="CombsCount">0</span><br>\
								<strong>Билетов:</strong> <span data-tp="TicketsCount">0</span><br>\
								<strong>Заходов:</strong> <span data-tp="StepsCount">0</span>\
							</td>\
							<td>\
								<strong>Draw:</strong> <span data-tp="Draw">0000</span><br>\
								<strong>Система:</strong> <span data-tp="System">0</span>\
							</td>\
						</tr>\
					</table>\
					<div id="TattsProEnter" class="TattsProButton Big">Начать ввод</div>\
				</div>\
				<div class="Panel" id="Process">\
					<div class="data">\
						<strong>Завершено:</strong> <span data-tp="CompletePercentage">0</span>%<br>\
						<strong>Осталось комб.:</strong> <span data-tp="CombsRemain">0</span> из <span data-tp="CombsCount">0</span><br>\
						<strong>Заход:</strong> <span data-tp="Step">0</span> из <span data-tp="StepsCount">0</span><br>\
					</div>\
					<div class="process">Идет ввод билетов<span class="dot dot1">.</span><span class="dot dot2">.</span><span class="dot dot3">.</span></div>\
				</div>\
				<div class="Panel" id="Continue">\
					<div class="data">\
						<strong>Завершено:</strong> <span data-tp="CompletePercentage">0</span>%<br>\
						<strong>Осталось комб.:</strong> <span data-tp="CombsRemain">0</span> из <span data-tp="CombsCount">0</span><br>\
						<strong>Заход:</strong> <span data-tp="Step">0</span> из <span data-tp="StepsCount">0</span><br>\
					</div>\
					Продолжить ввод билетов?<br>\
					<div id="TattsProContinue" class="TattsProButton Small">Да</div> <div id="TattsProCancel" class="TattsProButton Small Red">Нет</div>\
				</div>\
				<div class="Panel" id="Complete">\
					<img src="'+resources.okIcon+'"/><br>Ввод билетов завершен!\
				</div>\
				<div class="Panel" id="NeedPay">\
					<img src="'+resources.visaIcon+'"/><br>Для продолжения необходимо оплатить уже введенные билеты.\
				</div>\
				<div class="Panel" id="Canceled">\
					<img src="'+resources.cancelIcon+'"/><br>Ввод билетов отменен.\
				</div>\
		</div>\
	';
	//CSS
	resources.css = '\
		#TattsPro {\
			position: absolute;\
			left: 660px;\
			top: 0px;\
			width: 235px;\
			height: 150px;\
			background-color: rgba(252, 253, 254, 0.29);\
			padding: 10px;\
			border-radius: 10px;\
		}\
		#TattsPro h2 {\
			margin: 0px 0 5px 0px;\
		}\
		#FileChoose {\
			text-align: center;\
			padding-top: 26px;\
		}\
		#FileChoose > div {\
			position: relative;\
			overflow: hidden;\
			margin: 10px;\
		}\
		.TattsProButton {\
			background: #f0d300;\
			border: 1px solid #E3A800;\
			background: linear-gradient(to bottom, #f0d300 0%,#efab00 100%);\
			color: #FFF;\
			font-weight: bold;\
			text-shadow: 0px 2px 0px #E59D00;\
			cursor: pointer;\
		}\
		.TattsProButton.Big {\
			border-radius: 9px;\
			font-size: 18px;\
			padding: 7px 0;\
		}\
		.TattsProButton.Small {\
			border-radius: 6px;\
			padding: 2px 0;\
			width: 100px;\
			display: inline-block;\
			margin: 6px 2px 0 2px;\
		}\
		.TattsProButton.Red {\
			background: #da0000;\
			border: 1px solid #fc0101;\
			background: linear-gradient(to bottom, #FF4C4C 0%,#DD0E0E 100%);\
			color: #FFF;\
			font-weight: bold;\
			text-shadow: 0px 2px 0px rgba(0, 0, 0, 0.18);\
		}\
		#CombsInput {\
			position: absolute;\
			top: 0;\
			right: 0;\
			margin: 0;\
			padding: 0;\
			font-size: 60px;\
			cursor: pointer;\
			opacity: 0;\
			filter: alpha(opacity=0);\
		}\
		#Start, #Process, #Continue, #Complete, #NeedPay, #Canceled {\
			display: none;\
			text-align: center;\
		}\
		#Start table {\
			width: 100%;\
			white-space: nowrap;\
			margin: 18px 0 19px 0;\
		}\
		#Start table td {\
			text-align: left;\
		}\
		#Start table td:first-child {\
			padding-right: 5px;\
		}\
		#Process .data {\
			text-align: left;\
			margin: 18px 0 19px 0;\
		}\
		#Process .process {\
			text-align: center;\
			font-weight: bold;\
			background: linear-gradient(to bottom, rgba(255, 241, 142, 0.65) 0%, rgba(255, 216, 116, 0.65) 100%);\
			color: #C78F00;\
			padding: 3px 0px;\
			border-radius: 4px;\
		}\
		#Complete {\
			text-align: center;\
			margin-top: 10px;\
		}\
		#Complete img {\
			margin-bottom: 11px;\
		}\
		#NeedPay {\
			text-align: center;\
			margin-top: -2px;\
			line-height: 18px;\
		}\
		#Canceled {\
			text-align: center;\
			margin-top: 10px;\
		}\
		#Canceled img {\
			margin-bottom: 11px;\
		}\
		#Continue .data {\
			text-align: left;\
			margin: 9px 0 9px 0;\
		}\
	';
	
	//Запуск инициализации после загрузки страницы
	$(function() {
		Init();
	});
})($, window, document);