var sFormName='SuperForm';
var iProgram=0;
var iUseMonths=0;
var iMonthPayment2=0;
var iRate2;


// только цифры
function CheckNumberTruth( oEvent, oElement ) {
	if( oEvent && oEvent.type == 'text' ) { // хз почему текст
		oElement.value = oElement.value.replace(/[\D]/gi, '');
	}
	return true;
}

function getAncestor(elemName, sourceElem) {
	var tempElem = sourceElem;
	while (tempElem && tempElem.nodeName != elemName.toUpperCase()) tempElem = tempElem.parentNode;
	return tempElem;
}

/* функция делает нужные проверки и изменения на странице в соответствии с новой программой */
function SpecialProgram(){
	var oForm=document.forms[sFormName];
	iProgram=getSelected(oForm.Program);
	var oFirstPayment=oForm.FirstPayment;
	switch(iProgram){
		case 1:
			oFirstPayment.disabled=false;
			iFirstPaymentPercent=20;
			iMonthPaymentInPercentOfIncom=40;
			SplitMonthlyPayment();
			break;
		case 2:
			IsModifiedFirstPayment=false;
			oFirstPayment.disabled=true;
			iFirstPaymentPercent=15;
			iMonthPaymentInPercentOfIncom=40;
			SplitMonthlyPayment(12);
			break;
		case 3:
			IsModifiedFirstPayment=false;
			oFirstPayment.disabled=true;
			iFirstPaymentPercent=10;
			iMonthPaymentInPercentOfIncom=30;
			SplitMonthlyPayment(18);
			break;
	}
	
	document.getElementById('FirstPaymentPercent').innerHTML = Math.round(iFirstPaymentPercent);
}

function SplitMonthlyPayment(iMonths){
	var oFirTD=document.getElementById("FirstPaymentTD");
	var oFirPrcTD=document.getElementById("FirstPaymentPrcTD");
	var oSecTR=document.getElementById("SecondPaymentTR");
	var oSecPrcTR=document.getElementById("SecondPaymentPrcTR");
	
	if(!iMonths){
		oFirTD.innerHTML="Ежемесячный платеж";
		oFirPrcTD.innerHTML="Процентная ставка";
		oSecTR.style.display="none";
		oSecPrcTR.style.display="none";
	}
	else{
		oFirTD.innerHTML="Ежемесячный платеж в течение первых "+iMonths+" месяцев";
		oFirPrcTD.innerHTML="Процентная ставка в течение первых "+iMonths+" месяцев";
		//oSecTR.style.display="block";
		oSecTR.style.display=(document.all && !window.opera) ? "block" : "table-row";
		//oSecPrcTR.style.display="block";
		oSecPrcTR.style.display=(document.all && !window.opera) ? "block" : "table-row";
	}
	
	iUseMonths=iMonths;
}

function setCurrency(oField)
{
	iRateType=Number(oField.value);
	setRate(oField.form);
	GetProperLimit(iRateType);
}

function setRate(oForm) {
	var oForm=document.forms[sFormName];
	SpecialProgram();
	if ( oForm.elements['CreditTerm'] && oForm.elements['CreditTerm'].value ){
		iTerm = oForm.elements['CreditTerm'].value;

		oIncomTypeElement = oForm.elements['IncomType'];
		for ( var i = 0; i < oIncomTypeElement.length ; i++ ) {
			if ( oIncomTypeElement[i].checked ) {
				iIncomType = oIncomTypeElement[i].value;
			}
		}

		if ( iTerm!='' && iTerm > 0 && ( (iTerm < 21 && iRateType == 0) || (iTerm < 16 && iRateType == 1)  ) ) {
		/* gonarch: temporary change */
			document.getElementById('CreditTermError').innerHTML = '&nbsp;<br/>';
			switch(iRateType){
				case 0: //USD
					if ( iTerm <= 10 )
						iRate = hRate[iRateType][iIncomType]['CreditDuration_1'];
					else if ( iTerm > 10 && iTerm <= 15)
						iRate = hRate[iRateType][iIncomType]['CreditDuration_2'];
					else
						iRate = hRate[iRateType][iIncomType]['CreditDuration_3'];
					break;
				case 1: //RUR
					if ( iTerm <= 10 )
						iRate = hRate[iRateType][iIncomType]['CreditDuration_1'];
					else
						iRate = hRate[iRateType][iIncomType]['CreditDuration_2'];
					break;
			}
			
/* 			if ( iTerm <= 10 ){
				iRate = hRate[iRateType][iIncomType]['CreditDuration_1'];
			}
			else {
				iRate = hRate[iRateType][iIncomType]['CreditDuration_3'];
			}
 */		} 
		else {
			oForm.elements['CreditTerm'].value = 0;
			document.getElementById('CreditTermError').innerHTML = 'неправильный срок кредита'
			document.getElementById('Rate').innerHTML = '';
			document.getElementById('RateSecond').innerHTML = '';
			return;
		}
		
		iRate=parseFloat(iRate);
		iRate2=iRate;
		
		if(iProgram > 1){
			
			iRate2+=(iProgram == 2) ? 1 : 2;
			//alert(iRate + ' + ' + ((iProgram == 2) ? 1 : 2) )
			//iRate+=(iProgram == 2) ? 1 : 2;
		}
		
		
		if(iRate2){
			document.getElementById('Rate').innerHTML = iRate2;
			document.getElementById('RateSecond').innerHTML = iRate;
		}
		else{
			document.getElementById('Rate').innerHTML = iRate;
			document.getElementById('RateSecond').innerHTML = '';
		}
		
		ClearFields();
	}
	else{
		document.getElementById('Rate').innerHTML = '';
		document.getElementById('RateSecond').innerHTML = '';
	}
}

