WoWsStatInfo

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

当前为 2015-04-23 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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);