Greasy Fork is available in English.

Virtonomica:kvala_personal_indicator_zarplaty_by_Agor71

Отображение максимальной технологии, максимального числа/квалификации сотрудников, которые держит топ. Также после открытия окна "Сотрудники и зарплата" на всех заводах этого города будет показано отношение зарплаты к среднегородской.

От 09.11.2016. Виж последната версия.

// ==UserScript==
// @name           Virtonomica:kvala_personal_indicator_zarplaty_by_Agor71
// @version        1.10
// @author         Agor71 (edited by UnclWish)
// @namespace      virtonomica
// @description    Отображение максимальной технологии, максимального числа/квалификации сотрудников, которые держит топ. Также после открытия окна "Сотрудники и зарплата" на всех заводах этого города будет показано отношение зарплаты к среднегородской.
// @include        http*://*virtonomic*.*/*/main/unit/view/*
// @include        http*://*virtonomic*.*/*/window/unit/employees/engage/*
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/supply
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/manufacture
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/animals
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/sale
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/finans_report
// @exclude        http*://*virtonomic*.*/*/main/unit/view/*/technology/*
// ==/UserScript==

var run = function() {
    var new_interface = $("div.unit_box-container").length;
    if (new_interface) {
        // поменять местами заметки и инфу по топ-менеджеру
	var topBox = $("#notice_div").parent().next();
	$("#notice_div").parent().insertAfter(topBox);

	// создать кнопку удаления заметки
	var str = '<div class="unit_button btn-virtonomics-unit-cancel" onclick="$(\'#notice_div\').text(\'\');return unitNoticeSet();">';
	str += '<i class="fa fa-trash fa-lg fa-fw"></i>&nbsp; Удалить заметку</div>';
	$("#notice_div").next().children().eq(0).children().eq(0).after($(str));
    }
    saveAverageCityInfo();
    

    var type, cur_pers;
    var kvTeh = [0, 1, 1.74, 2.41, 3.03, 3.62, 4.19, 4.74, 5.28, 5.8, 6.31, 6.81, 7.3, 7.78, 8.26, 8.73, 9.19, 9.65, 10.1, 10.54, 10.99, 11.42, 11.86, 12.29, 12.71, 13.13, 13.55, 13.97, 14.38, 14.79, 15.19, 15.6, 16, 16.4, 16.8, 17.19, 17.58, 17.97, 18.36, 18.74, 19.13];
    
	/***** Калькулятор *****/
	$('#unit_subtab').each(function() {
		var str = this.innerHTML;
		str += '<br><div id="calcTop"><a id="calcToBloc" class="popup scriptIks_cur"><u>Калькулятор топ-1</u></a></div>';
		var d=document.createElement('div');
		d.id='calcTop1';
		d.style='position: fixed; right: 5px; top: 5px; background:gray; padding: 0px;'
		          +' border-radius:10px; -webkit-border-radius:10px; -moz-border-radius:10px; -khtml-border-radius:10px;';
        
        var ua = navigator.userAgent;
        var strToBrauzer = '<div style="position:relative; margin: 0; padding: 4px;">';
        if (ua.search(/Chrome/) > 0) strToBrauzer = '<div style="position:absolute; margin: 0; padding: 4px; right: 5px; top: 5px;">';
		d.innerHTML = strToBrauzer
		              +'<table style="background-color: white; border-radius:7px; -webkit-border-radius:7px; -moz-border-radius:7px; -khtml-border-radius:7px;">'
		              +'<tr><td align="center" colspan="2" style="color: #708090;"><b><h1>Калькулятор</h1><b><hr></td></tr>'
		              +'<tr><td>Квалификация ТОПа</td> <td><input id="calcTopKv" type="text" size="4" class="scriptIks_imp"></td></tr>'
		              +'<tr><td>Технология</td> <td><input id="calcTopTehImp" type="text" size="4" class="scriptIks_imp"></td></tr>'
		              +'<tr><td>Количество работников</td> <td><input id="calcTopKolRab" type="text" size="4" class="scriptIks_imp"></td></tr>'
		              +'<tr><td>Квалификация работников</td> <td><input id="calcTopKvRab" type="text" size="4" class="scriptIks_imp"></td></tr>'
		              +'<tr><td align="center" colspan="2"><input id="calcButton" type="button" value="Расчитать" class="scriptIks_cur scriptIks_but"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td>Максимальная технология<br>по данной квалификации</td> <td id="calcTopTeh" style="text-align: right;"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td>Максимальное количество<br>персонала при<br>данной квалификации</td> <td id="calcTopRabMax" style="text-align: right;"></td></tr>'
		              +'<tr><td><input id="calcTopRab_MaxImp" value="120" type="text" size="4" class="scriptIks_imp" title="Укажите процент на какой расчитать">&nbsp;%</td> <td id="calcTopRab_Max" style="text-align: right;"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td>Максимальная квалификация<br>персонала при данном количестве<hr></td> <td id="calcTopRab" style="text-align: right;"></td></tr>'
		              +'<tr><td>Минимальная квалификация<br>по данной технолигии</td> <td id="calcTopRabTeh" style="text-align: right;"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td>Максимальное качество<br>оборудования при данной<br>квалификации персонала<hr></td> <td id="calcTopOb" style="text-align: right;"></td></tr>'
		              +'<tr><td>Качество оборудования<br>по данной технолигии</td> <td id="calcTopObTeh" style="text-align: right;"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td>Максимальное количество<br>персонала в отрасли</td> <td id="calcTop3" style="text-align: right;"></td></tr>'
		              +'<tr><td align="center" colspan="2"><hr></td></tr>'
		              +'<tr><td align="right" colspan="2"><a href="http://virtacalc.freehost96.ru/indextop.php" class="popup" title="Так-же расчет нагрузки ТОП-1 и многое другое..." target="_blank"><small>Калькулятор от DeMonyan</small></a></td></tr>'
		              +'<table>'
		              +'<div class="scriptIks_cur scriptIks_exitDiv" id="calcExitBloc" title="Закрыть">'
		              +'<div class="scriptIks_crug1"></div>'
		              +'<div class="scriptIks_exit"><b>X</b></div>'
		              +'<div class="scriptIks_crug"></div>';
		              +'</div>'
		              +'</div>';
		document.body.appendChild(d);
		
		this.innerHTML = str;
		document.getElementById('calcTop1').style.display = "none";
	});
	
	document.getElementById('calcButton').onclick = calcTopGet;
	function calcTopGet(){
	        var p = false;
	        if($('#calcTopTeh').html() != '') p = true;
            // Максимум рабов ТОП-3
            kv = $('#calcTopKv').val();
            var type_1 = type;
            if (type == 'orchard')  type_1 = 'farm';
            pers = calcPersonalTop3(kv, type_1);
            $('#calcTop3').html(pers);
            // Максимальная техна
            if(p) {
                techn = calcTechMax(kv);
                $('#calcTopTeh').html(Math.floor(techn));
            }
            // Максимальное кол. рабов ТОП-1
            kvp = $('#calcTopKvRab').val();
            emp_count = calcPersonalTop1(kv, kvp, type);
            $('#calcTopRabMax').html(emp_count);
            var kvpTeh = kvTeh[$('#calcTopTehImp').val()];
            $('#calcTopRabTeh').html(kvpTeh);
            //-----
            var maxRab = $('#calcTopRab_MaxImp').val();
            $('#calcTopRab_Max').html(Math.floor(emp_count/100*maxRab));
            // Макс. квала рабов
            cur_pers = $('#calcTopKolRab').val();
            maxq=f2(calcQualTop1(kv,cur_pers, type));
            $('#calcTopRab').html(maxq);
            // Макс. оборудование
            max_eq = calcEqQualMax(kvp);
            $('#calcTopOb').html(max_eq);
            if(p) {
                    var teh_eq = calcEqQualMax(kvpTeh);
                    $('#calcTopObTeh').html(teh_eq);
            } else $('#calcTopObTeh').html('');
	}
	
	$('#calcToBloc').click(function(){
	       document.getElementById('calcTop').style.display = "none";
	       document.getElementById('calcTop1').style.display = "block";
	});
	$('#calcExitBloc').click(function(){
	       document.getElementById('calcTop').style.display = "block";
	       document.getElementById('calcTop1').style.display = "none";
	});
	/*************************************/
	
    var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    $ = win.$;
	
	var mode='';
	$( 'img[src*="812223"]' ).each ( function()
	{
		mode='Crocuta';  // алмазы
	});
	//mode='Crocuta';// офисная мистика
	type = getType();//'unknow';
	var k =getK3(type);// 0;

	if((type=='unknow')||(k==0)) return;
	
	//////////////////////////////////	
	var total=getPersonalTotal();
	cur_pers=getPersonal(type);
	var kv = getPlayerQual();
	$('#calcTopKv').val(kv);
		
	// топ-3
	$("td:contains('Суммарное')").next().each(function() {
		str = this.innerHTML;
		//kv = parseInt( str );		
		var type_1 = type;
		if (type == 'orchard')  type_1 = 'farm';
		pers = calcPersonalTop3(kv, type_1);
		$('#calcTop3').html(pers);
		var pers_next=calcPersonalTop3(kv+1, type_1);
		var overload = procVal(pers, total);
		 
		if(overload>102) font='red';
		else if(overload>100) font='blue';
		else font='green';

		if (new_interface) {
			// выделить цветом число подчиненных
			var curText = $(this).text();
			$(this).html($('<font color=' + font + '><b>' + curText + '</b></font>'));
		
			var top3AndFree = '<tr><td>Нагрузка топ-3</td>';
			top3AndFree += '<td><font color=' + font +'><b>' + overload + '%</b></font></td></tr>';
			if (overload != 100) {
				var word = overload < 100 ? 'Свободно' : 'Лишних';
				var delta = Math.abs(pers - total);
				top3AndFree += '<tr><td>' + word + ' подчинённых</td>';
				top3AndFree += '<td><font color=' + font +'><b>' + delta + '</b></font></td></tr>';
			}
			$(this).parent().before($(top3AndFree));

			var str = '<tr><td>Максимальное количество</td><td>' + getThousandsSplitted(pers) + '</td></tr>';
			str += '<tr><td><font color=gray>На следующем уровне квалификации</font></td>';
			str += '<td><font color=gray>' + getThousandsSplitted(pers_next) + '</font></td></tr>'; 
			$(this).parent().after($(str));
		} else {
			var str=' <br><font color=' + font +'>Предельная нагрузка по квале: <b>';
			str+=pers+ '</b>'+' (на след.уровне: '+'<b>'+pers_next+'</b>'+')';
			//str+='</b>'; 
			str+='<br>Загрузка топ-3: <b> '+overload+' %</b>';
			if(overload<100) str+='<br>Свободно рабов: <b>'+(pers-total)+'</b>';
			else if(overload>100) str+='<br>Перебор рабов: <b>'+(total-pers)+'</b>';
			str+= '</b></font>';
			this.innerHTML = this.innerHTML +str;
		}
	});

// Количество работников
 	var nofp=getPersonal(type);
 	var emp_count = 0;
	
// топ-1
	var kvp = 0;
	$("td:contains('Уровень квалификации')").next().each(function() { 
		str = this.innerHTML;
		kvp = parseFloat( str );
		$('#calcTopKvRab').val(kvp);
		
		emp_count = calcPersonalTop1(kv, kvp, type);
		$('#calcTopRabMax').html(emp_count);
		$('#calcTopKolRab').val(cur_pers);
		emp_count_next = calcPersonalTop1(kv+1, kvp, type);
				
		var maxq=f2(calcQualTop1(kv, cur_pers, type));
		$('#calcTopRab').html(maxq);
		
		if(maxq<kvp) font='red';
		else font='green';

		// процент загрузки по топ-1
		//console.log("emp_count=" + emp_count + ", nofp=" + nofp);
		var num = procVal(emp_count, nofp);
		if(num>100){
		          if(num<=120) font='orange';
		          else font='red';
		} else font='green';

		if (new_interface) {
			// передвинуть уровень загрузки производства туда, где ему и место
			if ($("td:contains('Уровень загрузки производства')").length) {
				$($(this).parent().next().next()).insertBefore($(this).parent().prev().prev());
			}
		
			// выделить цветом значение квалификации
			var curText = $(this).text();
			$(this).html($('<font color=' + font + '><b>' + curText + '</b></font>'));

			var beforeString = '';
			var cityName = $("div.officePlace").clone().children().remove().end().text();
			var startPos = cityName.indexOf(":") + 2;
			cityName = cityName.substr(startPos, cityName.indexOf("|") - startPos).replace(/[\s,]+/g, '');
			cityName = cityName.substr(0, cityName.length - 2);
			//console.log("city=" + cityName);
			//var avgSalaryStr = localStorage.getItem(cityName + ":" + type);
            var avgSalaryStr;
            $("td:contains('В среднем по городу')").next().each(function() {
			//var str = $(this).text();
            //str = str.substr(0, str.indexOf(" в")).replace(/[^\d\.]/g, '')
            avgSalaryStr = parseFloat($(this).text().replace(/[^\d\.]/g, ''));
            //avgSalaryStr = parseFloat(str);
            });
            if (avgSalaryStr !== null) {
				//console.log("sal = " + avgSalaryStr);
				var curSalary = parseFloat(leaveOnlyDigitsAndDots($(this).parent().prev().prev().children().eq(1).text()));
				//console.log("curSalary=" + curSalary);
				//$(this).parent().prev().prev().children().eq(1).append('<font color=blue> (' + (curSalary / avgSalaryStr * 100).toFixed(0) + '%)</font>');
		        var zzzn = (curSalary / avgSalaryStr * 100).toFixed(0);
		        var colorn = zzzn<80?'red':'green';
		        var colorn = zzzn>80?'blue':colorn;
                //$(this).parent().prev().prev().children().eq(1).append(" (" + zzzn + "%)");
                var oldHtml = $(this).parent().prev().prev().children().eq(1).html();
                var colored = '<font color=' + colorn + '>' + oldHtml + '</font>';
                $(this).parent().prev().prev().children().eq(1).html(colored);
                //console.log ("cur_pers=" + cur_pers);
                beforeString += '<tr><td>Расходы на зарплату</td>';
				beforeString += '<td>$' + getThousandsSplitted((curSalary * cur_pers).toFixed(2)) + ' в неделю</td></tr>';
				//beforeString += '<tr><td>Средняя зарплата в городе</td>';
				//beforeString += '<td>$' + getThousandsSplitted(avgSalaryStr) + ' в неделю</td></tr>';
			}
			if (isFinite(num)) {
				beforeString += '<tr><td>Нагрузка топ-1</td><td><font color=' + font + '><b>' + num + '%</b></font></td></tr>';
			}
			$(this).parent().before($(beforeString));

			var str = '<tr><td>Квалификация для 100%/120% топ-1</td>';
			str += '<td>' + maxq + '/' + f2(calcQualTop1(kv, cur_pers / 1.2, type)) + '</td></tr>';
			//str += '<tr><td><font color=gray>Квалификация для 120% топ-1</font></td>';
			//str += '<td><font color=gray>' + f2(calcQualTop1(kv, cur_pers / 1.2, type)) + '</font></td></tr>';
			str += '<tr><td>Макс. количество с квалой ' + kvp + '</td>';
			str += '<td>' + emp_count + '</td></tr>';
			str += '<tr><td><font color=gray>120% максимального количества</font></td>';
			str += '<td><font color=gray>' + Math.floor(emp_count / 100 * 120) + '</font></td></tr>';
			str += '<tr><td><font color=gray>Макс. на следующем уровне квалы</font></td>';
			str += '<td><font color=gray>' + emp_count_next + '</font></td></tr>';
			$('#calcTopRab_Max').html(Math.floor(emp_count/100*120));
			$(this).parent().next().after($(str));
		} else {
			this.innerHTML = this.innerHTML + '<br><font color=gray>Максимальная квала для 100% по топ-1: <b>' + maxq + '</b></font>';
			this.innerHTML = this.innerHTML + '<br>(<font color='+font+'>Максимальное количество рабов: <b>' + (emp_count) + '</b></font>) ';
			this.innerHTML = this.innerHTML + '<br>(<font color='+font+'>120% количества рабов: <b>' + Math.floor(emp_count/100*120) + '</b></font>)';
			$('#calcTopRab_Max').html(Math.floor(emp_count/100*120));
			// процент загрузки по топ-1
			var num = procVal(emp_count, nofp);
			if(num>100){
			          if(num<=120) font='orange';
			          else font='red';
			} else font='green';
			this.innerHTML = this.innerHTML + '<br><font color=' + font + '>Нагрузка по топ-1: <b>' + num + '%</b></font>';
			///////////
			this.innerHTML = this.innerHTML + '<br>(<font color=gray>На квале ' + (kv+1) + ' (следующий уровень): <b>' + (emp_count_next) + '</b></font>)';
		
//			if(mode=='Crocuta'){
			
			var p5=Math.floor(pers/5);			
			var k5=calcQualTop1(kv,p5,type);			
			var e5=calcEqQualMax(k5);
			this.innerHTML = this.innerHTML + '<br>(<font color=olive>Special 05: <b>5 *' + p5 + '--'  + f2(k5) + '('+e5+')'+'</b></font>)';
			
			p5=Math.floor(pers/10);			
			k5=calcQualTop1(kv,p5,type);			
			e5=calcEqQualMax(k5);
			this.innerHTML = this.innerHTML + '<br>(<font color=olive>Special 10: <b>10*' + p5 + '--'  + f2(k5) + '('+e5+')'+'</b></font>)';
//			}
		}
	});
// техна
	var techn = 0;
	var max_techn = 0;
	$("td:contains('Уровень технологии')").next().each(function() { 
		str = this.innerHTML;
		techn = parseInt( str );
		$('#calcTopTehImp').val(techn);
		max_techn = calcTechMax(kv);
		$('#calcTopTeh').html(Math.floor(max_techn));
		font = 'green';
		if ( max_techn < techn) {
			font = 'red';
		}
		if (new_interface) {
			var curText = $(this).text();
			$(this).html($('<font color=' + font + '><b>' + curText + '</b></font>'));
			str = '<tr><td>Максимальная технология</td><td>' + (max_techn) + '</td></tr>';
			$(this).parent().after($(str));
		} else {
			str = ' <br>(<font color=' + font +'>Максимальная технология: <b>' + (max_techn) + '</b></font>)';
			this.innerHTML = this.innerHTML + str;
		}
	});
//оборудование
	var eq;
	var max_eq = 0;
	$("td:contains('Качество'):first").next().each(function() { 
		str = this.innerHTML;
		eq= parseFloat( str );
		max_eq = calcEqQualMax(kvp);
		$('#calcTopOb').html(max_eq);

		if (eq > max_eq) font = 'red';
		else font = 'green';

		if (new_interface) {
			var required = parseFloat($(this).parent().next().children().eq(1).text());
			if (eq < required) {
				font = 'red';
			}
			// выделить цветом качество
			var curText = $(this).text();
			$(this).html($('<font color=' + font + '><b>' + curText + '</b></font>'));

			//if (eq < required) {
			//	$(this).parent().next().children().eq(1).html($('<font color=' + font + '><b>' + required + '</b></font>'));
			//}
		
			str = '<tr><td>Максимальное по персоналу</td><td>' + (max_eq) + '</td></tr>';
			$(this).parent().next().after($(str));
		} else {
			str = ' <br>(<font color=' + font +'>Макс.качество по персоналу: <b>' + (max_eq) + '</b></font>)';
			this.innerHTML = this.innerHTML + str;
		}
		
		// Вызов калькулятора, чтоб посчтитал
		calcTopGet();
	});
    
    var d = 1;
    var ob, per;
    
// максмальное количество поситетилей по персоналу
    if(type == 'restaurant' || type == 'service' || type == 'medicine' || type == 'repair')
	$("td.title:contains('Количество посетителей')").next().each(function() {
        var str = this.innerHTML;
        
        per = str.match(/\d[.\s\d]*(?=)/g);
        per = [per[0].replace(/[^\d\.]/g,''), per[1].replace(/[^\d\.]/g,'')];
        var pos = per[0];
        
        ob = $("td:contains('Количество оборудования')").next().text().replace(' ','');
        ob = ob.match(/\d[.\s\d]*(?=)/g);
        ob = [ob[0].replace(/[^\d\.]/g,''), ob[1].replace(/[^\d\.]/g,'')];
        
        var posMax = per[1];
        perMax = ob[1];
        
        var spec = $("td.title:contains('Специализация')").next().text();
        switch(spec)
		{
			case('Фитнес'):
			case('Йога'):
			case('Бодибилдинг'):
			case('Группы здоровья'):
			case('Профессиональный спорт'):
			case('Скалолазание'):
				d = 5;
				break;
			case('Танцы'):
				d = 5;
				break;
			case('Прачечная'):
			case('Химчистка'):
			case('Прачечная самообслуживания'):
				d = 10;
				break;
			case('Косметический салон'):
			case('Парикмахерская'):
			case('Центр народной медицины'):
			case('Стоматологическая клиника'):
			case('Диагностический центр'):
			case('Поликлиника'):
			case('Больница'):
			case('Кардиологическая клиника'):
			default:
				d = 1;
		}
		perMax = perMax/d;
        
        var persKol = parseInt( $("td:contains('Количество сотрудников')").next().text().replace(' ','') );
        var maxPer = persKol*(posMax/perMax);
        var s = '<br>Макс. по персоналу: ' + maxPer;
        
        s += '<br>Посещаемость: ' + ( procVal(maxPer, pos) ) + '%';
        
        this.innerHTML = str + s;
	});

	///////////////////////////////////////////////////////////////////////////
	//function getThousandsSplitted(val)
	//возвращает аргумент с разделением пробелами тысяч
	///////////////////////////////////////////////////////////////////////////// 
	function getThousandsSplitted(val) {
		return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
	}//end getThousandsSplitted()

	///////////////////////////////////////////////////////////////////////////
	//function leaveDigitsAndDot(val)
	//удаляет из строки все символы, кроме цифр и точек
	///////////////////////////////////////////////////////////////////////////// 
	function leaveOnlyDigitsAndDots(str) {
		return str.replace(/[^\d\.]/g,'');
	}//end leaveDigitsAndDot()

	///////////////////////////////////////////////////////////////////////////
	//function f2(val)
	//возвращает аргумент округлённым до 2-го знака
	///////////////////////////////////////////////////////////////////////////// 
	function f2(val){
		return Math.floor(100*val)/100;
	}//end f2()
	
	
	///////////////////////////////////////////////////////////////////////////
	//function getPlayerQual()
	//возвращает квалификацию игрока
	///////////////////////////////////////////////////////////////////////////// 
	function getPlayerQual(){
		return parseInt($('a:contains("Квалификация игрока")').parent().next().text());
	}//end getPlayerQual()
	
	///////////////////////////////////////////////////////////////////////////
	//function calcPersonalTop3(q, type)
	// q - квалификация игрока
	// 
	//вычисляет максимальное кол-во работающих на предприятиях отрасли для заданной квалификации игрока (топ-3)
	///////////////////////////////////////////////////////////////////////////// 
	function calcPersonalTop3( q, type){
		return ((2*q*q + 6*q)*getK3(type));
	}//end calcPersonalTop3()
	
	///////////////////////////////////////////////////////////////////////////
	//function calcPersonalTop1(q, qp,type)
	// q - квалификация игрока
	// qp -  квалификация персонала
	//вычисляет максимальное кол-во работающих с заданной квалификацией на предприятии для заданной квалификации игрока (топ-1)
	///////////////////////////////////////////////////////////////////////////// 
	function calcPersonalTop1(q, qp,type){
		if((mode=='Crocuta')&&(type=='office')){return Math.floor(14*q*q/Math.pow(1.4, qp)/4.15);}
		return Math.floor(0.2*getK1(type)*14*q*q/Math.pow(1.4, qp));
	}//end calcPersonalTop1()
	
	///////////////////////////////////////////////////////////////////////////
	//function calcQualTop1(q, p, type)
	// q - квалификация игрока
	// p -  численность персонала
	//вычисляет максимальное квалификацию работающих при заданных их численности и квалификации игрока (обратна calcPersonalTop1())
	///////////////////////////////////////////////////////////////////////////// 
	function calcQualTop1(q, p, type){		
		if(p==0) return 0.00;
		if((mode=='Crocuta')&&(type=='office')){return Math.log(14/4.15*q*q/p)/Math.log(1.4);}
		return Math.log(0.2*14*getK1(type)*q*q/p)/Math.log(1.4);	
	}//end calcQualTop1()
	
	///////////////////////////////////////////////////////////////////////////
	//function calcTechMax(q)
	// q - квалификация игрока
	// 
	//вычисляет максимальный уровень технологии для заданной квалификации игрока
	///////////////////////////////////////////////////////////////////////////// 
	function calcTechMax(q){
		return Math.floor(10*Math.pow(q/0.0064, 1/3))/10 ;
	}//end calcTechMax()
	
	///////////////////////////////////////////////////////////////////////////
	//function calcEqQualMax(q)
	// qp - квалификация игрока
	// 
	//вычисляет максимальное качество оборудования/животных для заданной квалификации персонала
	///////////////////////////////////////////////////////////////////////////// 
	function calcEqQualMax( qp ){
		return Math.floor(100*Math.pow(qp, 1.5))/100 ;
	}//end calcEqQualMax
	
	///////////////////////////////////////////////////////////////////////////
	//function getPersonalTotal()
	//возвращает суммарное кол-во работающих в отрасли (топ-3)
	///////////////////////////////////////////////////////////////////////////// 
	function getPersonalTotal(){
		if (new_interface) {
			return parseInt($("#all_staff").text().replace(/\s+/g, ''));
		} else {
			return parseInt($('td.title:contains("Суммарное")').next().text().replace(' ','').replace(' ','').replace(' ','').replace(' ','').replace(' ','').replace(' ','').replace(' ','').replace(' ',''));
		}
		
	}//end getPersonalTotal()
	
	///////////////////////////////////////////////////////////////////////////
	//function getType()
	//возвращает тип в виде строки  (по изображению)
	///////////////////////////////////////////////////////////////////////////// 
	function getType(){
		var img =  $("#unitImage").html();
		if(img=='') return 'unknown';
		img = img.substr(0,img.length-8);
		switch(img)
		{
			case('<img src="/img/v2/units/shop'):
				return 'shop';
				break;
			case('<img src="/img/v2/units/workshop'):
				return 'workshop';
				break;
			case('<img src="/img/v2/units/mill'):
				return 'mill';
				break;
			case('<img src="/img/v2/units/animalfarm'):
				return 'animalfarm';
				break;
			case('<img src="/img/v2/units/medicine'):
				return 'medicine';
				break;
			case('<img src="/img/v2/units/restaurant'):
				return 'restaurant';
				break;
			case('<img src="/img/v2/units/orchard'):
				return 'orchard';
				break;	
			case('<img src="/img/v2/units/farm'):
				return 'farm';
				break;	
			case('<img src="/img/v2/units/mine'):
				return 'mine';
				break;	
			case('<img src="/img/v2/units/lab'):
				return 'lab';
				break;		
			case('<img src="/img/v2/units/villa'):
				return 'villa';
				break;	
			case('<img src="/img/v2/units/warehouse'):
				return 'warehouse';
				break;	
			case('<img src="/img/v2/units/fishingbase'):
				return 'fishingbase';
				break;		
			case('<img src="/img/v2/units/office'):
				return 'office';
				break;	
			case('<img src="/img/v2/units/sawmill'):
				return 'sawmill';
				break;		
			case('<img src="/img/v2/units/service_light'):
				return 'service';
				break;			
			case('<img src="/img/v2/units/power'):
				return 'energy';
				break;			
			case('<img src="/img/v2/units/repair'):
				return 'repair';
				break;	
			case('<img src="/img/v2/units/fuel'):
				return 'fuel';
				break;	
			default:
				return 'unknown';
		}//end switch
	}//end getType()
	///////////////////////////////////////////////////////////////////////////
	//getK1(type)
	//возвращает к для расчётов нагрузки по типу для топ-1
	///////////////////////////////////////////////////////////////////////////
	function getK1(type)
	{
		switch(type)
		{
			case('shop'):
			case('restaurant'):
			case('lab'):
				return 5;
				break;
			case('workshop'):
				if (/anna/.test(window.location.href)) {
				return 100;
				break;
				}
				else {
				return 50; 
				break; 
				}
			case('mill'):
				if (/anna/.test(window.location.href)) {
				return 10;
				break;
				}
				return 5;
				break;
			case('sawmill'):
				if (/anna/.test(window.location.href)) {
				return 10;
				break;
				}
				return 5;
				break;
			case('animalfarm'):
				return 7.5;
				break;
			case('medicine'):
			case('fishingbase'):
				return 12.5;
				break;				
			case('farm'):
				return 20;
				break;			
			case('orchard'):
				return 18;
				break;	
			case('mine'):
				if (/anna/.test(window.location.href)) {
				return 50;
				break;
				}
				else {
				return 100;
				break;
				}
			case('office'):
				//if(mode=='Crocuta') return 
				return 1;
				break;	
			case('service'):
				return 1.5;
				break;
			case('energy'):
				return 75.0;
				break;	
			case('repair'):
				return 2.5;
				break;
			case('fuel'):
				return 2.5;
				break;		
			case('villa'):	
			case('warehouse'):	
			case('unknown'):	
			default:
				return 0;
		}//end switch
	}//end getType()	
	///////////////////////////////////////////////////////////////////////////
	//getK(3type)
	//возвращает к для расчётов нагрузки по типу для топ-3
	///////////////////////////////////////////////////////////////////////////
	function getK3(type)
	{
		switch(type)
		{
			case('shop'):
			case('restaurant'):
			case('lab'):
				return 5;
				break;
			case('workshop'):
				if (/anna/.test(window.location.href)) {
				return 100;
				break;
				}
				else {
				return 50; 
				break; 
				}
			case('mill'):
				if (/anna/.test(window.location.href)) {
				return 100;
				break;
				}
				return 50;
				break;
			case('sawmill'):
				if (/anna/.test(window.location.href)) {
				return 100;
				break;
				}
				return 50;
				break;
			case('animalfarm'):
				return 7.5;
				break;
			case('medicine'):
			case('fishingbase'):
				return 12.5;
				break;				
			case('farm'):
				return 20;
				break;			
			case('orchard'):
				return 18;
				break;	
			case('mine'):
				if (/anna/.test(window.location.href)) {
				return 50;
				break;
				}
				else {
				return 100;
				break;
				}
			case('office'):
				//if(mode=='Crocuta') return 
				return 1;
				break;	
			case('service'):
				return 1.5;
				break;
			case('energy'):
				return 75.0;
				break;	
			case('repair'):
				return 2.5;
				break;
			case('fuel'):
				return 2.5;
				break;		
			case('villa'):	
			case('warehouse'):	
			case('unknown'):	
			default:
				return 0;
		}//end switch
	}//end getType()	
	///////////////////////////////////////////////////////////////////////////
	//getPersonal(type)
	//возвращает кол-во работников на предприятии (по типу)
	///////////////////////////////////////////////////////////////////////////
	function getPersonal(type)
	{
		var temp = getPersonal_1(type);
		
		if(temp=='' || temp== -1) return (-1); //error
        if (new_interface) return parseInt($('td:contains(Количество рабочих)').next().text().replace(/\s+/g, ''));
		else return parseInt($('td:contains(' + temp + ')').next().text().replace(/\s+/g, ''));
	}//end getPersonal()	
	
	function getPersonal_1(type)
	{
		var temp;
		switch(type)
		{
			case('lab'):
				temp='Количество учёных';
				break;
			case('workshop'):			
			case('mill'):
			case('mine'):
			case('fishingbase'):
			case('sawmill'):
				temp='Количество рабочих';
				break;
			case('animalfarm'):
			case('orchard'):				
			case('farm'):
				temp='Количество работников';				
				break;
			case('medicine'):
			case('office'):
			case('shop'):
			case('restaurant'):
			case('service'):
				temp='Количество сотрудников';				
				break;			
			case('energy'):
				temp='Количество рабочих';
				break;
			case('repair'):	
				temp='Количество сотрудников';				
				break;	
			case('fuel'):	
				temp='Количество сотрудников';				
				break;		
			case('villa'):	
			case('warehouse'):	
			case('unknown'):	
			default:
				temp='';
				break;
		}//end switch
		if(temp=='') return (-1); //error
		return temp;
	}//end getPersonal_1()
	
	///////////////////////////////////////////////////////////////////////////
	//function procVal(num, val)
	//возвращает процент от val по отношению к nun
	///////////////////////////////////////////////////////////////////////////// 
	function procVal(num, val){
		return Math.round(val/(num/100)*100)/100;
	}//end procVal()

	///////////////////////////////////////////////////////////////////////////
	//function saveAverageCityInfo()
	//сохраняет среднегородские данные в локальное хранилище
	///////////////////////////////////////////////////////////////////////////// 
	function saveAverageCityInfo() {
		if (!$("td:contains('средняя зарплата в городе')").length ||
			typeof(localStorage) === "undefined") return;
		var cityName = $("abbr").text().replace(/\s+/g, '');
		var avgSalary;
		$("td:contains('В среднем по городу')").next().each(function() {
			var str = $(this).text();
            str = str.substr(0, str.indexOf(" в")).replace(/[^\d\.]/g, '')
            //avgSalary = parseFloat($(this).text().replace(/[^\d\.]/g, ''));
            avgSalary = parseFloat(str);
		});
		//var avgQual;
		//$("span:contains('в среднем по городу')").each(function() {
		//	var str = $(this).text();
		//	str = str.substr(0, str.indexOf(",")).replace(/[^\d\.]/g, '');
		//	avgQual = parseFloat(str);
		//});

		//console.log("city=" + cityName + ", sal=" + avgSalary + ", qual=" + avgQual);
		//localStorage.setItem("q" + cityName, avgQual.toString());
		var type = $("div.headerContainer").children().eq(0).prop('src');
		var lastSlashPos = type.lastIndexOf("/");
		type = type.substr(lastSlashPos + 1, type.length - lastSlashPos - 1);
		type = type.substr(0, type.indexOf("."));
		//console.log("type = " + type);
		localStorage.setItem(cityName + ":" + type, avgSalary.toString());
		//console.log("city=" + cityName + ", salary saved=" + localStorage.getItem(cityName));
	}//end saveAverageCityInfol()
	
	/*********************************************************************************/
	
// Процент зарплаты
	if (!new_interface) {
		$("td:contains('Зарплата')").next().each(function() { 
			str = this.innerHTML;
		
		        zarp = str.match(/\d[.\s\d]*/g);
		        zzz = (zarp[0].replace(/[^\d\.]/g,'')/zarp[1].replace(/[^\d\.]/g,'')*100).toFixed(0);
		        color = zzz<80?'red':'green';
		        color = zzz>80?'blue':color;
        
			this.innerHTML = '<font color=' + color +'>' + str + ' --> ' + zzz + '%</font>';
		});
	}
}


