/** @namespace $.SickGear.Root */
/** @namespace config.hasArt */
/** @namespace config.panelTitles */
$(document).ready(function() {

	var panel$ = $('#livepanel'),
		pTitle = config.panelTitles || [],
		isEpisodeView = !!$('#episode-view').length,
		liveStates$ = $(isEpisodeView ? '#episode-view' : '#display-show'),
		jqTooltipUsed = /(?!undefined)/i.test(typeof($('body').tooltip)),
		group = 'group', fave = 'fave', avoid = 'avoid', ratingVerbs = [group, fave, avoid].join(' ');

	panel$.removeClass('off');

	$('#viewart').on('click', function() {
		var state = 0, on = '', result = !1;

		if (isEpisodeView) {
			if (isSet('open-gear')) {
				state = 4; on = 'viewart';
			} else if (!isSet('viewart')) {
				state = 3; on = 'open-gear';
			}
		} else if (!isSet('back-art')) {
			if (!isSet('poster-right')) {
				state = 1; on = 'poster-right';
			}
		} else if (isSet('open-gear')) {
			state = 4; on = 'viewart';
		} else if (isSet('poster-off')) {
			state = 3; on = 'open-gear';
		} else if (isSet('poster-right')) {
			state = 2; on = 'poster-off';
		} else if (!isSet('viewart')) {
			state = 1; on = 'poster-right';
		}
		liveStates$.removeClass('poster-right poster-off open-gear viewart').addClass(on);
		if (state !== 4 && !!$('a[rel="glide"]').length) {
			$.calcSlideCount(!1);
		}
		refreshTitles($(this).attr('id'));
		send('viewart=' + state);

		var container = [];
		$.each($('[id^=day]'), function() { container.push($('#' + $(this).attr('id'))) });
		$.each(container, function() { $(this).isotope('layout') });

		return result;
	});

	$('#back-art,#translucent').on('click', function() {
		var result = !1,
			highlight = panel$.hasClass('highlight-off') ||
					panel$.hasClass('highlight2') && panel$.removeClass('highlight2').addClass('highlight1') ||
					panel$.hasClass('highlight1') &&  panel$.removeClass('highlight1').addClass('highlight') ||
					panel$.removeClass('highlight').addClass('highlight-off');

		if (config.hasArt) {
			var elid = $(this).attr('id');

			liveStates$.toggleClass(elid);
			refreshTitles(elid);
			if ('back-art' === elid){
				$.calcSlideCount(!1);
			}
			send(elid.replace('-', '') + '=' + String.prototype.toLowerCase.apply(+isSet(elid)));
		}
		return result;
	});

	$('#proview').on('click', function() {
		var state = 0, on = 'reg', result = !1;

		if (!isEpisodeView && isSet('viewart')) {
			liveStates$.toggleClass('allart');
		} else {
			if (isSet('reg')) {
				state = 1; on = 'pro';
			} else if(isSet('back-art') && !isSet('allart')) {
				if (isSet('ii')) {
					state = 3; on = 'pro ii allart';
				} else if (isSet('pro')) {
					state = 2; on = 'pro ii';
				}
			}
			liveStates$.removeClass('reg pro ii allart').addClass(on);
			send('viewmode=' + state);
		}
		maybeBackground();
		refreshTitles($(this).attr('id'));
		return result;
	});

	/*
	 * back art related
	 */
	function maybeArrows() {
		var backArts$ = $('#background-container'), result = !0;

		if (isSet('allart')
			|| (!isSet(fave) &&
				(1 < backArts$.find('li.' + group).length ||
				(1 != backArts$.find('li.' + group).length && 1 < backArts$.find('li').not('.' + group + ',.' + avoid).length)))
			|| (isEpisodeView &&
				1 < (backArts$.find('li.' + group).length + backArts$.find('li.' + fave).length +
				backArts$.find('li').not('.' + group + ',.' + avoid).length))) {
			liveStates$.removeClass('oneof');
		} else {
			liveStates$.addClass('oneof');
		}
		return result
	}

	function setArt(dir) {
		var backArts$ = $('#background-container'), curArt$ = backArts$.find('li.background'),
			faveArt$ = backArts$.find('li.' + fave), result = !0,
			newArt$, init = !1, noArt = function(el) { return /undefined/i.test(typeof(el.css('background-image'))); },
			viewable = !isSet('allart') && !!backArts$.find('li.' + group).length ? (isEpisodeView ? '': '.' + group) : '',
			mayAvoid = !isSet('allart') ? '.' + avoid : '.showall',
			artBefore$ = curArt$.prevAll(viewable).not(mayAvoid),
			artAfter$ = curArt$.nextAll(viewable).not(mayAvoid);

		switch (dir) {
			case 'next':
				if (noArt(newArt$ = artAfter$.first()) && noArt(newArt$ = artBefore$.last())
					&& noArt(newArt$ = curArt$))
					newArt$ = null;
				break;
			case 'prev':
				if (noArt(newArt$ = artBefore$.first()) && noArt(newArt$ = artAfter$.last())
					&& noArt(newArt$ = curArt$))
					newArt$ = null;
				break;
			case 'init':
				init = !0;
				if (noArt(newArt$ = curArt$))
					newArt$ = null;
				break;
			case fave:
				newArt$ = faveArt$;
				break;
		}

		if (!init || (null == newArt$))
			curArt$.addClass('background-rem').removeClass('background')
				.fadeOut(800, 'linear', function() {$(this).removeClass('background-rem')});

		if (null !== newArt$) {
			newArt$.addClass('background').fadeIn(800, 'linear', function () {
				$(this).removeClass('first-load')
			});

			liveStates$.removeClass(ratingVerbs).addClass(
				newArt$.hasClass(group) && group || newArt$.hasClass(fave) && fave || newArt$.hasClass(avoid) && avoid || '');
		}

		maybeArrows();
		refreshTitles();
		return result;
	}
	setArt('init');

	function maybeBackground() {
		var backArts$ = $('#background-container'), result = !0;

		if (isSet('allart')) {
			if (!backArts$.find('li.background').length) {
				backArts$.find('li').first().hide().addClass('background')
					.fadeIn(400, 'linear', function() {$(this).removeClass('first-load')});
			}
		} else {
			if (backArts$.find('li.' + fave).not('.background').length) {
				setArt(fave);
			} else if (!!backArts$.find('li.' + avoid).length
				&& backArts$.find('li.' + avoid).length == backArts$.find('li').length) {
				backArts$.find('li.' + avoid).fadeOut(800, 'linear', function () {
					$(this).removeClass('background')
				});
			} else if (backArts$.find('li.background.' + avoid).length) {
				setArt('next');
			}
		}
		maybeArrows();
		return result;
	}

	$('#art-next,#art-prev').on('click', function() {
		return (!(setArt('art-prev' === $(this).attr('id') ? 'prev' : 'next')));
	});

	function key(e, kCode){
		return e.hasOwnProperty('ctrlKey') && e.ctrlKey && e.hasOwnProperty('altKey') && e.altKey && (kCode == e.which)
	}
	$(document).on('keyup', function(e) {
		var left = key(e, 37), up = key(e, 38), right = key(e, 39), down = key(e, 40),
			s = key(e, 83), a = key(e, 65), f = key(e, 70), g = key(e, 71);
		return (
			(!isSet('oneof') && ((left && setArt('prev')) || (right && setArt('next'))))
			|| (s && liveStates$.toggleClass('allart') && maybeBackground() && refreshTitles('proview'))
			|| (g && setGroup()) || (up && setGroup() && (!isSet('allart') && $('#viewart').click() || !0))
			|| (a && setAvoid()) || (down && setAvoid() && (!isSet('allart') && $('#translucent').click() || !0))
			|| (f && setFave())
		);
	});

	function rate(state, rating) {
		var result = !0;

		if (isSet('allart')) {
			var rated = rating && isSet(rating);
			liveStates$.removeClass(ratingVerbs);
			if (rated) {
				state = 0;
				rating = '';
			} else
				liveStates$.addClass(rating);

			var curArt$ = $('#background-container').find('li.background'),
				art = /\?([^"]+)"/i.exec(curArt$.css('background-image'));
			if (null != art) {
				send('rate=' + state + '&' + art[1]);
				curArt$.removeClass().addClass((!!rating.length ? rating + ' ' : '') + 'background');
			}
			maybeBackground();
			refreshTitles('rate-art');
		}
		return result;
	}
	function setAvoid() {return rate(30, avoid);}
	function setFave() {return rate(20, fave);}
	function setGroup() {return rate(10, group);}
	function setRnd() {return rate(0, '');}
	$('#rate-art').on('click', function() {
		return isSet('allart') &&
			((isSet(fave) && setAvoid()) || (isSet(group) && setFave()) || (!isSet(avoid) && setGroup()) || setRnd()) || !0;
	});

	/*
	 * support functions
	 */
	function isSet(name) {return liveStates$.hasClass(name)}

	function send(value) {
		return $.get($.SickGear.Root + '/live_panel/?' + value + '&pg=' + (isEpisodeView ? 'ev' : 'ds'))}

	if (jqTooltipUsed) {
		panel$.find('a[title]').tooltip({placement: 'top', html: !0});
	}

	function refreshTitle(target$, title, refreshAll) {
		return jqTooltipUsed
			? target$.attr('data-original-title', title.replace(/<[\/]?em>/g, '')).tooltip('fixTitle') && refreshAll //|| target$.tooltip('show')
			: target$.attr('title', title);
	}

	function refreshTitles(id) {
		if (!$('#livepanel').length) return;

		var refreshAll = /undefined/i.test(typeof(id)), elId = !refreshAll && id.replace('#', '') || id, result = !0;
		if ('viewart' === elId || refreshAll) {
			refreshTitle($('#viewart'),
				isSet('poster-right') ? pTitle['viewart1']
					: (isSet('back-art') ?
						(isSet('viewart') ? pTitle['viewart4']
							: (isSet('open-gear') ? pTitle['viewart3']
							: (isSet('poster-off') ? pTitle['viewart2']
							: (isEpisodeView ? pTitle['viewmode0'] : pTitle['viewart0']))))
						: (isEpisodeView ? pTitle['viewmode0'] : pTitle['viewart0'])),
			refreshAll);
		}
		if ('translucent' === elId || refreshAll) {
			refreshTitle($('#translucent'), isSet('translucent') ? pTitle['translucent_on'] : pTitle['translucent_off'],
				refreshAll);
		}
		if (config.hasArt && ('back-art' === elId || refreshAll)) {
			refreshTitle($('#back-art'), isSet('back-art') ? pTitle['backart_on'] : pTitle['backart_off'],
				refreshAll);
		}
		if ('rate-art' === elId || refreshAll) {
			refreshTitle($('#rate-art'),
				isSet(avoid) ? pTitle['rateart3']
					: (isSet(fave) ? pTitle['rateart2']
					: (isSet(group) ? pTitle['rateart1']
					: pTitle['rateart0'])),
				refreshAll);
		}
		if ('proview' === elId || refreshAll) {
			refreshTitle($('#proview'),
				isSet('back-art') ?
					(isSet('allart') ? pTitle['viewmode3']
						: (isSet('ii') ? pTitle['viewmode2']
						: (isSet('pro') ? pTitle['viewmode1']
						: pTitle['viewmode0'])))
					: (isSet('pro') ? pTitle['viewmode1']
						: pTitle['viewmode0']),
				refreshAll);
		}
		return result;
	}
	refreshTitles();

});