/*
 * jQuery SliderCarousel module v1.0.0 - http://www.onlinetvcast.com/
 *
 *
 */

// FIXME: глобальный рефакторинг

 
 (function($) {
 	function Module_SliderCarousel(options) {
 		var defaults = {
        	_id: {
        		wrapper: 	'addithional_video_wrapper',
        		content: 	'addithional_videot_content'
        	},
        	_class: {
        		loading:	'loading'
        	}		        	        	
        };
        this.options = $.extend(defaults, options);
 		this.construct();
 	}
 	 	 	
 	Module_SliderCarousel.prototype = {
 		construct: function() {
 			// Slider Carousel
 			this.video_objects_slider = $('#video_objects_slider');
 			// Addithional video panel
 			this.wrapper = $('#' + this.options._id.wrapper);
			this.content = $('#' + this.options._id.content);
			this.loading = $('.' + this.options._class.loading, this.wrapper);
			
			// запоминаем начальный html (без карусели)
			var noChangedHtml = $j('#special_slider_carousel_wrapper').html();
			// активируем карусель
			this.activateJCarousel();
			var resizeTimer = null;
			var self = this;
			// при ресайзе окна, пересоздаем карусель
			$(window).bind('resize', function() {
				if (resizeTimer) clearTimeout(resizeTimer);
				resizeTimer = setTimeout(function() {
					// возвращаем начальный html (без карусели)
					// неплохо было бы использовать функцию деактивации карусели
					$j('#special_slider_carousel_wrapper').empty().html(noChangedHtml);
					// активируем карусель
					self.activateJCarousel();
				}, 100);
			});
 		},
		
		activateJCarousel: function() {
			var self = this;
			var $object_carousel = $j('#special_slider_carousel');
			// Изменяем ширину элементов jcarousel (для реализации, элемент на всю ширину)
			// Если задавать в css, работает не верно
			// Делаем это, до инициализации jcarousel, и работаем с li, а не с .jcarousel-item (иначе jcarousel неправильно определяет размеры контейнера)
			var width = Math.ceil($object_carousel.width()*0.87) + 32;
			/* 0.87 это $('.jcarousel-skin-special_slider_carousel .jcarousel-container-horizontal') width: 80%, но элементы еще не построены */
			/* 32 - Это погрешнсоть между width и $('.jcarousel-skin-special_slider_carousel .jcarousel-container-horizontal').width()(после формирования карусели) */
			$('li', $object_carousel).width(width);
			/* Для наезда текста на картинку, при маленьких разрешениях экрана */
			$('.carousel_video_object_wrapper').each(function(index, item){
				var $this = $(this);
				$this.find('.carousel_video_object_image').css('max-width', width - 250);
			});
			
			$object_carousel.jcarousel({
				initCallback: function(carousel) {
					// сохраняем ссылку на карусель
					self.carousel = carousel;
					$object_carousel.css({'visibility':'visible'});
					// Навигация	
					jQuery('#special_slider_carousel_prev').bind('click', function() {
						// Disable autoscrolling if the user clicks the prev or next button.
						carousel.startAuto(0);
						carousel.prev();
						return false;
					});					
					jQuery('#special_slider_carousel_next').bind('click', function() {
						// Disable autoscrolling if the user clicks the prev or next button.
						carousel.startAuto(0);
						carousel.next();
						return false;
					});
				    // Pause autoscrolling if the user moves with the cursor over the clip.
				    carousel.clip.hover(function() {
				        carousel.stopAuto();
				    }, function() {
				        carousel.startAuto();
				    });
				    
				    // Размеры должны $('.jcarousel-skin-special_slider_carousel .jcarousel-container-horizontal') и li совпадать до px
				    $('.jcarousel-skin-special_slider_carousel .jcarousel-container-horizontal').width(width)
				},	
				auto: 2,
				wrap: 'last',
				animation: 'slow',
				scroll: 1,
				buttonNextHTML: null,
				buttonPrevHTML: null
			});
								
			$j('.show_video_object_from_slider_carousel').bind('click', function() {
				var id = $j(this).attr('id').split('_');
			});
		},
		
		showAddithionalVideoObjectPanel: function(type, id, parametrs, callback) {
			var self = this;
			// Отключаем autoscroll для карусели, так она будет спрятана (будет jCarousel ошибка)
			self.disableCarouselStartAuto();
			var url = '/ajax/' + type + '/ajax-get-content-for-special-video-panel';
			var self = this;
			self.wrapper.slideDown();
						
			// Фокусируем страницу на обновляемой области
			var deltaY = self.wrapper.height()/2 - $(window).height()/2;
			if (deltaY > 0) {
	 			deltaY=0;
	 		}	 			 		
	 		// TODO: need elastic scrollTo
			window.scrollTo(0, self.wrapper.offset()['top']+deltaY);
			
			$.ajax({
				url : url,
				type : "POST",
				dataType : 'html',
				timeout : 30000,
				error : function() {
					ajaxError();
				},
				success : function(html) {
					self.content.html(html);
					self.loading.hide();
					self.content.slideDown();
					if (callback) {
						callback();
					}
				},				
				// Parametrs
				data : { 'id' : id, 'parametrs' : parametrs }
			});
		},
		
		hideSliderCarousel: function() {
			var self = this;
			self.video_objects_slider.hide();
			// Отключаем autoscroll для карусели, так она будет спрятана при показе видео (будет jCarousel ошибка)
			self.disableCarouselStartAuto();
		},
		
		showSliderCarousel: function() {
			var self = this;
			self.video_objects_slider.show();
		},
				
		disableCarouselStartAuto: function() {
	 		var self = this;
	 		if (self.carousel) {
	 			self.carousel.startAuto(0);
	 		}
	 	},
	 		 	
	 	hideAddithionalVideoObjectPanel: function() {
	 		var self = this;
			self.wrapper.slideUp(700, function(){
				self.content.html('');
				self.loading.show();
			});
	 	}
 	}
 	 	 	 	
 	$.Module_SliderCarousel = function(options) {
 		return new Module_SliderCarousel(options);
 	};
 	
 	$.Module_SliderCarousel_prorotype = function() {
 		return Module_SliderCarousel.prototype;
 	};
 
 })(jQuery);
