// ==UserScript==
// @name       RuTor seed graph
// @namespace  http://qmegas.info/rutor
// @version    0.6.4
// @description  Помогает визуально увидить популярность той или иной раздачи.
// @match    http://rutor.info/*
// @match    http://*.rutor.info/*
// @match	 http://rutor.is/*
// @match	 http://6tor.org/*
// @match    https://rutor.info/*
// @match	 https://rutor.is/*
// @author  Megas (qmegas.info)
//
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
//
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_addStyle
//
// ==/UserScript==

//Version log:
// v0.6.4
//  - Добавленa поддержка HTTPS домейнов
// v0.6.3
//  - Список поддерживаемых доменов обновлен в соответствии с официальным списком зеркал трекера. Все неофициальные зеркала удалены.
// v0.6.1
//  - Добавлена поддержка нового домена 6tor.org
// v0.6
//  - Доработана поддержка Firefox и Greasemonkey
// v0.5
//  - Добавлена возможность скрывать/отображать содержимое категорий на главной при просмотре раздач по категориям
// v0.4
//	- Добавлена возможность выделять раздачи с переводом от iTunes
// v0.3.5
//	- Исправления всвязи с изменениями на сайте
// v0.3.3
// 	- Смена маски скрипта так, чтоб он срабатывал как для домейна с www, так и для альтернативного сервера alt.rutor.org
// v0.3
// 	- Добавлено окно настроек (открывается в верхнем меню при клике на таб "Настройки")
// 	- Добавлено выделение раздач для iPad
// 	- Добавлено выделение 3D раздач
// v0.2
//	- Добавлено ограничение длины полосы в зависимости от размера окна браузера, так как у супер популярных раздач таблица растягивалась за пределы экрана. 
// 	- Лицензионные раздачи теперь помечаются другим цветом.
//


