Alihandr / Virtonomica:Снабжение

// ==UserScript==
// @name           Virtonomica:Снабжение
// @namespace      virtonomica
// @description    Снабжение
// @version        1.4
// @include        http://*virtonomic*.*/*/main/unit/view/*/supply
// ==/UserScript==

var run = function() {
	var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window); 
	$ = win.$;
	var txt = [],
		ko = [],
		scl = [],
		txt1 = [],
		//prc = 0;
		i = 0,
		j = 0,
		closespan = '<span r="windkol" class="closeform" style="float:right;margin-right:10px;color:#f00;font-size:14pt;cursor:pointer;">&#215;</span>',
		p1 = -1,
		p2 = -1,
		form = false;
	scl[370077]=10500000;scl[1509]=105000;scl[422549]=5250000;scl[370080]=70000;scl[15338]=157500;scl[370078]=5250000;scl[1518]=157500;scl[422550]=5250000;scl[370079]=105000;scl[370081]=87500;scl[1525]=2100000;scl[359859]=52500000;scl[359862]=52500000;scl[422552]=10500000;scl[359856]=10500000;scl[422199]=52500000;scl[359861]=52500000;scl[359860]=52500000;scl[15336]=105000000;scl[359863]=52500000;scl[422433]=1050000;scl[422547]=52500000;scl[422434]=4200000;scl[3865]=126000000;scl[335179]=52500000;scl[380000]=52500000;scl[380005]=35000000;scl[1502]=105000000;scl[1522]=1050000000;scl[1503]=105000000;scl[380006]=35000000;scl[335178]=35000000;scl[422197]=52500000;scl[422198]=35000000;scl[1504]=210000000;scl[1505]=52500000;scl[359847]=105000000;scl[335180]=52500000;scl[15748]=105000000;scl[1507]=105000000;scl[380007]=105000000;scl[15334]=5250000;scl[301320]=2625000;scl[422204]=2100000;scl[422203]=5250000;scl[301318]=42000000;scl[312798]=4200000;scl[422437]=10500000;scl[1519]=5250000;scl[1520]=5250000;scl[422650]=3500000;scl[422649]=10500000;scl[301319]=42000000;scl[15742]=262500000;scl[1496]=105000000;scl[1497]=105000000;scl[422553]=52500000;scl[422055]=52500000;scl[3869]=52500000;scl[335181]=52500000;scl[422544]=1105000000;scl[422545]=105000000;scl[422546]=105000000;scl[335176]=35000000;scl[1498]=210000000;scl[15747]=105000000;scl[1489]=73500000;scl[1499]=105000000;scl[1500]=1050000000;scl[1501]=131250000;scl[1490]=17500000;scl[422054]=13125000;scl[335177]=21000000;scl[15744]=262500000;scl[15743]=210000000;scl[15749]=105000000;scl[335174]=21000000;scl[335175]=52500000;scl[1491]=525000000;scl[15750]=105000000;scl[16006]=52500000;scl[373201]=105000000;scl[422205]=52500000;scl[380002]=52500000;scl[1492]=210000000;scl[1506]=367500000;scl[1494]=73500000;scl[1513]=5250000;scl[302897]=525000;scl[1514]=105000000;scl[13708]=105000000;scl[422380]=1050000;scl[422431]=2100000;scl[15335]=105000000;scl[1482]=105000000;scl[15337]=525000;scl[7093]=3675000;scl[7092]=5250000;scl[1523]=3675000;scl[370075]=3500000;scl[1511]=157500000;scl[3965]=2625000;scl[7094]=4200000;scl[3866]=73500000;scl[3966]=105000000;scl[422201]=18750000;scl[303308]=52500000;scl[373199]=420000;scl[7095]=1420000;scl[16007]=52500000;scl[1521]=10500000;scl[303310]=1050000;scl[3870]=4200000;scl[422436]=525000;scl[422435]=1050000;scl[1516]=2100000;scl[312799]=4200000;scl[422200]=8750000;scl[422551]=5250000;scl[3838]=3675000;scl[422432]=525000;scl[1512]=1050000;scl[1515]=525000;scl[380004]=1050000;scl[373200]=1050000;scl[1517]=3675000;scl[373202]=1050000;scl[422212]=2100000;scl[3867]=1050000;scl[3868]=1050000;scl[1510]=1050000;scl[351577]=150045;scl[2540]=10500000;scl[2546]=420000;scl[370076]=105000;scl[380008]=420000;scl[1524]=10500000;scl[1526]=420000;
	
	function num(num, x){
		num = num.toFixed(2);
		var parts = num.split('.');
		parts[0] = parts[0].substr(0, parts[0].length%3)+parts[0].substr(parts[0].length%3).replace(/(\d{3})/g,' \$1');
		if(x)
			return parts.join('.');
		else
			return parts[0];
	}
	function Calculate1(n){
		$('.divtemp').text('');
		var c = parseInt($('#sc').val()),
			c1 = parseInt($('#sc1').val()),
			x1 = 0,
			x2 = 0,
			k = parseFloat($('#sk').val()),
			k1 = parseFloat($('#sk1').val()),
			k2 = parseFloat($('#sk2').val()),
			k3 = parseFloat($('#sk3').val()),
			cn1 = 0,
			cn2 = parseFloat($('#scn2').val()),
			cn3 = parseFloat($('#scn3').val());
		x1 = Math.round(f1(c, c1, k, k1, k2, k3));
		x2 = Math.round(f1(c, c1, k, k1, k3, k2));
		cn1 = f3(c, c1, x1, x2, cn2, cn3).toFixed(2);
		
		if($('#svo').attr('checked')){
			if(x1 > txt[p1]['max']){
				x1 = txt[p1]['max'];
				c1 = Math.round(f2(c, x1, k, k1, k2, k3));
				x2 = Math.round(f1(c, c1, k, k1, k3, k2));
				cn1 = f3(c, c1, x1, x2, cn2, cn3).toFixed(2);
			}
			if(x2 > txt[p2]['max']){
				x2 = txt[p2]['max'];
				c1 = Math.round(f2(c, x2, k, k1, k3, k2));
				x1 = Math.round(f1(c, c1, k, k1, k2, k3));
				cn1 = f3(c, c1, x1, x2, cn2, cn3).toFixed(2);
			}
			$('#sc1').val(c1);
		}
		
		$('#sx1').val(x1);
		$('#sx2').val(x2);
		$('#scn1').val(cn1);
		
		$('#cenacach').text((cn1 / k1).toFixed(2));
		$('#cenacach1').text((cn2 / k2).toFixed(2));
		$('#cenacach2').text((cn3 / k3).toFixed(2));
		$('#divtemp'+p1).html('<a class="aaddsp" href="#">_+_</a> <a class="aadds" href="#">'+x1+'</a>');
		$('#divtemp'+p2).html('<a class="aaddsp" href="#">_+_</a> <a class="aadds" href="#">'+x2+'</a>');
		$('.aadds').click(function(){
			var col = $(this).text();
			$(this).parent().next().val(col);
			if(n == 0) updatetable(8);
			if(n == 1) updatetablepr(7);
			if(n == 2) updatetablesk(false);
			return false;
		})
		$('.aaddsp').click(function(){
			var col = parseInt($(this).next().text());
			var col1 = parseInt($(this).parent().next().val());
			var colo = parseInt(col + col1);
			$(this).parent().next().val(colo);
			if(n == 0) updatetable(8);
			if(n == 1) updatetablepr(7);
			if(n == 2) updatetablesk(false);
			return false;
		})
	}
	function fillArray( summ, cach, max ) {
		this.summ = summ;
		this.cach = cach;
		this.max = max;
	}
	function add(id,prod,ar){
		if(prod==1){
			$('#sk2').val(ar[id]['cach']);
			$('#scn2').val(ar[id]['summ']);
			p1 = id;
		}
		if(prod==2){
			$('#sk3').val(ar[id]['cach']);
			$('#scn3').val(ar[id]['summ']);
			p2 = id;
		}
	}
	function print_r(arr, level) {  
		var print_red_text = "";  
		if(!level) level = 0;  
		var level_padding = "";  
		for(var j=0; j<level+1; j++) level_padding += "    ";  
		if(typeof(arr) == 'object') {  
			for(var item in arr) {  
				var value = arr[item];  
				if(typeof(value) == 'object') {  
					print_red_text += level_padding + "'" + item + "' :\n";  
					print_red_text += print_r(value,level+1);  
			}   
				else   
					print_red_text += level_padding + "'" + item + "' => \"" + value + "\"\n";  
			}  
		}   
	  
		else  print_red_text = "===>"+arr+"<===("+typeof(arr)+")";  
		return print_red_text;  
	} 
	function f1(c, c1, k, k1, k2, k3){
			x1 = (c1 * (k1 - k3) - c * (k - k3)) / (k2 - k3);
		return x1;
	}
	function f2(c, x1, k, k1, k2, k3){
			c1 = (x1 * (k2 - k3) + c * (k1 - k3)) / (k1 - k3);
		return c1;
	}
	function f3(c, c1, x1, x2, s1, s2){
			s = (s1 * x1 + s2 * x2) / (c1 - c);
		return s;
	}
	function addar(col, summ, cach, brend, max, sc, name, id ) {
		this.col = col;
		this.summ = summ;
		this.cach = cach;
		this.brend = brend;
		this.max = max;
		this.ck = parseFloat((this.summ / this.cach).toFixed(2));
		this.sc = parseFloat(sc) || 0;
		this.name = name || '';
		this.id = id || 0;
	}
	function nullpr(x){
		if(isNaN(x)) x = 0;
		return x;
	}
	
	var title=$('#unitImage img').attr('src');
	if(title.search('img/v2/units/shop')!=-1){
		form = true;
		function addtablemax(ar, table, t){
			var cf=0, kf=0, cnf=0, bf=0, b=false;
			for(i=0; i<ar.length; i++){
				if(ar[i]['col'] > ar[i]['max'])
					cf += parseInt(ar[i]['max']);
				else
					cf += parseInt(ar[i]['col']);
			}
			if(cf != 0){
				for(i=0; i<ar.length; i++){
					if(ar[i]['col'] > ar[i]['max']){
						kf += parseFloat(ar[i]['cach'] * ( ar[i]['max'] / cf ));
						cnf += parseFloat(ar[i]['summ'] * ( ar[i]['max'] / cf ));
						bf += parseFloat(ar[i]['brend'] * ( ar[i]['max'] / cf ));
						b = true;
					}else{
						kf += parseFloat(ar[i]['cach'] * ( ar[i]['col'] / cf ));
						cnf += parseFloat(ar[i]['summ'] * ( ar[i]['col'] / cf ));
						bf += parseFloat(ar[i]['brend'] * ( ar[i]['col'] / cf ));
					}
				}
				if(isNaN(kf) || cnf == 0){
					kf = '';
					cnf = '';
					bf = '';
				}
			}
			if(b){
				table.closest('td').css('background-color','#fee');
				var n = 0;
				$('tr', table).each( function() {
					var cels = $('td', this);
					if(n == 0)	$(cels[1]).append(num(cf, false));
					if(n == 1)	$(cels[1]).append(kf.toFixed(2));
					if(n == 2 && t == 0)	$(cels[1]).append(bf.toFixed(2));
					if(n == 3 && t == 0)	$(cels[1]).append(num(cnf, true));
					if(n == 2 && t == 1)	$(cels[1]).append(num(cnf, true));
					n++;
				})
			}
		}
		function createtable(ar, i, t){
			if(ar.length>0){
				var cf=0, kf=0, cnf=0, bf=0;
				for(i=0; i<ar.length; i++){
					cf += parseInt(ar[i]['col']);
				}
				if(cf > 0){
					for(i=0; i<ar.length; i++){
						kf += parseFloat(ar[i]['cach'] * ( ar[i]['col'] / cf ));
						cnf += parseFloat(ar[i]['summ'] * ( ar[i]['col'] / cf ));
						bf += parseFloat(ar[i]['brend'] * ( ar[i]['col'] / cf ));
					}
					if(isNaN(kf)){
						kf = 0;
						cnf = 0;
						bf = 0;
					}
				}else{
					kf = 0;
					cnf = 0;
					bf = 0;
				}
				if(t == 0){
					var table = $('<table width="100%" style="margin-top:-17px;margin-bottom:60px;" class="noborder"><tr><td class="zcol" align="right">'+num(cf, false)+'</td><td align="right" style="color:#f00;"></td></tr><tr><td align="right">'+kf.toFixed(2)+'</td><td align="right" style="color:#f00;"></td></tr><tr><td align="right">'+bf.toFixed(2)+'</td><td align="right" style="color:#f00;"></td></tr><td align="right">'+num(cnf, true)+'</td><td align="right" style="color:#f00;"></td></tr></table>');
				}
				if(t == 1) var table = $('<table cellpadding="0" cellspacing="0" width="100%" class="noborder"><tr><td align="right">'+num(cf, false)+'</td><td align="right" style="color:#f00;"></td></tr><tr><td align="right">'+kf.toFixed(2)+'</td><td align="right" style="color:#f00;"></td></tr><td align="right">'+num(cnf, true)+'</td><td align="right" style="color:#f00;"></td></tr></table>');
				$(cel).html('').append(table).css('background-color','#efe');
				addtablemax(ar, table, t);
				return 0;
			}
			return i;
		}
		function updatetable(n){
			var ar = [], i=0, j=0;
			$(".list tr").each( function() {
				if($(this).hasClass('sub_row') || $(this).hasClass('product_row')){
					var cels = $('td', this),
						c = 0,
						k = 0,
						cn = 0,
						br = 0,
						sv = 0,
						max = 0;
					var but_1 = $('<input type="button" rel="'+j+'" value="+" />').click(function() { add($(this).attr('rel'),1,txt) });
					var but_2 = $('<input type="button" rel="'+j+'" value="+" />').click(function() { add($(this).attr('rel'),2,txt) });
					if($(this).hasClass('sub_row')){
						
						c = parseInt($('input', cels[1]).val().replace(/ /g, ''));
						cn = parseFloat($(cels[6]).text().replace('$', '').replace(/ /g, ''));
						k = parseFloat($(cels[8]).text().replace(/ /g, ''));
						br = parseFloat($(cels[10]).text().replace(/ /g, ''));
						sv = parseInt($(cels[17]).text().replace(/ /g, ''));
						max = parseInt($('span', cels[1]).text().replace('Max: ', '').replace(/ /g, ''));
						if(n==0){
							$(cels[0]).prepend('<br />').prepend(but_2).prepend(but_1);
							$(cels[1]).prepend('<div class="divtemp" id="divtemp'+j+'" style="color:green"></div>');
						}
						k = nullpr(k);
						br = nullpr(br);
					}
					if($(this).hasClass('product_row')){
						i = createtable(ar, i, 0);
						ar = [];
						cel = cels[14];
						c = parseInt($('input', cels[n+17]).val().replace(/ /g, ''));
						cn = parseFloat($(cels[n+22]).text().replace('$', '').replace(/ /g, ''));
						k = parseFloat($(cels[n+24]).text().replace(/ /g, ''));
						br = parseFloat($(cels[n+26]).text().replace(/ /g, ''));
						sv = parseInt($(cels[n+33]).text().replace(/ /g, ''));
						max = parseInt($('span', cels[n+17]).text().replace('Max: ', '').replace(/ /g, ''));
						if(n==0){
							$(cels[16]).prepend('<br />').prepend(but_2).prepend(but_1);
							$(cels[17]).prepend('<div class="divtemp" id="divtemp'+j+'" style="color:green"></div>');
						}
						k = nullpr(k);
						br = nullpr(br);
					}
					if(isNaN(max)) max = sv;
					if(sv < max) max = sv;
					ar[i] = new addar(c, cn, k, br, max);
					i++;
					if(n == 0){
						$(this).attr('ids',j);
						txt[j] = new fillArray( cn, k, max );
						j++;
					}
				}
				
				if(!$(this).hasClass('sub_row') || !$(this).hasClass('product_row') && i > 0){
					createtable(ar, i, 0);
				}
			});
		}
		function statusz(x,help){
			var x1 = x;
			var color = '#86EF75';
			if(x > 100){
				x1 = 100;
				color = '#F47981';
			}
			if(x < 0){
				x1 = 0;
			}
			var s = '<div title="'+help+'" style="margin-top:3px;border:solid 1px gray;height:15px;"><div style="background-color:'+color+';width:'+x1.toFixed(2)+'%;height:15px;"><span style="position:absolute;margin-left:10px;">'+x.toFixed(2)+'%</span></div></div>';
			return s;
		}
		function scladr(){
			var prc = 0;
			var prc1 = 0;
			var prc2 = 0;
			$(".list tr").each( function() {
				var cels = $('td', this);
				if($(this).hasClass('product_row')){
					var cel1 = cels[3];
					$('.scl',cel1).remove();
					$('.scl1',cel1).remove();
					$('.scl2',cel1).remove();
					$(cel1).append('<div class="scl"></div>').append('<div class="scl1"></div>').append('<div class="scl2"></div>');
					var col = parseInt($('table td:contains(Количество)',cel1).next().text().replace(/ /g,''));
					var index = parseInt($(cel1).closest('tr').attr('id').replace(/product_row_/g,'').replace(/-([0-9]+)/g,''));
					//var scl1 = (col * 100 / scl[index]) * 1000 / $('.list .allsclad select').val();
					var scl1 = (col * 100 * $('.allsclad select').val()) / scl[index];
					$('.scl',cel1).html(statusz(scl1,'В данный момент на складе.'));
					prc += scl1;
					
					var colprod = parseInt($('table td:contains(Продано)',cel1).next().text().replace(/ /g,''));
					var colzac = parseInt($('.zcol',$(cel1).next()).text().replace(/ /g,''));
					
					//var scl2 = ((colzac + col) * 100 / scl[index]) * 1000 / $('.list .allsclad select').val();
					var scl2 = ((colzac + col) * 100 * $('.allsclad select').val()) / scl[index];
					$('.scl1',cel1).html(statusz(scl2,'После закупки без продаж.'));
					prc1 += scl2;
					//var scl3 = ((colzac + col - colprod) * 100 / scl[index]) * 1000 / $('.list .allsclad select').val();
					var scl3 = ((colzac + col - colprod) * 100 * $('.allsclad select').val()) / scl[index];
					$('.scl2',cel1).html(statusz(scl3,'После закупки с такими же продажами.'));
					prc2 += scl3;
				}
			})
			if(prc > 0 || prc1 > 0 || prc2 > 0){
				$('.allsclad .cc').html(statusz(prc,'В данный момент на складе.')+statusz(prc1,'После закупки без продаж.')+statusz(prc2,'После закупки с такими же продажами.'));
			}
		}
		$('#menutop li ul').width(1100)
		$('#wrapper').width(1100)
		var i = 0;
		$(".list tr").each( function() {
			var cels = $('td', this);
			if(i == 0 && $(cels[0]).hasClass('title')){
				$(this).before('<tr><td></td><td class="allsclad"><label>Размер склада<select><option value="1050">100</option><option value="210">500</option><option selected value="105">1000</option><option value="10.5">10000</option><option value="1.05">100000</option></select></label> <a href="#">?</a></div><div class="cc"></div></td><td colspan="9"><div class="helpsn" style="display:none;">Расчет заполняемости склада идет только по товару находящимуся на данной страннице снабжения. (Если на складе присутствует товар по которому в данный момент нет поставщика, то данный товар не считается)</div></td></tr>');
				i++;
			}
		})
		
		$('.allsclad a').click(function(){
			if($('.helpsn').is(':visible'))
				$('.helpsn').hide();
			else
				$('.helpsn').show();
			return false;
		})
		
		$('input[name*=party_quantity]').keyup(function(){
			updatetable(8);
			scladr();
		})
		
		$('.allsclad select').change(function(){
			updatetable(8);
			scladr();
		})
		
		updatetable(0);
		scladr()
		
		var but_ras = $('<input type="button" value="Расчет" />').click(function() { Calculate1(0); });
	}

	if(title.search('img/v2/units/animalfarm')!=-1 || title.search('img/v2/units/workshop')!=-1 || title.search('img/v2/units/power')!=-1){
		form = true;
		function newtype(id, title, subrow){
			this.id = id;
			this.title = title;
			this.subrow = subrow;
		}
		function addarr(item,n,id){
			var ar = [],c = 0,k = 0,cn = 0,br = 0,sv = 0,max = 0;
			$(item).each( function() {
				var cels = $('td', this);
					c = parseInt($('input', cels[18+n]).val().replace(/ /g, ''));
					k = parseFloat($(cels[28+n]).text().replace(/ /g, ''));
					cn = parseFloat($(cels[23+n]).text().replace('$', '').replace(/ /g, ''));
					br = 0;
					sv = parseInt($(cels[36+n]).text().replace(/ /g, ''));
					max = parseInt($('span', cels[18+n]).text().replace('Max: ', '').replace(/ /g, ''));
					k = nullpr(k);
			})
			if(isNaN(max)) max = sv;
			if(sv < max) max = sv;
			ar = new addar(c, cn, k, br, max );
			return ar;
		}		
		var type=[], i=0, k=0;
		$('.list th:contains(Поставки)').before('<th rowspan="2">Заказ</th>');
		function updatetablepr(m){
			for(var item in gaMaterialProduct) {
				var t = $('#product_row_'+item+' th [rowspan=2] img').attr('alt'),
					subrow = gaMaterialProduct[item]['subRowCount'],
					ar = [],
					n = 0;
				type[i] = new newtype(item,t,subrow);
				i++;
				
				ar[n] = addarr('#product_row_'+item,m,k);
				n++;
				
				if(m == 0){
					var but_1 = $('<input type="button" rel="'+k+'" value="+" />').click(function() { add($(this).attr('rel'),1,txt) });
					var but_2 = $('<input type="button" rel="'+k+'" value="+" />').click(function() { add($(this).attr('rel'),2,txt) });
					$('#product_row_'+item+' #name_'+item+'_0').prepend('<br />').prepend(but_2).prepend(but_1);
					$('#product_row_'+item+' #name_'+item+'_0').next().prepend('<div class="divtemp" id="divtemp'+k+'" style="color:green"></div>');
				}
				
				txt[k] = addarr('#product_row_'+item,m,k);
				k++;
							
				for(j=1; j<subrow; j++){
					ar[n] = addarr('#product_sub_row_'+item+'_'+j,-17,k);
					n++;
					if(m == 0){
						but_1 = $('<input type="button" rel="'+k+'" value="+" />').click(function() { add($(this).attr('rel'),1,txt) });
						but_2 = $('<input type="button" rel="'+k+'" value="+" />').click(function() { add($(this).attr('rel'),2,txt) });
						$('#product_sub_row_'+item+'_'+j+' #name_'+item+'_'+j).prepend('<br />').prepend(but_2).prepend(but_1);
						$('#product_sub_row_'+item+'_'+j+' #name_'+item+'_'+j).next().prepend('<div class="divtemp" id="divtemp'+k+'" style="color:green"></div>');
					}
					txt[k] = addarr('#product_sub_row_'+item+'_'+j,-17,k);
					k++;
				}
				
				if( m>0 )
					$('#product_row_'+item+' #name_'+item+'_0').prev().remove();
				
				var cel = $('<td width="100" class="temp'+item+'" rowspan="'+subrow+'"></td>');
				$('#product_row_'+item+' #name_'+item+'_0').before(cel);
				
				if(ar.length>0){
					var cf=0, kf=0, cnf=0;
					for(j=0; j<ar.length; j++){
						cf += parseInt(ar[j]['col']);
					}
					if(cf > 0){
						for(j=0; j<ar.length; j++){
							kf += parseFloat(ar[j]['cach'] * ( ar[j]['col'] / cf ));
							cnf += parseFloat(ar[j]['summ'] * ( ar[j]['col'] / cf ));
						}
						if(isNaN(kf)){
							kf = 0;
							cnf = 0;
						}
					}else{
						kf = 0;
						cnf = 0;
					}
					var table = $('<table cellpadding="0" cellspacing="0" width="100%" class="noborder"><tr><td style="word-wrap:normal" align="right">'+num(cf, false)+'</td><td align="right" style="color:#f00;"></td></tr><tr><td align="right">'+kf.toFixed(2)+'</td><td align="right" style="color:#f00;"></td></tr><tr><td align="right">'+num(cnf, true)+'</td><td align="right" style="color:#f00;"></td></tr></table>')
					$(cel).html('').append(table).css('background-color','#efe');
					addtablemax(ar, table, 1);
				}
				$('temp'+item).remove();
				$('#product_row_'+item+' #name_'+item+'_0').before(cel);
			}
		}
		updatetablepr(0);
		$('input[name*=supplyContractData]').keyup(function(){
			updatetablepr(7);
		})
		var but_ras = $('<input type="button" value="Расчет" />').click(function() { Calculate1(1); });
	}
	
	if(title.search('img/v2/units/warehouse')!=-1){
		//var nasklade = [];
		
		function sortzak(){
			var i = 0, j = 0, n = 0;
			for(n = 0; n < txt1.length; n++){
				var ar1 = [], ar2 = [];
				for(i = 0; i < txt1[n].length; i++){
					if(txt1[n][i].sc > txt1[n][i].cach){
						ar1.push(txt1[n][i])
					}else{
						ar2.push(txt1[n][i]);
					}
				}
				ar1.sort(function(obj1, obj2) {
					return obj2.ck - obj1.ck;
				})
				ar2.sort(function(obj1, obj2) {
					return obj1.ck - obj2.ck;
				})
				txt1[n] = [];
				txt1[n] = txt1[n].concat(ar1,ar2);
				var div = $('<div>')
				for(i = txt1[n].length-1; i >= 0; i--){
					//console.log(i);
					$('.'+txt1[n][i].name).after($('.'+txt1[n][i].name+txt1[n][i].id))
					//$('.'+txt1[n][i].name+txt1[n][i].id).hide()
				}
			}
		}
		function randWD(n){  // [ 2 ] random words and digits
			return Math.random().toString(36).slice(2, 2 + Math.max(1, Math.min(n, 10)) );
		}
		function ssred(cel,ar,t){
			var cf=0, kf=0, cnf=0, b = false;
			for(i=0; i<ar.length; i++){
				if(ar[i]['col'] <= ar[i]['max'] || t)
					cf += parseInt(ar[i]['col']);
				else
					cf += parseInt(ar[i]['max']);
			}
			if(cf > 0){
				for(i=0; i<ar.length; i++){
					if(ar[i]['col'] <= ar[i]['max'] || t){
						kf += parseFloat(ar[i]['cach'] * ( ar[i]['col'] / cf ));
						cnf += parseFloat(ar[i]['summ'] * ( ar[i]['col'] / cf ));
					}else{
						kf += parseFloat(ar[i]['cach'] * ( ar[i]['max'] / cf ));
						cnf += parseFloat(ar[i]['summ'] * ( ar[i]['max'] / cf ));
						b = true;
					}
				}
				if(isNaN(kf)){
					kf = 0;
					cnf = 0;
				}
			}else{
				kf = 0;
				cnf = 0;
			}
			if(t){
				$('.cf',cel).text(num(cf, false)).click(function(){$('#sc').val(cf); $('#sk').val(kf.toFixed(2));});
				$('.cnf',cel).text('$'+cnf.toFixed(2));
				$('.kf',cel).text(kf.toFixed(2));
				$(cel).css('background-color','#efe');
				ssred(cel,ar,false);
			}
			if(b){
				$(cel).css('background-color','#fee');
				$('.cf',cel).append('<div style="color:#f00;">'+num(cf, false)+'</div>').click(function(){$('#sc').val(cf); $('#sk').val(kf.toFixed(2));});
				$('.cnf',cel).append('<div style="color:#f00">$'+cnf.toFixed(2)+'</div>');
				$('.kf',cel).append('<div style="color:#f00">'+kf.toFixed(2)+'</div>');
			}
		}
		function updatetablesk(t,sort){
			var sort = sort || false;
			var ar = [], cel, n=0;
			var txt2 = [];
			var name = '';
			j = 0;
			form = true;
			$('table.list tr').each( function() {
				var cels = $('td',this);
				if($(this).hasClass('p_title')){
					if(t){
						ko[j] = parseFloat($(cels[4]).text());
						var skach = $('<input>', {'type':'text', 'class':'skach','style':'display:block;','ids':j}).val(ko[j]).keyup(function(){
							updatetablesk(false, true);
						});
						$('.p_title_l', this).prepend(skach);
						
						if($('.p_title_l div table',$(this)).html().length < 25){
							$(cels[1]).append('<strong style="display:block" class="cf"></strong>');
							$(cels[3]).append('<strong style="display:block" class="cnf"></strong>');
							$(cels[5]).append('<strong style="display:block" class="kf"></strong>');
						}else{
							$('.p_title_l div table',$(this))
								.append('<tr><td colspan="2"><strong>После пересчета</strong></td></tr>')
								.append('<tr><th>На складе:</th><td><strong style="display:block;" class="ccf"></strong></td></tr>')
								.append('<tr><th>Качество/Себестоимость:</th><td><strong style="display:block;" class="ccf1"></strong></td></tr>');
							$(cels[7]).append('<strong style="display:block" class="cf"></strong>');
							$(cels[9]).append('<strong style="display:block" class="cnf"></strong>');
							$(cels[11]).append('<strong style="display:block" class="kf"></strong>');
						}
					}
					
					name = 'q'+randWD(5);
					$(this).addClass(name);
					if(txt2.length > 0){
						txt1[j-1] = [];
						txt1[j-1] = txt2;
					}
					
					j++;
					if(i > 0){
						ssred(cel,ar,true);
					}
					cel = this;
					ar = [];
					txt2 = [];
					i = 0;
				}
				if($(this).hasClass('odd') || $(this).hasClass('even')){
					var c = parseInt($('input[name*=supplyContractData]',cels[1]).val().replace(/ /g, '')),
						cn = parseFloat($(cels[3]).text().replace('$', '').replace(/ /g, '')),
						k = parseFloat($(cels[5]).text().replace(/ /g, '')),
						max = parseInt($(cels[8]).text().replace(/ /g, ''));
						k = nullpr(k),
						ck = cn / k;
						
						txt2[i] = new addar(c, cn, k, 0, max, $('.skach[ids='+(j-1)+']').val(), name, i);
						
						if(c == max){
							$(cels[8]).css('background-color','#EFE');
							$('span', cels[8]).css('color','#000');
						}
						if(c > max){
							$(cels[8]).css('background-color','#FEE');
							$('span', cels[8]).css('color','red');
						}
						if(c < max){
							$(cels[8]).css('background-color','');
							$('span', cels[8]).css('color','#000');
						}
						ar[i] = new addar(c, cn, k, 0, max );
						
						
						if($('.skach[ids='+(j-1)+']').val() < k)
							$(this).css('background-color','#E9E8FF');
						else
							$(this).css('background-color','#EAEAEA');
						
						if(t){
							$(cels[8]).click(function(){
								var tr = $(this).closest('tr'),
									max = parseInt($(this).text().replace(/ /g, ''));
								$('input[type=text]', tr).val(max);
								updatetablesk(false);
							})
							$(cels[3]).append('<span style="display:block;color:#f00;">'+ck.toFixed(2)+'</span>');
							but_1 = $('<input type="button" rel="'+n+'" value="+" />').click(function() { add($(this).attr('rel'),1,txt) });
							but_2 = $('<input type="button" rel="'+n+'" value="+" />').click(function() { add($(this).attr('rel'),2,txt) });
							$(cels[0]).prepend('<br />').prepend(but_2).prepend(but_1);
							$(cels[1]).prepend('<div class="divtemp" id="divtemp'+n+'"></div>');
							txt[n] = new addar(c, cn, k, 0, max );
							n++;
						}
						$(this).addClass(name+i);
						i++;
				}
				if(!$(this).hasClass('odd') && !$(this).hasClass('even') && !$(this).hasClass('p_title') && i>0){
					if(txt2.length > 0){
						txt1[j-1] = [];
						txt1[j-1] = txt2;
					}
					ssred(cel,ar,true);
					if(sort)
						sortzak();
					
					var nasklade = {};
					for(i = 0; i < txt1.length; i++){
						
						nasklade.nasklade = $('.'+ txt1[i][0].name +' div table tr td:contains("На складе")').next().text();
						nasklade.nasklade = parseInt(nasklade.nasklade.replace(/ /g, ''));
						if(isNaN(nasklade.nasklade))
							nasklade.nasklade = 0;
						
						nasklade.naskladecach = $('.'+ txt1[i][0].name +' div table tr td:contains("Качество/Себестоимость")').next().text();
						nasklade.naskladecach = parseFloat(nasklade.naskladecach.replace('$', '').replace(/ /g, ''));
						if(isNaN(nasklade.naskladecach))
							nasklade.naskladecach = 0;
						
						nasklade.naskladecena = $('.'+ txt1[i][0].name +' div table tr td:contains("Качество/Себестоимость")').next().text();
						nasklade.naskladecena = parseFloat(nasklade.naskladecena.substr(nasklade.naskladecena.indexOf('$')).replace('$', '').replace(/ /g, ''));						
						if(isNaN(nasklade.naskladecena))
							nasklade.naskladecena = 0;
						
						nasklade.otgruzki = $('.'+ txt1[i][0].name +' div table tr td:contains("Отгрузки")').next().text();
						nasklade.otgruzki = parseInt(nasklade.otgruzki.replace(/ /g, ''));
						if(isNaN(nasklade.otgruzki))
							nasklade.otgruzki = 0;
						
						var cf1 = nasklade.nasklade - nasklade.otgruzki;
						if(cf1 < 0)
							cf1 = 0;
						
						var cf = parseInt($('.'+ txt1[i][0].name +' .cf div').text().replace(/ /g, ''));
						if(isNaN(cf))
							cf = parseInt($('.'+ txt1[i][0].name +' .cf').text().replace(/ /g, ''));
							
						var col = nasklade.nasklade - nasklade.otgruzki;
						if(col < 0)
							col = 0;
						
						col += cf;
						var q1 = parseFloat( cf1 / col);
						var q2 = parseFloat(cf / col);
						
						var kf = parseFloat($('.'+ txt1[i][0].name +' .kf div').text().replace(/ /g, ''));
						if(isNaN(kf))
							kf = parseFloat($('.'+ txt1[i][0].name +' .kf').text().replace(/ /g, ''));
						var cnf = parseFloat($('.'+ txt1[i][0].name +' .cnf div').text().replace('$', '').replace(/ /g, ''));
						if(isNaN(cnf))
							cnf = parseFloat($('.'+ txt1[i][0].name +' .cnf').text().replace('$', '').replace(/ /g, ''));
						var r1 = parseFloat(q1 * nasklade.naskladecach + q2 * kf);
						var r2 = parseFloat(q1 * nasklade.naskladecena + q2 * cnf);
						
						$('.'+ txt1[i][0].name +' .ccf').text(num(col, false));
						$('.'+ txt1[i][0].name +' .ccf1').text(r1.toFixed(2) + '/$' + r2.toFixed(2));
					}
				}
			});
		}
		updatetablesk(true,true);
		$('input[name*=supplyContractData]').keyup(function(){
			updatetablesk(false);
		})
		var hidep1 = true;
		var hidep = $('<button>Скрыть поставщиков</button>').appendTo($('table.list th')[0]).click(function(){
			if(hidep1){
				$('table.list tr.odd, table.list tr.even').hide();
				$(this).text('Показать поставщиков');
			}else{
				$('table.list tr.odd, table.list tr.even').show();
				$(this).text('Скрыть поставщиков');
			}
			hidep1 = !hidep1;
			return false;
		});
		var but_ras = $('<input type="button" value="Расчет" />').click(function() { Calculate1(2); });
	}
	
	if(form){	
		$('#mainContent').after('<div id="mainformc" style="display:none; position:fixed; width:500px; background-color:#fff; border:solid 1px #000; z-index:1001; top:10px; left:10px;">'+closespan+'</div>')
		
		var but_show = $('<input type="button" value="Форма смеси" style="position:fixed; left:0px; top:0px;" />').click(function() { $('#mainformc').show(); });
		$('#mainContent').prepend(but_show);
		
		$('#mainformc').append('<table align="center" width="20%" border="0" class="grid"><tr class="odd" ><th></th><th >В наличии</th><th>Необходимо</th><th colspan=2 scope="col">Продукты</th></tr><tr align="right" class="odd"><th>Количество</th><td><input type=text id="sc" maxlength=11 value="0" size=10 tabindex=1></td><td><input type=text id="sc1" maxlength=11 value="0" size=10 tabindex=3></td><td><input style="background-color:#ddd;" readonly type=text id="sx1" maxlength=11 value="0" size=10></td><td><input style="background-color:#ddd;" readonly type=text id="sx2" maxlength=11 value="0" size=10></td></tr><tr align="right" class="even"><th>Качество</th><td><input type=text id="sk" maxlength=11 value="0" size=10 tabindex=2></td><td><input type=text id="sk1" maxlength=11 value="0" size=10 tabindex=4></td><td><input type=text id="sk2" maxlength=11 value="0" size=10 tabindex=5></td><td><input type=text id="sk3" maxlength=11 value="0" size=10 tabindex=7></td></tr><tr align="right" class="odd"><th>Цена</th><td></td><td ><div id="cenacach" style="color:#f00;"></div><input style="background-color:#ddd;" readonly type=text id="scn1" maxlength=11 value="0" size=10></td><td><div id="cenacach1" style="color:#f00;"></div><input type=text id="scn2" maxlength=11 value="0" size=10 tabindex=6></td><td><div id="cenacach2" style="color:#f00;"></div><input type=text id="scn3" maxlength=11 value="0" size=10 tabindex=8></td></tr></table>')
			.append(but_ras)
			.append('<label><input type="checkbox" id="svo" />Считать с кол-вом остатков</label>');
			
		$('#mainformc .closeform').click(function(){$('#mainformc').hide()})
	}
}

// Хак, что бы получить полноценный доступ к DOM >:]
var script = document.createElement("script");
script.textContent = '(' + run.toString() + ')();';
document.documentElement.appendChild(script);