
function calculate()
{
	var cost = {
		'typeLicense' : {
			'local' : {
				'month'   :   5000,
				'quarter' :  13000,
				'year'    :  36000
			},
			'internet' : {
				'month'   :   3000,
				'quarter' :   8000,
				'year'    :  24000
			},
			'multi1' : {
				'month'   :   6000,
				'quarter' :  15000,
				'year'    :  42000
			},
			'multi2' : {
				'month'   :   7500,
				'quarter' :  19500,
				'year'    :  54000
			},
			'multi5' : {
				'month'   :   9500,
				'quarter' :  24500,
				'year'    :  70000
			},
			'multi10' : {
				'month'   :  13500,
				'quarter' :  33000,
				'year'    : 120000
			},
			'multi' : {
				'month'   :  25000,
				'quarter' :  60000,
				'year'    : 220000
			}
		},
		'methodUpdating' : {
			'internet'    :     0,
			'courier'     :   300,
			'specialist'  :  1500
		}
	};
	var sum = 0;
	var form = document.forms.calc;
	var includes = [];
	var error = false;
	
	var typeLicense = getItemChecked(form.typeLicense).value;
	var countLicenses = form.countLicenses.value;
	var periodPayment = getItemChecked(form.periodPayment).value;
	var costItems = cost.typeLicense[typeLicense];
	var discount = 0;
	if (typeLicense == 'local' || typeLicense == 'internet') {
		switch (true) {
			case !countLicenses || countLicenses < 5:
				discount = 0;
				break;
			case countLicenses >= 5 && countLicenses < 10:
				discount = 5;
				break;
			case countLicenses >= 10 && countLicenses < 15:
				discount = 10;
				break;
			case countLicenses >= 15 && countLicenses < 20:
				discount = 15;
				break;
			case countLicenses >=20:
				discount = 20;
				break;
			default:
				break;
		}
	} else {
		countLicenses = 1;
	}
	sum = countLicenses * costItems[periodPayment] * (1 - discount / 100);
	
	var span = form.countLicenses.parentNode.getElementsByTagName('span')[0];
	if (countLicenses != parseInt(countLicenses)) {
		span.innerHTML = 'Некорректное значение!';
		span.className = 'error';
		error = true;
	} else if (discount == 0) {
		span.innerHTML = '';
		span.className = '';
	} else {
		span.innerHTML = 'Скидка ' + discount + '%';
		span.className = 'discount';
	}
	var spans = form.periodPayment[0].parentNode.parentNode.getElementsByTagName('span');
	spans[0].innerHTML = 'Месяц &#151; ' + costItems.month + ' руб.';
	spans[1].innerHTML = 'Квартал &#151; ' + costItems.quarter + ' руб.';
	spans[2].innerHTML = 'Год &#151; ' + costItems.year + ' руб.';
	
	var include = countLicenses;
	if (typeLicense != 'local' && typeLicense != 'internet') {
		switch (typeLicense) {
			case 'multi1':
				include = 'Сетевая лицензия на 1 пользователя';
				break;
			case 'multi2':
				include = 'Сетевая лицензия на 2-4 пользователя';
				break;
			case 'multi5':
				include = 'Сетевая лицензия на 5 пользователей';
				break;
			case 'multi10':
				include = 'Сетевая лицензия на 10-15 пользователей';
				break;
			case 'multi':
				include = 'Сетевая многопользовательская лицензия';
				break;
			default:
				include = 'Сетевая лицензия';
		}
	} else if (countLicenses == 1) {
		include = typeLicense == 'local' ? 'Локальная лицензия' : 'Интернет-лицензия';
	} else if (countLicenses % 10 == 0) {
		include += (typeLicense == 'local' ? ' локальных ' : ' интернет-') + 'лицензий';
	} else if (countLicenses % 10 == 1 && countLicenses % 100 != 11) {
		include += (typeLicense == 'local' ? ' локальная ' : ' интернет-') + 'лицензия';
	} else if (countLicenses % 100 < 5 || countLicenses % 10 < 5 && countLicenses % 100 > 20) {
		include += (typeLicense == 'local' ? ' локальных ' : ' интернет-') + 'лицензии';
	} else {
		include += (typeLicense == 'local' ? ' локальных ' : ' интернет-') + 'лицензий';
	}
	var countMonths = null;
	include += ' сроком 1';
	if (periodPayment == 'month') {
		include += ' месяц';
		countMonths = 1;
	} else if (periodPayment == 'quarter') {
		include += ' квартал';
		countMonths = 3;
	} else {
		include += ' год';
		countMonths = 12;
	}
	include += ' &#151; ' + sum + '&#160;руб.';
	if (discount > 0) {
		include += ' (с учетом скидки)';
	}
	includes[includes.length] = include;
	
	var methodUpdating = getItemChecked(form.methodUpdating).value;
	if (methodUpdating == 'specialist') {
		include = 4 * countMonths;
		if (countMonths == 1) {
			include += ' обновления';
		} else {
			include += ' обновлений';
		}
		include += ' тех. специалистом LEXPRO &#151; бесплатно';
		includes[includes.length] = include;
		
		var methodAddUpdating = getItemChecked(form.methodAddUpdating).value;
		var countAddUpdatings = form.countAddUpdatings.value;
		
		span = form.countAddUpdatings.parentNode.getElementsByTagName('span')[0];
		if (countAddUpdatings != parseInt(countAddUpdatings)) {
			span.innerHTML = 'Некорректное значение!';
			span.className = 'error';
			error = true;
		} else {
			span.innerHTML = '';
			span.className = '';
		}
		
		if (parseInt(countAddUpdatings)) {
			var itemCost = null;
			countAddUpdatings *= countMonths;
			itemCost = cost.methodUpdating[methodAddUpdating] * countAddUpdatings;
			sum += itemCost;
			
			include = '';
			if (methodAddUpdating == 'courier') {
				include = countAddUpdatings;
				if (countAddUpdatings == 1) {
					include = 'Доставка доп. обновления';
				} else if (countAddUpdatings % 10 == 1 && countAddUpdatings % 100 != 11) {
					include += ' доставка доп. обновлений';
				} else if (countAddUpdatings % 10 == 0 || countAddUpdatings % 10 > 4 
					|| countAddUpdatings % 100 > 9 && countAddUpdatings % 100 < 21) {
					include += ' доставок доп. обновлений';
				} else {
					include += ' доставки доп. обновлений';
				}
				include += ' курьером &#151; ' + itemCost + '&#160;руб.';
			} else {
				include = countAddUpdatings;
				if (countAddUpdatings == 1) {
					include = 'Доп. обновление';
				} else if (countAddUpdatings % 10 == 1 && countAddUpdatings % 100 != 11) {
					include += ' доп. обновление';
				} else if (countAddUpdatings % 10 == 0 || countAddUpdatings % 10 > 4 
					|| countAddUpdatings % 100 > 9 && countAddUpdatings % 100 < 21) {
					include += ' доп. обновлений';
				} else {
					include += ' доп. обновления';
				}
				include += ' тех. специалистом LEXPRO &#151; ' + itemCost + '&#160;руб.';
			}
			includes[includes.length] = include;
		}
	} else if (methodUpdating == 'internet') {
		includes[includes.length] = 'Автоматическое обновление через интернет';
	}
	
	if (error) {
		form.total.value = '';
		document.getElementById('includes').innerHTML = '';
		form.btnOrder.disabled = true;
	} else {
		form.total.value = sum + ' руб.';
		document.getElementById('includes').innerHTML = includes.join('<br />');
		form.btnOrder.disabled = false;
	}
}

