/*

Required format:

$('shift-me').vodoriContentShifter({
	shiftToo: '.shift-me-too',
	speed: 1000,
	toggleClass: 'is-toggled'
});

<div id="shift-me">
	<div>Content 1</div>
	<a href="#"></a>
	<div>Content 2</div>
	<a href="#"></a>
	<div>Content 3</div>
</div>

<div class="shift-me-too">
	<div>Alt content 1</div>
	<div>Alt content 2</div>
	<div>Alt content 3</div>
</div>

NOTE: Assumes predefined width and height on parents

*/

(function($) {
	$.fn.vodoriContentShifter = function(options) {

		var defaults = {
			shiftToo: null,
			speed: 'slow',
			toggleClass: 'is-toggled'
		};

		var settings = $.extend({}, defaults, options);

		this.each(function() {

			var $this = $(this);

			if ($this.css('position') == 'static') {$this.css('position', 'relative');}
			if (!$this.css('height')) {$this.css('height', $this.children(':first').css('height'));}
			if (!$this.css('width')) {$this.css('height', $this.children(':first').css('width'));}

			$this.css('overflow', 'hidden');

			// Make the child anchor tags blocks and set their height
			$this.children('a').each(function() {
				$(this).css({
					'display': 'block',
					'height': $(this).parent().height(),
					'position': 'absolute'
				});
			});

			// Set sizes of the child div tags
			$this.children('div').each(function() {
				var prevWidth = $(this).prev('a').width();
				var nextWidth = $(this).next('a').width();

				$(this).css({
					'height': $(this).parent().height(),
					'position': 'absolute',
					'width': $(this).parent().width() - prevWidth - nextWidth
				});
			});

			//	Get all the panels and toggles in line
			$this.children().each(function() {
				if ($(this).prev().length > 0) {
					var prevLeft = $(this).prev('').position().left;
					var prevWidth = $(this).prev('').width();
				} else {
					var prevLeft = 0;
					var prevWidth = 0;
				}

				$(this).css({
					'display': 'block',
					'left': prevLeft + prevWidth
				});
			});

			// Make the toggles work
			$this.children('a').toggle(
				function() {
					backDistance = $(this).prev().width() + $(this).prev().prev().width();

					$(this).siblings().andSelf().each(function() {
						$(this).animate({
							left: '-=' + backDistance
						}, settings.speed);
					});

					$(this).toggleClass(settings.toggleClass);

					changeShiftToo($(this).prevAll('div').length + 1);
				},
				function() {
					foreDistance = $(this).prev().width() + $(this).prev().prev().width();

					$(this).siblings().andSelf().each(function() {
						$(this).animate({
							left: '+=' + foreDistance
						}, settings.speed);
					});

					$(this).toggleClass(settings.toggleClass);

					changeShiftToo($(this).prevAll('div').length);
				}
			);

			// Set up shiftToo
			if ($(settings.shiftToo).css('position') == 'static') {$(settings.shiftToo).css('position', 'relative');}

			$(settings.shiftToo).children().each(function() {
				$(this).css({
					'height': $(this).parent().height(),
					'position': 'absolute',
					'width': $(this).parent().width()
				});
			});

			$(settings.shiftToo).children().not(':first').hide();

			changeShiftToo = function(target) {
				if (target > $(settings.shiftToo).children('div').length) {target = 1;}
				$(settings.shiftToo).children().fadeOut(settings.speed);
				$(settings.shiftToo).children(':nth-child(' + target + ')').fadeIn(settings.speed);
			}

		});

		return this;

	}
})(jQuery);
