WoWsStatInfo

Расширенная статистика и функционал.

目前為 2015-04-23 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name WoWsStatInfo
// @author Vov_chiK
// @description Расширенная статистика и функционал.
// @copyright 2015+, Vov_chiK
// @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// @namespace http://forum.walkure.pro/
// @version 0.3.0.2
// @creator Vov_chiK
// @include http://worldofwarships.ru/cbt/accounts/*
// @match http://worldofwarships.ru/cbt/accounts/*
// @grant GM_xmlhttpRequest
// ==/UserScript==
// @Vov_chiK

(function(window){
	/* ===== Main function ===== */
	function WoWsStatInfo(){
		var VersionWoWsStatInfo = '0.3.0.2';
		var WoWsStatInfoLink = '#';
		var WoWsStatInfoLinkName = '[0.3.0] [WoWsStatInfo] Расширенная статистика на оф. сайте.';
		
		var WoWsStatInfoHref = 'http://vovchik.myjino.ru/US_WoWsStatInfo/';
		
		var lang = 'ru';
		if(window.location.host.indexOf(".wargaming.net") > -1){
			lang = getCookie('wgccfe_language');
		}else if(window.location.host.indexOf("worldoftanks") > -1){
			lang = getCookie('hllang');
		}

		var localization = getLocalization(lang);
		
		var realm = localization['realm'];
		
		/* ===== Message UserScript ===== */
		{
			
		}		
		
		var navigatorInfo = getBrowser();
		window.onerror = function(message, source, lineno, column, errorObj){
			if(source == ''){source = window.location.href;}
			else if(source.indexOf(".js") != -1){return false;}
			if(message == 'Script error.' && errorObj == null){console.log('message == \'Script error.\' && errorObj == null'); return false;}
			
			lineno += 17;
			
			var agent = '';
			var agentArr = navigator.userAgent.split(')');
			for(var i = 0; i < agentArr.length; i++){
				if(agent != ''){agent += ')\n';}
				agent += agentArr[i];
			}
			
			var error = localization['ErrorScript']+"\n\n" +
					"Browser name: "+navigatorInfo['browserName']+"\n"+
					"Full version: "+navigatorInfo['fullVersion']+"\n"+
					"Major version: "+navigatorInfo['majorVersion']+"\n"+
					"AppName: "+navigatorInfo['appName']+"\n"+
					"UserAgent: "+agent+"\n\n"+
					"Error: "+message+"\n"+
					"URL: " +source+"\n"+
					"Line: "+lineno+"\n"+
					"Column: "+column+"\n"+
					"StackTrace: "+errorObj+"\n\n"+
					localization['ErrorSendDeveloper'];
			
			console.log(error);
			alert(error);
			error = error.split('\n').join('<br />');
			
			// onShowMessage(
				// localization['Box'],
				// 'different_error',
				// error,
				// onCloseMessage,
				// localization['Ok'],
				// false
			// );
			
			return true;
		}
			
		function getBrowser(){
			var nVer = navigator.appVersion;
			var nAgt = navigator.userAgent;
			var browserName = navigator.appName;
			var fullVersion = ''+parseFloat(navigator.appVersion); 
			var majorVersion = parseInt(navigator.appVersion, 10);
			var nameOffset, verOffset, ix;

			// In Opera 15+, the true version is after "OPR/" 
			if((verOffset = nAgt.indexOf("OPR/")) != -1){
				browserName = "Opera";
				fullVersion = nAgt.substring(verOffset + 4);
			}
			
			// In older Opera, the true version is after "Opera" or after "Version"
			else if((verOffset = nAgt.indexOf("Opera")) != -1){
				browserName = "Opera";
				fullVersion = nAgt.substring(verOffset + 6);
				if((verOffset = nAgt.indexOf("Version")) != -1) 
					fullVersion = nAgt.substring(verOffset + 8);
			}
			
			// In MSIE, the true version is after "MSIE" in userAgent
			else if((verOffset = nAgt.indexOf("MSIE")) != -1){
				browserName = "Microsoft Internet Explorer";
				fullVersion = nAgt.substring(verOffset + 5);
			}
			// In Chrome, the true version is after "Chrome" 
			else if((verOffset = nAgt.indexOf("Chrome")) != -1) {
				browserName = "Chrome";
				fullVersion = nAgt.substring(verOffset + 7);
			}
			
			// In Safari, the true version is after "Safari" or after "Version" 
			else if((verOffset = nAgt.indexOf("Safari")) != -1){
				browserName = "Safari";
				fullVersion = nAgt.substring(verOffset + 7);
				if((verOffset = nAgt.indexOf("Version")) != -1) 
					fullVersion = nAgt.substring(verOffset + 8);
			}
			
			// In Firefox, the true version is after "Firefox" 
			else if((verOffset = nAgt.indexOf("Firefox")) != -1){
				browserName = "Firefox";
				fullVersion = nAgt.substring(verOffset + 8);
			}
			
			// In most other browsers, "name/version" is at the end of userAgent 
			else if((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))){
				browserName = nAgt.substring(nameOffset, verOffset);
				fullVersion = nAgt.substring(verOffset + 1);
				if(browserName.toLowerCase() == browserName.toUpperCase()){
					browserName = navigator.appName;
				}
			}
			
			// trim the fullVersion string at semicolon/space if present
			if((ix = fullVersion.indexOf(";")) != -1)
				fullVersion = fullVersion.substring(0, ix);
			if((ix = fullVersion.indexOf(" ")) != -1)
				fullVersion = fullVersion.substring(0, ix);

			majorVersion = parseInt(''+fullVersion, 10);
			if(isNaN(majorVersion)){
				fullVersion  = ''+parseFloat(navigator.appVersion); 
				majorVersion = parseInt(navigator.appVersion, 10);
			}
			
			console.log(''
				+'Browser name  = '+browserName+'\n'
				+'Full version  = '+fullVersion+'\n'
				+'Major version = '+majorVersion+'\n'
				+'navigator.appName = '+navigator.appName+'\n'
				+'navigator.userAgent = '+navigator.userAgent+'\n'
			);			
			
			var navigatorInfo = [];
			navigatorInfo['browserName'] = browserName;
			navigatorInfo['fullVersion'] = fullVersion;
			navigatorInfo['majorVersion'] = majorVersion;
			navigatorInfo['appName'] = navigator.appName;
			navigatorInfo['userAgent'] = navigator.userAgent;
			
			return navigatorInfo;
		}
		
		/* ===== Style UserScript ===== */
		{
			var StyleWoWsStatInfo = '' +
				'div.div-link-block{font-size:13px; color: #fff; text-align: right; padding-top: 10px; padding-bottom: 10px;}' +
				'span.link-block:hover{border-bottom: 1px dotted #fff; cursor: pointer;}' +
				'span.link-block div.icon-link-block{background: url("http://'+realm+'.wargaming.net/clans/static/0.1.0.1/images/table-sorter/table-sorter_arrow_sprite.png") no-repeat 0 0; width: 10px; height: 10px; margin: -15px 100%;}' +
				'span.hide-block div.icon-link-block{background-position: 100% -26px;}' +
				'span.show-block div.icon-link-block{background-position: 100% -16px;}' +
				'div#userscript-block{border-radius: 2px; background-color: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.1); padding: 10px; margin: 10px 0; line-height: 20px;}' +
				'div.hide-block{display: none;}' +
				'div.wowsstatinfo-stat{text-align: center; margin-top: 10px; color: white; font-size: 16px;}' +
				'span.name-stat{color: #ffcc33;}' +
			'';
			var StyleWoWsStatInfoAdd = document.createElement("style");
			StyleWoWsStatInfoAdd.textContent = StyleWoWsStatInfo.toString();
			document.head.appendChild(StyleWoWsStatInfoAdd);
		}
		
		var MembersArray = [];
		
		var typeStat = ["pvp", "pve"];
		
		var color = new Array();
		color['very_bad'] = '#FE0E00'; // очень плохо
		color['bad'] = '#FE7903'; // плохо
		color['normal'] = '#F8F400'; // средне
		color['good'] = '#60FF00';  // хорошо
		color['very_good'] = '#02C9B3'; // очень хорошо
		color['unique'] = '#D042F3'; // уникально		
		
		/* ===== Check load page ===== */
		if(window.location.href.indexOf("accounts") > -1 && window.location.href.split('/').length == 7 && window.location.href.split('/')[5].match(/[0-9]+/) != null){
			var account_id = window.location.href.split('/')[5].match(/[0-9]+/);
			MemberProfilePage();
		}
		
		jQ('.link-block').click(function(){onViewBlock(this);});
		
		/* ===== Pages function ===== */
		function MemberProfilePage(){
			getMemberStatistic();
		
			var content = document.getElementsByClassName('content')[0];
			var row = content.getElementsByClassName('row')[0];
			row.outerHTML += '' +
				'<div id="userscript-block-list">' +
					getUserScriptDeveloperBlock() +
					'' +
				'</div>' +
			'';
			
			for(var t = 0; t < typeStat.length; t++){
				var type = typeStat[t];
			
				var account_statistics__general = document.getElementsByClassName('account_statistics__general')[t];
				if(account_statistics__general !== undefined){
					var stat_main_middle = account_statistics__general.getElementsByClassName('stat-main-middle')[0];
					stat_main_middle.getElementsByClassName('value')[0].style.color = colorBattlesAvgXP(MembersArray[0][type]['avg_xp']);
				
					var stat = account_statistics__general.getElementsByClassName('stat');
					
					stat[0].getElementsByClassName('value')[0].style.color = colorBattles(MembersArray[0][type]['battles']);
					stat[1].getElementsByClassName('value')[0].style.color = colorWinsPercents(MembersArray[0][type]['wins_percents']);					
					stat[2].getElementsByClassName('value')[0].style.color = colorAvgDamage(MembersArray[0][type]['avg_damage'], MembersArray[0][type]['avg_level_battles']);
					stat[3].getElementsByClassName('value')[0].style.color = colorKillDead(MembersArray[0][type]['kill_dead']);

					var userbar = '';					
					var my_profile_nickname = document.getElementsByClassName('js-my_profile_nickname')[0].textContent;
					if(type == 'pvp'){
						if(my_profile_nickname == MembersArray[0]['account_name']){
							userbar += '<button class="btn btn-default" id="generator-userbar" style="margin: 5px;">'+localization['generator-userbar']+'</button>';
						}
						
						userbar += '' +
							'<br />'+
							'<img id="userbar-img" src="'+WoWsStatInfoHref+'bg/userbar.png" />'+
							'<div id="userbar-link" style="margin: 5px;">'+WoWsStatInfoHref+'bg/userbar.png</div>'
						'';
					}
					
					account_statistics__general.outerHTML += '' +
						'<hr />' +
						'<table style="width: 100%;">' +
							'<tr>' +
								'<td style="vertical-align: top;">' +
									'<div id="wowsstatinfo-'+type+'" class="wowsstatinfo-stat">' +
										'<span class="name-stat">'+localization['wr']+':</span> ' +
										'<font color="'+colorWalkureRating(MembersArray[0][type]['wr'])+'">'+(MembersArray[0][type]['wr']).toFixed(2)+'</font>' + 
									'</div>' +
								'</td>'+
								'<td style="width: 460px; text-align: center; vertical-align: top;">'+
									userbar +
								'</td>' +
							'</tr>' +
						'</table>'
					'';
				}
			}
			
			var img = new Image();
			img.onload = function(){
				var userbar_img = document.getElementById('userbar-img');
				userbar_img.src = WoWsStatInfoHref+'userbar/'+MembersArray[0]['account_name']+'.png'+'?'+Math.floor(Math.random()*100000001);
				
				var userbar_link = document.getElementById('userbar-link');
				userbar_link.textContent = WoWsStatInfoHref+'userbar/'+MembersArray[0]['account_name']+'.png';
			}
			img.src = WoWsStatInfoHref+'userbar/'+MembersArray[0]['account_name']+'.png'+'?'+Math.floor(Math.random()*100000001);
			
			jQ('#generator-userbar').click(function(){
				GeneratorUserBar();
			});
		}
		
		/* ===== MemberProfilePage function ===== */
		function getMemberStatistic(){	
			var index = MembersArray.length;		
			MembersArray[index] = [];
			
			var account_href = window.location.href.split('/')[5].split('-');
			var account_id = account_href[0];
			var account_name = account_href[1];
			
			var account = document.getElementsByClassName('account')[0];
			account_name = account.getElementsByTagName('h1')[0].textContent;
			
			MembersArray[index]['account_id'] = account_id;
			MembersArray[index]['account_name'] = account_name;
			
			for(var t = 0; t < typeStat.length; t++){
				var type = typeStat[t];				
				MembersArray[index][type] = [];
				
				var account_statistic = document.getElementById('account_statistic-'+type);
				var account_statistics = account_statistic.getElementsByClassName('account_statistics__rates-small-border');
				if(account_statistics.length == 3){
					MembersArray[index][type]['battles'] = htmlParseMemberStatistic(account_statistics[0].rows[1].cells[1]);
					MembersArray[index][type]['wins'] = htmlParseMemberStatistic(account_statistics[0].rows[2].cells[1]);
					MembersArray[index][type]['losses'] = htmlParseMemberStatistic(account_statistics[0].rows[3].cells[1]);
					MembersArray[index][type]['draws'] = htmlParseMemberStatistic(account_statistics[0].rows[4].cells[1]);
					MembersArray[index][type]['survived_battles'] = htmlParseMemberStatistic(account_statistics[0].rows[5].cells[1]);
					MembersArray[index][type]['hits_percents'] = htmlParseMemberStatistic(account_statistics[0].rows[6].cells[1]);
					MembersArray[index][type]['damage'] = htmlParseMemberStatistic(account_statistics[0].rows[7].cells[1]);
					MembersArray[index][type]['frags_ships'] = htmlParseMemberStatistic(account_statistics[0].rows[8].cells[1]);
					MembersArray[index][type]['frags_planes'] = htmlParseMemberStatistic(account_statistics[0].rows[9].cells[1]);
					MembersArray[index][type]['capture_base'] = htmlParseMemberStatistic(account_statistics[0].rows[10].cells[1]);
					MembersArray[index][type]['defend_base'] = htmlParseMemberStatistic(account_statistics[0].rows[11].cells[1]);
					
					MembersArray[index][type]['avg_xp'] = htmlParseMemberStatistic(account_statistics[1].rows[1].cells[1]);
					MembersArray[index][type]['avg_damage'] = htmlParseMemberStatistic(account_statistics[1].rows[2].cells[1]);
					MembersArray[index][type]['avg_frags_ships'] = htmlParseMemberStatistic(account_statistics[1].rows[3].cells[1]);
					MembersArray[index][type]['avg_frags_planes'] = htmlParseMemberStatistic(account_statistics[1].rows[4].cells[1]);
					MembersArray[index][type]['avg_capture_base'] = htmlParseMemberStatistic(account_statistics[1].rows[5].cells[1]);
					MembersArray[index][type]['avg_defend_base'] = htmlParseMemberStatistic(account_statistics[1].rows[6].cells[1]);
					
					MembersArray[index][type]['max_xp'] = htmlParseMemberStatistic(account_statistics[2].rows[1].cells[1]);
					MembersArray[index][type]['max_damage'] = htmlParseMemberStatistic(account_statistics[2].rows[2].cells[1]);
					MembersArray[index][type]['max_frags_ships'] = htmlParseMemberStatistic(account_statistics[2].rows[3].cells[1]);
					MembersArray[index][type]['max_frags_planes'] = htmlParseMemberStatistic(account_statistics[2].rows[4].cells[1]);
					
					var ships__avg_params = account_statistic.getElementsByClassName('ships__avg-params')[0]
					MembersArray[index][type]['avg_level_battles'] = htmlParseMemberStatistic(ships__avg_params.getElementsByClassName('_value')[0]);
				}else{
					MembersArray[index][type]['battles'] = 0;
					MembersArray[index][type]['wins'] = 0;
					MembersArray[index][type]['losses'] = 0;
					MembersArray[index][type]['draws'] = 0;
					MembersArray[index][type]['survived_battles'] = 0;
					MembersArray[index][type]['hits_percents'] = 0;
					MembersArray[index][type]['damage'] = 0;
					MembersArray[index][type]['frags_ships'] = 0;
					MembersArray[index][type]['frags_planes'] = 0;
					MembersArray[index][type]['capture_base'] = 0;
					MembersArray[index][type]['defend_base'] = 0;
					
					MembersArray[index][type]['avg_xp'] = 0;
					MembersArray[index][type]['avg_damage'] = 0;
					MembersArray[index][type]['avg_frags_ships'] = 0;
					MembersArray[index][type]['avg_frags_planes'] = 0;
					MembersArray[index][type]['avg_capture_base'] = 0;
					MembersArray[index][type]['avg_defend_base'] = 0;
					
					MembersArray[index][type]['max_xp'] = 0;
					MembersArray[index][type]['max_damage'] = 0;
					MembersArray[index][type]['max_frags_ships'] = 0;
					MembersArray[index][type]['max_frags_planes'] = 0;
					
					MembersArray[index][type]['avg_level_battles'] = 0;
				}
				
				/* ===== Calc Statistic ===== */
				{
					MembersArray[index][type]['wins_percents'] = (MembersArray[index][type]['wins']/MembersArray[index][type]['battles'])*100;
					MembersArray[index][type]['kill_dead'] = MembersArray[index][type]['frags_ships']/(MembersArray[index][type]['battles']-MembersArray[index][type]['survived_battles']);
				
					var avg_damage = MembersArray[index][type]['avg_damage'];
					var avg_frags_ships = MembersArray[index][type]['avg_frags_ships'];
					var avg_frags_planes = MembersArray[index][type]['avg_frags_planes'];
					var avg_capture_base = MembersArray[index][type]['avg_capture_base'];
					var avg_defend_base = MembersArray[index][type]['avg_defend_base'];
					var avg_level_battles = MembersArray[index][type]['avg_level_battles'];
					
					var wr = avg_damage/(avg_level_battles*10) + avg_frags_ships*200 + (avg_frags_planes/6)*120 + avg_capture_base*35 + avg_defend_base*35;
					if(isNaN(wr)){wr = 0;}
					MembersArray[index][type]['wr'] = wr;
				}
			}
			//console.log(MembersArray[index]);
		}
		function GeneratorUserBar(){
			var jsonString = 'json='+JSON.stringify(MembersArray[0])+'&type=userbar';
			
				var xmlhttp;
				try{
					xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
				}catch(e){
					try{
						xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
					}catch(E){
						xmlhttp = false;
					}
				}
				if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
					xmlhttp = new XMLHttpRequest();
				}
				xmlhttp.open('POST', ''+WoWsStatInfoHref+'userbar.php?random='+Math.floor(Math.random()*100000001), true);
				xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				xmlhttp.onreadystatechange = function(){
					if(xmlhttp.readyState == 4){
						if(xmlhttp.status == 200){
							var userbar_img = document.getElementById('userbar-img');
							userbar_img.src = xmlhttp.responseText+'?'+Math.floor(Math.random()*100000001);
							
							var userbar_link = document.getElementById('userbar-link');
							userbar_link.textContent = xmlhttp.responseText;
						}
					}
				};
				xmlhttp.send(jsonString);
		}
		
		function htmlParseMemberStatistic(element){
			var value = element.textContent.trim().replace(new RegExp(' ', 'g'), '');
			
			value = value.replace('%', '');
			value = value.replace(',', '.');
			
			if(value.indexOf('(') > -1 && value.indexOf(')') > -1){
				value = (value.split(' '))[0];
			}
			
			return value;
		}
		
		/* ===== Color function ===== */
		function findColor(value, colorsBorders) {
			if (isNaN(value) || value <= colorsBorders[0]) {
				return color['very_bad'];
			} else if (value <= colorsBorders[1]) {
				return color['bad'];
			} else if (value <= colorsBorders[2]) {
				return color['normal'];
			} else if (value <= colorsBorders[3]) {
				return color['good'];
			} else if (value <= colorsBorders[4]) {
				return color['very_good'];
			} else if (value <= colorsBorders[5]) {
				return color['unique'];
			} else {
				return color['very_bad'];
			}
		}
		function colorBattles(b){
			return findColor(b / 1000, [0.5, 1.5, 4, 7.5, 10, 999]);
		}		
		function colorWinsPercents(wp){
			return findColor(wp, [46, 48, 51, 56, 64, 100]);
		}
		function colorBattlesAvgXP(baxp) {
			return findColor(baxp, [1000, 1150, 1375, 1600, 1825, 9999]);
		}		
		function colorWalkureRating(wr) {
			return findColor(wr, [609, 849, 1144, 1474, 1774, 9999]);
		}		
		function colorAvgDamage(ad, alb) {
			return findColor(ad/(alb*10), [300, 500, 700, 850, 1000, 9999]);
		}
		function colorKillDead(kd) {
			return findColor(kd, [1.3, 1.7, 2.1, 2.5, 2.7, 99]);
		}		
		
		/* ===== UserScript function ===== */
		function getUserScriptDeveloperBlock(){
			var html = '' +
				'<div class="div-link-block">' +
					'<span id="userscriptwowsstatinfo" class="link-block hide-block">' +
						'UserScript WoWsStatInfo ' + VersionWoWsStatInfo +
						'<div class="icon-link-block"></div>'+
					'</span>' +
				'</div>' +
				'<div id="userscript-block" class="userscriptwowsstatinfo hide-block" style="text-align: center;">' +
					'<span class="userscript-developer" align="center">' +
						localization['userscript-developer'] +
						' <a target="_blank" style="color: #658C4C; font-weight: bold; border-bottom: 1px dotted #658C4C;" href="http://worldofwarships.ru/cbt/accounts/635939-Vov_chiK/">Vov_chiK</a> ' +
						localization['userscript-alliance'] +
						' <a target="_blank" style="color: #2CA8C7; font-weight: bold; border-bottom: 1px dotted #2CA8C7;" href="http://'+realm+'.wargaming.net/clans/search/#wgsearch&offset=0&limit=10&search=Walkure">Walkure</a> '+
						'.<br /><br />' +
						localization['userscript-topic']+' '+
						'<a target="_blank" href="'+WoWsStatInfoLink+'">' +
							WoWsStatInfoLinkName +
						'</a>' +
						'<br /><br />' +
						'<font style="font-size: 16px; color: #658C4C;">'+localization['userscript-developer-support']+'</font><br />'+
						'<font style="color: #2CA8C7;">Web-Money WMR</font> R295712009837 <br />'+
						'<font style="color: #2CA8C7;">Web-Money WMZ</font> Z226959724402 <br />'+						
						'<font style="color: #2CA8C7;">Yandex Money</font> 41001290117791 <br />'+						
						'<font style="color: #2CA8C7;">RBK Money</font> RU353257918 <br />'+						
					'</span>' +
				'</div>' +
			'';
			return html;
		}
		function onViewBlock(element){
			if(null != element.getAttribute('id')){
				var viewId = element.getAttribute('id');
				var viewClassLink = element.getAttribute('class');
				var viewBlock = document.getElementsByClassName(viewId)[0];
				if(viewClassLink == 'link-block hide-block'){
					element.setAttribute('class', 'link-block show-block');
					viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('hide-block', 'show-block'));
					setLocalStorage(viewId, 'show', false);
				}else{
					element.setAttribute('class', 'link-block hide-block');
					viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('show-block', 'hide-block'));
					setLocalStorage(viewId, 'hide', false);
				}
			}
		}
		function checkLocalStorage(){
			try{
				return 'localStorage' in window && window['localStorage'] !== null;
			}catch (e){
				return false;
			}
		}
		function setLocalStorage(key, value, allPageHost){
			if(checkLocalStorage()){
				if(allPageHost){key = key+ClanId;}
				window.localStorage.setItem(key, value);
			}else{
				setCookie(key, value, allPageHost);
			}
		}
		function getLocalStorage(key, allPageHost){
			var value = null;
			if(checkLocalStorage()){
				if(allPageHost){key = key+ClanId;}
				value = window.localStorage.getItem(key);
			}else{
				value = getCookie(key);
			}
			return value;			
		}
		function setCookie(c_name, value, allPageHost){
			var exdate = new Date();
			exdate.setDate(exdate.getDate() + 365);
			if(allPageHost){
				var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString()+"; domain=" +window.location.hostname+"; path=/");
				document.cookie = c_name + "=" + c_value;
			}else{
				var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString());
				document.cookie = c_name + "=" + c_value;
			}
		}
		function getCookie(c_name){
			var c_value = document.cookie;
			var c_start = c_value.indexOf(" " + c_name + "=");
			if(c_start == -1){
				c_start = c_value.indexOf(c_name + "=");
			}
			if(c_start == -1){
				c_value = null;
			}else{
				c_start = c_value.indexOf("=", c_start) + 1;
				var c_end = c_value.indexOf(";", c_start);
				if(c_end == -1){
					c_end = c_value.length;
				}
				c_value = unescape(c_value.substring(c_start,c_end));
			}
			return c_value;
		}		
		function onShowMessage(title, icon, content, funcOk, OkText, viewCancel){
			
		}
		function onCloseMessage(){
			
		}
		// Modify JSON.stringify to allow recursive and single-level arrays
		(function(){
			// Convert array to object
			var convArrToObj = function(array){
				var thisEleObj = new Object();
				if(typeof array == "object"){
					for(var i in array){
						var thisEle = convArrToObj(array[i]);
						thisEleObj[i] = thisEle;
					}
				}else {
					thisEleObj = array;
				}
				return thisEleObj;
			};
			var oldJSONStringify = JSON.stringify;
			JSON.stringify = function(input){
				return oldJSONStringify(convArrToObj(input));
			};
		})();
		function getLocalization(lang){
			var localization = [];
			
			{/* Русский */
				localization['ru'] = [];
				
				localization['ru']['realm'] = 'ru';
				
				localization['ru']['Box'] = 'Оповещение';
				localization['ru']['Ok'] = 'Ok';
				localization['ru']['Cancel'] = 'Отмена';
				
				localization['ru']['ErrorScript'] = 'Во время работы UserScript WoWsStatInfo '+VersionWoWsStatInfo+', возникла ошибка:';
				localization['ru']['ErrorSendDeveloper'] = 'Сообщите об ошибке разработчику скрипта.';
				
				localization['ru']['userscript-developer'] = 'Разработчик UserScript WoWsStatInfo:';
				localization['ru']['userscript-alliance'] = 'член альянса';
				localization['ru']['userscript-topic'] = 'Тема на форуме:';
				localization['ru']['userscript-developer-support'] = 'Поддержать автора скрипта:';
				
				localization['ru']['generator-userbar'] = 'Создать UserBar';
				
				localization['ru']['wr'] = 'WR';
			}
			
			return localization[lang];
		}
	}
	
	/* ===== Load UserScript ===== */
	function addJQuery(callback){
		var script = document.createElement("script");
		script.async = true;
		script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js");
		script.addEventListener(
			'load', 
			function(){
				var script = document.createElement("script");
				script.async = true;
				script.textContent = "window.jQ = jQuery.noConflict(true);"+
				"("+callback.toString()+")();";
				document.head.appendChild(script);
			}, 
			false
		);
		document.head.appendChild(script);
	}

	if(window.location.host.indexOf("worldofwarships") > -1){
		addJQuery(WoWsStatInfo);
	}
})(window);