function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function changeImages() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_main_over = newImage("images/menu_main-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_news_01_over = newImage("images/menu_news_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_web_01_over = newImage("images/menu_web_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_library_01_over = newImage("images/menu_library_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_01_over = newImage("images/menu_poleznoe_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_obratnaya_01_over = newImage("images/menu-obratnaya_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_karta_saita_01_over = newImage("images/menu_karta_saita_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_ssilki_01_over = newImage("images/menu_ssilki_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_formules_01_over = newImage("images/menu_poleznoe_formules_01-o.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_svoistva_01_over = newImage("images/menu_poleznoe_svoistva_01-o.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_const_01_over = newImage("images/menu_poleznoe_const_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_tables_01_over = newImage("images/menu_poleznoe_tables_01-ove.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_poleznoe_Th_01_over = newImage("images/menu_poleznoe_Th_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_web_matrix_01_over = newImage("images/menu_web_matrix_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_web_polinoms_01_over = newImage("images/menu_web_polinoms_01-over.gif");
		preloadFlag = true;
	}
}

var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		menu_wed_geometria_01_over = newImage("images/menu_wed_geometria_01-over.gif");
		preloadFlag = true;
	}
}




function Integr_1(obj,a_1,b_1,STEP_1)
 {
  var fs = obj.func.value 
  
  var a_ = parseFloat(a_1)
  var b_ = parseFloat(b_1)
  var step_ = parseInt(STEP_1,10)

  var i,k
  var h,Summa

  for(i = 1;i<=step_;i++)
   {
     Summa = 0

     h = (b_ - a_) / i;

     for(k = 0;k < i;k++)
      {
        x = a_ + k * h   
        Summa+= eval(fs) * h;
      }
   window.status='Программа работает методом прямоугольников'
   }
  return Summa
 }

function Integr_2(obj,a_2,b_2,STEP_2)
 {
  var fs = obj.func.value 

  var a_ = parseFloat(a_2)
  var b_ = parseFloat(b_2)
  var step_ = parseInt(STEP_2,10)

  var i,k
  var h, Summa


  for(i = 1;i<=step_;i++) 
   {
     Summa = 0

     h = (b_ - a_) / i

     for(k = 0;k <= (i - 1);k++)
      {
        x = ((a_ + k * h) + (a_ + (k + 1) * h)) / 2
        Summa+=eval(fs) * h
      }
     window.status='Программа работает методом средних'
   }
  return Summa
 }

function Integr_3(obj,a_3,b_3,STEP_3)
 {
   var fs = obj.func.value 
       
   var i, k
   var h, Summa

   var a_ = parseFloat(a_3)
   var b_ = parseFloat(b_3)
   var step_ = parseInt(STEP_3,10)
   
   for(i = 1;i<=step_;i++)
    {
      Summa = 0
      
      h = (b_ - a_) / i

      for(k = 0;k <= i;k++)
       {
         x = Number(a_ + k * h)
         Summa+=eval(fs) * h
       }  
      
      x = a_
      Summa-=eval(fs) * (h / 2)
      x = b_
      Summa-=eval(fs) * (h / 2)
      window.status='Программа работает методом трапеций'
    }
    return Summa
 }
               
function Integr_4(obj,a_4,b_4,STEP_4)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_4)
   var b_ = parseFloat(b_4)
   var step_ = parseInt(STEP_4,10)

   var i, j, k
   var h, Summa

   j = 0

   for(i = 2;i<=step_;i = i * 2)               
    {
      Summa = 0;

      h = (b_ - a_) / i;

      j+=1
      
      for(k = 2;k<=(i - 2);k+=2)
       {
         x = Number(a_ + k * h)
         Summa+=2 * eval(fs) * (h / 3);
       }
 
      for(k = 1;k<=(i - 1);k+=2)
       {
         x = Number(a_ + k * h)
         Summa+=4 * eval(fs) * (h / 3)
       }
   
      x = a_
      Summa+= eval(fs) * (h / 3)
      x = b_
      Summa+= eval(fs) * (h / 3)
      window.status='Программа работает методом Симпсона'
    }
   return Summa
 }

function Integr_5(obj,a_5,b_5,STEP_5)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_5)
   var b_ = parseFloat(b_5)
   var step_ = parseInt(STEP_5,10)

   var i,j,k
   var h,Summa

   j = 0

   for(i = 3;i<=step_;i = i * 3)         
    {
      Summa = 0

      h = (b_ - a_) / i

      j+=1

      for(k = 1;k<=(i - 2);k+=3)
       {
         x = a_ + k * h   
         Summa+=3 * eval(fs) * (3 * h / 8)
         x = a_ + (k + 1) * h   
         Summa+=3 * eval(fs) * (3 * h / 8)
       }

      for(k = 3;k < (i - 2);k+=3) 
       {
         x = a_ + k * h   
         Summa+= 2 * eval(fs) * (3 * h / 8)
       }
      x = a_   
      Summa+= eval(fs) * (3 * h / 8)
      x = b_   
      Summa+= eval(fs) * (3 * h / 8)

      window.status='Программа работает методом 3/8'
    }
   return Summa
 }

