/* Сохраняем версию библиотеке jQuery, подключаемую в рамках модуля, в специальную переменную */
var	$jqCourtStructure = jQuery.noConflict();

/* Предыдущую подключенную версию библиотеки сохраняем в переменную jQuery */
jQuery = $;

(function($) {
	$(function() {
		var jqXHR = null,
			isIE = !!$.browser.msie,
			timeAnimate = 200,
			is6aas = /^6aas\./.test(location.hostname);

		$('.js-structure-item').click(function() {
			if (jqXHR) {
				jqXHR.abort();
			}

			var csid = $(this).attr('rel');

			if (csid) {
				jqXHR = $.ajax({
					type: 'get',
					url: '/sites/all/modules/court/court_structure/ajax/ajax_get_descr.php',
					data: {
						csid: csid
					},
					dataType: 'json',
					success: function(data) {
						if (data) {
							// Частный случай для 6aas.arbitr.ru
							if (is6aas) {
								if ((csid >= 13) && (csid <= 15) && data.staff.head.list[0]) {
									location.href = '/' + data.staff.head.list[0].link;
									return;
								}
							}

							$('.js-structure, .js-structure-description').toggleClass('g-hidden');
							$('.js-structure-description-title').text(data.title);
							var structureDescLink = $('.js-structure-description-link'),
								structureDescText = $('.js-structure-description-text'),
								structureDescHead = $('.js-structure-description-list_head_title, .js-structure-description-list_head'),
								structureDescSubhead = $('.js-structure-description-list_subhead_title, .js-structure-description-list_subhead'),
								structureDescStaff = $('.js-structure-description-list_staff_title, .js-structure-description-list_staff');
							if (data.contact) {
								structureDescLink.attr('href', data.contact);
							}
							structureDescLink.toggleClass('g-hidden', !data.contact);
							if (data.descr) {
								structureDescText.html(data.descr);
							}
							structureDescText.toggleClass('g-hidden', !data.descr);
							if (data.staff) {
								structureDescHead.toggleClass('g-hidden', !data.staff.head);
								if (data.staff.head) {
									$('.js-structure-description-list_head_title').text(data.staff.head.title);
									if (data.staff.head.list) {
										var headList = $('.js-structure-description-list_head');
										headList.html('');
										for (index in data.staff.head.list) {
											headList.append('<li><a target="_blank" href="/' + data.staff.head.list[index].link + '">'
															+ data.staff.head.list[index].fio + '</a></li>');
										}
										if (data.staff.head.list === null || !data.staff.head.list.length) {
											structureDescHead.addClass('g-hidden');
										}
									} else {
										structureDescHead.addClass('g-hidden');
									}
								}
								structureDescSubhead.toggleClass('g-hidden', !data.staff.subhead);
								if (data.staff.subhead) {
									$('.js-structure-description-list_subhead_title').text(data.staff.subhead.title);
									if (data.staff.head.list) {
										var subheadList = $('.js-structure-description-list_subhead');
										subheadList.html('');
										for (index in data.staff.subhead.list) {
											subheadList.append('<li><a target="_blank" href="/' + data.staff.subhead.list[index].link + '">'
															+ data.staff.subhead.list[index].fio + '</a></li>');
										}
										if (data.staff.subhead.list === null || !data.staff.subhead.list.length) {
											structureDescSubhead.addClass('g-hidden');
										}
									} else {
										structureDescSubhead.addClass('g-hidden');
									}
								}
								structureDescStaff.toggleClass('g-hidden', !data.staff.staff);
								if (data.staff.staff) {
									$('.js-structure-description-list_staff_title').text(data.staff.staff.title);
									if (data.staff.staff.list) {
										var staffList = $('.js-structure-description-list_staff');
										staffList.html('');
										for (index in data.staff.staff.list) {
											staffList.append('<li><a target="_blank" href="/' + data.staff.staff.list[index].link + '">'
															+ data.staff.staff.list[index].fio + '</a></li>');
										}
										if (data.staff.staff.list === null || !data.staff.staff.list.length) {
											structureDescStaff.addClass('g-hidden');
										}
									} else {
										structureDescStaff.addClass('g-hidden');
									}
								}
								// Прокручиваем страницу в самый верх
								window.scroll(0, 0);
							}
						}
					},
					error: function(jqXHR) {}
				});
			}
			return false;
		});

		// Функция для подсвечивания цепочки блоков вплоть до корневого
		function findParentBlock(element, isHoveredBlock, isAdditionalLineLights) {
			var thisBlock = element;
			thisBlock.removeClass('b-structure-item--disabled')
				.addClass('b-structure-item--enabled');
			// Собираем цепочку блоков
			if (thisBlock[0].onclick().parentClass) {
				var parentData = thisBlock[0].onclick(),
					thisBlockRowIndex = thisBlock.closest('.js-structure-row')[0].onclick().index;
				thisBlockParent = parentData.parentClass;
				thisBlockParentX = parentData.parentX;
				thisBlockParentY = parentData.parentY;
				// Отмечаем связи до родительского блока
				var separatorsCounter = 0;
				for (var i = thisBlockRowIndex; i >= parentData.parentX; i--) {
					var thisSeparator = $('.js-structure-row', '.js-structure').eq(i)
						.children('.js-structure-separator').eq(thisBlockParentY),
						thisSeparatorContainer = thisSeparator.children('.js-structure-separator-line_container'),
						thisSeparatorLines = thisSeparatorContainer.children();
					// Сначала показываем все связи в блоке
					thisSeparatorLines.removeClass('b-structure-item--disabled')
						.addClass('b-structure-item--enabled');
					// Потом исключаем нижнюю или правую по индексу
					var excludedSeparatorClass = '.js-structure-separator-line--horizontal-right';
					if (!separatorsCounter && !isAdditionalLineLights) {
						excludedSeparatorClass = '.js-structure-separator-line--vertical-bottom';
					} else if (!separatorsCounter && isAdditionalLineLights) {
						excludedSeparatorClass = '';
					}
					$(excludedSeparatorClass, thisSeparatorContainer)
						.addClass('b-structure-item--disabled')
						.removeClass('b-structure-item--enabled');
					separatorsCounter++;
				}
				// Отключаем подсветку дополнительных связей в блоке
				if (!isHoveredBlock) {
					$('.js-structure-separator-line--additional', thisBlock)
						.toggleClass('b-structure-item--disabled', !isAdditionalLineLights)
						.toggleClass('b-structure-item--enabled', isAdditionalLineLights);
				} else {
					$('.js-structure-separator-line--additional', thisBlock)
						.removeClass('b-structure-item--disabled')
						.addClass('b-structure-item--enabled');
				}
				// Находим дополнительный родительский блок и подсвечиваем путь до его родителя
				if (thisBlock.hasClass('js-structure-item--secparent')) {
					findParentBlock($('.' + thisBlock[0].onclick().secParentClass), false, true);
				}
				// Находим родительский блок
				var parentBlock = $('.' + thisBlockParent, '.js-structure');
				findParentBlock(parentBlock, false);
			} else {
				if (isIE) {
					$('.b-structure-item--disabled').addClass('b-structure-item--fadeout');
					$('.b-structure-item--enabled').addClass('b-structure-item--fadeout');
				} else {
					$('.b-structure-item--disabled').stop(true).animate({ 'opacity': 0.3 }, timeAnimate);
					$('.b-structure-item--enabled').animate({ 'opacity': 1 }, timeAnimate);
				}
			}
		}

		// Обработчик наведения курсора мыши на блоки
		$('.js-structure-item').hover(function() {
			var thisBlock = $(this),
				thisBlockParent = '',
				csid = thisBlock.attr('rel');
			if (csid) {
				// Затеняем все блоки и связи
				$('.js-structure-item, .js-structure-separator-line')
					.addClass('b-structure-item--disabled')
					.removeClass('b-structure-item--enabled');
				// Проходим по цепочке блоков до родительского, подсвечивая их
				findParentBlock(thisBlock, true);
			}
		}, function() {
			var thisBlock = $(this),
				csid = thisBlock.attr('rel');
			if (csid) {
				$('.js-structure-item, .js-structure-separator-line')
					.removeClass('b-structure-item--disabled')
					.addClass('b-structure-item--enabled');
				if (isIE) {
					$('.b-structure-item--enabled').removeClass('b-structure-item--fadeout'); //css({ 'opacity': 1 });
				} else {
					$('div.b-structure-item--enabled').animate({ 'opacity': 0.6 }, timeAnimate);
					$('a.b-structure-item--enabled').animate({ 'opacity': 1 }, timeAnimate);
				}
			}
		});

		$('.js-structure-link--back').click(function() {
			$('.js-structure, .js-structure-description').toggleClass('g-hidden');
			return false;
		});


		// Рисуем дополнительные связи (равнозначные связи между блоками на одном уровне)
		$('.js-structure-item--secparent').each(function() {
			var $block = $(this),
				blockData = $block[0].onclick(),
				blockHeight = $block.height(),
				$blockRow = $block.closest('.js-structure-row'),
				blockRowPosition = $blockRow.position(),
				blockRowPositionTop = Math.round(blockRowPosition.top),
				$parentBlock = $('.' + blockData.secParentClass),
				parentBlockHeight = $parentBlock.height(),
				$parentBlockRow = $parentBlock.closest('.js-structure-row'),
				parentBlockRowPosition = $parentBlockRow.position(),
				parentBlockRowPositionTop = Math.round(parentBlockRowPosition.top),
				isParentUpper = (blockData.x > blockData.secParentX);
			// Определяем верстку вертикальной линии
			$line = $('<div class="b-structure-separator-line b-structure-separator-line--vertical js-structure-separator-line--additional"></div>');
			// Определяем координаты линии в зависимости от ее положения
			var lineTop = blockHeight;
			if (isParentUpper) {
				lineTop = parentBlockHeight;
			}
			$line.css('top', lineTop + 'px');
			if (isParentUpper) {
				$parentBlock.prepend($line);
			} else {
				$block.prepend($line);
			}
		});
	});
})($jqCourtStructure);
