var certificatesCardModule = function() {
	var classes = {
		popup: 'popup-portfolio',
		controlPrev: 'js-portfolio-prev',
		controlNext: 'js-portfolio-next',
		wrapperWontent: 'wrapper-content',
		fixBottom : 'fix-bottom',
		content: 'portfolio-large__content',
		preview: 'js-portfolio-preview'
	};

	var _setCertificatesId = function() {
		_certificatesIds = {
			all: null,
			current: null,
			prev: null,
			next: null
		}; // сбрасываем старые значения

		var $content = jQuery('.' + classes.popup).find('.popup_content');
		var dataCertificatesAllIds = $content.data('certificatesAllIds');
		var dataCurrentId = $content.data('certificatesId');

		if (dataCertificatesAllIds) {
			dataCertificatesAllIds += '';
			_certificatesIds['all'] = dataCertificatesAllIds.split(',');
		}
		if (dataCurrentId) {
			_certificatesIds['current'] = dataCurrentId;
		}
		if (_certificatesIds['all']) {
			var certificatesCurrentKey = null;
			var certificatesCnt = 0;

			jQuery.each(_certificatesIds['all'], function(index, value) {
				if (value == _certificatesIds['current']) {
					certificatesCurrentKey = index;
				}
				certificatesCnt++;
			});

			if ((certificatesCurrentKey + 1) <= (certificatesCnt - 1)) {
				_certificatesIds['next'] = _certificatesIds['all'][certificatesCurrentKey + 1];
			} else {
				_certificatesIds['next'] = _certificatesIds['all'][0];
			}
			if ((certificatesCurrentKey - 1) >= 0) {
				_certificatesIds['prev'] = _certificatesIds['all'][certificatesCurrentKey - 1];
			} else {
				_certificatesIds['prev'] = _certificatesIds['all'][certificatesCnt - 1];
			}
		}
	};

	var _get = function(method, id) {
		if (!method || !id) {
			return false;
		}

		_openPopup();

		$.ajax({
			type: 'POST',
			url: method + id,
			dataType: 'html',
			success: function(data) {
				_openPopup(data);
			}
		});
	};

	var _getCertificates = function(certificatesId) {
		if (certificatesId == null || certificatesId == undefined || certificatesId == '') {
			return false;
		}

		_get('/api?method=getCertificates&cid=', certificatesId);
	};

	var _getFirstCertificates = function(uId) {
		if (uId == null || uId == undefined || uId == '') {
			return false;
		}

		_get('/api?method=getCertificates&uid=', uId);
		_openPopup();
	};

	/**
	 * Отрисовывает модальное окно с портфолио
	 * @param {string} content Содержимое модального окна (если не передать, то отобразится лоадер)
	 */
	var _openPopup = function(content) {
		if (content == null || content == undefined || content == '') {
			content = '<div class="portfolio-loader"><img src="themes/itbirja/images/ajax-loader.gif"></div>';
		}

		if ( jQuery('.' + classes.popup).length ) {
			jQuery('.' + classes.popup).find('.wrapper-content').html(content);
		} else {
			jQuery('body').append(
				'<div class="popup-portfolio portfolio_large" style="display: none">'
					+ '<div class="wrapper-content">'
						+ content
					+ '</div>'
				+ '</div>'
			);

			// Блокируем скролл всего документа
			$('body').addClass('compensate-for-scrollbar');

			// Показываем попап
			$('.' + classes.popup).fadeIn(200);
		}

		_eventOpen();
	}

	/**
	 * Закрытие модального окна
	 */
	var _closePopup = function() {
		// Отменяем блокировку скролла всего документа
		jQuery('body').removeClass('compensate-for-scrollbar');

		jQuery('.' + classes.popup).fadeOut(300);

		var delay = setInterval(function() {
			jQuery('.' + classes.popup).remove();
			clearInterval(delay);

			jQuery('.' + classes.preview).slick('unslick');
		}, 350);
	}

	/**
	 * Режим отображения
	 * Вешаем нужный нам класс на родителя
	 */
	var _mode = function() {
		var $popup = jQuery('.' + classes.popup);
		var popupMode = $popup.find('.popup_content').data('mode');
		if (popupMode) {
			$popup.addClass(popupMode);
		}
	};

	/**
	 * Cобытия после открытие окна
	 */
	var _eventOpen = function() {
		jQuery('.' + classes.popup).scrollTop(0);

		// Режим отображения
		_mode();

		// Устанавливаем список всех работ
		_setCertificatesId();

		// Отображаем элементы навигации
		if (_certificatesIds.prev) {
			jQuery('.' + classes.controlPrev).show();
		}
		if (_certificatesIds.next) {
			jQuery('.' + classes.controlNext).show();
		}

		// Инициализируем стилизованный селлектор
		jQuery('.chosenselect').chosen({
			width: '108px',
			disable_search: true
		});

		// min element for init slick
		var minPreviewItem = 6;
		var $previewItem = jQuery('.js-portfolio-preview .preview-wrapper');
		var indexActiveItem = 0;

		$previewItem.each(function(index) {
			if (jQuery(this).hasClass('active')) {
				indexActiveItem = index;
			}
		});

		if ($previewItem.length > minPreviewItem) {
			jQuery('.' + classes.preview).slick({
					lazyLoad: 'ondemand',
					speed: 150,
					infinite: true,
					dots: false,
					prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-angle-left"></i></button>',
					nextArrow: '<button type="button" class="slick-next"><i class="fa fa-angle-right"></i></button>',
					rows: 2,
					slidesPerRow: 3,
					initialSlide: indexActiveItem > 0 ? (Math.ceil((indexActiveItem + 1) / 6) - 1) : 0
			});
		} else {
			$previewItem.each(function() {
				var $el = jQuery(this).find('img');
				var src = $el.data('lazy');
				$el.attr('src', src);
			});
		}

	};

	/**
	 * Событие на клавишу ESC
	 */
	var _onEscHandler = function(e) {
		e = e || window.e;
		var keyCode = e.which || e.keyCode;

		if (keyCode === 27) {
			_closePopup();
		}
	};

	/**
	 * События на стрелки влево/вправо
	 */
	var _onArrowHandler = function(e) {
		e = e || window.e;
		var keyCode = e.which || e.keyCode;
		var $popup = jQuery('.' + classes.popup);
		var popupIsset = $popup.length;

		if (!popupIsset) {
			return;
		}

		// go to the right
		if (keyCode == 39 && _certificatesIds['next']) {
			_getCertificates(_certificatesIds['next']);
		}
		// go to the left
		if (keyCode == 37 && _certificatesIds['prev']) {
			_getCertificates(_certificatesIds['prev']);
		}
	}

	var _init = function() {
		var $body = jQuery('body');

		// Закрытие по оверлею
		var closeSelects = '.' + classes.popup
			+ ', .' + classes.wrapperWontent
			+ ', .' + classes.fixBottom;

		$body
			.off('click touchend', closeSelects)
			.on('click touchend', closeSelects, function(e) {
				if (e.target !== this) {
					return;
				}
				_closePopup();
			});

		// Закрытие по нажатию на ESC
		$body
			.off('keyup', _onEscHandler)
			.on('keyup', _onEscHandler);

		// Переключение между работ по стрелочкам с клавиатуры
		$body
			.off('keyup', _onArrowHandler)
			.on('keyup', _onArrowHandler);

		$body
			.on('click', '.portfolio-popup .js_package_card_vert__toggleInfo', function () {
				var parent = $(this).closest('.package_card_vert');
				parent.find('.package_card_vert_options').show();
			});

	}();

	return {
		getCertificates: function(certificatesId) {
			_getCertificates(certificatesId);
		},
		getFirstCertificates: function(uId) {
			_getFirstCertificates(uId);
		},
		close: function() {
			_closePopup();
		},
		next: function() {
			if (_certificatesIds['next']) {
				_getCertificates(_certificatesIds['next']);
			}
		},
		prev: function() {
			if (_certificatesIds['prev']) {
				_getCertificates(_certificatesIds['prev']);
			}
		}
	};
};

var certificatesCard = new certificatesCardModule();