function Integral_1(obj,a_1,b_1,eps_1)
 {
   var fs = obj.func.value 

  var a_ = parseFloat(a_1)
  var b_ = parseFloat(b_1)
  var eps_ = parseFloat(eps_1)

  var i,j
  var h,Summa
  var Res_1 = new Array()
  var Result
  var temp

  for(j=0;j<=300;j++) Res_1[j] = 0

  j = 0;

  for(i_1 = 1;;i_1 = 2 * i_1)
   {
     h = (b_ - a_) / i_1
     Summa = 0

     for(i = 0;i < i_1;i++)
      {
        x = a_ + i * h
        Summa+= eval(fs) * h

        window.status='Программа работает методом прямоугольников'
      }
    j+=1

    Res_1[j] = Summa

    window.status='Программа работает методом прямоугольников'

    if(Res_1[2])
     {
       Result = Res_1[j] - Res_1[j - 1]

       if(Math.abs(Result) < eps_)
        {
          return Summa
        }
     }
   }
 }

function Integral_2(obj,a_2,b_2,eps_2)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_2)
   var b_ = parseFloat(b_2)
   var eps_ = parseFloat(eps_2)

   var i,j
   var h,Summa
   var Res_2 = new Array()
   var Result

   for(j=0;j<=99;j++) Res_2[j] = 0;

   j = 0

   for(i_2 = 1;;i_2 = 2 * i_2)
    {
      Summa = 0
      
      h = (b_ - a_) / i_2

      for(i = 0;i <= (i_2 - 1);i++)
       {
         x = ( (a_ + i * h) + (a_ + (i + 1) * h ) ) / 2
         Summa+=eval(fs) * h
       }

      j+=1

      Res_2[j] = Summa

      window.status='Программа работает методом средних'

      if(Res_2[2])
       {
         Result = Res_2[j] - Res_2[j - 1]

         if(Math.abs(Result) < eps_)
          { 
            return Summa
          }
       }
    }
 }

function Integral_3(obj,a_3,b_3,eps_3)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_3)
   var b_ = parseFloat(b_3)
   var eps_ = parseFloat(eps_3)

   var i,j
   var Res_3 = new Array()
   var Result
   var h,Summa

   for(j=0;j<=99;j++) Res_3[j] = 0;

   j = 0

   for(i_3 = 1;;i_3 = 2 * i_3)
    {
      Summa = 0

      h = (b_ - a_) / i_3

      if(i_3==1)
       {
         x = a_
         Summa = eval(fs) * (h / 2)
         x = b_
         Summa+= eval(fs) * (h / 2)
       }
      else
       {
         for(i = 0;i<=i_3;i++)
          {
            x = a_ + i * h 
            Summa+=eval(fs) * h
          }
   
         x = a_
         Summa-=eval(fs) * (h / 2);
         x = b_
         Summa-=eval(fs) * (h / 2);
       }
      j+=1

      Res_3[j] = Summa

      window.status='Программа работает методом трапеций'

      if(Res_3[2])
       {
         Result = Res_3[j] - Res_3[j - 1]

         if(Math.abs(Result) < eps_)
          {
            return Summa
          }
       }
    }
 }

