﻿(function($) {
	$(document).ready(function() {
	
		var timeoutId;
		var timeoutId1;
	
		calculateModules = function(){
			window.clearTimeout(timeoutId);
			timeoutId = window.setTimeout(function(){ //  ставим счетчик для того чтобы выждать время пока человек вводит количество в какое либо поле
				var i = 1;
				var summ = new Array( 0, 0, 0, 0 ); // массив сумм - здесь хранятся просуммированные значения 4-х колонок стоимости
				var uslSpec = 0;
				var summStudy = 0;
				var endSumm = 0;
				var max1 = 0;
				var max2 = 0;
				$('#programModules').find('input:not([type="text"], :odd:last, :even:last)').each( // берем таблицу с id="programModules" и выбираем поочередно все input-ы
					function(){
						if ( $(this).attr('type') == 'checkbox' && $(this).attr('checked') == true  && i % 2 != 0 ) // так как у нас checkbox есть в первой и последней колонке - нам надо их различать - поэтому используем счетчик - i и остаток от деления на 2 - чтобы знать в какой колонке мы мейчас находимся
							summ[0] += parseInt( $(this).val() ); // считаем сумму первой колонки
						else if ( $(this).attr('type') == 'checkbox' && $(this).attr('checked') == true  && i % 2 == 0 ) 
							summ[3] += parseInt( $(this).val() ); // считаем сумму последней колонки
						else if ( $(this).attr('type') == 'hidden' && isNaN( $(this).prev('input').val() ) == false /*&& $(this).prev('input').val() != ""*/ && i % 2 == 0 ){ // здесь считаем сумму третьей колонки и ищем максимальное значение количества в третьей колонке
							if ( $(this).attr('name') != "pmod31" ){ // здесь ищем максимальное количество какого либо модуля для того чтобы потом записать его в Репликацию (условие нужно чтобы не учитывать количество в поле Репликация при поиске максиума)
								if (  parseInt($(this).prev().val()) > max1 ){
									max1 = parseInt( $(this).prev().val() );
								}
							}
							else if ( max1 > 0 ){
								$(this).prev().val(max1);
								$(this).parents('td').nextAll('td:last').find('input').attr('checked','checked').attr('disabled', 'disabled'); // выставляем цену модулю репликация и делаем невозможным нажать на checkbox
							}
							if ( $(this).prev('input').val() != "" )
								summ[1] += parseInt( $(this).val() ) * parseInt( $(this).prev('input').val() ); // здесь считаем сумму третьей колонки
						}
						else if ( $(this).attr('type') == 'hidden' && isNaN( $(this).prev('input').val() ) == false /*&& $(this).prev('input').val() != ""*/  && i % 2 != 0 ){ // здесь считаем сумму второй колонки и ищем максимальное значение количества во второй колонке
							if ( $(this).attr('name') != "xxmod31" ){ // здесь ищем максимальное количество какого либо модуля для того чтобы потом записать его в Репликацию (условие нужно чтобы не учитывать количество в поле Репликация при поиске максиума)
								if (  parseInt($(this).prev().val()) > max2 ){
									max2 = parseInt( $(this).prev().val() );
								}
							}
							else if ( max2 > 0 ){
								$(this).prev().val(max2);
								$(this).parents('td').nextAll('td:last').find('input').attr('checked','checked').attr('disabled', 'disabled'); // выставляем цену модулю репликация и делаем невозможным нажать на checkbox
							}
							if ( $(this).prev('input').val() != "" )
								summ[2] += parseInt( $(this).val() ) * parseInt( $(this).prev('input').val() ); // здесь считаем сумму второй колонки
						}
						i++;
					}
				);
				summ[3] += 300; //прибавляем Общий вводный курс
				if ( $('input[name="Zmod33"]').attr('checked') == true )
					summ[3] += 150; // прибавляем Технические аспекты эксплуатации системы
					
				$('#mlicensum').text('$ ' + summ[0]); // выводим значения в соответствующие поля
				$('#licensum').text('$ ' + summ[1]); // выводим значения в соответствующие поля
				$('#workplacesum').text('$ ' + summ[2]); // выводим значения в соответствующие поля
				$('#learnsum1').text('$ ' + summ[3]); // выводим значения в соответствующие поля
				
				$('#learnsum2').text('$ ' + summ[3]); // выводим значения в соответствующие поля
				sumStudy = summ[0] + summ[1] + summ[2];  // складываем суммы первых трех столбцов
				$('#techsupport').text('$ ' + ( sumStudy * 0.25 )); // расчет технической поддержки
				$('#alllicense').text('$ ' + sumStudy); // записываем значение в соответствующее поле
				if ( $('#spsum1').text() != "" )
					uslSpec = parseInt( $('#spsum1').text().substr(1, $('#spsum1').text().length - 1) ); // если есть услуги специалистов то выдергиваем сумму из поля ' Итого стоимость услуг специалистов '
				if ( isNaN(uslSpec) == true )
					uslSpec = 0;
				endSumm = sumStudy + uslSpec + summ[3]; // прибавляем к конечной сумме стоимость услуг специалистов и четвертый стобец
				$('#endsumm').text('$ ' + endSumm); // выводим конечную сумму
			}, 1000);
		}
		calculateSpec = function(){ // рассчитываем стоимость УСЛУГИ СПЕЦИАЛИСТОВ
			window.clearTimeout(timeoutId1); // задержка по времени для запуска функции
			timeoutId1 = window.setTimeout(function(){
				var summ = 0;
				var mainCost = 0;
				$('#uslugiSpec').find('input:hidden').each(
					function(){
						if ( isNaN( $(this).prev('input').val() ) == false && $(this).prev('input').val() != "" ){
							summ += parseInt( $(this).val() ) * parseInt( $(this).prev('input').val() ); // считаем сумму всех всех консультаций
						}
					}
				);
				$('#spsum1').text('$ ' + summ);
				$('#spsum2').text('$ ' + summ);
				
				if ( $('#mlicensum').text() != "" )
					mainCost += parseInt( $('#mlicensum').text().substr(1, $('#mlicensum').text().length - 1) ); // прибавляем к сумме значение из поля с id="mlicensum"
				if ( $('#licensum').text() != "" )
					mainCost += parseInt( $('#licensum').text().substr(1, $('#licensum').text().length - 1) ); // прибавляем к сумме значение из поля с id="licensum"
				if ( $('#workplacesum').text() != "" )
					mainCost += parseInt( $('#workplacesum').text().substr(1, $('#workplacesum').text().length - 1) ); // прибавляем к сумме значение из поля с id="workplacesum"
				if ( $('#learnsum1').text() != "" )
					mainCost += parseInt( $('#learnsum1').text().substr(1, $('#learnsum1').text().length - 1) ); // прибавляем к сумме значение из поля с id="learnsum1"
				mainCost += summ;
				
				$('#endsumm').text('$ ' + mainCost); // Выводим общую сумму в поле с id="endsumm"
			}, 1000);			
		}

		$('#programModules input[type="checkbox"]').click(function(){ //  в этой функции пересчитываем значения если нажата или поставлена галочка в СПИСОК ПРОГРАММНЫХ МОДУЛЕЙ
			var counter = 0;
			var obj = $(this).parents('td').next();
			if ( $(this).attr('checked') == true ){
				if ( obj.length ){
					obj.nextAll('td:last').find('input').attr('checked','checked').attr('disabled', 'disabled'); // здесь выполняем условие что если поставлена галочка в первом столбце то в последнем делаем checkbox неактивным
				}
			}
			else{
				if ( obj.length ){
					obj.parents('tr').find('input[type="text"]').each(function(){
						if ( parseInt( $(this).val() ) > 0 ){
							counter++;
						}
					});
					if ( counter == 0 )
						obj.nextAll('td:last').find('input').removeAttr('checked').removeAttr('disabled'); // здесь выполняем условие что если отжата галочка в первом столбце то в последнем делаем checkbox активным
				}
			}
			calculateModules(); // считаем
		});
		$('#programModules input[type="text"]').keyup(function(){ //  в этой функции пересчитываем значения если нажата или поставлена галочка в СПИСОК ПРОГРАММНЫХ МОДУЛЕЙ
			var obj = $(this).parents('td');
			var counter = 0;
			if ( parseInt( $(this).val() ) > 0 ){
				obj.nextAll('td:last').find('input').attr('checked','checked').attr('disabled', 'disabled'); // здесь выполняем условие что если введено значение количества то в последнем столбце выставляем галочку и делаем ее неактивной чтобы несняли
			}
			else{  // здесь проверяем есть ли в строке выставленное количество какой либо поля и если нет и не отмечена галочка ни одна то включаем последнюю галочку
				obj.parents('tr').find('input[type="text"]').each(function(){
					if ( parseInt( $(this).val() ) > 0 ){
						counter++;
					}
				});
				if ( counter == 0 ){
					obj.parents('tr').find('input[type="checkbox"]').each(function(){
						if ( $(this).attr('checked') == true && $(this).attr('disabled') == false ){
							counter++;
						}
					});
				}
				if ( counter == 0 )
					obj.nextAll('td:last').find('input').removeAttr('checked').removeAttr('disabled');
			}
			calculateModules(); // считаем
		});
		
		$('#uslugiSpec input[type="text"]').keyup(function(){
			calculateSpec(); // считаем стоимость услуг специалистов, если изменилось количество часов
		});
		
	});
})(jQuery);
