 var CosFi, Col, CableDiamGr, DWires, ErrMsg, HeatLost, I, IKz, IHeatMax, ImaxK, ImaxW, j=6, KGround=1,
       KLoad, Konp, KonpSave, KpopravT, ktip, Kz, KWires, L, LmaxK, LmaxW, LostK, LostW, Kme =1, 
       ModeK, ModeW, N1=19, N2=15, N3=14, NLost=0, NodeCur, NWires, NWiresSave, NLW, OldChangeLost, Out =false, P, ro=0.017,
       RTnormal=120, RTremem, SRes, SHeatRes, SLostRes, KPower, S, SCurrent, SK, SKI, SLostKz, SLost, SHeat, SH,  SHW, SL, SLW, LostKS,
	   SW, SWI, type, Phases, 
       U, U0, UHeatLost, UoutK, UoutW, UResLost, Usr, U1phase, U3phase; 
       
   U1phase     = " 230";             
   U3phase     = " 400";                        
   U1halohen   = " 12";                              
   CosНeater   = " 1";      
   CosMotor400 = " 0.7";               
   CosMotor230 = " 0.6";             
   CosMotor    = " 0.6";                  
   CosLumEl    = " 0.9";    
   CosLumDr    = " 0.4"     
   CosComputer = " 0.65"         
   roCu        = " 0.017"
   roAl        = " 0.028"
    
Col = 21;
ColNames = Array ("сеч.мм2","1-жильные открыто","два 1-жильных","три 1-жильных","четыре 1-жильных","один 2-жильный","один 3-жильный",
                             "1-жильный в воздухе","2-жильный в воздухе","2-жильный в земле","3-жильный в воздухе","3-жильный в земле",
							 "шнур 1-жильный", "шнур 2-жильный", "шнур 3-жильный", 
							 "1-жильный в воздухе", "1-жильный в земле", "2-жильный в воздухе", "2-жильный в земле", "3-жильный в воздухе", "3-жильный в земле");          


ICu = Array (  20,     20,     16,     16,     15,     15,     15,     18,     17,     17,     17,     17,     13,     13,     13,      18,      18,      12,      12,      18,      18,   //   0 
            //-----                                                                                          
                0.5,   11,     10,      9,      8,      7,      6,      0,      0,      0,      0,      0,      0,      12,     0,       0,       0,       0,       0,       0,       0,   //   1
                0.75,  15,     14,     13,     12,     11,     10,      0,      0,      0,      0,      0,      0,      16,    14,       0,       0,       0,       0,       0,       0,   //   2
                1,     17,     16,     15,     14,     15,     14,      0,      0,      0,      0,      0,      0,      18,    16,       0,       0,       0,       0,       0,       0,   //   3 
                1.5,   23,     19,     17,     16,     18,     15,     23,     19,     33,     19,     27,      0,      23,    20,      29,      32,      24,      33,      21,      28,   //   4
                2.5,   30,     27,     25,     25,     25,     21,     30,     27,     44,     25,     38,     40,      33,    28,      40,      42,      33,      44,      28,      37,   //   5
                4,     41,     38,     35,     30,     32,     27,     41,     38,     55,     35,     49,     50,      43,    36,      53,      54,      44,      56,      37,      48,   //   6
                6,     50,     46,     42,     40,     40,     34,     50,     50,     70,     42,     60,     65,      55,    45,      67,      67,      56,      71,      49,      58,   //   7
               10,     80,     70,     60,     50,     55,     50,     80,     70,    105,     55,     90,     90,      75,    60,      91,      89,      76,      94,      66,      77,   //   8
               16,    100,     85,     80,     75,     80,     70,    100,     90,    135,     75,    115,    120,      95,    80,     121,     116,     101,     123,      87,     100,   //   9
               25,    140,    115,    100,     90,    100,     85,    140,    115,    175,     95,    150,    160,     125,   105,     160,     148,     134,     157,     115,     130,   //  10
               35,    170,    135,    125,    115,    125,    100,    170,    140,    210,    120,    180,    190,     150,   130,     197,     178,     166,     190,     141,     158,   //  11
               50,    215,    185,    170,    150,    160,    135,    215,    175,    265,    145,    225,    235,     180,   160,     247,     217,     208,     230,     177,     192,   //  12
               70,    270,    225,    210,    185,    195,    175,    270,    215,    320,    180,    275,    290,     235,   200,     318,     265,       0,       0,     226,     237,   //  13
               95,    330,    275,    255,    225,    245,    215,    325,    260,    385,    220,    330,      0,       0,     0,     386,     314,       0,       0,     274,     280,   //  14
              120,    385,    315,    290,    260,    295,    250,    385,    300,    445,    260,    385,      0,       0,     0,     450,     358,       0,       0,     321,     321,   //  15 
              150,    440,    360,    330,      0,      0,      0,    440,    350,    505,    305,    435,      0,       0,     0,     521,     406,       0,       0,     370,     363,   //  16 
              185,    510,      0,      0,      0,      0,      0,    510,    405,    570,    350,    500,      0,       0,     0,     594,     455,       0,       0,     421,     406,   //  17 
              240,    605,      0,      0,      0,      0,      0,    605,      0,      0,      0,      0,      0,       0,     0,     704,     525,       0,       0,     499,     468,   //  18 
              300,    695,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,       0,     0,       0,       0,       0,       0,       0,       0,   //  19    
              400,    830,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,       0,     0,       0,       0,       0,       0,       0,       0);  //  20 

   
//  1.3.5    Таблица нагрузок проводников с алюминиевыми жилами    |  1.3.7 Табл нагр кабелей с алюминиевыми ж| 1.3.8 медные шнуры    |  ГОСТ 16442-80 табл.24
//        j:    0       1       2       3       4       5       6  |    7       8       9      10     11           
//           сеч.мм2  откр    2*1ж    3*1ж    4*1ж    1*2ж    1*3ж | 1жВозд  2жВозд  2жЗемл  3жВозд  3жЗемл   | 1Ж      2Ж      3ж    |  1жВозд   1жЗемл   2жВозд   2жЗемл   3жВозд   3жЗемл |         
IAl=Array    ( 16,     16,     12,     12,     11,     11,     11,     14,     13,     13,     13,     13,      0,       0,     0 ,      14,      14,       8,       8,      14,      14,     // размер столбца 
            // ====
               2.5,    24,     20,     19,     19,     19,     16,     23,     21,     34,     19,     29,      0,       0,     0 ,      30,      32,      25,      33,      21,      28,     //  1
                4,     32,     28,     28,     23,     25,     21,     31,     29,     42,     27,     38,      0,       0,     0 ,      40,      41,      34,      43,      29,      37,     //  2    
                6,     39,     36,     32,     30,     31,     26,     38,     38,     55,     32,     46,      0,       0,     0 ,      51,      52,      43,      54,      37,      44,     //  3  
               10,     60,     50,     47,     39,     42,     38,     60,     55,     80,     42,     70,      0,       0,     0 ,      69,      68,      58,      72,      50,      59,     //  4
               16,     75,     60,     60,     55,     60,     55,     75,     70,    105,     60,     90,      0,       0,     0 ,      93,      83,      77,      94,      67,      77,     //  5    
               25,    105,     85,     80,     70,     75,     65,    105,     90,    135,     75,    115,      0,       0,     0 ,     122,     113,     103,     120,      88,     100,     //  6 
               35,    130,    100,     95,     85,     95,     75,    130,    105,    160,     90,    140,      0,       0,     0 ,     151,     136,     127,     145,     109,     121,     //  7 
               50,    165,    140,    130,    120,    125,    105,    165,    135,    205,    110,    175,      0,       0,     0 ,     189,     166,     159,     176,     136,     147,     //  8 
               70,    210,    175,    165,    140,    150,    135,    210,    165,    245,    140,    210,      0,       0,     0 ,     233,     200,       0,       0,     167,     178,     //  9 
               95,    255,    215,    200,    175,    190,    165,    250,    200,    295,    170,    255,      0,       0,     0 ,     284,     237,       0,       0,     204,     212,     //  10
              120,    295,    245,    220,    200,    230,    190,    295,    230,    340,    200,    295,      0,       0,     0 ,     330,     269,       0,       0,     236,     241,     //  11
              150,    340,    275,    255,      0,      0,      0,    340,    270,    390,    235,    335,      0,       0,     0 ,     380,     305,       0,       0,     273,     274,     //  12 
              185,    390,      0,      0,      0,      0,      0,    390,    310,    465,    270,    385,      0,       0,     0 ,     436,     343,       0,       0,     313,     308,     //  13
              240,    465,      0,      0,      0,      0,      0,    465,      0,      0,      0,      0,      0,       0,     0 ,     515,     396,       0,       0,     369,     355,     //  14
              300,    535,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,       0,     0 ,       0,       0,       0,       0,       0,       0,     //  15
              400,    645,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,       0,     0 ,       0,       0,       0,       0,       0,       0);    //  16
    

   
// =====

function CheckInput(evt)
  { var charCode;
    if (!evt) evt = event;
    if (evt.charCode)
            { charCode = evt.charCode;
              if (charCode == 44)
                 { evt.charCode = 46;
                   charCode = 46;
                 }  
            }
       else if (evt.keyCode)
                     { charCode = evt.keyCode;
                       if (charCode == 44)
                          { evt.keyCode = 46;
                            charCode = 46;
                          }  
                     }
                else if (evt.which)
                              { 
							    charCode = evt.which;
							  }
                         else charCode = 0;

    return (charCode <= 31 || (charCode >= 48 && charCode <= 57) || charCode == 46)
  } 

// ====

function Start()	// === Инициализация всего, что нужно
{ with (document)
	{ getElementById("ModeKtxt").innerHTML     = "нет выбора"
	  getElementById("ModeWtxt").innerHTML     = "нет выбора"
	  getElementById("Kpoprav").innerHTML      = "1"
	  getElementById("ModeZapas").innerHTML    = " + ";
      getElementById("SKItxt").innerHTML       = "S";
      getElementById("SWItxt").innerHTML       = "S";
      getElementById("Ref").innerHTML          = " ВВГ - кабель ";
	  U  = getElementById("Voltage").value;
	  Phases = getElementById("Phase").value;
	  Kz = 1 + getElementById("Kzapas").value/100;
	  getElementById("NSCable").innerHTML      = " Нет выбора ";
	  getElementById("DiamCable").innerHTML    = "нет";
	  getElementById("MassaCable1m").innerHTML = "нет";
	  getElementById("MassaLine").innerHTML    = "нет";
	  getElementById("Cable").disabled         = true;
	  getElementById("PGtype").innerHTML       = " Нет "
	  getElementById("MRtype").innerHTML       = " Нет";
	  getElementById("KpopravTtxt").innerHTM   = " 1 ";
	  KpopravT = 1;
	  RstLost2();
	  ChangeNumLoadWires();
	  ChangeModeProgram();
	  ChangeTable();
	  ChangeTSpace();
	  NodeCur = 0;
	  NWiresSave = 3;
	  NLost=0;
	  ChangeRTGround(RTnormal);
	  ChangeTip();
    };
};
   
