(function($) {
	$.fn.slidings = function() {
		var currentItem = null,
				dir = true,
				settings = {
					sliderContainer: null,
					arrowContainer: $('.services-slider-arrow'),
					itemsCollection: $('.services-list li'),
					imagesCollection: $('.services-preview .fig'),
					imagesContainer: $('.services-preview'),
					currentItemClass: 'currentItem',
					easing: 'easeOutQuint',
					easingImages: 'easeOutQuint',
					arrowWidth: 13,
					imageWidth: 700,
					duration: 1000,
					autoDelay: 6000
				},
				items = {},
				itemsAmount;

		function getNext() {
			if (currentItem == 0) {
				dir = true;
			}

			if (currentItem == (itemsAmount - 1)) {
				dir = false;
			}

			if (currentItem === null) {
				//Works only on lounch of sliding; set currentItem to -1 so next item will be '0' (first item)
				currentItem = -1;
			}

			return dir ? currentItem + 1 : currentItem - 1;
		};

		function switchItem(id, elem) {
			if (typeof id == "undefined") {
				id = getNext();
			}
			setCurrentItem(id, elem);
			setArrow(id);
			setImage(id);
		};

		function setArrow(id) {
			settings.arrowContainer.stop(true, false).animate({
						left: items[id].pos - settings.arrowWidth / 2
					}, settings.duration, settings.easing);
		};

		function setImage(id) {
			settings.imagesContainer.stop(true, false).animate({
						left: items[id].imgpos
					}, settings.duration, settings.easingImages);
		};

		function setCurrentItem(id, elem) {
			currentItem = id;

			$('.' + settings.currentItemClass).removeClass(settings.currentItemClass);

			if (elem) {
				elem.addClass(settings.currentItemClass);
			} else {
				$.each(settings.itemsCollection, function(key, value) {
					var link = $(value).find('a');
					if (link.attr('rel') == id) {
						link.addClass(settings.currentItemClass);
						return false
					}
				});
			}
		};

		function setupListeners() {
			$('a', settings.itemsCollection).bind('click.set_item', function(e) {
				var link = $(e.target),
						linkId = parseInt( link.attr('rel') );

				if (linkId != currentItem) {
					switchItem(linkId, link);
				}
				return false;
			});

			settings.sliderContainer.hover(
					function() {
						autoSwitch.stop();
					},
					function() {
						autoSwitch.start();
					}
			);
		};

		function setupItems() {
			var imgPosition = 0;

			itemsAmount = settings.itemsCollection.length;

			$.each(settings.itemsCollection, function(key, value) {
				var link = $(value).find('a'),
						linkAddress = link.attr('href'),
						position;

				position = link.position();
				link.attr('rel', key);

				items[key] = {
					'id': key,
					'link': linkAddress,
					'pos': parseInt(position.left + link.width() / 2),
					'imgpos': imgPosition
				};
				imgPosition -= settings.imageWidth;

				/* assign href attribute for links with images */
				settings.imagesCollection.eq(key).attr('href', linkAddress);
			});

			switchItem();
		};

		var autoSwitch = {
			timer: null,

			start: function() {
				this.timer = window.setInterval(function() {
				switchItem();
				}, settings.autoDelay);
			},

			stop: function() {
				clearInterval(this.timer);
			}
		};
		settings.sliderContainer = this;

		if (settings.sliderContainer.length) {
			setupListeners();
			setupItems();
			autoSwitch.start();
		}
	};
})(jQuery);

$(document).ready(function() {

	try {
		$('.services-slider').slidings();
		$('.picture').imageStrip();
		$('.product-price').productCalculator(productCalcData);
	} catch(e) {
	}
});