if(window.top == window) {
    var style = document.createElement("style");
    style.textContent = '.scriptIks_imp { border: 2px solid #708090; border-radius: 5px; background: #e1e1e1; text-align: right; }'
                      +'\n.scriptIks_cur { cursor: pointer; }'
                      +'\n.scriptIks_exitDiv { position: absolute; margin: 0; padding: 0; right: 0; top: 0; }'
                      +'\n.scriptIks_crug { position: absolute; right: 0; top: 0; width: 14px; height: 14px; border: 4px solid gray; border-radius: 50%; padding: 0; }'
                      +'\n.scriptIks_crug1 { position: absolute; right: 0; top: 0; width: 14px; height: 14px; border: 4px solid gray; border-radius: 0 50% 0 50%; padding: 0;  background:white; }'
                      +'\n.scriptIks_exit { position: absolute; margin: 0; padding: 0; right: 5px; top: 1px; font-size: 18px; color: darkred; }'
                      +'\n.scriptIks_but { color:white; border:1px solid #708090; border-radius: 10px; background: #708090; background: linear-gradient(top, #e1e1e1, #708090, #e1e1e1); background: -webkit-linear-gradient(top, #e1e1e1, #708090, #e1e1e1); background: -moz-linear-gradient(top, #e1e1e1, #708090, #e1e1e1); background: -ms-linear-gradient(top, #e1e1e1, #708090, #e1e1e1); background: -o-linear-gradient(top, #e1e1e1, #708090, #e1e1e1); }';
    document.documentElement.appendChild(style);

    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}