// ======

function Defoult()	// === сброс всего, что нужно
{ with (document)
	{ ModeK = "нет выбора"
	  SK    = "";
	  ImaxK = 0;
	  LmaxK = 0;
	  LostK = 0;
	  UoutK = U;
   };
};

// ======

function DefoultW()	// === сброс всего, что нужно
{ with (document)
	{ ModeW = "нет выбора"
	  SW    = "";
	  ImaxW = 0;
	  LmaxW = 0;
	  LostW = 0;
	  UoutW = U;
   };
};
   
// ======

function Rnd( Num, Q )	// === сброс всего, что нужно
{ var i, Dec;
  with (document)
	{ Dec = 1;
	  i = Q;
	  while ( i > 0)
	        { Dec = Dec*10;
              i--;
			}
    };
 return  Math.round (Num * Dec) / Dec;
};
   
// ======
   
function ChangeUser()   // выбран другой потребитель
{ with (document)
   { Usr = getElementById("User").value;
     if      ( Usr == "Мotor"       ) {CosFi = CosMotor} 
     else if ( Usr == "Мotor230"    ) {CosFi = CosMotor230; U = U1phase;   Phases = 2 }
     else if ( Usr == "Мotor3400"   ) {CosFi = CosMotor400; U = U3phase;   Phases = 6 }
	 
     else if ( Usr == "Нeater"      ) {CosFi = CosНeater}
     else if ( Usr == "Heater12"    ) {CosFi = CosНeater;   U = U1halohen; Phases = 2 }
     else if ( Usr == "Нeater230"   ) {CosFi = CosНeater;   U = U1phase;   Phases = 2 }
     else if ( Usr == "Нeater400"   ) {CosFi = CosНeater;   U = U3phase;   Phases = 4 }
     else if ( Usr == "Нeater3400"  ) {CosFi = CosНeater;   U = U3phase;   Phases = 6 }
	 
     else if ( Usr == "Computer"    ) {CosFi = CosComputer; U = U1phase;   Phases = 2 }
     else if ( Usr == "LuminEl"     ) {CosFi = CosLumEl;    U = U1phase;   Phases = 2 }
     else if ( Usr == "LuminDr"     ) {CosFi = CosLumDr;    U = U1phase;   Phases = 2 };
	 getElementById( "Voltage" ).value = U;
	 getElementById( "Phase" ).value = Phases;
	 getElementById( "CosF" ).value = CosFi;
     ChangeTable ();
	 ChangeLost ();
     RstLost2 ();
     Calc();
   };
};   
   
// ======

function ChangePhase()   // изменена фазность
{ with (document)
   { Usr = getElementById("User").value; 
     Phases = getElementById("Phase").value;
	 U = getElementById("Voltage").value;

     if (Usr != "Other" ) // автовыбор, если напряжение не вводилось пользователем
		     { if ( Usr.search("tor" ) != -1 )   // потребитель - двигатель
				  { if      ( Phases  <= 2 )                getElementById("User").value = "Мotor230"  // однофазный двигатель
					else if ( (Phases == 3)|(Phases == 4) ) getElementById("User").value = "Мotor"     // однофазный двигатель нест.пит.
					else if ( Phases  >= 5 )                getElementById("User").value = "Мotor3400" // трехфазный двигатель
				  }
			   if ( Usr.search("ter" ) != -1 )   // потребитель - нагреватель
				  { if      ( Phases <= 2 )       // однофазный нагреватель        
					          {if ( getElementById("Voltage").value == 12 )  
								       getElementById("User").value = "Heater12" 
								   else { getElementById("User").value = "Нeater230";
		                                 U = U1phase;
									    }
							  }
					else if ( (Phases == 3)|(Phases == 4) ) // двухфазный нагреватель
					        { getElementById("User").value = "Нeater400";    
							  U = U3phase;
							}
					else if ( Phases >= 5 )                 // трехфазный нагреватель
					        { getElementById("User").value = "Нeater3400";   
							  U = U3phase;					   
							}
				  }	 
		       if ( Usr.search("min" ) != -1 )   // потребитель - люминисцентная лампа
				  { if ( Phases >= 3 )                 getElementById("User").value = "Other" // трехфазный двигатель
				  }
			 }  
		else {                                     // потребитель - другое
			 };
	 ChangeUser ();		
	 ChangeTable(); 
     getElementById("Voltage").value = U;
     Calc();
		       
   };
};

// ======

function ChangeCos()   // изменено поле воода косинуса фи
{ with (document)
      if (getElementById("CosF").value > 1)
	     { alert ("ОШИБКА: cos(fi) не введен, меньше нуля или больше  единицы \n типовое значение - 0,5..0,8, \n" +
                  "или введено нечисловое значение (десятичный разделитель - точка) \n" + 
				  "Значение будет установлено по умолчанию равным 0.7");
		   getElementById("CosF").value = CosMotor;
		   getElementById("CosF").focus();
		 };
Calc();
};

// ======

function ChangeSign(Field)   // выбор знака запаса 
{ with (document)
    { switch (Field)
	     { case "+": { getElementById("ModeZapas").innerHTML = " + ";
	                   Kz = 1 + getElementById("Kzapas").value/100;
                       break;
	                 };
	       case "-": { getElementById("ModeZapas").innerHTML = " - ";
	                   Kz = 1 - getElementById("Kzapas").value/100;
                       break;
	                 };
		 };
    };
  Calc ();
};

// ======

function CalcPower( I )   // вычислить мощность
{ with (document)
  { CosFi = getElementById("CosF").value;
    if (getElementById("Phase").value >= 5) // 3 фазы?
            P = (U*I*CosFi*1.73/1000)
       else P = (U*I*CosFi/1000);
  };
return P;
};

// ======

	   
function CalcCurrent( P )   // вычислить ток
{ with (document)
  { CosFi = getElementById("CosF").value;
    if (CosFi == 0)
	         I = ""
	    else { if (getElementById("Phase").value >= 5) // 3 фазы?
                       I = (P*1000/(U*CosFi*1.73))
                  else I = (P*1000/(U*CosFi));
			 };
  };
return I;
};

// ======				   

function ChangeNumLoadWires()   // изменено количество одновременно нагруженных проводников
{ with (document)
	{                                   // === поправка на количество нагруженных проводников
	  NLW = getElementById("NumWires").value 
      if (( NLW < 1) || ( NLW *0 != 0))
			{ alert ("ОШИБКА: Мало нагруженных проводников \n" + 
            	     "или введено нечисловое значение (десятичный разделитель - точка) \n")
          		getElementById("NumWires").value="";
		  		getElementById("NumWires").focus();			   
        	}				  
		else{ 
		      NLW = Rnd (NLW - 0.5, 0);
		      if (NLW <= 4)                           { Konp = "1"    }                  
            	else if ((NLW >= 5  ) && ( NLW <= 6)) { Konp = "0.68" } 
                else if ((NLW  >= 7 ) && (NLW  <= 9)) { Konp = "0.63" } 
                else if ( NLW  >= 10)                 { Konp= "0.6"   };
		     }    
	  getElementById("NumWires").value = NLW;
	  getElementById("Kpoprav").innerHTML = Konp;
    };
Calc();	
};

// ======				   

function ChangeJ()   // выбор столбца таблицы
{ with (document)
	{                         
	  var TableNum;
	  var Trassa = getElementById("Tip").value;
	  if (Trassa == "tWir_N"    )      {if (Phases >= 5) {j = 6 } else {j = 5}; }; // === N - трех или двухжильный
	  if (Trassa == "tWir_tube" )      {if (Phases >= 5) {j = 3 } else {j = 2}; }; // === в трубе
	  if (Trassa == "tWir_lotok")      {                  j = 1;                }; // === открыто
	  if (Trassa == "tCabPUE_1air" )   {                  j = 7;                }; // === 1ж кабель в воздухе
	  if (Trassa == "tCabPUE_air"  )   {if (Phases >= 5) {j = 10} else {j = 8}; }; // === 2ж-3ж кабель в воздухе
	  if (Trassa == "tCabPUE_earth")   {if (Phases >= 5) {j = 11} else {j = 9}; }; // === 2ж-3ж кабель в воздухе
	  if (Trassa == "tShn"      )      {if (Phases >= 5) {j = 14} else {j = 13};}; // === 2ж-3ж кабель в воздухе	
	   
	  if (Trassa == "tCabGOST_1air" )  {                  j = 15;               }; // === 1ж кабель в воздухе по ГОСТ
	  if (Trassa == "tCabGOST_1earth") {                  j = 16;               }; // === 1ж кабель в земле по ГОСТ
      
	  if (Trassa == "tCabGost_air"  )  {if (Phases >= 5) {j = 19} else {j = 17};}; // === 2ж-3ж кабель в воздухе по ГОСТ
	  if (Trassa == "tCabGOST_earth")  {if (Phases >= 5) {j = 20} else {j = 18};}; // === 2ж-3ж кабель в земле по ГОСТ
	  
	};
};	

// ======   

function ChangeTable() // изменен металл
{ with (document)
    { var tipTable = getElementById("Tip").value, OutTxt="";
	  ChangeJ()
	  if (getElementById("Metall").value == "cu")
	          { ro = roCu;
                if ((j>=1)  && (j<=6) ) OutTxt="табл. 1.3.4";
                if ((j>=7)  && (j<=11)) OutTxt="табл. 1.3.6";
                if ((j>=12) && (j<=14)) OutTxt="табл. 1.3.8";
                if ((j>=15) && (j<=20)) OutTxt="табл. 23, до 3КВ";
			  }
		 else { ro = roAl;
                if ((j>=1)  && (j<=6) ) OutTxt="табл. 1.3.5";
                if ((j>=7)  && (j<=11)) OutTxt="табл. 1.3.7";
                if ((j>=12) && (j<=14)) OutTxt="табл. 1.3.9";
                if ((j>=15) && (j<=20)) OutTxt="табл. 24, до 3КВ";
		      }
		//alert (j+",   "+ColNames [j]);	  
	  getElementById("Tabletxt").innerHTML = OutTxt + ", " + ColNames [j]; // + ",  "+j;
	  Calc ();
	};
};