function Integral_4(obj,a_4,b_4,eps_4)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_4)
   var b_ = parseFloat(b_4)
   var eps_ = parseFloat(eps_4)

   var h,Summa
   var Res_4 = new Array()
   var Result

   for(j=0;j<=99;j++) Res_4[j] = 0

   j = 0;

   for(i_4 = 2;;i_4 = 2 * i_4)
    {
      Summa = 0;

      h = (b_ - a_) / i_4;

      if(i_4==2)
       {
         x = a_ 
         Summa+= eval(fs) * (h / 3)
         x = b_
         Summa+= eval(fs) * (h / 3)
         x = a_ + h
         Summa+= 4 * eval(fs) * (h / 3)
      }

     else
      {
        for(i = 2;i<=(i_4 - 2);i+=2)
         {
           x = a_ + i * h 
	   Summa+=2 * eval(fs) * (h / 3)
         }
    
        for(i = 1;i<=(i_4 - 1);i+=2)
         {
           x = a_ + i * h  
           Summa+=4 * eval(fs) * (h / 3)
         }
    
       x = a_
       Summa+=eval(fs) * (h / 3);
       x = b_
       Summa+=eval(fs) * (h / 3);
      }

     j+=1

     Res_4[j] = Summa

     window.status='Программа работает методом Симпсона'

     if(Res_4[2])
      {
        Result = Res_4[j] - Res_4[j - 1]

        if(Math.abs(Result) < eps_)
         {
           return Summa
         }
      }
    }
  }

function Integral_5(obj,a_5,b_5,eps_5)
 {
   var fs = obj.func.value 

   var a_ = parseFloat(a_5)
   var b_ = parseFloat(b_5)
   var eps_ = parseFloat(eps_5)

   var h,Summa
   var Res_5 = new Array()
   var Result

   for(j = 0;j<=99;j++) Res_5[j] = 0;

   j = 0

   for(i_5 = 3;;i_5 = 3 * i_5)
    {
      Summa = 0

      h = (b_ - a_) / i_5

      if(i_5==3)
       {
         x = a_
         Summa+= eval(fs) * (3 * h / 8)
         x = a_ + h
         Summa+= eval(fs) * (3 * h / 8)
         x = a_ + 2 * h
         Summa+= eval(fs) * (3 * h / 8)
         x = b_
         Summa+= eval(fs) * (3 * h / 8)
       }

     else
      {
        for(i = 1;i<=(i_5 - 2);i+=3)
         {
	   x = a_ + i * h
           Summa+=3 * eval(fs) * (3 * h / 8)
           x = a_ + (i + 1) * h
	   Summa+=3 * eval(fs) * (3 * h / 8)
         }

        for(i = 3;i < (i_5 - 2);i+=3)
         {
           x = a_ + i * h 
           Summa+=2 * eval(fs) * (3 * h / 8)
         }

        x = a_
        Summa+=eval(fs) * (3 * h / 8)
        x = b_ 
        Summa+=eval(fs) * (3 * h / 8)
       }

      j+=1

      Res_5[j] = Summa

      window.status='Программа работает методом 3/8'

      if(Res_5[2])
       {
         Result = Res_5[j] - Res_5[j - 1]

         if(Math.abs(Result) < eps_)
          { 
            return Summa
          }
       }
    } 
}

