(function($) {
	$.fn.tSlider = function(settings) {
		/**
		 * Настройки плагина по-умолчанию
		 */
		settings = $.extend({

			auto:		10000,					// Микросекунды через которые менять слайд (flase - выключить автомсмену слайдов)
			speed: 		900,					// Скорость смены слайдов

			node:		'.t-slider-scroll',		// Пропкучиваемый элемент
			slides:		'.t-slider-content',	// Слайды

			menu:		'.t-slider-menu a',		// Элементы меню
			menuActive:	't-slider-active',		// Класс для активного элемента меню
			menuHover:	200,					// Микросекунды через которые, при наведении на меню менять контент (false - выклчить)

			resizeFix:	200,					// Подкручивать слайд при изменении размера (если слайдер "резиновый") 
			cookie:		'slider'				// Имя печеньки для сохранения состояния (false - не сохранять) (использует jQuery.cookies плагин)

		}, settings || {})


		$(this).each(function() {
			var root = $(this)
			var currentValue
			
			/**
			 * Возращает / устанавливает номер текущиего элемента 
			 */
			var current = function(val) {
				if (settings.cookie && $.cookie) {
					return Math.min($.cookie(settings.cookie, val), childs.length-1)
				}
				else {
					if ('undefined' !== typeof val) currentValue = val
					return Math.min(currentValue, childs.length-1)
				}
			}

			var scroll = $(settings.node, root).css('overflow', 'hidden')
			var childs = $(settings.slides, scroll).hide()

			/**
			 * Возращает позицию текущей позиции
			 */
			var getScrollLeft = function() {
				return childs.eq(current()).offset().left-scroll.offset().left+scroll.attr('scrollLeft')
			}

			/**
			 * Прокручивает до текущего элемента
			 * @arg speed | callback
			 */
			var doScroll = function(arg) {
				scroll.stop().animate({ scrollLeft: getScrollLeft() }, settings.speed, arg)
				setActive()
			}

			var setActive = function() {
				if (!settings.menu || !settings.menuActive) return
				$(settings.menu, root).removeClass(settings.menuActive).eq(current()).addClass(settings.menuActive)
			}

			var timeout

			var r = {
				stop: function() {
					clearTimeout(timeout)
				},
				set: function(num, delay, callback) {
					r.stop()
					if (delay) return timeout = setTimeout(function() { r.set(num, null, callback) }, delay)

					if ('undefined' !== typeof num) current(num)
					doScroll(callback)
				},
				start: function() {
					if (settings.auto) r.set(current()+1 < childs.length ? current()+1 : 0, settings.auto, r.start)
				}
			}

			var wrap = $('<div>').css({overflow: 'hidden', width: 100*childs.length+'%', height: '100%'}).appendTo(scroll)
			childs.css({float: 'left', width: 100/childs.length+'%', overflow: 'hidden', height: '100%'}).appendTo(wrap).show()

			// menu hover 
			if (settings.menuHover && settings.menu) {
				$(settings.menu, root).each(function(i) {
					$(this).mouseover(function() {
						r.set(i, settings.menuHover)
					}).mouseout(function() {
						r.start()
					})
				})
			}

			// scroll to stored current and start auto scroll
			doScroll(r.start)

			if (settings.resizeFix) {
				var lastWidth = null
				setInterval(function() {
					if (lastWidth == scroll.width()) return
					if (null !== lastWidth) scroll.attr({ scrollLeft: getScrollLeft() })
					lastWidth = scroll.width()
				}, settings.resizeFix)
			}
		})
	}

	$(function() {
		$('.t-slider').tSlider( {
			//auto: false
		})
	})

})(jQuery);