// ======   

function ChangeTip() // выбор провода/кабеля
{ with (document)
    { if ( (getElementById("Tip").value == "tWir_N") || (getElementById("Tip").value == "tWir_tube") ) // прокладка в лотке, пучке
	         { if ( getElementById("NumWires").disabled == true )   // был запрет на ввод ОНП
			      { getElementById("NumWires").value = NWiresSave;  // восстановить значение
				    ChangeNumLoadWires();                           // пересчитать
				  }
			   getElementById("NumWires").disabled = false;         // снять запрет на ввод ОНП
			 }
		else {                                                     // прокладка в воздухе, земле и свободно, шнуры
		       if ( getElementById("NumWires").disabled == false ) // не было запрета на ввод ОНП
			      NWiresSave = getElementById("NumWires").value;   // сохранить текущее значение
			   getElementById("NumWires").value = 3;               // Присвоить минимум
			   ChangeNumLoadWires();                               // пересчитать
               getElementById("NumWires").disabled = true;         // запретить ввод ОНП
			   getElementById("NumWires").value = NWiresSave;      // Восстановить количество проводников для отображения			   
		     }
      if (getElementById("Tip").value == "tCabPUE_earth") // прокладка кабеля в земле
	          { getElementById("RTGround").disabled = false
			    ChangeRTGround (RTremem);
			  }
		 else { RTremem=getElementById("RTGround").value;
		        ChangeRTGround (RTnormal);
		        getElementById("RTGround").disabled = true;
				getElementById("KGroundtxt").innerHTML = "";
		      }
	  ChangeTable ();
	  ChangeTSpace ();
	  
	};
};

// ======				   

function SquareHeat(Current)  // === расчет сечения по нагреву 
{ with (document)
   { var ResSH, Icorrect;
     Out = false;
	 ChangeJ();
          switch (getElementById("Metall").value)
			{ 
			  case ("cu"):  // проводник медный
		        { ii = ICu[j];      // количество токов в столбце
				  if (ICu[ii*Col+j] * Konp * KpopravT * KGround - Current >= 0 )  // если ток не выходит за рамки таблицы 
				          { while ( (ICu[ii*Col+j] * Konp * KpopravT * KGround >= Current ) && (ii > 0) ) ii--; // дойти до первого большего тока
		                    ResSH = ICu[(ii+1)*Col];                                      // вернуть первое большее значение
					      }
					 else { Out = true;
					      }
                  break;
			    };
			  case ("al"):  // проводник алюминиевый
				{ ii = IAl[j];      // количество токов в столбце
				  if (IAl[ii*Col+j] * Konp * KpopravT * KGround  - Current >= 0 )	         // если ток не выходит за рамки таблицы 
					      { while ( (IAl[ii*Col+j] * Konp * KpopravT * KGround >= Current ) && (ii > 0) ) ii--; // дойти до первого большего тока
		                      ResSH = IAl[(ii+1)*Col];                                 // вернуть первое большее значение
						  }
					 else { Out = true;
					      }
                  break;
				};
			}; //switch ("me")

    return ResSH;
   }; //  function SquareHeat(Current) 
};

// ======

function SquareLost(Current,Lng,Prc)       //===расчет сечения по потерям 
{ with (document)
    { var ResSL;
      if (Phases >= 5)             // реальное сечение по потерям
	           SLost = (1.73*Current*ro*Lng*100*CosFi) / (U*Prc)
		  else SLost = (2*Current*ro*Lng*100*CosFi) / (U*Prc);
		  
      // alert ("Current="+Current + ",  Lng="+Lng + ",  Prc="+Prc + ",  SLost ="+SLost);
      // getElementById("Debug").innerHTML = "CosFi="+CosFi + ",   I="+Current + ",   L="+L + ",   SLost="+SLost;
	  ii = 0;
      if (getElementById("Metall").value == "cu")	
	         { while ( ( ICu[ii*Col+Col] < SLost ) && (ii<N1) ) ii++;
               ResSL = ICu[ii*Col+Col];
			 }
	    else { while ( (IAl[ii*Col+Col] < SLost) && (ii<N1) ) ii++;
               ResSL = IAl[ii*Col+Col];
			 }
      if ( SLost > ResSL )
	  	 ResSL = Rnd (SLost, 2);
//alert ("Current="+Current + ",  Lng="+Lng + ",  Prc="+Prc);
		 
    };
  return ResSL;  	
};	

// ======

function IHeatmax(Square)	// === выбор максимального тока для заданного сечения по нагреву
{ with (document) 
    { var Imax;
	  ChangeJ();
      ii = ICu[j];      // количество токов в столбце   
      if ( getElementById("Metall").value == "cu")
               { ii = ICu[j];      // количество токов в столбцe для медных проводников
			     if ( Square <= ICu[(ii)*Col] )  // заданное сечение меньше маскимального в таблице 
			             { while ((ICu[(ii)*Col] > Square ) && ( ii > 0 )) ii--;  // искать сечение равное заданному
                           Imax = ICu[(ii)*Col+j];
					     }
				    else { Imax = ICu[(ii)*Col+j]    // сечение превышает табличное, максимальное значение

				         }	                       // в данном случае допустимо,т.к. еcть проверка на сечение по нагреву
 		         SHeat = ICu[ii*Col];
				 if ( Square < ICu[Col] )
				    Imax = 0;
	           }
	      else {  ii = IAl[j];      // количество токов в столбц// для алюминиевых проводников
		         if ( Square <= IAl[ii*Col] )      // заданное сечение меньше маскимального в таблице  
		                 { while ((IAl[ii*Col] > Square ) && ( ii > 0 )) ii--;  // искать сечение равное заданному
                           Imax = IAl[ii*Col+j];
					     }
				    else { Imax = IAl[ii*Col+j]    // сечение превышает табличное, максимальное значение
				         }	                       // в данном случае допустимо,т.к. еcть проверка на сечение по нагреву
                 SHeat = IAl[ii*Col];
				 if ( Square < IAl[Col] )
				    Imax = 0;
		       };
    };
  return Imax * Konp * KpopravT * KGround;    // Коррекция тока с учетом ОНП и температуры среды
};
// ======

function ILostmax(Square, Prc)	// === выбор максимального тока для заданного сечения по потерям
{ with (document) 
  { var Imax, ILmax, IHmax;
    if (Phases >= 5) 
	        K=1.73; // для трехфазной цепи
	   else K=2;    // для однофазной цепи
	ILmax = (Square*U*Prc) / (K*L*ro*CosFi*100);
    return ILmax;
  };  
};

// ======function ChangeLost(Param)

function ChangeLost() // изменена величина потерь
{ with (document)
    { U = getElementById("Voltage").value;
	  if ( getElementById("LostSelectorP").checked)  // заданы потери в процентах
	     { MLP = getElementById("MaxLostPercent").value
		   if( ( MLP >= 100) ||( MLP*0 != 0))
                  { alert ( "ОШИБКА: Введено нечисловое значение (десятичный разделитель - точка) \n\n"+
		                    "или потери выходят за допустимые границы: ]0%,100%[ \n\n "+
		                    "определенное стандартом значение - 5%, \n "+
			                "для компрессоров холодильных аппаратов - 2% \n")
                    getElementById("MaxLostPercent").value="5";
			        getElementById("MaxLostPercent").focus();			   
                  }				  
             else { MLV = Rnd((U * MLP / 100), 2);
			        getElementById("MaxLostVoltage").value = MLV;
	    	        getElementById("MinVoltage").value = U-MLV;
			      }
		 };
     if ( getElementById("LostSelectorV").checked) // заданы потери в вольтах
	    { MLV = getElementById("MaxLostVoltage").value
		  if (( MLV <= 0) || (U - MLV <= 0 ) ||(MLV*0 != 0) )
                 { alert("ОШИБКА: потери выходят за допустимые границы: ] 0B .. " + Voltage.value + "В [ \n\n"+
			             "или введено нечисловое значение (десятичный разделитель - точка) \n\n ");
                   getElementById("MaxLostVoltage").value = ( U * MLP / 100 );
			       getElementById("MaxLostVoltage").focus();			   
                 }				  
            else { getElementById("MaxLostPercent").value = Rnd(((MLV / U) * 100), 2);
	    	       getElementById("MinVoltage").value = U - MLV;
			     };
        };
	 if ( getElementById("LostSelectorU").checked) // задано минимальное напряжение на нагрузке 
	    { MV = getElementById("MinVoltage").value;
		  if ((MV <= 0) || (U - MV <= 0) ||(MV*0 != 0) )
                 { alert("ОШИБКА: Введено нечисловое значение (десятичный разделитель - точка) \n\n"+
			             "или минимальное напряжение меньше или равно 0 \n\n " + 
				         "или минимальное напряжение больше или равно напряжению сети");
                   getElementById("MinVoltage").value= Rnd(U*(1-MLP/100), 2);
			       getElementById("MinVoltage").focus();			   
           }				  
            else { getElementById("MaxLostPercent").value = Rnd((((U - MV) / U) * 100), 2);
            	   getElementById("MaxLostVoltage").value = U - MV;
				 };
        };
   Calc();
   };
};

// ======

function ChangePI()   // изменена нагрузка
{ with (document)
  Calc();
};

// ======

function CalcDiametr(S)   // Вычисление диаметра провода по сечению
{ with (document)
  return Rnd( Math.sqrt (S * 4 / 3.14158), 2);
};

// ======

function CalcSquare(D)   // Вычисление сечения провода по диаметру
{ with (document)
  return (Rnd ( (D * D * 3.14158 / 4 ), 2));
};

// ======

function ChangeS()   // изменено сечение, расчет нагрузок
{ with (document)
  getElementById("Diametr").value = CalcDiametr ( getElementById("Square").value);
  Calc();
};

// ======

function ChangeD()   // изменено сечение, расчет нагрузок
{ with (document)
  getElementById("Square").value = CalcSquare ( getElementById("Diametr").value);
  Calc();
};

// ======

function ChangeModeBreaker()   // изменен критерий вібора автоматического віключателя
{ with (document)
  Calc();
};

// ======