(function (window, document) {
	var _settings = {};
	
	function addStyle(aCss) {
		if (typeof GM_addStyle === 'undefined') {
			const head = document.getElementsByTagName('head')[0];
			if (head) {
				const style = document.createElement('style');
				style.setAttribute('type', 'text/css');
				style.textContent = aCss;
				head.appendChild(style);
				return style;
			}
			return null;
		}
		return GM_addStyle(aCss);
	}
	
	function firefoxValFix(val) {
		if (val === 'true') {
			return true;
		}
		if (val === 'false') {
			return false;
		}
		return val;
	}
	
	function getValue(key, def) {
		if (typeof GM_getValue === 'undefined') {
			if (window.localStorage) {
				const val = window.localStorage.getItem(key);
				return (val === null) ? def : firefoxValFix(val);
			}
			console.log('localStorage disable');
			return def;
		}
		return GM_getValue(key, def);
	}
	
	function setValue(key, val) {
		if (typeof GM_setValue === 'undefined') {
			if (window.localStorage) {
				return window.localStorage.setItem(key, val);
			}
			console.log('localStorage disable');
			return null;
		}
		return GM_setValue(key, val);
	}
	
	function loadSettings() {
		addStyle('#qmegas_settings { width: 400px; height: 230px; position: fixed; left: 0; top: 0; background-color: #fff; border: 1px solid #a00; }');
		addStyle('#qmegas_settings .header {	background: url("http://s.rutor.org/i/backgr.png") 0 -13px;	height: 41px;	color: #000000;	font-weight: bold; text-align: center; }');
		addStyle('#qmegas_settings .fields { padding: 5px; }');
		addStyle('#qmegas_settings .fields .row { clear: both; height: 30px; }');
		addStyle('#qmegas_settings .fields .row .col1 { width: 300px;	float: left; }');
		addStyle('#qmegas_settings .fields .row .col2 { width: 90px; float: left; }');
		addStyle('#qmegas_settings .qmegas-color { max-width: 70px; max-height: 20px; }');
		addStyle('.qmegas_cat_hider { padding-left: 30px; font-size: 15px; color: #0040ff; }');

		_settings = {
			lineColor: getValue('line_color', '#ff0000'),
			markLicense: getValue('mark_license', true),
			licenseColor: getValue('license_color', '#ddffdd'),
			markIpad: getValue('mark_ipad', false),
			ipadColor: getValue('ipad_color', '#ddddff'),
			markTreed: getValue('mark_treed', false),
			treedColor: getValue('treed_color', '#f4ddff'),
			markItunes: getValue('mark_itunes', true),
			itunesColor: getValue('itunes_color', '#ffe2d5'),
			categoryHideArray: JSON.parse(getValue('categoryHideArray', '{}'))
		};
	}

	function setStyles() {
		addStyle('.qmegas-line { height: 3px; background-color: ' + _settings.lineColor + '; }');
		addStyle('tr.qmegas-license td { background-color: ' + _settings.licenseColor + '; }');
		addStyle('tr.qmegas-ipad td { background-color: ' + _settings.ipadColor + '; }');
		addStyle('tr.qmegas-3d td { background-color: ' + _settings.treedColor + '; }');
		addStyle('tr.qmegas-itunes td { background-color: ' + _settings.itunesColor + '; }');
	}
	
	function toggleSettings() {
		var $settWnd = $('#qmegas_settings'), 
			x = parseInt(($(window).width() - $settWnd.width())/2),
			y = parseInt(($(window).height() - $settWnd.height())/2);
			
		$('#qmegas_lineColor').val(_settings.lineColor);
		if (_settings.markLicense)
			$('#qmegas_markLicense').attr('checked', true);
		$('#qmegas_licenseColor').val(_settings.licenseColor);
		if (_settings.markIpad)
			$('#qmegas_markIpad').attr('checked', true);
		$('#qmegas_ipadColor').val(_settings.ipadColor);
		if (_settings.markTreed)
			$('#qmegas_markTreed').attr('checked', true);
		$('#qmegas_treedColor').val(_settings.treedColor);
		if (_settings.markItunes)
			$('#qmegas_markItunes').attr('checked', true);
		$('#qmegas_itunesColor').val(_settings.itunesColor);
			
		$('#qmegas_settings')
			.css({'left': x, 'top': y})
			.toggle('fast');
	}
	
	function addSettings() {
		var $tab = $('<a href="javascript:;" class="menu_b"><div>Настройка</div></a>');
		$tab.click(toggleSettings);
		$('#menu').append($tab);
		
		var $wnd = $('<div id="qmegas_settings" style="display: none">	<div class="header">Настройка скрипта</div>	<div class="fields">		<div class="row">			<div class="col1">Цвет полоски популярности раздачи:</div>			<div class="col2"><input type="color" class="qmegas-color" id="qmegas_lineColor" /></div>		</div>		<div class="row"> 			<div class="col1"><input type="checkbox" id="qmegas_markLicense"> Выделять лицензии</div>			<div class="col2"><input type="color" class="qmegas-color" id="qmegas_licenseColor" /></div>		</div>		<div class="row"> 			<div class="col1"><input type="checkbox" id="qmegas_markIpad"> Выделять раздачи iPad</div>			<div class="col2"><input type="color" class="qmegas-color" id="qmegas_ipadColor" /></div>		</div>		<div class="row">			<div class="col1"><input type="checkbox" id="qmegas_markTreed"> Выделять 3D раздачи</div>			<div class="col2"><input type="color" class="qmegas-color" id="qmegas_treedColor" /></div>		</div>		<div class="row">			<div class="col1"><input type="checkbox" id="qmegas_markItunes"> Выделять раздачи с переводом iTunes</div>			<div class="col2"><input type="color" class="qmegas-color" id="qmegas_itunesColor" /></div>		</div>		<div class="row" style="text-align: center">			<input type="button" value="Сохранить настройки" id="qmegas_save_settings" />		</div>	</div></div>');
		$('body').append($wnd);
		
		$('#qmegas_save_settings').live('click', function(){
			setValue('line_color', $('#qmegas_lineColor').val());
			setValue('mark_license', $('#qmegas_markLicense').is(':checked'));
			setValue('license_color', $('#qmegas_licenseColor').val());
			setValue('mark_ipad', $('#qmegas_markIpad').is(':checked'));
			setValue('ipad_color', $('#qmegas_ipadColor').val());
			setValue('mark_treed', $('#qmegas_markTreed').is(':checked'));
			setValue('treed_color', $('#qmegas_treedColor').val());
			setValue('mark_itunes', $('#qmegas_markItunes').is(':checked'));
			setValue('itunes_color', $('#qmegas_itunesColor').val());
			
			loadSettings();
			setStyles();
			$('#qmegas_settings').toggle('fast');
		});
	}
	
	function markLines() {
		var maxWidth = $(window).width()*0.6;
		
		$('tr.gai, tr.tum').each(function(){
			var $trs = $(this).find('td'), 
				$spans4 = $($trs.get().pop()).find('span'),
				count = parseInt($.trim($($spans4.get(0)).text())) + parseInt($.trim($($spans4.get(1)).text())),
				sp1as$ = $($trs.get(1)).find('a'),
				sp1a = (sp1as$.length == 2) ? sp1as$.get(1) : sp1as$.get(2);
		        
			count = Math.min(maxWidth, parseInt(count/10));
			$($trs.get(1)).append('<div class="qmegas-line" style="width: ' + count + 'px"></div>');

			if (_settings.markLicense && ((sp1a.innerHTML.indexOf('Лицензия') !== -1) || (sp1a.innerHTML.indexOf('лицензия') !== -1))) {
				$(this).addClass('qmegas-license');
			}
			if (_settings.markIpad && (sp1a.innerHTML.indexOf('iPad') !== -1)) {
				$(this).addClass('qmegas-ipad');
			}
			if (_settings.markTreed && (sp1a.innerHTML.indexOf('3D-Video') !== -1)) {
				$(this).addClass('qmegas-3d');
			}
			if (_settings.markItunes && (sp1a.innerHTML.indexOf('iTunes') !== -1)) {
				$(this).addClass('qmegas-itunes');
			}
		});
	}
	
	function hideCategories() {
		function returnShowText() {
			return 'Показать раздел';
		}
		
		function returnHideText() {
			return 'Скрыть раздел';
		}
		
		$('#index h2 + table').each(function(){
			var $this = $(this), $h2 = $this.prev(), $links = $h2.find('a');
			if ($links.length === 0) {
				return;
			}
			
			var catName = $links.first().text();
			var $a = $('<a></a>')
					.addClass('qmegas_cat_hider')
					.attr('href', '#')
					.attr('data-id', catName)
					.text(returnHideText())
					.click(function(){
						if ($this.is(':visible')) {
							$this.hide();
							_settings.categoryHideArray[catName] = 1;
							$(this).text(returnShowText());
						} else {
							$this.show();
							_settings.categoryHideArray[catName] = 0;
							$(this).text(returnHideText());
						}
						setValue('categoryHideArray', JSON.stringify(_settings.categoryHideArray));
						return false;
					});
			if (_settings.categoryHideArray.hasOwnProperty(catName) && _settings.categoryHideArray[catName] === 1) {
				$a.text(returnShowText());
				$this.hide();
			}
			$h2.append($a);
		});
	}
	
	function init() {
		loadSettings();
		setStyles();
		addSettings();
		markLines();
		hideCategories();
	}
	
	init();
})(window, document);