function SwitchTo (oInput) {
	//for ( i in DependedInputs ){
	for(var i=0; i<DependedInputs.length; i++){
		document.getElementById(DependedInputs[i]).className = 'disabled';
		//document.getElementById(DependedInputs[i]).value = '';
		CarTR = getAncestor('tr', document.getElementById(DependedInputs[i]));
		CarTR.className = '';
		var CarTrButton = CarTR.getElementsByTagName('button');
		CarTrButton[0].style.display = 'none';
	}
	oInput.className = '';
	CarTR = getAncestor('tr', oInput);
	CarTR.className = 'selected';
	var CarTrButton = CarTR.getElementsByTagName('button');
	CarTrButton[0].style.display = 'block';
	sSummEnter = oInput.id;
}

function GetProperLimit(iRateType)
{
	document.getElementById('YearRange').innerHTML=(iRateType) ? ' (от&nbsp;1&nbsp;года до&nbsp;15 лет)' : ' (от&nbsp;1&nbsp;года до&nbsp;20 лет)';
}

function ClearFields(){
	var oForm=document.forms[sFormName];
	
	for(var i=0; i<DependedInputs.length; i++){
		if(sSummEnter != DependedInputs[i])
			oForm[DependedInputs[i]].value='';
	}
	
	document.getElementById("PaymentSecond").innerHTML="";
	document.getElementById('FirstPayment').value='';
	
}