function Lmax(S,I,Prc)   // длина линии при заданных сечении и токе
{ with (document)
    { if (Phases >= 5) 
	           K=1.73
	      else K=2;
	  return Rnd((S*U*Prc)/(K*I*ro*CosFi*100), 1);
	};
};

// ======

function Lost(L,S,I)   // потери в линии при заданных длине сечении и токе
{ with (document)
    { if (Phases >= 5) 
	           K=1.73
	      else K=2;
	  return Rnd((K*I*ro*L*CosFi*100)/(S*U), 2);
	};
};

// ======

function CalcRes (L, S)   // сопротивление линии при заданных длине и сечении
{ with (document)
    { 
	  return ro*L/S;
	};
};

// ======

function CalcPrc (P1, P2, R)   // сопротивление линии при заданных длине и сечении
{ with (document)
    { 
	  return Rnd((P1-P2)*100/P2, R); // процент Р1 от Р2, округленный до R разрядов
	};
};

// ======

function Calc () // Основные вычисления
{ var KR;
  with (document)
    { U = getElementById("Voltage").value;
      I = getElementById("Current").value;
	  CosFi = getElementById("CosF").value;
	  P = getElementById("Power").value;
      L = getElementById("Length").value;
	  if ( L == "" ) L=0;
	  MLP = getElementById("MaxLostPercent").value;
      Kz = 1 + getElementById("Kzapas").value/100;  // Расчет с запасом
	  Kzmin = 1 - getElementById("Kzapas").value/100;

	  if (Phases >= 5) 
	           KR=1
	      else KR=2;

	  if ( getElementById("SelectorI").checked)  // расчет мощности
              getElementById("Power").value = Rnd(CalcPower(I), 3)
		 else getElementById("Current").value = Rnd(CalcCurrent(P), 3);
		 
	  switch (getElementById("ModeProgram").value)
	    { case "Square":  { // нахождение нужного сечения по введенной нагрузке
                            IKz = I*Kz;
                            SH = SquareHeat (IKz);
                            SL = SquareLost (I,L,MLP*Kzmin);
                            SKI   = "S (" + Rnd(IKz,1) + "A)";
                            if (Out)
                                    Defoult ()
                               else { if ( SH > SL )
                                              { ModeK = "по нагреву, с запасом";
	                                            SK = SH;
	                                          }
                                         else if ( SH == SL )
                                                      { ModeK = "паритет, с запасом";
	                                                    SK = SH;
	                                                  }
	                                             else { ModeK = "по потерям, с запасом";
	                                                    SK = SL;
						                                SKI = "S (" + Rnd(I, 1) + "A, " + Rnd(MLP*Kzmin, 1) + "%)";
	                                                  };
	                                }; 
			                getElementById("ModeKtxt").innerHTML = ModeK; // вывод критериев выбора

	                        getElementById("SKItxt").innerHTML   = "<nobr>"+SKI+"</nobr>";	// S (25A,5%) = 10мм2			
	                        getElementById("SKtxt").innerHTML    = SK+" мм2";
							
							LostK =  Lost (L, SK, I);	                     
                            getElementById("InomKtxt").innerHTML = "("+ Rnd(I, 1) + "A, " + L + "м)"; // Delta (25A, 30м) = 0,5% 
	                        getElementById("LostKtxt").innerHTML = Rnd(LostK, 2) + " %";	

                            ImaxK = Math.min (IHeatmax(SK),ILostmax(SK, MLP)); // вывод максимального тока и мощности

                            if ( ImaxK*0 == 0 )
                                     getElementById("ImaxKtxt").innerHTML = Rnd(ImaxK, 1) + "А" + " / " + Rnd(CalcPower(ImaxK), 2)+"KW"
		                        else getElementById("ImaxKtxt").innerHTML = "";

							if (( ImaxK*I*0 == 0) && (I*1 != 0 ))
							        getElementById("KzKtxt").innerHTML = Rnd((ImaxK-I)*100/I, 2)+"%"
							   else getElementById("KzKtxt").innerHTML = "";
							
							//getElementById("PmaxKtxt").innerHTML = Rnd(, 2)

                            LmaxK = Lmax(SK,I,MLP*Kzmin);
							getElementById("LmaxKItxt").innerHTML = "Lmax("+Rnd(I,1)+"A, "+Rnd(MLP*Kzmin,1)+"%)";
                            if (LmaxK != "Infinity")
    	                        getElementById("LmaxKtxt").innerHTML = Rnd(LmaxK, 1) + "м";	

                            UoutK = U*(1-LostK/100);
                            getElementById("UoutKtxt").innerHTML = Rnd(UoutK, 1) +" В";

                            if ( getElementById("ModeBreaker").value == "Line")
									 { if ( ChangeBreaker ( "LE", ImaxK) >= I )
									           getElementById("BreakerKtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", ImaxK ))
										  else getElementById("BreakerKtxt").innerHTML = "Нет";
									 }
							    else { if ( ChangeBreaker ( "GE", I ) <= ImaxK ) 
									           getElementById("BreakerKtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "GE", I ))
										  else getElementById("BreakerKtxt").innerHTML = "Нет";
									 }
							
                          //================================================ // Расчет без запаса									
                            SH = SquareHeat (I);
                            SL = SquareLost (I, L, MLP);
                            SWI   = "S (" + Rnd(I, 1) + "A)";				 
                            if (Out)
	                                DefoultW ()
                               else { if ( SH > SL )
                                              { ModeW = "по нагреву, без запаса";
	                                            SW = SH;
	                                          }
                                         else if ( SH == SL )
                                                      { ModeW = "паритет, без запаса";
	                                                    SW = SH;
	                                                  }
	                                             else { ModeW = "по потерям, без запаса";
	                                                    SW  = SL;
						                                SWI = "S (" + Rnd(I, 1) + "A, " + MLP + "%)";
	                                                  };
	                                }; 
	                        getElementById("ModeWtxt").innerHTML = ModeW;

                            getElementById("SWItxt").innerHTML   = SWI;	       
	                        getElementById("SWtxt").innerHTML    = SW+" мм2";

                            getElementById("InomWtxt").innerHTML = "("+ Rnd(I, 1) + "A, " + L + "м)";	
                            LostW = Lost (L, SW, I); 
	                        getElementById("LostWtxt").innerHTML = Rnd(LostW, 2) + " %";							

                            ImaxW = Math.min (IHeatmax(SW),ILostmax(SW, MLP));
                            if ( ImaxW*0 == 0 )
                                     getElementById("ImaxWtxt").innerHTML = Rnd(ImaxW, 1) + "А" + " / " + Rnd(CalcPower(ImaxW), 2)+"KW"
		                        else getElementById("ImaxWtxt").innerHTML = "";

							if (( ImaxW*I*0 == 0) && (I*1 != 0 ))
							        getElementById("KzWtxt").innerHTML =  Rnd((ImaxW-I)*100/I, 2)+"%"
							   else getElementById("KzWtxt").innerHTML = "";

							//getElementById("PmaxWtxt").innerHTML = Rnd(CalcPower(ImaxW), 2)

                            LmaxW = Lmax(SW, I, MLP );
							getElementById("LmaxWItxt").innerHTML = "Lmax("+Rnd(I,1)+"A, " + Rnd(MLP, 1) +"%)";
                            if (LmaxW != "Infinity")
	                           getElementById("LmaxWtxt").innerHTML = Rnd(LmaxW, 1) + " м";	

                            UoutW = U*(1-LostW/100);
                            getElementById("UoutWtxt").innerHTML = Rnd(UoutW, 1) +" В";
						   
                            if ( getElementById("ModeBreaker").value == "Line")
									 { if ( ChangeBreaker ( "LE", ImaxW  ) >= I) 
									           {
									           getElementById("BreakerWtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", ImaxW ))
											   }
										  else getElementById("BreakerWtxt").innerHTML = "Нет";
									 }
							    else { if ( ChangeBreaker ( "GE", I ) <= ImaxW ) 
									           getElementById("BreakerWtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "GE", I ))
										  else getElementById("BreakerWtxt").innerHTML = "Нет";
									 }   

							getElementById("Square").value = SK;
							getElementById("Diametr").value = CalcDiametr(SK);

	                        break;
		                  };
		  case "Load":    {  // ввод сечения, расчет допустимой нагрузки
                            SK = getElementById("Square").value;
                            SW = SK;
	  
                            if (SK == "")  // сечение не введено
                                    { getElementById("Current").value = "";
	                                  getElementById("Power").value = ""; 
	                                  Defoult ();
	                                  DefoultW ();
	                                }
                               else {                                      // расчеты с запасом
							          IH = IHeatmax (SK);                  // ток по нагреву
						              IL = ILostmax (SK, MLP);                  // ток по потерям
									  //alert (" IL="+IL);
			                          if ( (IH <= IL) || (IL*0 != 0) )
                                                { ModeK = "по нагреву, с запасом";
                                                  ImaxK = IH;
                                                }
			                               else { ModeK = "по потерям, с запасом";
                                                  ImaxK = IL;
                                                }
									  ImaxK = ImaxK*Kzmin;
 				
									  getElementById("ModeKtxt").innerHTML = ModeK; // по потерям/нагреву с запасом
									  
									  SKI = "S";
                                      getElementById("SKItxt").innerHTML   = "<nobr>"+SKI+"</nobr>";	//S(xA)=
									  getElementById("SKtxt").innerHTML    = SK+" мм2";				//	Ymm2
									  
                                      LostK = Lost (L, SK, ImaxK); 
                                      if (LmaxK != "Infinity")
                                         getElementById("InomKtxt").innerHTML = "("+ Rnd(ImaxK, 1) + "A, " + L + "м)";
                                      if (LostK*0 != 0 ) 
						                 LostK  = 0;
	                                  getElementById("LostKtxt").innerHTML = Rnd(LostK, 2) + " %";	
									  						
			                          if ( ImaxK*0 == 0 )
			                                   getElementById("ImaxKtxt").innerHTML = Rnd(ImaxK, 1) + "А" + " / " + Rnd(CalcPower(ImaxK), 2)+"KW"
					                      else getElementById("ImaxKtxt").innerHTML = "";
			
                                      getElementById("KzKtxt").innerHTML = "-"+getElementById("Kzapas").value + "%";
									  
									  LmaxK = Lmax(SK, ImaxK , MLP);
							          getElementById("LmaxKItxt").innerHTML = "Lmax("+Rnd(ImaxK,1)+"A, "+Rnd(MLP, 1)+"%)";
    	                              getElementById("LmaxKtxt").innerHTML = Rnd(LmaxK, 1) + " м";	
									  
                                      UoutK = U*(1-LostK/100);
                                      getElementById("UoutKtxt").innerHTML = Rnd(UoutK, 1) +" В";

                                      getElementById("BreakerKtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", ImaxK  ));
						   									  
						              // ================================= // расчеты без запаса
						              IH = IHeatmax (SW);  
                                      IL = ILostmax (SW, MLP);
                                      if ( ( IH <= IL) || (IL*0 != 0) )
                                             { ModeW = "по нагреву, без запаса";
                                               ImaxW = IH;
                                              }
                                         else { ModeW = "по потерям, без запаса";
                                                ImaxW = IL;
                                              }	
									  getElementById("ModeWtxt").innerHTML = ModeW;
	  
                                      SWI = "S";	
                                      getElementById("SWItxt").innerHTML   = SWI;	           									  		
                                      getElementById("SWtxt").innerHTML    = SW+"мм2";
									  
									  LostW =  Lost (L, SW, ImaxW);
                                      getElementById("InomWtxt").innerHTML = "("+ Rnd(ImaxW, 1) + "A, " + L + "м)";									  
									  getElementById("LostWtxt").innerHTML = Rnd(LostW, 2) + " %";
									  
			                          if ( ImaxW*0 == 0 )
			                                   getElementById("ImaxWtxt").innerHTML = Rnd(ImaxW, 1) + "А" + " / " + Rnd(CalcPower(ImaxW), 2)+"KW"
					                      else getElementById("ImaxWtxt").innerHTML = "";
			
									  getElementById("KzWtxt").innerHTML = "0%";
										 
									  LmaxW = Lmax(SW, ImaxW, MLP); 
							          getElementById("LmaxWItxt").innerHTML = "Lmax("+Rnd(ImaxW,1)+"A, "+Rnd(MLP, 1)+"%)";
                                      if (LmaxW != "Infinity")
	                                     getElementById("LmaxWtxt").innerHTML = Rnd(LmaxW, 1) + " м";
										 
                                      if (LostW*0 != 0 ) 
                                         LostW  = 0;
										 
                                      UoutW = U*(1-LostW/100);
									  getElementById("UoutWtxt").innerHTML = Rnd(UoutW, 1) +" В";
									  
											   
                                      getElementById("BreakerWtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", ImaxW ));
									  
									};	
                            getElementById("Current").value = Rnd(ImaxK, 3);
                            getElementById("Power").value =  Rnd(CalcPower(ImaxK), 3);
						   
	                        break;
		                  };
          case "Control": { // ввод сечения и нагрузки, проверочный расчет  
                            SK = getElementById("Square").value;
							
                            ModeK = "линия с запасом ";
							getElementById("ModeKtxt").innerHTML = ModeK;
							
							SKI = "S";
							getElementById("SKItxt").innerHTML   = SKI;
							getElementById("SKtxt").innerHTML    = SK+" мм2";
							
							LostK = Lost (L, SK, I);
							getElementById("InomKtxt").innerHTML = "("+ Rnd(I, 1) + "A, " + L + "м)";
							if ( LostK <= MLP * Kzmin)					   
  	                               getElementById("LostKtxt").innerHTML = Rnd(LostK, 2) + " %";							
				              else getElementById("LostKtxt").innerHTML =  "<div style='color: red;'>"+ Rnd(LostK, 2) + " %</div>";
							
							ImaxK = Math.min (IHeatmax(SK),ILostmax(SK, MLP));
							ImaxK = ImaxK*Kzmin
							if (( ImaxK*I*0 == 0) && (I*1 != 0 ))
                                    { getElementById("ImaxKtxt").innerHTML = Rnd(ImaxK, 1) + "А" + " / " + Rnd(CalcPower(ImaxK), 2)+"KW";
									  getElementById("KzKtxt").innerHTML = Rnd((ImaxK-I)*100/I, 2)+"%";
						              if ( Rnd(ImaxK, 2) < getElementById("Current").value)
							             { getElementById("ImaxKtxt").innerHTML = "<div style='color: red;'>" + getElementById("ImaxKtxt").innerHTML + "</div>"	
										   getElementById("KzKtxt").innerHTML = "<div style='color: red;'>" + getElementById("KzKtxt").innerHTML + "</div>"	
										 }
						            }  
		                       else { getElementById("ImaxKtxt").innerHTML = "";
							          getElementById("KzKtxt").innerHTML = "";
									}

							LmaxK = Lmax(SK,I, MLP*Kzmin);					        
							getElementById("LmaxKItxt").innerHTML = "Lmax("+Rnd(I, 1)+"A, "+Rnd(MLP*Kzmin, 1)+"%)";
                            if (LmaxK != "Infinity")
    	                       if ( LmaxK >= getElementById("Length").value)
					                   getElementById("LmaxKtxt").innerHTML = Rnd(LmaxK, 1) + " м"
					              else getElementById("LmaxKtxt").innerHTML = "<div style='color: red;'>"+ Rnd(LmaxK, 1) + " м</div>";
                             
                            if (LostK*0 != 0 ) LostK  = 0;
                               UoutK = U*(1-LostK/100);
			                getElementById("UoutKtxt").innerHTML = Rnd(UoutK, 1) +" В";
						   
                            if ( getElementById("ModeBreaker").value == "Line")
									 { if ( ChangeBreaker ( "LE", IHeatmax(SK)*Kzmin) >= I )
									           getElementById("BreakerKtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", IHeatmax(SK)*Kzmin ))
										  else getElementById("BreakerKtxt").innerHTML = "Нет";
									   // alert ( "IHeatmax="+IHeatmax(SK)+ "  Automat="+ChangeBreaker ( "LE", IHeatmax(SK) )+ "   SK="+SK+"   I="+I + "   "+( ChangeBreaker ( "LE", IHeatmax(SK) >= I) ));	  
									 }
							    else { if ( ChangeBreaker ( "GE", I ) <= IHeatmax(SK) ) 
									           getElementById("BreakerKtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "GE", I ))
										  else getElementById("BreakerKtxt").innerHTML = "Нет";
									 }   

						   
	                       	//==================================							
							ModeW = "линия без запаса";
							getElementById("ModeWtxt").innerHTML = ModeW;
							
							SWI = "S";
							getElementById("SWItxt").innerHTML   = SWI;
                            
							SW = SK;							
							getElementById("SWtxt").innerHTML    = SW+" мм2";
							
                            ImaxW = Math.min (IHeatmax(SW),ILostmax(SW, MLP));	
							if (( ImaxW*I*0 == 0) && (I*1 != 0 ))
                                    { getElementById("ImaxWtxt").innerHTML = Rnd(ImaxW, 1) + "А" + " / " + Rnd(CalcPower(ImaxW), 2)+"KW";
									  getElementById("KzWtxt").innerHTML = Rnd((ImaxW-I)*100/I, 2)+"%";
						              if ( Rnd(ImaxW, 2) < getElementById("Current").value)
							             { getElementById("ImaxWtxt").innerHTML = "<div style='color: red;'>" + getElementById("ImaxWtxt").innerHTML + "</div>"	
										   getElementById("KzWtxt").innerHTML = "<div style='color: red;'>" + getElementById("KzWtxt").innerHTML + "</div>"	
										 }
						            }  
		                       else { getElementById("ImaxWtxt").innerHTML = "";
							          getElementById("KzWtxt").innerHTML = "";
									}
											        
                            LmaxW = Lmax(SK, I, MLP );
							getElementById("LmaxWItxt").innerHTML = "Lmax("+Rnd(I, 1)+"A, "+Rnd(MLP, 1)+"%)";
							if (LmaxW != "Infinity")
    	                       if (LmaxW >= getElementById("Length").value)
					                   getElementById("LmaxWtxt").innerHTML = Rnd(LmaxW, 1) + " м"
					              else getElementById("LmaxWtxt").innerHTML = "<div style='color: red;'>"+ Rnd(LmaxW, 1) + " м</div>";	
							
							getElementById("InomWtxt").innerHTML = "("+ Rnd(I, 1) + "A, " + L + "м)";
                            LostW = Lost (L, SW, I); 
							if (LostW <= getElementById("MaxLostPercent").value)					   
  	                               getElementById("LostWtxt").innerHTML = Rnd(LostW, 2) + " %";							
				              else	getElementById("LostWtxt").innerHTML =  "<div style='color: red;'>"+ Rnd(LostW, 2) + " %</div>";
							
                            if (LostW*0 != 0 ) LostW  = 0;
                               UoutW = U*(1-LostW/100);
							getElementById("UoutWtxt").innerHTML = Rnd(UoutW, 1) +" В";	                       
                           	            
                            if ( getElementById("ModeBreaker").value == "Line")
									 { if ( ChangeBreaker ( "LE", IHeatmax(SW) ) >= I) 
									           getElementById("BreakerWtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "LE", IHeatmax(SW) ))
										  else getElementById("BreakerWtxt").innerHTML = "Нет";
									 }
							    else { if ( ChangeBreaker ( "GE", I ) <= IHeatmax(SW) ) 
									           getElementById("BreakerWtxt").innerHTML = ChangeBreakertxt ( ChangeBreaker ( "GE", I ))
										  else getElementById("BreakerWtxt").innerHTML = "Нет";
									 }   
							
	                        break;
		                  };
						  
        }; // switch
							RK = Rnd(CalcRes (L*KR, SK), 5);
							getElementById("RKItxt").innerHTML = "R(" + SK +"мм<sup>2</sup>," + L*KR + "м)";
							getElementById("RKtxt").innerHTML = RK +" ом";
							
							RK = Rnd(CalcRes (L*KR, SW), 5);
							getElementById("RWItxt").innerHTML = "R(" + SW +"мм<sup>2</sup>," + L*KR + "м)";
							getElementById("RWtxt").innerHTML = RK +" ом";

//getElementById("Debug").innerHTML = "j="+j+",   ii="+ii+",  ImaxK="+ImaxK+",  ImaxW="+ImaxW+",   CosFi="+CosFi+",   SK="+SK+",    Kz="+Kz+"<br>"+
//                                  ",   SKI="+SKI+ ",   SWI="+SWI;

	  CableParam();
    }; // with (document)
};

