(function($){
	var courtJournals = {
			
			DOM: {},
			//настройки слайдера
			cycle: {
				fx: 'carousel',
				timeout: 3500,
				log: false,
				overlayTemplate: '{{desc}}'
			},
			
			
			/**
			 * Объявляем внутренние переменные и обработчики сообытий
			 */
			init: function() {
				//Запоминаем часто используемые DOM-элементы
				this.setDOM();
				//Активируем слайдер
				this.activeCycle();
				//Устанавливаем расположение журналов в зависимости от ширины блока
				this.setJournalsLeft();
				//Редактируем отступ для контейнера с журналами
				this.editJournalsMargin();
				//Объявляем обработчики сообытий
				this.bind();
			},
			
			
			/**
			 * Запоминаем часто используемые DOM-элементы
			 */
			setDOM: function() {
				//Блок с журналами
				this.DOM.$journals = $('#js-court_journals');
				//Слайдер
				this.DOM.$carousel = null;
				//Журналы
				this.DOM.$journal = this.DOM.$journals.find('.js-court_journals-img');
			},
			
			
			/**
			 * Объявляем обработчики сообытий
			 */
			bind: function() {
				//Обработчик изменения окна браузера
				this._bindWindowResize();
				//Обработчик событий блока с журналами
				this._bindBlock();
				//Обработчик клика по журналу
				this._bindJournalClick();
			},
			
			
			/**
			 * Обработчик изменения окна браузера
			 */
			_bindWindowResize: function() {
				var self = this;
				
				$(window).resize(function(){
					//Редактируем отступ для контейнера с журналами
					self.editJournalsMargin();
				});
			},
			
			
			/**
			 * Обработчик событий блока с журналами
			 */
			_bindBlock: function() {
				var self = this;
				
				//Курсор на блоке с журналами
				this.DOM.$journals.mousemove(function(){
					self.DOM.$journals.cycle('pause');
				});
				
				//Курсор покинул блок с журналами
				this.DOM.$journals.mouseleave(function(){
					self.DOM.$journals.cycle('resume');
				});
			},
			
			
			/**
			 * Обработчик клика по журналу
			 */
			_bindJournalClick: function() {
				var self = this;
				
				this.DOM.$journals.delegate('.js-court_journals-img', 'click', function(){
					var $this = $(this),
						pos = parseInt($this.data('pos'), 10),
						opts = self.DOM.$journals.data('cycle.opts'),
						isCurrent = (opts.currSlide == pos) ? true : false,
						where = '';
					
					if (isCurrent) {
						//Открываем сайт журнала в новом окне
						window.open($this.data('link'), '_blank');
						
					} else if (opts.currSlide > pos) {
						//Определяем к какому журнал переходить
						where = (opts.currSlide == opts.slideCount - 1 && pos == 0) ? 'next' : 'prev';
						
					} else if (opts.currSlide < pos) {
						//Определяем к какому журнал переходить
						where = (opts.currSlide == 0 && pos == opts.slideCount - 1) ? 'prev' : 'next' ;
					}
					
					self.DOM.$journals.cycle(where);
				});
			},
			
			
			/**
			 * Функция устанавливает расположение журналов внутри блока
			 */
			setJournalsLeft: function() {
				var opts = this.DOM.$journals.data('cycle.opts'),
					offset = 160,
					left = -(opts.slideCount * 2 * offset);
				
				this.DOM.$carousel.css({
					'left': left
				});
			},
			
			
			/**
			 * Функция редактирует отступ для контейнера с журналами в зависимости от ширины блока
			 */
			editJournalsMargin: function() {
				var journalWidth = 120,
					journalMargin = 4 * parseFloat(this.DOM.$journal.css('marginLeft').replace(/px/, ""));
				
				this.DOM.$carousel.css({
					'marginLeft': (this.DOM.$journals.width() - journalWidth - journalMargin) / 2 + 20
				});
			},
			
			
			/**
			 * Функция активирует слайдер
			 */
			activeCycle: function() {
				this.DOM.$journals
					.cycle(this.cycle)
					.removeClass('g-hidden');
				this.DOM.$carousel = this.DOM.$journals.children('.cycle-carousel-wrap');
			}
		}
	
	$(function(){
		//Инициализируем методы и переменные сервиса
		courtJournals.init();
	});
})($jqJournals);