function CalcAll(oBtn) {
	
	var oForm=document.forms[sFormName];
	iTerm=parseInt(oForm.elements['CreditTerm'].value);
	if(!iTerm || iTerm=='NaN'){
		document.getElementById('CreditTermError').innerHTML = 'введите срок кредита';
		ClearFields();
		return;
	}

	// итак мы сидим в sSummEnter
	
	SpecialProgram();
	
	switch (sSummEnter) {
		case 'Income' :
			iIncom = document.getElementById('Income').value;
			
			if(IsModifiedFirstPayment){
				iFirstPayment = document.getElementById('FirstPayment').value;
				//1. M_PMT=INCOME* PMT_INC_%
				iMonthPayment = Math.round(iIncom * iMonthPaymentInPercentOfIncom / 100 * 100) / 100;
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				//2. LOAN=M_PMT*((1+RateInMonth)^TERM-1)/((1+RateInMonth)^TERM)*RateInMonth);
				iCreditSumm = Math.round(iMonthPayment * (Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1) / (Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * iRate2 / 100 / 12) *100) / 100;
				//D_PMT_%= D_PMT /(LOAN + D_PMT)
				iFirstPaymentPercent = Math.round( iFirstPayment / (iCreditSumm/1 + iFirstPayment/1) * 100 );
				iFlatCost = iCreditSumm/1 + iFirstPayment/1
			} else {
				//1. M_PMT=INCOME* PMT_INC_%
				//iMonthPayment = Math.round(iIncom * iMonthPaymentInPercentOfIncom / 100 * 100) / 100;
				
				iMonthPayment = Math.round(iIncom * iMonthPaymentInPercentOfIncom / 100 * 100) / 100;
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				
				//2. LOAN=M_PMT*((1+RateInMonth)^TERM-1)/((1+RateInMonth)^TERM)*RateInMonth);
				iCreditSumm = Math.round(iMonthPayment * (Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1) / (Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * iRate2 / 100 / 12) *100) / 100;
				//3. COST= LOAN/(1-D_PMT_%)
				iFlatCost = Math.round(iCreditSumm / ( 1 - iFirstPaymentPercent / 100 ) *100)/100;
				//4.  D_PMT= COST-LOAN
				iFirstPayment = Math.round( (iFlatCost - iCreditSumm) * 100)/100;
			}
			
			PutValuesIntoFields()
		break;

		case 'MonthPayment' :
			iMonthPayment = document.getElementById('MonthPayment').value;
			
			if(iProgram == 1){
				iMonthPayment2="";
			}
			else{
				iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
				iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
			}
			
			if(IsModifiedFirstPayment){
				iFirstPayment = document.getElementById('FirstPayment').value;
				// 1. LOAN=M_PMT*((1+RateInMonth)^TERM-1)/((1+RateInMonth)^TERM*RateInMonth)
				iCreditSumm = Math.round( (iMonthPayment * ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1)/( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * iRate2 / 100 / 12)) * 100) / 100;
				iFirstPaymentPercent = Math.round( iFirstPayment / (iCreditSumm/1 + iFirstPayment/1) * 100 );
				// 2. COST= LOAN/(1-D_PMT_%)
				iFlatCost = iCreditSumm/1 + iFirstPayment/1;
				// 4. INCOME=M_PMT/ PMT_INC_%
				iIncom = Math.round( iMonthPayment / iMonthPaymentInPercentOfIncom * 100 * 100 ) /100;
				
			} else {
				// 1. LOAN=M_PMT*((1+RateInMonth)^TERM-1)/((1+RateInMonth)^TERM*RateInMonth)
				iCreditSumm = Math.round( (iMonthPayment * ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1)/( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * iRate2 / 100 / 12)) * 100) / 100;
				// 2. COST= LOAN/(1-D_PMT_%)
				iFlatCost = Math.round(iCreditSumm / ( 1 - iFirstPaymentPercent / 100 ) *100)/100;
				/* 3. D_PMT= COST-LOAN */ 
				iFirstPayment = Math.round( (iFlatCost - iCreditSumm) * 100)/100;
				// 4. INCOME=M_PMT/ PMT_INC_%
				iIncom = Math.round( iMonthPayment / iMonthPaymentInPercentOfIncom * 100 * 100 ) /100;
			}
			PutValuesIntoFields()
		break;

		
		case 'CreditSumm' :
			iCreditSumm = document.getElementById('CreditSumm').value;
			if(IsModifiedFirstPayment){
				iFirstPayment = document.getElementById('FirstPayment').value;
				iFirstPaymentPercent = Math.round( iFirstPayment / (iCreditSumm/1 + iFirstPayment/1) * 100 );
				/*1.	COST= LOAN/(1-D_PMT_%)*/
				iFlatCost = iCreditSumm/1 + iFirstPayment/1;
				/*3.	M_PMT=LOAN*(1+RateInMonth)^TERM*RateInMonth/((1+RateInMonth)^TERM-1)*/
				iMonthPayment = Math.round( (iCreditSumm * Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * (iRate2 / 100 / 12) / ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1 ) ) * 100 ) /100;
				
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				
				/*4.	INCOME=M_PMT/ PMT_INC_%*/
				iIncom = Math.round( iMonthPayment / (iMonthPaymentInPercentOfIncom / 100) * 100 ) /100;
			} else {
				/*1.	COST= LOAN/(1-D_PMT_%)*/
				iFlatCost = Math.round(iCreditSumm / ( 1 - iFirstPaymentPercent / 100 ) *100)/100;
				/*2.	 D_PMT= COST-LOAN*/
				iFirstPayment = Math.round( (iFlatCost - iCreditSumm) * 100)/100;
				/*3.	M_PMT=LOAN*(1+RateInMonth)^TERM*RateInMonth/((1+RateInMonth)^TERM-1)*/
				iMonthPayment = Math.round( (iCreditSumm * Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * (iRate2 / 100 / 12) / ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1 ) ) * 100 ) /100;
				
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				
				/*4.	INCOME=M_PMT/ PMT_INC_%*/
				iIncom = Math.round( iMonthPayment / (iMonthPaymentInPercentOfIncom / 100) * 100 ) /100;
			}
			PutValuesIntoFields()

		break;
		
		case 'FlatCost' :
			iFlatCost = document.getElementById('FlatCost').value;
			if(IsModifiedFirstPayment){
				iFirstPayment = document.getElementById('FirstPayment').value;
				/*D_PMT_%=D_PMT/COST*/
				iFirstPaymentPercent = Math.round( iFirstPayment / (iFlatCost/1) * 100 );
				/*LOAN=COST - D_PMT*/
				iCreditSumm = Math.round( (iFlatCost - iFirstPayment) * 100) / 100;
				/*M_PMT=LOAN*(1+RateInMonth)^TERM*12*RateInMonth/((1+RateInMonth)^TERM-1)*/
				iMonthPayment = Math.round( (iCreditSumm * Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * (iRate2 / 100 / 12) / ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1 ) ) * 100 ) /100;
				
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * 1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths);
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				
				/*INCOME=M_PMT/ PMT_INC_%*/
				iIncom = Math.round( iMonthPayment / (iMonthPaymentInPercentOfIncom / 100) * 100 ) /100;
			} else {
				/*1.	D_PMT= COST * D_PMT_%*/
				iFirstPayment = Math.round( (iFlatCost * (iFirstPaymentPercent / 100) ) * 100)/100;
				/*2.	LOAN=COST - D_PMT*/
				iCreditSumm = Math.round( (iFlatCost - iFirstPayment) * 100) / 100;
				/*3.	M_PMT=LOAN*(1+RateInMonth)^TERM*12*RateInMonth/((1+RateInMonth)^TERM-1)*/
				iMonthPayment = Math.round( (iCreditSumm * Math.pow((1 + iRate2 / 100 / 12),iTerm*12) * (iRate2 / 100 / 12) / ( Math.pow((1 + iRate2 / 100 / 12),iTerm*12) - 1 ) ) * 100 ) /100;
				
				if(iProgram == 1){
					iMonthPayment2="";
				}
				else{
					iMonthPayment2=iMonthPayment/(iRate2/1200) * (1-1/Math.pow(1+iRate2/1200, iTerm*12 - iUseMonths));
					iMonthPayment2=iMonthPayment2/(1-1/Math.pow(1+iRate/1200, iTerm*12-iUseMonths))*(iRate/1200);
				}
				/*4.	INCOME=M_PMT/ PMT_INC_%*/
				iIncom = Math.round( iMonthPayment / (iMonthPaymentInPercentOfIncom / 100) * 100 ) /100;
			}
			PutValuesIntoFields()

		break;
		
	}
}