// ======
function CableParam() // Вычисление параметров кабеля
    // 0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14,     15,     16,     17,     18,     19,     20
{ with (document)
	{ var   CableName, Description,  jc, DWires, KWires, NSCabletx, DiamCabletxt,MassaCable1mtxt, MassaLinetxt, Cabletxt, Cabledis ;
	  PVSd = Array
	      (0,    0.5,   0.75,      1,    1.5,    2.5,      4,      6,     10,     16,     25,     35,     50,     70,     95,    120,    150,    185,    240,    300,    400,
	       1,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
	       2,      0,    6.2,    6.7,    7.6,    9.2,   10.6,   12.6,   15.0,   19.9,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
 	       3,      0,    6.6,    7.1,    8.1,   10.0,   11.4,   13.3,   15.9,   21.1,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
 	       4,      0,    7.2,    7.7,    9.2,   10.9,   12.5,   15.2,   17.5,   23.3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
           5,      0,    8.0,    8.3,     10,   12.1,     14,   16.2,   19.6,   26.0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 );
      PVSm = Array
          (0,    0.5,   0.75,      1,    1.5,    2.5,      4,      6,     10,     16,     25,     35,     50,     70,     95,    120,    150,    185,    240,    300,    400,
           1,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
           2,      0,  0.056,  0.061,  0.087,  0.134,  0.187,  0.275,  0.402,  0.684,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
           3,      0,  0.067,  0.073,  0.106,  0.168,  0.230,  0.341,  0.504,  0.853,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
           4,      0,  0.081,  0.091,  0.132,  0.204,  0.284,  0.420,  0.625,  1.058,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
           5,  0.000,  0.101,  0.111,  0.166,  0.256,  0.350,  0.515,  0.776,  1.333,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000 );
      VVGd = Array
          (0,    0.5,   0.75,      1,    1.5,    2.5,      4,      6,     10,     16,     25,     35,     50,     70,     95,    120,    150,    185,    240,    300,    400,
           1,      0,      0,      0,    5.4,    5.8,    6.6,    7.1,    8.0,   10.1,   11.2,   12.2,   13.9,   15.2,   17.3,   19.2,   22.2,   24.7,   27.7,   31.0,      0,
           2,      0,      0,      0,    8.4,    9.8,   11.5,   12.5,   14.1,   17.2,   21.5,   24.5,   25.2,   28.2,   32.4,   35.8,   41.8,      0,      0,      0,      0,
           3,      0,      0,      0,    9.4,   10.3,   12.1,   13.2,   15.4,   19.2,   22.8,   25.7,   29.6,   32.4,   36.1,   39.9,   46.6,   44.7,   49.1,      0,      0,
           4,      0,      0,      0,   10.2,   11.2,   13.3,   14.5,   19.9,   21.0,   25.5,   28.3,   31.7,   31.5,   35.8,   39.1,   43.7,   46.1,   53.5,      0,      0,
           5,      0,      0,      0,   11.1,   12.1,   14.5,   15.8,   18.0,   22.5,   25.9,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 );
      VVGm = Array
          (0,    0.5,   0.75,      1,    1.5,    2.5,      4,      6,     10,     16,     25,     35,     50,     70,     95,    120,    150,    185,    240,    300,    400,
           1,      0,      0,      0,  0.042,  0.054,  0.077,  0.098,  0.138,  0.210,  0.312,  0.407,  0.670,  0.890,  1.160,  1.411,  1.638,  1.993,  2.573,  3.218,      0,
           2,      0,      0,      0,  0.075,  0.109,  0.157,  0.202,  0.283,  0.427,  0.649,  0.865,  1.160,  1.587,  2.127,  2.638,  3.288,      0,      0,      0,      0,
           3,      0,      0,      0,  0.125,  0.160,  0.228,  0.292,  0.420,  0.600,  0.918,  1.199,  1.710,  2.289,  3.027,  3.759,  4.592,  5.683,  7.404,      0,      0,
           4,      0,      0,      0,  0.155,  0.200,  0.288,  0.372,  0.528,  0.839,  1.278,  1.837,  2.535,  3.186,  4.357,  5.330,  6.534,  8.063,  9.952,      0,      0,
           5,  0.000,  0.000,  0.000,  0.180,  0.235,  0.348,  0.453,  0.671,  1.058,  1.577,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000 );
  if ( Phases == 1 ) { NWires = 2; DWires = 2;   }   //  ( L+N )   тип, жильность и сечение кабеля
  if ( Phases == 2 ) { NWires = 3; DWires = 2;   }    //  ( L+N+PE )
  if ( Phases == 3 ) { NWires = 2; DWires = 2;   }    //  ( L1+L2 )
  if ( Phases == 4 ) { NWires = 3; DWires = 2;   }    //  ( L1+L2+PE )	
  if ( Phases == 5 ) { NWires = 3; DWires = 2;   }    //  ( L123)
  if ( Phases == 6 ) { NWires = 4; DWires = 2.5; }    //  ( L123+PE)
  if ( Phases == 7 ) { NWires = 4; DWires = 2.5; }    //  ( L123+N)
  if ( Phases == 8 ) { NWires = 5; DWires = 3;   }    //  ( L123+N+PE )
  
  Tiptxt = getElementById("Tip").value;
  if ( ( Tiptxt == "tWir_tube") || (Tiptxt == "tWir_lotok") || (Tiptxt == "tCabPUE_1air") )
          { KWires = 1;
		  }
	 else { KWires = NWires;
            DWires = 1; 
		  }

  if (getElementById("ZapasSelect").checked == true )  // Учитывать ли запас?
           S=SK
      else S=SW;
  Cabletxt = getElementById("Cable").value; 
  if       ( Cabletxt == "PVS") Description = "ПВС-провод соединительный"
  else  if ( Cabletxt == "VVG") Description = "ВВГ-кабель в ПВХ изоляции"
  else  if ( Cabletxt == "PV3") Description = "ПВ3-провод в ПВХ изоляции"
  else  if ( Cabletxt == "PV1") Description = "ПВ1-провод в ПВХ изоляции";
  getElementById("Ref").innerHTML = Description;

 
  if (( S == 0 ) || (j < 5) || getElementById("Metall").value != "cu")
           { NSCabletx       = " Нет выбора ";
		     DiamCabletxt    = "";
			 MassaCable1mtxt = "";
			 MassaLinetxt    = "";
			 Cabledis        =  true;
		   }   
	  else { Cabledis = false;
	         NSCabletx  = KWires + " x " + S + " мм2 "; // вывод жильности и сечения после типа кабеля
			 if ( KWires == 1 )
			    NSCabletx  = NWires + "x(" + NSCabletx + ")";
		     
			 jc = 0;
			
			 if ( Cabletxt == "PVS")
			    { while (( PVSd [jc] < S ) && ( jc <= 20 )) jc++;
				  //alert ( PVSd [ KWires*21 + jc] );
			      if ( PVSd [ KWires*21 + jc] == 0)  // по данному кабелю нет данных - прочерки
			              { DiamCabletxt    = "";
				            MassaCable1mtxt = "";
					        MassaLinetxt    = "";
						  }
			         else DiamCabletxt = " " + PVSd [ KWires*21 + jc ];  // по данному кабелю данных есть, вычисление
			      if ( PVSm [ KWires*21 + jc] == 0)  // по данному кабелю нет данных - прочерки
			              { MassaCable1mtxt = "";
					        MassaLinetxt    = "";
					      }
			         else { MassaCable1mtxt = " " + PVSm [ KWires*21 + jc ];
                            MassaLinetxt    = " " + Rnd(MassaCable1mtxt * L, 2);
					      };
			    };
			 if (Cabletxt == "VVG")
			    { while (( VVGd [jc] < S ) && ( jc <= 20 )) jc++; 
			      if ( VVGd [ NWires*21 + jc] == 0)  // по данному кабелю нет данных - прочерки
			              { DiamCabletxt    = "";
				            MassaCable1mtxt = "";
					        MassaLinetxt    = "";
					      }
			         else { DiamCabletxt    = VVGd [ NWires*21 +  jc ];  // по данному кабелю данных есть, вычисление
			                MassaCable1mtxt = VVGm [ NWires*21 +jc ];
                            MassaLinetxt    = Rnd(MassaCable1mtxt * L, 2);							
					      };
			    };
     
			  DiamCableGr = DiamCabletxt * DWires;
			  if ( KWires == 1 )  // коррекция результатов для трассы из одножильных проводов, кабелей
			     { DiamCableGr = DiamCabletxt * DWires;
				   DiamCabletxt    = DiamCableGr + "<br>(" + DiamCabletxt + ")";  
			       MassaCable1mtxt = MassaCable1mtxt * NWires + "<br>(" + MassaCable1mtxt + ")"; 
				   MassaLinetxt    = MassaLinetxt * NWires + "<br>(" +  MassaLinetxt + ")";
			     }

           };
     getElementById("NSCable").innerHTML      = NSCabletx;
	 getElementById("DiamCable").innerHTML    = DiamCabletxt;
	 getElementById("MassaCable1m").innerHTML = MassaCable1mtxt;
	 getElementById("MassaLine").innerHTML    = MassaLinetxt;
	 getElementById("Cable").disabled         = Cabledis;
	 
     PGselect();	
     MRselect ();   

//     getElementById("Debug").innerHTML = "NWires="+NWires+",   KWires="+KWires+",   jc="+jc+",  PVSd [ KWires*21 + jc ]="+PVSd [ KWires*21 + jc ] +
//	 ",    DiamCableGr = " + DiamCableGr;
   };	
};
	 
