/**
 * Сериализация объекта JSON
 * @copyright http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/
 */ 
var JSON = new Object();
// implement JSON.stringify serialization 
JSON.stringify = JSON.stringify || function (obj) {

	var t = typeof (obj);
	if (t != "object" || obj === null) {

		// simple data type
		if (t == "string") obj = '"'+obj+'"';
		return String(obj);

	}
	else {

		// recurse array or object
		var n, v, json = [], arr = (obj && obj.constructor == Array);

		for (n in obj) {
			v = obj[n]; t = typeof(v);

			if (t == "string") v = '"'+v+'"';
			else if (t == "object" && v !== null) v = JSON.stringify(v);

			json.push((arr ? "" : '"' + n + '":') + String(v));
		}

		return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
	}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
	if (str === "") 
		str = '""';
		
	eval('var p=' + str + ';');
	return p;
};




;(function($){
	$(function(){
		// Инициализация жанров
		var genres = JSON.parse(($.cookie('selectedGenres') || "{'film':true, 'serial':true, 'show':true}"));

                // Подсветка выбранных жанров
		$('.js-genre a').each(function(){
			var genre = $(this).find('span').attr('class').replace(/genre_/g, '');
			
			// Находим класс жанра, и производим соответствующие изменения в программе
			// последнее условие на всякий случай (перестраховка)
			if (genres[genre] && genres[genre] == true && !$(this).hasClass('check')) {
				$(this).toggleGenreCheck(genre);
			}
			
			$(this).click(function(e){
				e.preventDefault();
				$(this).toggleGenreCheck(genre);
				
				genres[genre] = $(this).hasClass('check');
				
				$.cookie('selectedGenres', JSON.stringify(genres));
			}).removeOutline();
		});
		
		
		
		
		/**
		 * Контроллер программ
		 */
		
		var programController = (function(){
			// Считываем базовые настройки контроллера
			var savedControllers = JSON.parse($.cookie('savedControllers') || "{}");
			//console.log($.cookie('savedControllers'));
			
			// Изучаем какой контроллер текущий
			// var programControllerOptions = (setup.controller.filter == 0 ? savedControllers[setup.controller.city] : null) || setup.controller;
			
			var programControllerOptions = setup.controller;
			
			// Генерируем список каналов, чтобы не загружать каждый канал дважды
			var channels = [];
			$.each(setup.controller.channels, function(i, val) {
				channels[i] = {
					'id' : val
//					'isLoaded' : (i >= (setup.controller.position || 1) - 1 && i < ((setup.controller.position || 1) + 4)) 
				}
				
				if (!channels[i].isLoaded) {
					var progName = $("<div/>").addClass('item');
					var programm = $("<dl/>");
					var anons = $("<li/>").addClass('list-item');
					
					if (i < (setup.controller.position || 1) - 1) {
						$('.list-channel-names .item').first().before(progName);
						$('.programm dl').first().before(programm);
						$('.anons-list .list-item').first().before(anons);
					}
					else {
						$('.list-channel-names .item').last().after(progName);
						$('.programm dl').last().after(programm);
						$('.anons-list .list-item').last().after(anons);
					}
				}
			});
			
			//console.log(channels);
			
			/**
			 * Взять прокручиваемый элемент
			 */
			function _getScroller() {
				return programContainer.find('.js-scrollable').add(programExtra.find('.js-scrollable'));
			}

			/**
			 * Взять нужную ТВ-программу по параметру
			 * @param {CSSSelector, Number} : либо отбирает по селектору, либо по порядковому номеру
			 */
			function _getProgramBox(par) {
				var programm = _getScroller().find('.programm');
				return (isNaN(par) ? programm.find(par) : programm.find('dl').eq(par));
			}
			
			/**
			 * Взять верхнюю часть ТВ-программы
			 * @param {Number} pos: порядковый номер
			 */
			function _getProgramBoxTop(pos) {
				return _getScroller().find('.list-channel-names').find('>.item').eq(pos);
			}
			
			/**
			 * Взять ананос
			 * @param {Number} pos: порядковый номер
			 */
			function _getAnonsBox(pos) {
				return $('.anons').find('.list-item').eq(pos);
			}
			
			/**
			 * Получить высоту видимых программ или высоту программ, которые будут видимы после сдвига
			 * @param {Number} shift: учитывать ли будущий сдвиг: -1 влево, +1 вправо
			 */
			function _getVisibleProgramHeight(shift) {
                                if (showType == 'timed') { return 180; }
				progs = []
				progs[3] = _getProgramBox('.before-last-visible')
			    if (shift==1){
			        progs[3] = progs[3].next()
			        }
			    if (shift==-1){
			        progs[3] = progs[3].prev()
			        }
				progs[2] = progs[3].prev()
				progs[1] = progs[2].prev()
				progs[0] = progs[1].prev()
				progs[4] = progs[3].next()
				height = Math.max(progs[0].height(),progs[1].height(),progs[2].height(),progs[3].height(),progs[4].height())
                return height;
			}

			/**
			 * Обновить уши скроллера
			 */
			function _updateEars() {
				// Скрываем уши, если скроллить некуду
				eval("_prevButton." + ((_prevNumber < 1) ? "hide()" : "show()"));
				eval("_nextButton." + ((_nextNumber < 1) ? "hide()" : "show()"));
				
				_prevButton.find('span').text(_prevNumber);
				_nextButton.find('span').text(_nextNumber);
			}
			
			// Инициализация базовых переменных 
			var programContainer = $('.js-channel-list');
			var programExtra = $('.js-channel-extra');
			
			// Базовая ширина канала (можно вычислять, но вряд ли нужно)
			var channelItemWidth = 180;
			var channelCSSWidth = 170;
			
			// Инициализация положения выбранного пользователем 
			// (нужно делать в самом начале, потому что может использоваться другими функциями далее)
			if (programControllerOptions['position']) {
				_getScroller().css('margin-left', - ((programControllerOptions['position'] - 1) * channelItemWidth) + "px")
			}
			else {
				programControllerOptions['position'] = 1;
			}

			function getBarPosition() {
				//return parseInt((- parseInt(_getScroller().css('margin-left')) || 0) / channelItemWidth);
				return programControllerOptions['position'];
			}
			
			/**
			 * Визуализировать загрузку программы
			 * @param {Number} position : Позиция в списке программ
			 */
			function _setProgramLoaded(position) {
				var ajaxLoader = function() { 
					return $('#ajaxLoader').clone().css('margin-top', '4px'); // Иначе это будет один и тот же элемент
				}; 
				
				_getProgramBoxTop(position).empty().append(ajaxLoader);
				_getProgramBox(position).css('opacity', '.5');
				_getAnonsBox(position).css('opacity', '.5');
			}
			
			/**
			 * Загрузить новые данные о программе
			 * @param {String} XMLdata : XML с данными о новой программе
			 * @param {Number} position : Позиция в списке программ
			 */
			function _setNewProgramData(XMLdata, position){
				//alert($(XMLdata).find('top').find('span span').text());
				// верхняя часть
				_getProgramBoxTop(position).empty().append(
					$('<a/>', {
						href: '/channel/show/'+ $(XMLdata).find('.id').html()+'/',
						html : $(XMLdata).find('.top').find('.cnt_ch_logo').html()
					})
				).append(
					$('<a/>', {
						href: '#',
						id : 'ch-id' + $(XMLdata).find('.id').html(),
						html : $(XMLdata).find('.top').find('.cnt_ch_name').html(),
						click : function(e){_channelClicked.call(this, e);}
					}).removeOutline()
                                    );
				
				
				// вот сюда нужно грузить программу
				_getProgramBox(position)
					.css('opacity', '1')
					.html( $(XMLdata).find('.list').html() ).find('dd').fader();
				
				// анонс
				_getAnonsBox(position)
					.css('opacity', '1')
					.html(  $(XMLdata).find('.anons').html()  );

			}
			
			// Кнопка движения влево, private
			var _prevButton = programContainer.find('.prev');
			// Всего программ слева, private
			var _prevNumber = parseInt((programControllerOptions['position'] - 1) || _prevButton.find('span').text());
			
			// Кнопка движения вправо, private
			var _nextButton = programContainer.find('.next');
			// Всего программ спроава, private
			var _nextNumber = parseInt((programControllerOptions['channels'].length - 4 - programControllerOptions['position']) ||_nextButton.find('span').text());
			
			
			//console.log(parseInt(programControllerOptions['scrollerPosition'] + 4));
			// Элементу перед последним из видимых мы задаём класс before-last-visible (последнему нельзя задавать, т.к его может и не быть)
			_getProgramBox(parseInt(getBarPosition() + 2))
				.addClass('before-last-visible')
				.next().css('width', parseInt(channelItemWidth + 6) + "px");
			
			
		
			$('.close').click(function(e){
				e.preventDefault();
				$(this).parent().hide();
			});
				
			/**
			 * Балун с доп.инфой о передаче
			 */
			var baloon = new jEmersion.baloon({
				'element': $('.js-popup').get(0), 
				'stick': {
					'to' : null,
					'at' : 'right',
					'mode' : 'normal'
				}
			});
			
			$('.js-popup').click(function(e){
				e.stopPropagation();
			});
			
			//console.log('before live');
			// Инициируем щёлк по программе
			$(".programm a").live('click', function(){
				//e.preventDefault();
				//e.stopPropagation();
				
				if ($(this).closest('dl').prev().andSelf().filter('.before-last-visible').size() > 0)
				{
					baloon.changeStickness('left');
					$('.js-popup').addClass('js-popup__toleft');
				}
				else
				{
					baloon.changeStickness('right');
					$('.js-popup').removeClass('js-popup__toleft');
				}
				
				baloon.stickTo( ($(this).width() > $(this).parent().width() ? $(this).parent().get(0) : this) );
				
				if ($(this).attr('href') != "#") { 
					$.get($(this).attr('href'), 'html', function(data) {
						$(baloon.get()).find('.drop_content').html(data);
						baloon.show();
					});
				}
				else {
					baloon.show();
				}
				
				return false;
			});
			
			
			/**
			 * Действия со списком программ
			 */	
				
			
			// Смена канала по клику на название вверху
			var containerCaller, callerI, chooseChannelContainer = $('.choose_channel');
			
			// Это сделано отдельной функцией т.к live не работает для данной выборки и каждый раз нужно
			// приаттачивать функцию заново
			function _channelClicked(e){
				e.preventDefault();
				e.stopPropagation();
				
				var el = $(this);
				
				callerI = $('.list-channel-names .item').index(el.parent());
				
				if (containerCaller == this) {
					chooseChannelContainer.toggle();
				}
				else {
					containerCaller = this;
					chooseChannelContainer.show();
				}
								
				chooseChannelContainer.find('a').removeClass('selected').filter(function(index){
					//console.log($(this).attr('href'));
					return ($(this).attr('id') == $(containerCaller).attr('id')+'-link');
				}).addClass('selected');
			}
			
			$('.list-channel-names a').removeOutline().bind('click', function(e){
				_channelClicked.call(this, e);
				
				if (baloon.isVisible()) {
					baloon.hide();
				}
			});
			
			// Действия при выборе канала внутри выбиратора
			chooseChannelContainer.find('.choose_channel_content a').click(function(e){
				e.preventDefault();
				chooseChannelContainer.hide();
				
				// Надо сделать активным "Мои каналы"
				var myChannel = $('.js-filter-channels').find('option[value="1000"]');
				if (myChannel.size() == 0) {
					$('.js-filter-channels').append($("<option />", {
						value : '1000',
						selected : 'selected',
						html : 'Мои каналы'
						}))
				}
				else {
					myChannel.attr('selected', 'selected');
				}
				
				// Сохраняем что канал изменился
				var temp_arr = /(\d+)/.exec($(this).attr('id'));
                                var newChId =  parseInt(temp_arr[1]);
				programControllerOptions["channels"][callerI] = newChId;
				
				// Нужно сохранить произведённые изменения
				_saveCookies();
				//console.log(programControllerOptions['channels']);
				var loadChUrl = baseUrl+'&chid='+newChId;
				programController.loadProgram(callerI,loadChUrl, true);
			});
			
			// Чтобы не закрывать панель с каналами по клику внутри неё
			chooseChannelContainer.click(function(e){
				e.stopPropagation();
			});
			
			
		
			$('body').click(function(e){
				if (e.target.tagName.toLowerCase() != "a") {
					e.stopPropagation();
					
					var inside = false;
					
					//console.log($(this));
					if (chooseChannelContainer.is(':hidden') == false) {
						chooseChannelContainer.hide();
					}
					
					if (baloon.isVisible()) {
						baloon.hide();
					}
				}
			});
			
			
			
			/**
			 * Сохранить информацию в кукисах
			 */
			function _saveCookies() {
				var myChannels = $('.js-filter-channels').find('option[value="1000"]');
				
				if (myChannels.size() > 0 && myChannels.attr('selected')) {
					var oldSaved = JSON.parse($.cookie('savedControllers') || "{}");
					
					oldSaved[programControllerOptions['city']] = programControllerOptions;
				 	
					//console.log(JSON.stringify(oldSaved));
					
					$.cookie('savedControllers', JSON.stringify(oldSaved));
				}
			}
			
				
			/**
			 * Затенение передачи в конце
			 */
			$('.programm dd').fader();
			
				
				
			return {
				/**
				 * Инициализация контроллера программ: активирование кнопок движения влево/вправо по программе.
				 */
				initialize: function(){
					// Кнопка назад
					_prevButton.click(function(e){
						e.preventDefault();
						programController.moveBar("left");
					}).removeOutline();
					
					// Кнопка вперед
					_nextButton.click(function(e){
						e.preventDefault();
						programController.moveBar("right");
					}).removeOutline();
					
					
					var beforeFirstN = programControllerOptions['position'] - 2;
//					programController.loadProgram(beforeFirstN, channels[beforeFirstN]);
					
					var afterLastN = programControllerOptions['position'] + 4;
//					programController.loadProgram(afterLastN, channels[afterLastN]);
                    for(var i=beforeFirstN; i<=afterLastN; i++) {
                        programController.loadProgram(i, channels[i]);
                    }
					_updateEars();
				},
				
				/**
				 * Загрузить программу program в позицию position
				 * @param {Number} position : позиция в списке программ
				 * @param {Object} program : программа (элемент массива programControllerOptions)
				 * в ней есть флаг .url - адрес по которому можно загрузить программу, и 
				 * флаг loaded - была ли уже указанная программа загружена (чтобы не загружать два раза)
				 */
				loadProgram: function(position, program){
 					var object = (typeof program == "object");
					
					if (object && program.isLoaded) {
						return true;
					}
					
					
					_setProgramLoaded(position);
					
					// setTimeout - чтобы посмотреть на скроллер
					//setTimeout(function(){
						// Вот здесь нужно убрать setup.channels на генеринг урла
						//alert(1);
						$.ajax({
							type: "GET",
							url : (object ? baseUrl + "&chid=" + program.id : program),
							//url : program,
							dataType: 'html',
							success: function(data){
								//alert(xml.childNodes[0].nodeValue);
								//alert($(data).find('*').size());
								_setNewProgramData(data, position);
							
								if (object) {
									program.isLoaded = true;
								}
								
								programController.programHeight('check');
							}
						});
					//}, 2000)
				},
				
				/**
				 * Сдвинуть список программ
				 * @param {"left" | "right"} direction : Направление сдвига
				 */
				moveBar: function(direction){
					var direction = direction || "left";
					
					// Для использования в функциях
					var modifier = (direction == "left") ? "+" : "-";
					
					// Время анимации
					var animateTime = 500;
					
					var lastVisible = _getProgramBox('.before-last-visible').next();
					
					// Время анимации последнего элемента (он больше по ширине из-за дизайна)
					var animateLastTime = parseInt((channelItemWidth / animateTime) * (lastVisible.realWidth() - channelItemWidth)); 
					
					// Прячем нашлёпки
					_getScroller().parent().find('.patch').hide();
					
					// Знак (направление)
					var sign = parseInt(eval(modifier+"1"));
					
					// Уменьшаем счётчики количества каналов слева и справа
					_prevNumber -= sign;
					_nextNumber += sign;
					
					var channelShown = (sign > 0 ? (parseInt(getBarPosition()) - 3) : (getBarPosition() + 5));
					//console.log(channelShown);
					
					if (channelShown > -1 && channelShown < channels.length && !channels[channelShown]['isLoaded'] ) {
						programController.loadProgram(channelShown, channels[channelShown]);
					}
					
					programControllerOptions['position'] -= sign;
					
					// Обновляем ушки
					_updateEars();
					
					// Магия с последним видимым элементом, т.к его ширина больше других
					var newLastVisible = (sign < 0 ? $('.before-last-visible').next().next() : $('.before-last-visible'));
					
					lastVisible.prev().removeClass('before-last-visible');
					newLastVisible.prev().addClass('before-last-visible');

					
					
					
					/**
					 * Четыре анимации стартуют параллельно:
					 */
					
					// Последний видимый элемент становится нормальной ширины
					lastVisible.animate({'width': channelCSSWidth + "px"}, animateTime);
					
					// Новый последний видимый становится больше других
					newLastVisible.animate({'width': parseInt(channelItemWidth + 6) + "px"}, animateTime);
					
					prog = $('.programm')
					if (!prog.hasClass('programm_short')){
    					var fromHeight = _getVisibleProgramHeight(sign)
    					var toHeight = _getVisibleProgramHeight()
					    if (toHeight != fromHeight) {
    						prog.animate({'height' : toHeight + "px"});
    					}
					}

					// и собственно анимация скроллера и запоминание новой позиций в куках		
					_getScroller().animate({
						marginLeft: modifier + "=" + channelItemWidth + "px"
					}, animateTime, function(){
						_saveCookies();
						_getScroller().parent().find('.patch').show();
						//пересчитываем высоту программ
						programController.programHeight('check')
					});
				},
				
				/**
				 * Подстраивание высоты под высоту программы или скрывание до 10 пунктов в программе
				 * @param {'check' | 'toggle'} mode : Режим работы (check - проверить не превышает ли высота допустимой, toggle - сменить режим)
				 */
				programHeight: function(mode){
					var prog = $('.programm');
					var condition = prog.hasClass('programm_short');
					if (mode == "check") {
						condition = !condition;
					}
					
					if (condition) {
						
						var fromHeight = prog.height();
						
						// ruslan: лучше высчитывать высоту как максимум высоты видимых в поле dl-ек
						var toHeight = _getVisibleProgramHeight()
						
						// prog.css({'height': 'auto', 'overflow': 'visible'});
						//var toHeight = prog.height();

						prog.css({'height': fromHeight + "px", 'overflow': 'hidden'});
						
						// Зачем анимировать, если высоту уже нужная?
						if (toHeight != fromHeight) {
							prog.animate({'height' : toHeight + "px"}).removeClass('programm_short');
						}
					}
					else {
						if (!prog.hasClass('programm_short')) {
							$('.programm').animate({'height' : "180px"}).addClass('programm_short');
						}
					}
				},
				
				
				/**
				 * Взять блок с программами
				 */
				get: function() {
					return programContainer;
				}
			}
		})();
		
		programController.initialize();
		
		var calendarWidth = $('.calendar').width();
		var weeks = $('.calendar li').size() / 7;
		
		var calendarPosition = (
			$('.calendar li.current_week').first().prev().size() == 0 ? 0 : 1 );
		
		var prevCalendarWeek = $('.calendar .prev'); 
		var nextCalendarWeek = $('.calendar .next');
		
		function recheckWeekArrows(){
			if (calendarPosition == 0) {
				prevCalendarWeek.hide();
			}
			else {
				prevCalendarWeek.show();
			}
			
			if (calendarPosition == weeks - 1) {
				nextCalendarWeek.hide();
			}
			else {
				nextCalendarWeek.show();
			}
		}
		
		recheckWeekArrows();
		
		prevCalendarWeek.click(function(){
			$(this).closest('.calendar').find('li.current_week').removeClass('current_week').first()
				.prev('.last-child').prevUntil('.last-child').andSelf().addClass('current_week');
			
			calendarPosition--;
			recheckWeekArrows();
			return false;
		});
		
		nextCalendarWeek.click(function(){
			$(this).closest('.calendar').find('li.current_week').removeClass('current_week').last()
				.nextUntil('.last-child').next().andSelf().addClass('current_week');
			
			calendarPosition++;
			recheckWeekArrows();
			return false;
		});
		
		
		/**
		 * функция установки ссылки для шпигеля
		 */
		
		function shpigel_link() {
			$('#shpgel_link').attr('href',$('.choose_header_img .active a').attr('href'));
		}
		/**
		 * Скрипт для смены картинок в голове
		 */
		var headImg = $('.header_img');

                var wwidth = (headImg.width() == null) ? 0 : headImg.width();
                var hheight = (headImg.height() == null) ? 0 : headImg.height();
                
		var tmpImg = $('<div/>', {
			css : {
				'position' : 'absolute',
				'width' : wwidth + 'px',
				'height' : hheight + 'px',
				'display': 'none',
				'top' : '0px',
				'left' : '0px',
				'z-index' : 100
			}
		})
		headImg.append(tmpImg);
		
		var elements = $('.header_img .choose_header_img li');
		function setActive(n) {
			
			var liElement = elements.eq(n);
			var lastActive = elements.filter('.active');
			var lastActiveN = elements.index(lastActive);
			
			if (n != lastActiveN) {
				//var img = liElement.find('img').attr('src');
				//img = img.replace(/(_\d+)(\.jpg)/, "$1_big$2");
				var img = liElement.find('img').attr('rel')
				
				if (tmpImg.css('background-image') != "none") {
					headImg.css('background-image', tmpImg.css('background-image'));
				}
				tmpImg.hide().css({
					backgroundImage: 'url(' + img + ')'
				}).stop().fadeTo(1000, 1, function(){
				});
				
				liElement.addClass('active');
				lastActive.removeClass('active')
				shpigel_link();
			}
		}
		
		var n = $('.header_img .choose_header_img li.active').index();
		
		
		var totalElements = $('.header_img .choose_header_img li').size();
		
		// Прелоадер картинок
		for (var i = 0; i < totalElements; i++) {
			(function(i){
				var img = elements.eq(i).find('img')
				var imgSrc = img.attr('src');
				
				var imgSrcBig = imgSrc.replace(/(_\d+)(\.jpg)/, "$1_big$2");
				img.attr('bigSrc', imgSrcBig)
				
				var preloadImg = new Image();
				preloadImg.src = imgSrcBig;
			})(i);
		}
		
		var animator = setInterval(imagesChanger, 5000)
		
		function imagesChanger() {
			n = ++n % totalElements;
			setActive(n)
		}
		
		var delay;
		elements.find('a').prev().andSelf().each(function(){
			$(this).hover(function(){
				var el = $(this).closest('li').get(0);
				var index = $(this).closest('ul').find('li').index(el);
				//console.log(index);
				
				n = index;
				setActive(index);
				clearInterval(animator);
				clearTimeout(delay);
			}, function(){
				delay = setTimeout(function(){
					animator = setInterval(imagesChanger, 3000)
				}, 3000)
			});
		});
		
		
		/**
		 * Разворачивание по клику по "Программа на весь день"
		 */
		$('.js-full-programm').click(function(){
			var prog = $('.programm');
			if (prog.hasClass('programm_short')) {
				$(this).html('Скрыть программу на весь день');
			}
			else {
				$(this).html('Программа на весь день');
			}
			programController.programHeight('toggle');
			
			return false;
		}).removeOutline();

	});
	
	/**
	 * Смена выденности жанра
	 * @param {String} : Название жанра
	 */
	$.fn.toggleGenreCheck = function(genre){
		// Меняем выделенность
		$(this).toggleClass('check');
		
		$('.programm').toggleClass("show_" + genre);
	}
	
	/**
	 * Убирание сеточки вокруг элемента при клике
	 */
	$.fn.removeOutline = function(){
		$(this).focus(function(){
			$(this).blur();
		}).blur();
		
		return this;
	}
	
	$.fn.fader = function(){
		$(this).each(function(){
			var fader = $('<ins/>', {}).addClass('fader');
			if ($(this).find('a').width() > $(this).width()) {
				var thisDD = $(this).closest('dd');
				var i = $(this).closest('dd').parent().find('dd').index(thisDD);
				
				var added = $('<ins/>').addClass('g-png24');
				if (i%2 != 0) {
					added.addClass('odd');
				}
				
				
				$(this).find('a').append(fader.clone().append(added));
			}
		})
	}
	
	/**
	 * Взятие занимаемой элементом ширины
	 */
	$.fn.realWidth = function() {
		return (
			$(this).width() + 
			parseInt($(this).css('padding-left') || 0) +
			parseInt($(this).css('padding-right') || 0) +
			parseInt($(this).css('border-left') || 0) +
			parseInt($(this).css('border-right') || 0)
		)
	}

})(jQuery);