function order()
{
	var form = document.forms.calc;
	var includes = document.getElementById('includes');
	form.description.value = includes.innerHTML;
	form.submit();
}

function changeTypeLicense()
{
	var form = document.forms.calc;
	var typeLicense = getItemChecked(form.typeLicense).value;
	var items = form.methodUpdating;
	for (var i = 0; i < items.length; i++) {
		if (typeLicense == 'internet') {
			if (items[i].value == 'internet') {
				items[i].checked = true;
			} else {
				items[i].parentNode.style.display = 'none';
			}
		} else {
			items[i].parentNode.style.display = '';
		}
	}
	
	items = form.periodPayment;
	for (var i = 0; i < items.length; i++) {
		items[i].parentNode.style.display = '';
	}
	
	if (typeLicense != 'local' && typeLicense != 'internet') {
		document.getElementById('calcItemCountLicenses').style.display = 'none';
	} else {
		document.getElementById('calcItemCountLicenses').style.display = 'block';
	}
	changeMethodUpdating();
}

function changeMethodUpdating()
{
	var form = document.forms.calc;
	var methodUpdating = getItemChecked(form.methodUpdating).value;
	if (methodUpdating == 'internet') {
		document.getElementById('calcItemAddUpdatings').style.display = 'none';
	} else {
		document.getElementById('calcItemAddUpdatings').style.display = 'block';
	}
	calculate();
}

function getItemChecked(items)
{
	for (var i = 0; i < items.length; i++) {
		if (items[i].checked) {
			return items[i];
		}
	}
	return null;
}