// ======   

function PGselect() // Выбор кабельного ввода
    // 0,      1,      2,      3,      4,      5,      6,      7,      8,      9
{ with (document)
    { var j, N=9, M=5;
      PG = Array
          (7,      9,     11,   13.5,     16,     21,     29,     36,     42,     48,   //  Номер PG
           3,      4,      5,      6,     10,     13,     18,     22,     30,     34,   //  минимальный диаметр кабеля
         6.5,      8,     10,     12,     14,     18,     25,     32,     38,     44,   //  максимальный диаметр кабеля
          15,     19,     22,     24,     27,     33,     42,     53,     60,     65,   //  размер ключа длч затяжки
        12.7,   15.4,   18.8,   20.7,   22.8,   28.6,   37.4,   47.5,   54.5,   59.8 ); // диаметр монтажного отверстия

      getElementById("PGtype").innerHTML = "";
      if ( (getElementById("DiamCable").innerHTML == "нет" ) || (DiamCableGr*0!=0   ) )
               { getElementById("PGtype").innerHTML = " Нет ";
		       }   
	      else { for (j = 0; j<=N; j++)
			        { if ( (DiamCableGr > PG [ N+1+j] ) && (DiamCableGr < PG [ N+N+2+j] ))
				         { if ( getElementById("PGtype").innerHTML != "" )
					            getElementById("PGtype").innerHTML = getElementById("PGtype").innerHTML + " \n ";
					            getElementById("PGtype").innerHTML = getElementById("PGtype").innerHTML + " PG-"+PG [ j];
				         };
				    }
               };
    };
};
	 