function PutValuesIntoFields (oBtn) {
	document.getElementById('Income').value = Math.round(iIncom);
	document.getElementById('MonthPayment').value = Math.round(iMonthPayment);
	document.getElementById("PaymentSecond").innerHTML=(iProgram > 1) ? Math.round(iMonthPayment2*100)/100 : '';
	document.getElementById('CreditSumm').value = Math.round(iCreditSumm);
	
	var minTextSum=(iRateType)?'500 тыс. рублей':'20 тыс. долл.' ;
	var maxTextSum=(iRateType)?'10 000 тыс. рублей':'500 тыс. долл.';
	
	if (iCreditSumm < iCreditSummMin[iRateType]/1){
		switch (sSummEnter) {
			case 'Income' :
				document.getElementById('CreditSummError').innerHTML = 'Дохода недостаточно, попробуйте увеличить размер дохода или срок кредита';
			break;
			case 'MonthPayment' :
				document.getElementById('CreditSummError').innerHTML = 'Ежемесячного платежа недостаточно, попробуйте увеличить размер платежа или срок кредита';
			break;
			case 'CreditSumm' :
				document.getElementById('CreditSummError').innerHTML = 'Сумма кредита должна быть больше';
			break;
			case 'FlatCost' :
				document.getElementById('CreditSummError').innerHTML = 'Сумма кредита должна быть больше ' + minTextSum + ', поэтому надо либо увеличить стоимость квартиры, либо уменьшить размер первоначального платежа';
			break;
		}
	} else {
		if (iCreditSumm > iCreditSummMax[iRateType]/1){
			switch (sSummEnter) {
				case 'Income' :
					document.getElementById('CreditSummError').innerHTML = 'Вашего дохода достаточно для получения максимальной суммы кредита, вы можете позволить себе взять кредит на меньший срок или увеличить первоначальный плетеж';
				break;
				case 'MonthPayment' :
					document.getElementById('CreditSummError').innerHTML = 'Указанного вами ежемесячного платежа достаточно для получения максимальной суммы кредита, вы можете позволить себе взять кредит на меньший срок';
				break;
				case 'CreditSumm' :
					document.getElementById('CreditSummError').innerHTML = 'Согласно условиям Банк не выдает кредиты в суммах свыше ' + maxTextSum;
				break;
				case 'FlatCost' :
					document.getElementById('CreditSummError').innerHTML = 'Размер кредита не может быть выше ' + maxTextSum + ', поэтому надо уменьшить стоимость квартиры, либо увеличить размер первоначального платежа';
				break;
			}
		} else {document.getElementById('CreditSummError').innerHTML = '&nbsp;<br/>'}
	}

	document.getElementById('FirstPayment').value = Math.round(iFirstPayment);
	document.getElementById('FirstPaymentPercent').innerHTML = Math.round(iFirstPaymentPercent);
	
	if (iProgram == 1 && iFirstPaymentPercent < 20){
		document.getElementById('FirstPaymentError').innerHTML = 'Первоначальный платеж по кредиту должен составлять не менее 20%.';
	} else {
		document.getElementById('FirstPaymentError').innerHTML = '&nbsp;<br/>'
	}
	
	document.getElementById('FlatCost').value = Math.round(iFlatCost);
}