function Globality(obj)
 {
   if(!obj.func.value) 
    {
      alert("Вы не ввели функцию")
      return 0  
    }
   if(!parseFloat(obj.a.value) && obj.a.value!="0")
    { 
      alert("Граница А введена не корректно")
      return 0
    }
   if(!parseFloat(obj.b.value) && obj.b.value!="0")
    {
      alert("Граница В введена не корректно")
      return 0
    }
   if( (obj.s1.checked==true && !parseInt(obj.step.value)) 
      || (obj.s1.checked==true && parseInt(obj.step.value)<0) )
    {
      alert("Вы ввели шаг не корректно")
      return 0
    }
   if( (obj.s2.checked==true && !parseFloat(obj.eps.value)) 
      || (obj.s2.checked==true && parseFloat(obj.eps.value)<0) )
    {
      alert("Вы ввели точность не корректно")
      return 0
    }
   if(!obj.s1.checked && !obj.s2.checked)
    {
      alert("Вы не выбрали решение")
      return 0
    }  
 if(obj.s1.checked==true && parseInt(obj.step.value)==1 &&       obj.m4.checked)
    {
      alert("Для метода Симпсона шаг может быть больше либо равен 2")
      return 0 
    }
   if(obj.s1.checked==true && parseInt(obj.step.value) < 3 &&   obj.m5.checked)
    {
      alert("Для метода 3/8 шаг может быть больше либо равен 3")
      return 0
    }   
   if(!obj.m1.checked && !obj.m2.checked && !obj.m3.checked && 
       !obj.m4.checked && !obj.m5.checked)
    {
      alert("Вы не выбрали ни один из методов решения");
      return 0
    }

    if(obj.a.value==obj.b.value)
     {
       alert("Результат для всех методов = 0")
       return 0
     }

   var ResultS1 = new Array
   var ResultS2 = new Array

for(i=1;i<=5;i++)
 ResultS1[i]=ResultS2[i]="-"

  if(obj.s1.checked==true)
  {
    if(obj.m1.checked)
     ResultS1[1] = Integr_1(obj,obj.a.value,obj.b.value,obj.step.value);
      
    if(obj.m2.checked)
     ResultS1[2] = Integr_2(obj,obj.a.value,obj.b.value,obj.step.value);
      
    if(obj.m3.checked)
     ResultS1[3] = Integr_3(obj,obj.a.value,obj.b.value,obj.step.value);
     
    if(obj.m4.checked)
     ResultS1[4] = Integr_4(obj,obj.a.value,obj.b.value,obj.step.value);
     
    if(obj.m5.checked)
     ResultS1[5] = Integr_5(obj,obj.a.value,obj.b.value,obj.step.value);
  }

 if(obj.s2.checked==true)
  {
    if(obj.m1.checked)
     ResultS2[1] = Integral_1(obj,obj.a.value,obj.b.value,obj.eps.value);
       
    if(obj.m2.checked)
     ResultS2[2] = Integral_2(obj,obj.a.value,obj.b.value,obj.eps.value);
      
    if(obj.m3.checked)
     ResultS2[3] = Integral_3(obj,obj.a.value,obj.b.value,obj.eps.value);
     
    if(obj.m4.checked)
     ResultS2[4] = Integral_4(obj,obj.a.value,obj.b.value,obj.eps.value);
     
    if(obj.m5.checked)
     ResultS2[5] = Integral_5(obj,obj.a.value,obj.b.value,obj.eps.value);
  }

 var str = "                                          |  По шагам  < | >  По точности\n"+"Метод прямоугольников  |->  "+ResultS1[1]
      +" < | > "+ResultS2[1]+"\n"+"Метод средних                |->  "+ResultS1[2]+" < | > "+ResultS2[2]+"\n"+
      "Метод трапеций               |->  "
      +ResultS1[3]+" < | > "+ResultS2[3]+"\n"+"Метод Симпсона              |->  "+ResultS1[4]+" < | > "+ResultS2[4]+"\n"
      +"Метод 3/8                        |->  "+ResultS1[5]+" < | > "+ResultS2[5]
   obj.results.value = str
window.defaultStatus="Решение ..."
}