// ======   

function MRselect() // Выбор металлорукава
{ with (document)
         // 0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13
    { var j, N=13, P=5;
      MR = Array
          (8,     10,     12,     15,     18,     20,     22,     25,     32,     38,     50,     60,     75,    100,    //  Номер MR
         7.8,    9.1,   10.9,   13.9,   16.9,   18.7,   20.7,   23.7,   30.4,   36.4,   46.5,   56.5,   71.5,     96,    //  минимальный диаметр прохода
        11.6,   13.3,   15.9,   18.9,   21.9,   24.0,     26,   30.8,     38,     44,   58.7,   70.3,   85.5,    110 );  //  наружный диаметр  

       PT = Array
         (16,     20,     25,     32,     40,     50,  //  Номер PT
        10.7,   14.1,   18.3,   24.3,   31.2,   39.6,  //  минимальный диаметр прохода
          16,     20,     25,     32,     40,     50 );//  наружный диаметр  
	  
      getElementById("MRtype").innerHTML = "";
      if ( (getElementById("DiamCable").innerHTML == "" ) || (DiamCableGr*0!=0   ) )
               { getElementById("MRtype").innerHTML = "";
		       }   
	      else { j = 0; 
	             while ( (DiamCableGr > MR[N+1+j]) && (j<N)) ++j;
			     getElementById("MRtype").innerHTML = "РЦ-" + MR [j] + " / " + MR [N+1+j] + " \n ";
                 j = 0; 
	             while ( (DiamCableGr > PT[P+1+j]) && (j<P)) ++j;
			     getElementById("GRtype").innerHTML = "ГР-" + PT [j] + " / " + PT [P+1+j];
               };
    };
};

// ======   

function ChangeKz() // изменение запаса
{ with (document)
    { 
	  if (getElementById("ModeProgram").value == "Load")
              {
	            Kz = 1 - getElementById("Kzapas").value/100;
				if ( Kz <= 0 )
				   {
				     alert ( "Запас не может превышать 100%");
                     getElementById("Kzapas").value = "";
					 getElementById("Kzapas").focus;
				   }
			  }
		 else Kz = 1 + getElementById("Kzapas").value/100;
	  Calc ();
	};
};

// ======   

function ChangeModeProgram() // изменен режим работы программы
{ with (document)
    { switch (getElementById( "ModeProgram").value)
	     { case "Square":  { getElementById("TitleProgram").innerHTML = "Выбор сечения провода по нагреву и потерям напряжения"
		                     getElementById("ModeZapas").innerHTML = " + ";
							 getElementById("Square").disabled = true;
							 getElementById("Diametr").disabled = true;							 
							 getElementById("Current").disabled = false;
							 getElementById("Power").disabled = false;
							 getElementById("SelectorI").disabled = false;
							 getElementById("SelectorP").disabled = false;
							 
                             break;
	                       };
	       case "Load":    { getElementById("TitleProgram").innerHTML = "Расчет нагрузочной способности проводника заданного сечения"
		                     getElementById("ModeZapas").innerHTML = " - ";
							 getElementById("Square").disabled = false;
							 getElementById("Diametr").disabled = false;							 
							 getElementById("Current").disabled = true;
							 getElementById("Power").disabled = true;
							 getElementById("SelectorI").disabled = true;
							 getElementById("SelectorP").disabled = true;
                             break;
	                       };
	       case "Control": { getElementById("TitleProgram").innerHTML = "Расчет потерь и максимальных параметров линии"
		                     getElementById("ModeZapas").innerHTML = " - ";
							 getElementById("Diametr").disabled = false;							 
							 getElementById("Square").disabled = false;
							 getElementById("Current").disabled = false;
							 getElementById("Power").disabled = false;
							 getElementById("SelectorI").disabled = false;
							 getElementById("SelectorP").disabled = false;
                             break;
	                       };
		 };
    };
  Calc ();
};
               
// ======function ChangeLost(Param)

function ChangeU() // изменено напряжение питания
{ with (document)
    { ChangeLost();
	  RstLost2 ();
	  getElementById ("User").value = "Other";
	};
  Calc ();	
};
               
// ======function ChangeLost(Param)

  var TAir = Array ( -5,     0,     5,    10,    15,    20,    25,    30,    35,    40,    45,    50,     // температура
                      1.18,  1.14,  1.10,  1.05,  1.00,  0.95,  0.89,  0.84,  0.77,  0.71,  0.63,  0.55,  // Земля, 15°С
					  1.32,  1.27,  1.22,  1.17,  1.12,  1.06,  1.00,  0.94,  0.87,  0.79,  0.71,  0.61); // Воздух, 25°С

function ChangeTSpace() // Поправка на температуру окружающей среды
                   // 0      1      2      3      4      5      6      7      8      9     10     11
{   var jnum=12, jt;
  with (document)
    { 
	  if (getElementById("Tip").value.search ("earth") != -1)       // Если кабель в земле
               { if ( getElementById("TSpace").value == -1 )        
                          { KpopravT = 1;                                // и выбран автоматический учет температур
                            getElementById("Tsp").innerHTML = "t<sub>cp</sub> = 15°C.";
						  }
			         else { KpopravT = TAir[jnum + getElementById("TSpace").value*1]  // присвоить поправку
                            getElementById("Tsp").innerHTML = ".";
					      }
			   }
		  else {                                                    // Если кабель в воздухе
		         if ( getElementById("TSpace").value == -1 ) 
		                  { KpopravT = 1;                               // и выбран автоматический учет температур
						    getElementById("Tsp").innerHTML = "t<sub>cp</sub> = 25°C."; 
						  }
		             else { KpopravT = TAir[ 2*jnum + getElementById("TSpace").value*1 ];  // присвоить поправку
                            getElementById("Tsp").innerHTML = ".";
					      }
			   }
      getElementById("KpopravTtxt").innerHTML = KpopravT;
//      getElementById("Debug").innerHTML = KpopravT;	  
      Calc ();
	};
};

// ======function ChangeLost(Param)

function ChangeBreaker( MM, Cur ) // Выбор автоматического выключателя
                       // 0    1   2   3   4   5   6   7    8    9   10   11   12   13   14   15   16    17    18   19   20   21   22   23   24   25   26   27
{ var IBreaker = Array ( 27, 0.5,  1,  2,  3,  4,  5,  6,  10,  16,  20,  25,  32,  40,  50,  63,  80,  100,  125,  160, 200, 250, 320, 400, 500, 630, 800, 1000 );     // Токи срабатывания
  var i , OutBreaker;
  with (document)
    { OutBreaker = 0;
	  if ( Cur <= IBreaker [IBreaker [0]])
		 switch (MM)
           { case "LE": { i = IBreaker [0]; // line for
			              while (( IBreaker [i] > Cur) && (i>1))
		                     i--;
				          OutBreaker = IBreaker [i];
			              break;
						}
		     case "GE": { i = 1;
			  	          while (( IBreaker [i] < Cur ) && (i<IBreaker [0]) )
		                    i++;
					      OutBreaker = IBreaker [i];
		                  break;
					    }
					  
		   }// switch 
    }
  return OutBreaker;
};               
// ======function ChangeLost(Param)

function ChangeBreakertxt( Cur ) // Выбор автоматического выключателя
{ var OutString;
  with (document)
    { if ( Cur == 0 )
	          OutString = "Нет"
	     else { if         (Phases <= 2) OutString = "1p / "
		           else if (Phases <= 4) OutString = "2p / " 
		           else                  OutString = "3p / ";
                if (getElementById("CosF").value == 1)
		                OutString = OutString + "B / " 
		           else OutString = OutString + "C / " ;
	            OutString = OutString +	Cur +"A";
			  }
    }
  return OutString;
};               


// ======
  var LostTableRow = 32, LostTableCol = 16, posNC, PrcLocal,
      Ltable=0, LStable=1, Stable=2, Prctable=3, PrcStable=4, Utable=5, Itable=6, IStable=7, Ptable=8, PStable=9,
	  Mtable=10,  Costable=11, rotable=12, ONPtable=13, Ttable=14, Tiptable=15;
  var LostTable = Array(  1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6,// 0 
                          1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6,// 1
						  2, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 2, 3, 4, 5, 6,// 2
						  3, 2, 3, 4, 5, 6, 7, 8, 9, 0, 3, 2, 3, 4, 5, 6,// 3
						  4, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4, 2, 3, 4, 5, 6,// 4
						  5, 2, 3, 4, 5, 6, 7, 8, 9, 0, 5, 2, 3, 4, 5, 6,// 5
						  6, 2, 3, 4, 5, 6, 7, 8, 9, 0, 6, 2, 3, 4, 5, 6,// 6
						  7, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 2, 3, 4, 5, 6,// 7
						  8, 2, 3, 4, 5, 6, 7, 8, 9, 0, 8, 2, 3, 4, 5, 6,// 8
                          1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6,// 9
						  2, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 2, 3, 4, 5, 6,// 10
						  3, 2, 3, 4, 5, 6, 7, 8, 9, 0, 3, 2, 3, 4, 5, 6,// 11
						  4, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4, 2, 3, 4, 5, 6,// 12
						  5, 2, 3, 4, 5, 6, 7, 8, 9, 0, 5, 2, 3, 4, 5, 6,// 13
						  6, 2, 3, 4, 5, 6, 7, 8, 9, 0, 6, 2, 3, 4, 5, 6,// 14
						  7, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 2, 3, 4, 5, 6,// 15
						  8, 2, 3, 4, 5, 6, 7, 8, 9, 0, 8, 2, 3, 4, 5, 6,// 16
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 17
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 18
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 19
						  2, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 2, 3, 4, 5, 6,// 20
						  3, 2, 3, 4, 5, 6, 7, 8, 9, 0, 3, 2, 3, 4, 5, 6,// 21
						  4, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4, 2, 3, 4, 5, 6,// 22
						  5, 2, 3, 4, 5, 6, 7, 8, 9, 0, 5, 2, 3, 4, 5, 6,// 23
						  6, 2, 3, 4, 5, 6, 7, 8, 9, 0, 6, 2, 3, 4, 5, 6,// 24
						  7, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 2, 3, 4, 5, 6,// 25
						  8, 2, 3, 4, 5, 6, 7, 8, 9, 0, 8, 2, 3, 4, 5, 6,// 26
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 27
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 28
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 29
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6,// 30
						  9, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 2, 3, 4, 5, 6 // 31
                        );

