(function($) {
	$.fn.trilanSlider = function(options) {
		var defaults = {
			navPrevClass: 'trilan-gallery-prev-slide',
			navNextClass: 'trilan-gallery-next-slide',
			frameWrapperTag: 'li',
			autoResize: false,
			slideSpeed: 300
		};
		var options = $.extend(defaults, options);
		return this.each(function() {
			var $slideWrapper = $(this);
			var $navPrev = $slideWrapper.parent().find("." + options.navPrevClass),
				$navNext = $slideWrapper.parent().find("." + options.navNextClass),
				$frames = $slideWrapper.find(options.frameWrapperTag);
			var $countFrames = $frames.length;
			var $frameWidth = 213, // magick
				$slideWrapperWidth,
				$framesDisplay,
				$framesHidden,
				$frameNewMargin,
				$frameWidthWithNewMargin,
				$currentSlide,
				$slideWrapperNewWidth,
				$slideWrapperNewMarginLeft;
			function resizeSlideBar() {
				$slideWrapperWidth = $slideWrapper.width();
				$framesDisplay = Math.floor($slideWrapperWidth / $frameWidth);
				$framesHidden = $countFrames - $framesDisplay;
				$frameNewMargin = Math.floor(($slideWrapperWidth - $framesDisplay * $frameWidth) / ($framesDisplay * 2));
				$frameWidthWithNewMargin = $frameWidth + $frameNewMargin * 2;
				$currentSlide = $slideWrapper.scrollLeft() / $frameWidthWithNewMargin;
				$slideWrapperNewWidth = $frameWidthWithNewMargin * $framesDisplay;
				$slideWrapperNewMarginLeft = parseInt($slideWrapper.css('margin-left')) + Math.round(($slideWrapperWidth - $slideWrapperNewWidth) / 2);
				$frames.css({marginLeft: $frameNewMargin, marginRight: $frameNewMargin});
				$frames.parent().width($countFrames * $frameWidthWithNewMargin + 100);
				if ($framesHidden < 0) { $navPrev.hide(); $navNext.hide(); };
				if ($currentSlide == 0) $navPrev.hide();
			};
			function goToSlide(dir) {
				var scrollStep = $frameWidthWithNewMargin*dir;
				if (($currentSlide < $framesHidden && dir > 0) || ($currentSlide > 0 && dir < 0)) {
					$currentSlide += (dir > 0 ? 1 : -1);
					$slideWrapper.animate({scrollLeft: "+=" + scrollStep}, options.slideSpeed, function() {
						if ($currentSlide == $framesHidden) {
							$navNext.hide();
							$navPrev.show();
						} else if ($currentSlide == 0) {
							$navPrev.hide();
							$navNext.show();
						} else {
							$navPrev.show();
							$navNext.show();
						};
					});
				};
				return false;
			};
			resizeSlideBar();
			if (options.autoResize) { $(window).resize(function() { resizeSlideBar(); }); };
			$navPrev.click(function() { return goToSlide(-1); });
			$navNext.click(function() { return goToSlide(1); });
		});
	};
})(jQuery);
