//функция для очистки форм
		function clearform (obj)
		{
		var l=obj.elements.length
		for (i=0; i<=l-3; i++)
		obj.elements[i].value=""
		}
		
		//округление чисел
		function numberround (t)		
		{
		var tzel=Math.round(t)
		var fraction=t-Math.round(t)
		var fractionokrugl=Math.round(fraction*10000)/10000
		tokrugl=tzel+fractionokrugl
		return tokrugl
		}

		function zapconvert(strdata) //функция преобразования запятых
		{
		var s=strdata
		var st= s.replace (",",".")
		return st
		}
		
		function formvalidate (price, len, couponrate, frequency, maturity, yield, nominalyield)
		{var formcorrect=true
		formcorrect = (price<0) ? false : true
		formcorrect = (couponrate<0) ? false : formcorrect
		formcorrect = (frequency<0) ? false : formcorrect
		formcorrect = (maturity<=0) ? false : formcorrect
		formcorrect = (yield<0) ? false : formcorrect
		formcorrect = (nominalyield<0) ? false : formcorrect
		formcorrect = (len<1) ? false : formcorrect
		if (price==0 && yield==0 && nominalyield==0)
		{formcorrect=false}
		return formcorrect
		}


		function dataconvert(strdata)
		{
		var day= strdata.charAt(0)+strdata.charAt(1)  //день
		var month=strdata.charAt(3)+strdata.charAt(4)  //месяц
		var year=strdata.charAt(6)+strdata.charAt(7)+strdata.charAt(8)+strdata.charAt(9) //год
		var data = new Date (year, month-1, day)  //дата
		return data
		}

		
                
		function NPV (cashflow, dat, r, curcouponindex) //Расчет NPV
		{var p=0
		var n=cashflow.length-1
		p=cashflow[0]
		for (var i=curcouponindex+1; i<= n; i++)
		{p=p+cashflow[i]/Math.pow((1+r),(dat[i]-dat[0])/(365*86400000))}
		return p
		}
		
		// расчет по кортким бумагам
		function shortcalculation()  
		{var d=document
		 var price=Number(zapconvert(d.form1.price.value))
		 var face = 100
		 var maturity=Number(zapconvert(d.form1.maturity.value))
		 var yield=Number(zapconvert(d.form1.yield.value)/100)
		 var nominalyield=Number(zapconvert(d.form1.nominalyield.value)/100)		 
		 
		 var formcorrect=formvalidate(price, 1, 1, 1, maturity, yield, nominalyield)
		 if (formcorrect==false)
		 {alert ('При вводе данных допущены ошибки')}
		 else
		 {  // если форма заполнена корректно

		 if(price>0)	//если осуществляется расчет доходности по цене
		 {yield=Math.pow((face/price),(365/maturity))-1	
		 nominalyield=(face-price)/price*365/maturity			
		 d.form1.yield.value=numberround(yield*100)
		 d.form1.nominalyield.value=numberround(nominalyield*100)
		 }
		 else //если расчет цены по доходности
		 {
		  if (yield>0) //если расчет по эффективной доходности	
		  {
                  price=face/Math.pow((1+yield),(maturity/365))
		  d.form1.price.value=numberround(price)
		  nominalyield=(face-price)/price*365/maturity
		  d.form1.nominalyield.value=numberround(nominalyield*100)
		  }
		  else //если расчет по номаниальной доходности
		  {	
		  price=face/(1+nominalyield*maturity/365)
		  d.form1.price.value=numberround(price)
		  yield=Math.pow((face/price),(365/maturity))-1
		  d.form1.yield.value=numberround(yield*100		)
		  }					
		 }
		 } //к корректности заполнения формы
		}

		function calculation()
			{var d=document
	
			var price=Number(zapconvert(d.form2.price.value))
			var face = 100
			var couponrate = Number(zapconvert(d.form2.coupon.value))
			var frequency= (Number(d.form2.frequency.value)>0) ?  Number(d.form2.frequency.value) : 1
			var couponsize=face*couponrate/(frequency*100)
			var maturity=Number(zapconvert(d.form2.maturity.value))
			var len=maturity*frequency
			var yield=Number(zapconvert(d.form2.yield.value))/100
			var nominalyield=Number(zapconvert(d.form2.nominalyield.value)/100)			

			var formcorrect=formvalidate(price, len, couponrate, frequency, maturity, yield, nominalyield)
			if (formcorrect==false)
			{alert ('При вводе данных допущены ошибки')}
			else
			{  // если форма заполнена корректно
			
			var cashflow=new Array()
			var dat=new Array()
			
				
			for (var i=1; i<=len; i++)
			{cashflow[i]=couponsize}
			cashflow[len]=cashflow[len]+face
			
			dat[0] = dataconvert("01.01.2000")
			for (var i=1; i<=len; i++)
			{dat[i]=new Date(dat[i-1].getTime()+365*86400000/frequency)}

			if(price>0) //если осуществляется расчет доходности по цене
			{
			cashflow[0]=-price
	
			var r1=0
			var r2=0.2
			curcouponindex=0			

			var p2=NPV(cashflow, dat, r2, curcouponindex)			
			while (p2>0)
			{p2=NPV(cashflow, dat, r2, 0)
			if (p2>0)
			r2=r2+0.1
			}	
			
			var r=(r1+r2)/2
	       		var p=NPV(cashflow, dat, r, curcouponindex)	
			
			while (Math.abs(p)>0.0001)
			{
   	                r=(r1+r2)/2
        		p=NPV(cashflow, dat, r, curcouponindex)
			if (p>0)
			r1=r
         		else
			r2=r
			}

			//расчет номинальной доходности
			if (len==1 || couponrate==0) // если в денежном потоке только один элемент
			{var nominalyield=((cashflow[len]-price)/price)*365*86400000/(dat[len]-dat[0])}
			else //если в денежном потоке больше одного элемента
			{var nominalyield=(Math.pow((r+1),(1/frequency))-1)*frequency}

			d.form2.yield.value=numberround(r*100)
			d.form2.nominalyield.value=numberround(nominalyield*100)
//			NPValue.innerText=formcorrect


			} //к проверке того, введена ли цена
	
			else  //если считаем цену по доходности
			{
				if (yield==0) //если введена номинальная доходность
				{yield=Math.pow((1+nominalyield/frequency),frequency)-1
				 d.form2.yield.value=numberround(yield*100)
				}
				else //если введена эффективная доходность		
				{nominalyield=(Math.pow((yield+1),(1/frequency))-1)*frequency
				d.form2.nominalyield.value=numberround(nominalyield*100)}
		        
			p=0
			cashflow[0]=0
			price=NPV(cashflow, dat, yield, 0)
			d.form2.price.value=numberround(price)
			}  //к расчету цены по доходности
 			} //к корректности заполнения формы
			}