// ======
function _( row )   // вычисление стартовой позиции строки
{
return row*LostTableCol;  
};
// ======
function SumCell( Col, Nbegin, Nend )   // накопление потерь в узлах
{ var rowSC, Sum;
  with (document)
  { Sum = 0;
    for (rowSC = Nbegin; rowSC <= Nend; rowSC++) 
	   { Sum = Sum + LostTable [ rowSC*LostTableCol + Col]*1 
	   };
  };
return Sum;  
};
// ======

function AddLost( Action )   // накопление потерь в узлах
{ var col, CurrentSum, LostSum, LSum, ISum, MomentSum, posNC, pos2, row, row2, LostRemaind;
  with (document)
  {   
     if (NodeCur == 0)
         {
		   U0 = getElementById("Voltage").value;
		 }
     if (( NodeCur < LostTableRow ) && ( NodeCur >=0 ))
	     {	 // L LS S %i %S U I IS P M cos ro ONP Tip
		  
		  posNC = (NodeCur)*LostTableCol; // строка текущего узла
		  // Запись невычисляемых данных в текущую узловую строку таблицы NodeCur
		  LostTable [ posNC + Ltable]   = getElementById("Length").value;  // L
	      LostTable [ posNC + Itable]   = getElementById("Current").value; // Ii
	      LostTable [ posNC + IStable]  = getElementById("Current").value; // IS	  
		  LostTable [ posNC + Ptable]   = getElementById("Power").value;  // P
		  LostTable [ posNC + PStable]  = getElementById("Power").value;  // P
	      LostTable [ posNC + Mtable]   = Rnd(LostTable[posNC+Ltable] * LostTable[posNC+Ptable], 3); // M
		  LostTable [ posNC + Costable] = getElementById("CosF").value; // cosFi
		  LostTable [ posNC + rotable]  = getElementById("Metall").value; // cu/al
		  LostTable [ posNC + ONPtable] =  getElementById("NumWires").value;; // ONP
		  if ( getElementById("TSpace").value*1 == -1 )
		          LostTable [ posNC + Ttable] = "A"
			 else LostTable [ posNC + Ttable] = TAir[getElementById("TSpace").value]; // t°
		  switch ( getElementById("Tip").value )
		     { case "tWir_N":     Vid = "Лоток"; break;
			   case "tWir_tube":  Vid = "Пучок"; break;
			   case "tWir_lotok": Vid = "Своб."; break;
			   case "tCabPUE_1air":  Vid = "1ж в возд."; break;
			   case "tCabPUE_air":   Vid = "Nж в возд."; break;
			   case "tCabPUE_earth": Vid = "Nж в земле"; break;
			   case "tShn":       Vid = "Шнур"; break;
			 }
		  LostTable [ posNC + Tiptable] = Vid;  // Tip

		  if (Action == "-") 
				    { NodeCur --;
					  LostTable[(NodeCur-1)*LostTableCol+IStable] = LostTable[(NodeCur-1)*LostTableCol+Itable];
					  //DebugOut(1, NodeCur, LostTable[(NodeCur-1)*LostTableCol+IStable],LostTable[(NodeCur-1)*LostTableCol+Itable] )
					  for ( row=NodeCur-2; row>=0; row--) // заполнить токи по узлам от текущего до 0
					      { 
						    LostTable[_(row)+ IStable] = Rnd(SumCell (Itable, row, NodeCur-1), 3); // пересчитать суммарные токи в таблице				                    
							LostTable[_(row)+ PStable] = Rnd(SumCell (Ptable, row, NodeCur-1), 3); // пересчитать суммарные мощности в таблице	
		                    LostTable[_(row)+ Mtable] = Rnd(LostTable[_(row)+ PStable]*LostTable[_(row)+ Ltable], 2); // пересчитать суммарные моменты в таблице	
						  }
					}
			   else { for ( row=NodeCur-1; row>=0; row--) // заполнить суммарные токи по узлам от текущего до 0
			              { //alert ("_("+row+")="+_(row)+ ",   NC="+NodeCur +",  PS["+row+"]="+LostTable[_(row)+ PStable] +",  Psum["+row+","+NodeCur+"]="+  Rnd(SumCell (Ptable, row, NodeCur), 2))
		                    LostTable[_(row)+ IStable] = Rnd(SumCell (Itable, row, NodeCur), 3); // добавить ток нового узла ко всем токам в таблице
		                    LostTable[_(row)+ PStable] = Rnd(SumCell (Ptable, row, NodeCur), 3); // добавить мощность нового узла ко всем токам в таблице
		                    LostTable[_(row)+ Mtable] = Rnd(LostTable[_(row)+ PStable]*LostTable[_(row)+ Ltable], 3); // добавить мощность нового узла ко всем токам в таблице
				          };
                    }  
	      LostTable [ posNC + IStable]  = getElementById("Current").value; // Суммарный ток текущего узла = введенному
	      //MomentSum = SumCell (Mtable, 0, NodeCur); // вычисление суммарного момента нагрузок в таблице

		  LostSum = 0;
		  Lsum = 0;
		  LostRemaind = MLP;
	      // Запись вычисляемых данных во всю таблицу		  
		  for ( row=0; row<=NodeCur; row++) // заполнить потери по узлам от 0 до текущего
		      { pos2 = row*LostTableCol;

				Lsum = Rnd((Lsum  + LostTable[pos2 + Ltable]*1), 2)
				LostTable[pos2 + LStable] = Lsum ; // расстояние одт начала линии до узла

				LostForNode = Rnd(LostRemaind*Kzmin*LostTable[(pos2+Mtable)]/SumCell(Mtable, row, NodeCur ) ,2); // потери для каждого узла пропорционально моментам	
				LostTable[pos2 + Prctable] = LostForNode;// определить пропорциональные моментам потери и записать их в таблицу	

				LostTable[pos2 + Stable] = Math.max (SquareHeat (LostTable[pos2 + IStable]*Kz), SquareLost (LostTable[pos2 + IStable],LostTable[pos2 + Ltable] , LostForNode));  //	вычислить сечение	  
				//LostTable[pos2 + Prctable] = LostForNode;
				LostTable[pos2 + Prctable] = Rnd(Lost(LostTable[pos2+Ltable], LostTable[pos2 + Stable], LostTable[pos2 + IStable]),2);// определить реальные потери и записать их в таблицу	
			    LostRemaind = LostRemaind - LostTable[pos2 + Prctable];
				
				LostSum = Rnd(LostSum + LostTable[pos2 + Prctable],2);
				LostTable[pos2 + PrcStable] = LostSum;
				LostTable[pos2 + Utable] = Rnd( U0*(1-LostSum/100),2);// Вычислить напряжение в узле и записать его
			  };
			  
		  if (Action == "+") 
		  	  NodeCur++;
	  }
	  getElementById("NodeCurtxt").innerHTML = NodeCur;
      OutTableLost ("Inc");
   } ;
};

// ======

function RstLost()  
{ with (document)
   { //getElementById("Voltage").value = U0;
     getElementById("LostKStxt").innerHTML = "";
     NodeCur = 0;
	 getElementById("NodeCurtxt").innerHTML = NodeCur;	 
	 OutTableLost ("Clr");
    }
};

// ======					 

function RstLost2()  
{ with (document)
   { getElementById("LostKStxt").innerHTML = "";
     NodeCur = 0;
	 getElementById("NodeCurtxt").innerHTML = NodeCur;	 
	 OutTableLost ("Clr");
    }
};

// ======function ChangeLost(Param)
function LostSum () // получение суммарных потерь в таблице
{ var col, row, Sum;
  with (document)
    { Sum = 0;
	  for ( row=0; row<NodeCur; row++) // вычисление суммарных потерь в таблице
	      { 
		    Sum = Sum + LostTable[(row*LostTableCol + Prctable)];
		  };
		  return Sum;
	};

};

function OutTableLost ( Action ) 
{ var col,  LostForNode, N=9, row = NodeCur, String = "";
  with (document)
    { 
	  row = NodeCur - 1;
	  String = "<table border='1' width='100%'> <tr align='center'> <td width='7.7%'>Узел</td> <td width='7.7%'>L<sub>i</sub></td> <td width='7.7%'>L<sub>&Sigma;</sub></td> <td width='7.7%'>S</td> <td width='7.7%'>%<sub>i</sub></td> <td width='7.7%'>%<sub>&Sigma;</sub></td> <td width='7.7%'>U</td> <td width='7.7%'>I<sub>i;</sub></td> <td width='7.7%'>I<sub>&Sigma;</sub></td> <td width='7.7%'>P</td> <td width='7.7%'>P<sub>&Sigma;</sub></td> <td width='7.7%'>М</td> <td width='7.7%'>cos(f)</td> <td width='7.7%'>ro</td> <td width='7.7%'>ОНП</td><td width='7.7%'>t°</td><td width='7.7%'>Тип</td> </tr> "
      for (row=0; row<Math.min(NodeCur,LostTableRow); row++)
	     { 
		   String =  String + "<tr> <td align='center'>"+(row+1) +"</td>";
		   for (col=0; col<LostTableCol; col++)
		      { 
		        String =  String + "<td align='center'>"+LostTable[row*LostTableCol + col ] +"</td>"; 
			  };
		   String =  String + "</tr>";  
		 };

      getElementById("TableLost").innerHTML = String + "</table>";
    };
     	
  return ;
};               

function ChangeRTGround(RT)
{ with (document)
    { RT=RT*1;
	  switch (RT)
	  { case  (80): { KGround=1.05;
	                  break;
	                };
	    case (120): { KGround=1;
	                  break;
	                };
	    case (200): { KGround=0.87;
	                  break;
	                };
	    case (300): { KGround=0.75;
	                  break;
	                };
	  };
      getElementById("KGroundtxt").innerHTML = "RT = " + RT+"см*°С/Вт = " + Rnd(100/RT, 2) + " Вт/(м*°С),<br>Imax = Iтабл * " + KGround;   	
    };
 Calc ();
}; 
